Module: Rea::ActiveRecordExt::ClassMethods
- Defined in:
- lib/rea/active_record_ext.rb
Instance Method Summary collapse
- #category(classification_name, name) ⇒ Object
- #default_group ⇒ Object
- #grouping(*args) ⇒ Object
- #grouping_options ⇒ Object
- #member(classification, *args) ⇒ Object
- #members ⇒ Object
- #naming ⇒ Object
Instance Method Details
#category(classification_name, name) ⇒ Object
77 78 79 80 81 82 83 84 85 |
# File 'lib/rea/active_record_ext.rb', line 77 def category classification_name, name classification_config = members[classification_name] category_class = classification_config[:category_class_name].constantize category_class.joins(:classification). where("rea_classifications.name"=>classification_name, "rea_classifications.type_name" => self.name, category_class.table_name+".name" => name ).first end |
#default_group ⇒ Object
24 25 26 |
# File 'lib/rea/active_record_ext.rb', line 24 def default_group [:group_class_name].constantize.find_by_type_name_and_name(self.name,self.name.underscore) end |
#grouping(*args) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/rea/active_record_ext.rb', line 10 def grouping *args ((::Rea.[:grouping_class_names] ||= []) << self.name).uniq! @grouping_options = args. @grouping_options = {:group_class_name=>::Rea::Group.name, :entities_group_class_name=>::Rea::EntitiesGroup.name}.merge @grouping_options has_many :entities_groups, :as=>:entity, :class_name=>@grouping_options[:entities_group_class_name] has_many :groups, :through=>:entities_groups, :class_name=>@grouping_options[:group_class_name], :uniq=>true attr_accessible :group_ids after_initialize do |entity| entity.groups << entity.class.default_group if entity.new_record? && entity.group_ids.try(:empty?) end end |
#grouping_options ⇒ Object
28 29 30 |
# File 'lib/rea/active_record_ext.rb', line 28 def @grouping_options ||={} end |
#member(classification, *args) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/rea/active_record_ext.rb', line 54 def member classification, *args ((::Rea.[:member_class_names] ||= []) << self.name).uniq! grouping $options = {:multiple=>false, :category_class_name=>::Rea::Category.name, :categories_entity_class_name=>::Rea::CategoriesEntity.name }.merge(args.) members[classification] = $options.dup if (args.size > 0) && (categories = args[0]).is_a?(Array) members[classification][:categories] = categories end if $options[:multiple] has_many :categories_entities, :as=>:entity, :class_name=>$options[:categories_entity_class_name] has_many classification, :through=>:categories_entities, :include=>:classification, :class_name=>$options[:category_class_name], :source=>:category, :conditions=>"rea_classifications.type_name = '#{self.name}' and rea_classifications.name = '#{classification.to_s.singularize}'" else belongs_to classification, :class_name=>$options[:category_class_name] end end |
#members ⇒ Object
32 33 34 |
# File 'lib/rea/active_record_ext.rb', line 32 def members @members ||= {} end |
#naming ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/rea/active_record_ext.rb', line 36 def naming define_method :display_name do if self.respond_to? :name @display_name ||= proc do default = name.humanize subkey = case when self.respond_to?(:classification) "#{self.classification.try(:name)}.#{self.name}" else "#{self.name}" end key = "#{self.class.name.underscore}.names.#{subkey}" I18n.t(key,:default=>default) end.call end end end |