Module: Citier4::ActsAsCitier4::ClassMethods

Defined in:
lib/citier4/acts_as_citier4.rb

Instance Method Summary collapse

Instance Method Details

#acts_as_citier4(options = {}) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/citier4/acts_as_citier4.rb', line 21

def acts_as_citier4(options = {})
  # your code will go here
  # First call, in the root class, then in a child, then in a child of child, etc ...
      
  set_acts_as_citier(true)

  # SomesOptions are authorize only in root class, not in child
  # but is_root? is not yet implemented
  # but due to the inheritance cascade, the first call of "acts_as_citier" is perform in the root class
  
   #:table_name = option for setting the name of the current class table_name, default value = 'tableized(current class name)'
   # option table_name is authorised in root and child
   
  table_name = (options[:table_name] || self.name.tableize.gsub(/\//,'_')).to_s
  
 if ! superclass.acts_as_citier?
      # Root class
      # Option for setting the inheritance columns, default value = 'type'
      # authorized only in root
      db_type_field = (options[:db_type_field] || :type).to_s
      citier_debug("DODO : In Citier, we have to verify the presence of inheritance_column : #{db_type_field}")
      self.inheritance_column = "#{db_type_field}"
      
       # Option for setting the super_class. Only in root
       # maby it is not usefull any more ? TODO remove super_class
      super_class =  (options[:super_class] || ActiveRecord::Base) # add

      citier_debug("Root Class, in home directory")
      self.table_name = "#{table_name}"
      citier_debug("table_name -> #{self.table_name}")
      
      self.const_set("Writeable", create_class_root_writable(self))

      # Add the functions required for root classes only
      # include is for adding methods to an instance of a class
      # extend is for adding class methods.
      send :extend, Citier4::RootClassMethods
      send :include, Citier4::RootInstanceMethods
  else
     citier_debug("In Child Class, not Root Class")
      
     # setting the inheritance columns in the child.
     # do we have to do_it ?
     # - in the writeable part ?
     # - in the readable part ?
     
     # debugger
     self.inheritance_column = superclass.inheritance_column

    citier_debug("table_name, writable -> #{table_name}")
    # Set up the table which contains ALL attributes we want for this class
    self.table_name = "view_#{table_name}"      
    citier_debug("tablename (view), readable -> #{self.table_name}")

    # The the Writeable. References the write-able table for the class because
    # save operations etc can't take place on the views
    self.const_set("Writeable", create_class_writable(self))
    # pour access : self.const_get :Writeable

    after_initialize do
      self.id = nil if self.new_record? && self.id == 0
    end

    # Add the functions required for children only
    send :include, Citier4::ChildInstanceMethods
  end
  
  def changes_applied
     super
   end

   def clear_attribute_changes(att)
     super
   end

   def clear_changes_information
     super
   end
   
end

#changes_appliedObject



88
89
90
# File 'lib/citier4/acts_as_citier4.rb', line 88

def changes_applied
  super
end

#clear_attribute_changes(att) ⇒ Object



92
93
94
# File 'lib/citier4/acts_as_citier4.rb', line 92

def clear_attribute_changes(att)
  super
end

#clear_changes_informationObject



96
97
98
# File 'lib/citier4/acts_as_citier4.rb', line 96

def clear_changes_information
  super
end