Module: Vidibus::Textile::Mongoid::ClassMethods

Defined in:
lib/vidibus/textile/mongoid.rb

Instance Method Summary collapse

Instance Method Details

#textile(*args) ⇒ Object

Define existing attribute as textile.



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/vidibus/textile/mongoid.rb', line 8

def textile(*args)
  options = args.extract_options!
  for field in args
    plain_field = "#{field}_plain"
    self.send(:field, field, :type => Binary)
    self.send(:field, plain_field, :type => Binary)

    class_eval <<-EOS
      before_save :set_#{plain_field}, :if => lambda {#{field}_changed? or new_record?}

      def set_#{plain_field}
        self.#{plain_field} = #{plain_field}
      end

      def #{plain_field}
        if #{field}_changed? or new_record?
          Vidibus::Textile.new(#{field}).to_text(:plain => true)
        else
          read_attribute(:#{plain_field})
        end
      end

      def #{field}_html
        return "" unless #{field}
        Vidibus::Textile.new(#{field}).to_html
      end
    EOS
  end
end