Class: Groupy::OuterGroup

Inherits:
Group
  • Object
show all
Defined in:
lib/groupy.rb

Instance Attribute Summary

Attributes inherited from Group

#name, #sub_groups

Instance Method Summary collapse

Methods inherited from Group

#value_groups, #values

Constructor Details

#initialize(&block) ⇒ OuterGroup

Returns a new instance of OuterGroup.



74
75
76
# File 'lib/groupy.rb', line 74

def initialize(&block)
  super(:all, &block)
end

Instance Method Details

#attach!(klass, column_name, options) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/groupy.rb', line 82

def attach!(klass, column_name, options)
  self.subgroups.each do |group_name, group_values|

    method_name = if options[:suffix]
      "#{group_name}_#{column_name}"
    else
      group_name
    end

    klass.class_eval <<-RUBY
      def #{method_name}?
        #{group_values.inspect}.include?(self.#{column_name})
      end
    RUBY
    
    scope_name = method_name.to_s.pluralize
    
    if defined?(ActiveRecord) && klass < ActiveRecord::Base
      klass.class_eval <<-RUBY
        def self.#{scope_name}
          where(#{column_name.inspect} => #{group_values.inspect})
        end
      RUBY
    end
  end
  
  if options[:constants]
    self.value_groups.each do |value_group|
      
      constant_name = if options[:suffix]
        "#{value_group.name}_#{column_name}"
      else
        value_group.name
      end
      klass.const_set("#{constant_name.to_s.upcase}", value_group.value)
    end
  end
  
  klass.class_eval <<-RUBY
    def self.all_#{column_name.to_s.pluralize}
      self.#{column_name.to_s.pluralize}(:all)
    end
    
    # self.roles(:non_superadmin) => ["some", "list", "of", "roles"]
    def self.#{column_name.to_s.pluralize}(subgroup_name)
      self.groupies[#{column_name.inspect}].subgroups[subgroup_name]
    end
  RUBY
end

#subgroupsObject



78
79
80
# File 'lib/groupy.rb', line 78

def subgroups
  super().merge(:all => self.values)
end