Module: ModelSubsets::ClassMethods
- Defined in:
- lib/model_subsets.rb
Instance Method Summary collapse
-
#fieldset(name, *args) ⇒ Object
Defines a fieldset.
-
#subset(name, options = {}) ⇒ Object
Defines a subset If no fieldset is included, all defined fieldsets will be included by default If fieldsets are defined on an extended subset, parents fieldsets will be ignored.
-
#subset_fields(name) ⇒ Object
Return subset fields list.
-
#subsets ⇒ Hash
Return builded subsets.
-
#subsets_scope(name) ⇒ Array
Return subsets included of a subsets scope.
-
#subsets_scopes ⇒ Array
Return subsets scopes list.
Instance Method Details
#fieldset(name, *args) ⇒ Object
Defines a fieldset
106 107 108 109 110 111 |
# File 'lib/model_subsets.rb', line 106 def fieldset name, *args = args.last.is_a?(Hash) ? args.pop : {} @fieldsets ||= {} @fieldsets[name] = { options: , fields: args } end |
#subset(name, options = {}) ⇒ Object
Defines a subset If no fieldset is included, all defined fieldsets will be included by default If fieldsets are defined on an extended subset, parents fieldsets will be ignored
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 |
# File 'lib/model_subsets.rb', line 133 def subset name, = {} @subsets ||= {} @subsets_scopes ||= {} [:fieldsets] = [[:fieldsets]] unless [:fieldsets].blank? || [:fieldsets].is_a?(Array) # Subset is an extension if [:extends] # Force extends option to Array [:extends] = [[:extends]] unless [:extends].is_a?(Array) [:extends].each do |source_subset| next unless @subsets.has_key? source_subset = @subsets[source_subset].clone .delete :template = .merge [:scopes] = [[:scopes], [:scopes]].flatten.uniq if [:scopes] end # Include all opt-out fieldsets by default elsif [:fieldsets].blank? [:fieldsets] = @fieldsets.reject{ |k,v| v[:options][:opt_in] }.keys end # Handle fieldsets restriction list if [:only] [:only] = [[:only]] unless [:only].is_a?(Array) [:fieldsets] &= [:only] end # Handle fieldsets exclusion list if [:except] [:except] = [[:except]] unless [:except].is_a?(Array) [:fieldsets] -= [:except] end # Handle additional fieldsets list if [:add] [:add] = [[:add]] unless [:add].is_a?(Array) [:fieldsets] |= [:add] end # Handle scopes [:scopes] ||= [] [:scopes] = [[:scopes]] unless [:scopes].is_a?(Array) [:scopes].each do |subset_scope| @subsets_scopes[subset_scope] ||= [] @subsets_scopes[subset_scope] << name unless [:template] if respond_to?(subset_scope) (class << self; self; end).class_eval %Q"remove_method :#{subset_scope}" scopes.delete subset_scope end scope subset_scope, where(:subset.in => @subsets_scopes[subset_scope]) end # Cleanup [:fieldsets] = [:fieldsets].uniq & @fieldsets.keys [:group] ||= :default = [:extends, :add, :only, :except] = .clone .delete_if{ |key, value| .include?(key) } # Register subset @subsets[name] = end |
#subset_fields(name) ⇒ Object
Return subset fields list
209 210 211 212 213 214 215 216 217 218 |
# File 'lib/model_subsets.rb', line 209 def subset_fields name return unless subsets.has_key?(name) && subsets[name].has_key?(:fieldsets) subset_fields = [] subsets[name][:fieldsets].each do |fieldset| fields = @fieldsets[fieldset][:fields] fieldset = fields.is_a?(Array) ? fields : [fields] subset_fields |= fieldset end subset_fields.uniq end |
#subsets ⇒ Hash
Return builded subsets
225 226 227 |
# File 'lib/model_subsets.rb', line 225 def subsets @subsets.reject{ |name, | [:template] } end |
#subsets_scope(name) ⇒ Array
Return subsets included of a subsets scope
234 235 236 |
# File 'lib/model_subsets.rb', line 234 def subsets_scope name subsets_scopes[name] || [] end |
#subsets_scopes ⇒ Array
Return subsets scopes list
243 244 245 |
# File 'lib/model_subsets.rb', line 243 def subsets_scopes @subsets_scopes end |