Module: Skyline::Referable::ClassMethods

Defined in:
lib/skyline/referable.rb

Instance Method Summary collapse

Instance Method Details

#referable_field(*fields) ⇒ Object

Make one or more fields/columns have support for referable content in HTML.

Overwrites the models accessors for the specified fields/columns. It also adds extra options to the reader. The reader accepts two parameters: ‘edit` (Boolean) and an options string which is passed to InlineRef#convert

Parameters:

  • fields (String, Symbol)

    The field(s) to enable the referable content for.



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/skyline/referable.rb', line 40

def referable_field(*fields)      
  self.referable_fields ||= []
  
  fields.each do |f|
    self.referable_fields << f
    
    self.class_eval <<-END
      def #{f}=(body)
        self.referable_field_bodies[:#{f}] = body            
      end
      def #{f}_before_typecast
        self.referable_field_bodies[:#{f}] || self[:#{f}]
      end
      def #{f}(edit = false, options={})
        options.reverse_merge! :nullify => false
        ret = self.referable_field_bodies[:#{f}].nil? ? Skyline::InlineRef.convert(self,:#{f},edit,options) : self.referable_field_bodies[:#{f}]
      end
    END
  end
end