Hi!

I'm offering an import form for my users.  The import model itself
isn't a real ActiveRecord model.  How can I benefit from all of
DRYML's goodies, without using a hobo_model?

Using a hobo controller, I have this error when rendering the new
form:

HoboError in ImportsController#new

No input tag for file:Object (this=nil)
RAILS_ROOT: /Users/francois/Projects/dons_amateurs

Application Trace | Framework Trace | Full Trace
vendor/plugins/hobo/hobo/taglibs/rapid_forms.dryml:289:in `input'
/Users/francois/Projects/dons_amateurs/vendor/plugins/hobo/hobo/lib/
hobo/dryml/template_environment.rb:328:in `_tag_context'
/Users/francois/Projects/dons_amateurs/vendor/plugins/hobo/hobo/lib/
hobo/dryml/template_environment.rb:248:in `new_context'
/Users/francois/.rvm/gems/ruby-1.8.7-p248/gems/actionpack-2.3.5/lib/
action_view/helpers/capture_helper.rb:129:in `with_output_buffer'
/Users/francois/Projects/dons_amateurs/vendor/plugins/hobo/hobo/lib/
hobo/dryml/template_environment.rb:248:in `new_context'
/Users/francois/Projects/dons_amateurs/vendor/plugins/hobo/hobo/lib/
hobo/dryml/template_environment.rb:328:in `_tag_context'
vendor/plugins/hobo/hobo/taglibs/rapid_forms.dryml:261:in `input'
vendor/plugins/hobo/hobo/taglibs/core.dryml:7:in `send'
vendor/plugins/hobo/hobo/taglibs/core.dryml:7:in `call_tag'
/Users/francois/Projects/dons_amateurs/vendor/plugins/hobo/hobo/lib/
hobo/dryml/template_environment.rb:328:in `_tag_context'
/Users/francois/Projects/dons_amateurs/vendor/plugins/hobo/hobo/lib/
hobo/dryml/template_environment.rb:248:in `new_context'
/Users/francois/.rvm/gems/ruby-1.8.7-p248/gems/actionpack-2.3.5/lib/
action_view/helpers/capture_helper.rb:129:in `with_output_buffer'
/Users/francois/Projects/dons_amateurs/vendor/plugins/hobo/hobo/lib/
hobo/dryml/template_environment.rb:248:in `new_context'
/Users/francois/Projects/dons_amateurs/vendor/plugins/hobo/hobo/lib/
hobo/dryml/template_environment.rb:328:in `_tag_context'
vendor/plugins/hobo/hobo/taglibs/core.dryml:6:in `call_tag'

I have mostly faked my way out of everything.  Notice the model at the
bottom. But that error has me stumped...  I'm probably returning a bad
value from some method.

Thanks!
François

class Import
  attr_accessor :file, :dry_run
  attr_reader :encoding, :imported

  def initialize(params={})
    @dry_run = true
    params.each do |key, value|
      send("#{key}=", value)
    end

    # TODO: Allow user-specified encodings
    @encoding = "windows-1252"
  end

  def new_record?
    true
  end

  def dry_run=(value)
    case value
    when "1", 1, true
      @dry_run = true
    else
      @dry_run = false
    end
  end

  def errors
    @errors ||= ActiveRecord::Errors.new(self)
  end

  def validate
    errors.clear
    errors.add_on_blank(:file)
    return if @file.blank?

    errors.add(:file, "must be a ZIP file") unless
File.extname(@file.original_filename).downcase == ".zip"
    errors.add(:file, "must not be empty") if
File.size(@file.path).zero?
    return unless errors.empty?

    errors.add_to_base("dry-run specified: not importing") if @dry_run

    # more validations
  end

  def valid?
    validate
    errors.empty?
  end

  def save
    return false unless valid?
    # import
    true
  end

  #
  # The next 3 methods are for ActiveRecord::Errors
  #

  def self.human_name
    self.name
  end

  def self.human_attribute_name(attribute_name)
    attribute_name.to_s.humanize
  end

  def self.self_and_descendants_from_active_record
    [self]
  end

  #
  # The following 20 or 30 methods are to support Hobo/ActiveRecord
  #

  def self.has_lifecycle?
    false
  end

  def self.view_hints
    class_name = "#{name}Hints"
    class_name.safe_constantize or Object.class_eval("class
#{class_name} < Hobo::ViewHints; end; #{class_name}")
  end

  Column = Struct.new(:name, :type, :default)

  def self.columns
    [Column.new("id", :integer, nil), Column.new("file", :string,
nil), Column.new("dry_run", :boolean, true)]
  end

  def self.content_columns
    columns.select {|column| %w(file dry_run).include?(column.name)}
  end

  def self.column_names
    columns.map(&:name)
  end

  def self.attr_protected(*args)
    # ignored
  end

  def self.column(name)
    columns.detect {|column| column.name == name}
  end

  def self.never_show?(*args)
    false
  end

  def self.creator_attribute
    :creator_attribute
  end

  def self.primary_content_attribute
    :primary_content_attribute
  end

  def self.attr_order
    [:file, :dry_run]
  end

  def self.reflections
    Hash.new
  end

  def self.name_attribute
    :name_attribute
  end

  def self.user_new(*args)
    new(*args[1..-1])
  end

  def self.to_url_path
    "#{name.underscore.pluralize}"
  end

  def to_url_path
    "#{self.class.to_url_path}/#{to_param}" unless new_record?
  end

  def self.typed_id
    HoboFields.to_name(self) || name.underscore.gsub("/", "__")
  end

  def typed_id
    "#{self.class.name.underscore}:#{self.id}" if id
  end

  def creatable_by?(user)
    true
  end

  def editable_by?(user, field=nil)
    true
  end
end

-- 
You received this message because you are subscribed to the Google Groups "Hobo 
Users" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/hobousers?hl=en.

Reply via email to