custom_fields 1.1.0.rc1 → 2.0.0.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/MIT-LICENSE +1 -1
- data/README.textile +14 -6
- data/config/locales/fr.yml +5 -1
- data/lib/custom_fields.rb +11 -37
- data/lib/custom_fields/extensions/carrierwave.rb +25 -0
- data/lib/custom_fields/extensions/mongoid/document.rb +12 -50
- data/lib/custom_fields/extensions/mongoid/factory.rb +20 -0
- data/lib/custom_fields/extensions/mongoid/fields.rb +29 -0
- data/lib/custom_fields/extensions/mongoid/fields/i18n.rb +53 -0
- data/lib/custom_fields/extensions/mongoid/fields/internal/localized.rb +84 -0
- data/lib/custom_fields/extensions/mongoid/relations/referenced/many.rb +29 -0
- data/lib/custom_fields/field.rb +44 -175
- data/lib/custom_fields/source.rb +333 -0
- data/lib/custom_fields/target.rb +90 -0
- data/lib/custom_fields/types/boolean.rb +26 -3
- data/lib/custom_fields/types/date.rb +36 -24
- data/lib/custom_fields/types/default.rb +44 -24
- data/lib/custom_fields/types/file.rb +35 -17
- data/lib/custom_fields/types/select.rb +184 -0
- data/lib/custom_fields/types/string.rb +25 -6
- data/lib/custom_fields/types/text.rb +35 -8
- data/lib/custom_fields/types_old/boolean.rb +13 -0
- data/lib/custom_fields/{types → types_old}/category.rb +0 -0
- data/lib/custom_fields/types_old/date.rb +49 -0
- data/lib/custom_fields/types_old/default.rb +44 -0
- data/lib/custom_fields/types_old/file.rb +27 -0
- data/lib/custom_fields/{types → types_old}/has_many.rb +0 -0
- data/lib/custom_fields/{types → types_old}/has_many/proxy_collection.rb +0 -0
- data/lib/custom_fields/{types → types_old}/has_many/reverse_lookup_proxy_collection.rb +0 -0
- data/lib/custom_fields/{types → types_old}/has_one.rb +0 -0
- data/lib/custom_fields/types_old/string.rb +13 -0
- data/lib/custom_fields/types_old/text.rb +15 -0
- data/lib/custom_fields/version.rb +1 -1
- metadata +115 -91
- data/lib/custom_fields/custom_fields_for.rb +0 -350
- data/lib/custom_fields/extensions/mongoid/relations/accessors.rb +0 -31
- data/lib/custom_fields/extensions/mongoid/relations/builders.rb +0 -30
- data/lib/custom_fields/proxy_class/base.rb +0 -112
- data/lib/custom_fields/proxy_class/builder.rb +0 -60
- data/lib/custom_fields/proxy_class/helper.rb +0 -57
- data/lib/custom_fields/self_metadata.rb +0 -30
@@ -1,350 +0,0 @@
|
|
1
|
-
module CustomFields
|
2
|
-
|
3
|
-
module CustomFieldsFor
|
4
|
-
|
5
|
-
extend ActiveSupport::Concern
|
6
|
-
|
7
|
-
included do
|
8
|
-
cattr_accessor :_custom_fields_for
|
9
|
-
|
10
|
-
self._custom_fields_for = []
|
11
|
-
end
|
12
|
-
|
13
|
-
module InstanceMethods
|
14
|
-
|
15
|
-
# Determines if the relation is enhanced by the custom fields
|
16
|
-
#
|
17
|
-
# @example the Person class has somewhere in its code this: "custom_fields_for :addresses"
|
18
|
-
# person.custom_fields_for?(:addresses)
|
19
|
-
#
|
20
|
-
# @param [ String, Symbol ] name The name of the relation.
|
21
|
-
#
|
22
|
-
# @return [ true, false ] True if enhanced, false if not.
|
23
|
-
#
|
24
|
-
def custom_fields_for?(name)
|
25
|
-
self.class.custom_fields_for?(name)
|
26
|
-
end
|
27
|
-
|
28
|
-
# Returns the class enhanced by the custom fields defined in the parent class.
|
29
|
-
#
|
30
|
-
# @param [ String, Symbol ] name The name of the relation.
|
31
|
-
#
|
32
|
-
# @return [ Class ] The modified class.
|
33
|
-
#
|
34
|
-
def klass_with_custom_fields(name)
|
35
|
-
self.class.klass_with_custom_fields(name, self)
|
36
|
-
end
|
37
|
-
|
38
|
-
# Returns the ordered list of custom fields for a relation
|
39
|
-
#
|
40
|
-
# @example the Person class has somewhere in its code this: "custom_fields_for :addresses"
|
41
|
-
# person.ordered_custom_fields(:addresses)
|
42
|
-
#
|
43
|
-
# @param [ String, Symbol ] name The name of the relation.
|
44
|
-
#
|
45
|
-
# @return [ Collection ] The ordered list.
|
46
|
-
#
|
47
|
-
def ordered_custom_fields(name)
|
48
|
-
self.send(:"#{name}_custom_fields").sort { |a, b| (a.position || 0) <=> (b.position || 0) }
|
49
|
-
end
|
50
|
-
|
51
|
-
# Marks all the custom fields as persisted. Actually, this is a patch
|
52
|
-
# for mongoid since for the update, it runs the reset_persisted_children method after
|
53
|
-
# the callbacks unlike for the create.
|
54
|
-
# We assume that all the fields have been validated in a previous step
|
55
|
-
#
|
56
|
-
# @param [ String, Symbol ] name The name of the relation.
|
57
|
-
#
|
58
|
-
def mark_custom_fields_as_persisted(name)
|
59
|
-
self.send(:"#{name}_custom_fields").each do |field|
|
60
|
-
field.instance_variable_set(:@new_record, false) unless field.persisted?
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
# Builds the class enhanced by the custom fields defined in the parent class.
|
65
|
-
# The new class inherits from the original one.
|
66
|
-
#
|
67
|
-
# @param [ String, Symbol ] name The name of the relation.
|
68
|
-
# @param [ Metadata ] metadata The relation's metadata.
|
69
|
-
#
|
70
|
-
# @return [ Class ] The modified class.
|
71
|
-
#
|
72
|
-
def build_klass_with_custom_fields(name, metadata)
|
73
|
-
custom_fields = self.ordered_custom_fields(name)
|
74
|
-
|
75
|
-
metadata.klass.to_klass_with_custom_fields(name, self, custom_fields)
|
76
|
-
end
|
77
|
-
|
78
|
-
# Marks the class enhanced by the custom fields as invalidated
|
79
|
-
#
|
80
|
-
# @param [ String, Symbol ] name The name of the relation.
|
81
|
-
#
|
82
|
-
def mark_klass_with_custom_fields_as_invalidated(name)
|
83
|
-
self.send(:"invalidate_#{name}_klass_flag=", true)
|
84
|
-
end
|
85
|
-
|
86
|
-
# Reset the flag telling if the class enhanced by the custom fields is invalidated
|
87
|
-
#
|
88
|
-
# @param [ String, Symbol ] name The name of the relation.
|
89
|
-
#
|
90
|
-
def reset_klass_with_custom_fields_invalidated_flag(name)
|
91
|
-
# puts "* reset_klass_with_custom_fields_invalidated_flag #{name}"
|
92
|
-
self.send(:"invalidate_#{name}_klass_flag=", false)
|
93
|
-
end
|
94
|
-
|
95
|
-
# Determines if the enhanced class has to be invalidated.
|
96
|
-
#
|
97
|
-
# @param [ String, Symbol ] name The name of the relation.
|
98
|
-
#
|
99
|
-
# @return [ true, false ] True if enhanced, false if not.
|
100
|
-
#
|
101
|
-
def invalidate_klass_with_custom_fields?(name)
|
102
|
-
!!self.send(:"invalidate_#{name}_klass_flag")
|
103
|
-
end
|
104
|
-
|
105
|
-
# Destroy the class enhanced by the custom fields so that next time we need it,
|
106
|
-
# we have a fresh new one.
|
107
|
-
#
|
108
|
-
# @param [ String, Symbol ] name The name of the relation.
|
109
|
-
#
|
110
|
-
def invalidate_klass_with_custom_fields(name)
|
111
|
-
self.class.invalidate_klass_with_custom_fields(name, self)
|
112
|
-
end
|
113
|
-
|
114
|
-
# Duplicates a metadata and assigns the enhanced class to it.
|
115
|
-
#
|
116
|
-
# @param [ Metadata ] metadata The relation's old metadata.
|
117
|
-
#
|
118
|
-
# @return [ Metadata ] The relation's new metadata
|
119
|
-
#
|
120
|
-
def clone_metadata_for_custom_fields(metadata)
|
121
|
-
# puts "-> clone_metadata_for_custom_fields #{metadata.name}"
|
122
|
-
|
123
|
-
klass = self.build_klass_with_custom_fields(metadata.name, metadata)
|
124
|
-
|
125
|
-
# we do not want that other instances of the parent class have the same metadata
|
126
|
-
metadata.clone.tap do |metadata|
|
127
|
-
metadata.instance_variable_set(:@klass, klass)
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
# When the fields have been modified and before the object is saved,
|
132
|
-
# we bump the version.
|
133
|
-
#
|
134
|
-
# @param [ String, Symbol ] name The name of the relation.
|
135
|
-
#
|
136
|
-
def bump_custom_fields_version(name)
|
137
|
-
if self.invalidate_klass_with_custom_fields?(name)
|
138
|
-
# puts "%%% bump_custom_fields_version #{name} #{self.send(:"#{name}_custom_fields_version").inspect}"
|
139
|
-
version = self.send(:"#{name}_custom_fields_version") || 0
|
140
|
-
self.send(:"#{name}_custom_fields_version=", version + 1)
|
141
|
-
end
|
142
|
-
end
|
143
|
-
|
144
|
-
# Increments by 1 the counter couting the number of added custom fields
|
145
|
-
# for a relation
|
146
|
-
#
|
147
|
-
# @param [ String, Symbol ] name The name of the relation.
|
148
|
-
#
|
149
|
-
# @return [ Integer ] The new value of the counter
|
150
|
-
#
|
151
|
-
def bump_custom_fields_counter(name)
|
152
|
-
counter = self.send(:"#{name}_custom_fields_counter") || 0
|
153
|
-
self.send(:"#{name}_custom_fields_counter=", counter + 1)
|
154
|
-
end
|
155
|
-
|
156
|
-
# Builds a new relation so that the builder takes the last version of
|
157
|
-
# the enhanced class when creating new instances
|
158
|
-
#
|
159
|
-
# @param [ String, Symbol ] name The name of the relation.
|
160
|
-
#
|
161
|
-
def rebuild_custom_fields_relation(name)
|
162
|
-
# metadata = self.clone_metadata_for_custom_fields(self.relations[name.to_s])
|
163
|
-
|
164
|
-
# puts "rebuild_custom_fields_relation #{name}"
|
165
|
-
|
166
|
-
metadata = self.relations[name.to_s]
|
167
|
-
self.build(name, nil, metadata)
|
168
|
-
end
|
169
|
-
|
170
|
-
end
|
171
|
-
|
172
|
-
module ClassMethods
|
173
|
-
|
174
|
-
# Determines if the relation is enhanced by the custom fields
|
175
|
-
#
|
176
|
-
# @example the Person class has somewhere in its code this: "custom_fields_for :addresses"
|
177
|
-
# Person.custom_fields_for?(:addresses)
|
178
|
-
#
|
179
|
-
# @param [ String, Symbol ] name The name of the relation.
|
180
|
-
#
|
181
|
-
# @return [ true, false ] True if enhanced, false if not.
|
182
|
-
#
|
183
|
-
def custom_fields_for?(name)
|
184
|
-
self._custom_fields_for.include?(name.to_s)
|
185
|
-
end
|
186
|
-
|
187
|
-
# Enhance an embedded collection OR the instance itself (by passing self) by providing methods to manage custom fields.
|
188
|
-
#
|
189
|
-
# @param [ String, Symbol ] name The name of the relation.
|
190
|
-
#
|
191
|
-
# @example
|
192
|
-
# class Company
|
193
|
-
# embeds_many :employees
|
194
|
-
# custom_fields_for :employees
|
195
|
-
# end
|
196
|
-
#
|
197
|
-
# class Employee
|
198
|
-
# embedded_in :company, :inverse_of => :employees
|
199
|
-
# field :name, String
|
200
|
-
# end
|
201
|
-
#
|
202
|
-
# company.employees_custom_fields.build :label => 'His/her position', :_alias => 'position', :kind => 'string'
|
203
|
-
# company.employees.build :name => 'Michael Scott', :position => 'Regional manager'
|
204
|
-
#
|
205
|
-
def custom_fields_for(name)
|
206
|
-
self.declare_embedded_in_definition_in_custom_field(name)
|
207
|
-
|
208
|
-
# stores the relation name
|
209
|
-
self._custom_fields_for << name.to_s
|
210
|
-
|
211
|
-
self.extend_for_custom_fields(name)
|
212
|
-
end
|
213
|
-
|
214
|
-
# Enhances the class itself
|
215
|
-
#
|
216
|
-
# @example
|
217
|
-
# class Company
|
218
|
-
# custom_fields_for_itself
|
219
|
-
# end
|
220
|
-
#
|
221
|
-
# company.self_metadata_custom_fields.build :label => 'Shipping Address', :_alias => 'address', :kind => 'text'
|
222
|
-
# company.self_metadata.address = '700 S Laflin, 60607 Chicago'
|
223
|
-
# other_company.self_metadata.address # returns a "not defined method" error
|
224
|
-
#
|
225
|
-
def custom_fields_for_itself
|
226
|
-
self.embeds_one :self_metadata, :class_name => '::CustomFields::SelfMetadata'
|
227
|
-
|
228
|
-
class_eval do
|
229
|
-
def self_metadata_with_automatic_build
|
230
|
-
object = self_metadata_without_automatic_build
|
231
|
-
object || self.build_self_metadata
|
232
|
-
end
|
233
|
-
alias_method_chain :self_metadata, :automatic_build
|
234
|
-
end
|
235
|
-
|
236
|
-
self.custom_fields_for('self_metadata')
|
237
|
-
end
|
238
|
-
|
239
|
-
protected
|
240
|
-
|
241
|
-
# Extends / Decorates the current class in order to be fully custom_fields compliant.
|
242
|
-
# it declares news fields, adds new callbacks, ...etc
|
243
|
-
#
|
244
|
-
# @param [ String, Symbol ] name The name of the relation.
|
245
|
-
#
|
246
|
-
def extend_for_custom_fields(name)
|
247
|
-
class_eval do
|
248
|
-
field :"#{name}_custom_fields_counter", :type => Integer, :default => 0
|
249
|
-
field :"#{name}_custom_fields_version", :type => Integer, :default => 0
|
250
|
-
|
251
|
-
embeds_many :"#{name}_custom_fields", :class_name => self.dynamic_custom_field_class_name(name), :cascade_callbacks => true
|
252
|
-
|
253
|
-
attr_accessor :"invalidate_#{name}_klass_flag" # flag for invalidating the custom class
|
254
|
-
|
255
|
-
accepts_nested_attributes_for :"#{name}_custom_fields", :allow_destroy => true
|
256
|
-
end
|
257
|
-
|
258
|
-
class_eval <<-EOV
|
259
|
-
|
260
|
-
before_save :bump_#{name}_custom_fields_version
|
261
|
-
after_save :mark_#{name}_custom_fields_as_persisted
|
262
|
-
after_save :rebuild_#{name}_relation
|
263
|
-
after_save :reset_#{name}_klass_invalidated_flag
|
264
|
-
after_destroy :invalidate_#{name}_klass
|
265
|
-
|
266
|
-
def #{name}_klass
|
267
|
-
self.klass_with_custom_fields('#{name}')
|
268
|
-
end
|
269
|
-
|
270
|
-
def #{name}_klass_name
|
271
|
-
self.class.klass_name_with_custom_fields('#{name}', self)
|
272
|
-
end
|
273
|
-
|
274
|
-
def #{name}_klass_out_of_date?
|
275
|
-
self.#{name}_klass.nil? || self.#{name}_klass.version != self.#{name}_custom_fields_version
|
276
|
-
end
|
277
|
-
|
278
|
-
def invalidate_#{name}_klass
|
279
|
-
self.invalidate_klass_with_custom_fields('#{name}')
|
280
|
-
end
|
281
|
-
|
282
|
-
def invalidate_#{name}_klass?
|
283
|
-
self.invalidate_klass_with_custom_fields?('#{name}')
|
284
|
-
end
|
285
|
-
|
286
|
-
def rebuild_#{name}_relation
|
287
|
-
# puts "--> AFTER SAVE (#{name})"
|
288
|
-
if self.#{name}_klass_out_of_date?
|
289
|
-
# puts 'rebuild relation for #{name} after save'
|
290
|
-
self.rebuild_custom_fields_relation('#{name}')
|
291
|
-
end
|
292
|
-
end
|
293
|
-
|
294
|
-
protected
|
295
|
-
|
296
|
-
def bump_#{name}_custom_fields_version
|
297
|
-
# puts "--> BEFORE SAVE (#{name})"
|
298
|
-
self.bump_custom_fields_version('#{name}')
|
299
|
-
end
|
300
|
-
|
301
|
-
def mark_#{name}_custom_fields_as_persisted
|
302
|
-
self.mark_custom_fields_as_persisted('#{name}')
|
303
|
-
end
|
304
|
-
|
305
|
-
def reset_#{name}_klass_invalidated_flag
|
306
|
-
self.reset_klass_with_custom_fields_invalidated_flag('#{name}')
|
307
|
-
end
|
308
|
-
|
309
|
-
EOV
|
310
|
-
end
|
311
|
-
|
312
|
-
# Returns the class name of the custom field which is based both on the parent class name
|
313
|
-
# and the name of the relation in order to avoid name conflicts (with other classes)
|
314
|
-
#
|
315
|
-
# @param [ Metadata ] metadata The relation's old metadata.
|
316
|
-
#
|
317
|
-
# @return [ String ] The class name
|
318
|
-
#
|
319
|
-
def dynamic_custom_field_class_name(name)
|
320
|
-
"#{self.name}#{name.to_s.singularize.camelize}Field"
|
321
|
-
end
|
322
|
-
|
323
|
-
# An embedded relationship has to be defined on both side in order for it
|
324
|
-
# to work properly. But because custom_field can be embedded in different
|
325
|
-
# models that it's not aware of, we have to declare manually the definition
|
326
|
-
# once we know the target class.
|
327
|
-
#
|
328
|
-
# @param [ String, Symbol ] name The name of the relation.
|
329
|
-
#
|
330
|
-
# @return [ Field ] The new field class.
|
331
|
-
#
|
332
|
-
def declare_embedded_in_definition_in_custom_field(name)
|
333
|
-
klass_name = self.dynamic_custom_field_class_name(name)
|
334
|
-
|
335
|
-
unless Object.const_defined?(klass_name)
|
336
|
-
(klass = Class.new(::CustomFields::Field)).class_eval <<-EOF
|
337
|
-
embedded_in :#{self.name.underscore}, :inverse_of => :#{name}_custom_fields
|
338
|
-
EOF
|
339
|
-
|
340
|
-
Object.const_set(klass_name, klass)
|
341
|
-
end
|
342
|
-
end
|
343
|
-
|
344
|
-
end
|
345
|
-
|
346
|
-
end
|
347
|
-
|
348
|
-
end
|
349
|
-
|
350
|
-
|
@@ -1,31 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid # :nodoc:
|
3
|
-
module Relations #:nodoc:
|
4
|
-
|
5
|
-
module Accessors
|
6
|
-
|
7
|
-
# Builds the related document and creates the relation based on the class
|
8
|
-
# enhanced by the custom_fields functionnality (if set up for the relation).
|
9
|
-
#
|
10
|
-
# @param [ String, Symbol ] name The name of the relation.
|
11
|
-
# @param [ Hash, BSON::ObjectId ] object The id or attributes to use.
|
12
|
-
# @param [ Metadata ] metadata The relation's metadata.
|
13
|
-
# @param [ true, false ] building If we are in a build operation.
|
14
|
-
#
|
15
|
-
# @return [ Proxy ] The relation.
|
16
|
-
#
|
17
|
-
# @since 2.0.0.rc.1
|
18
|
-
def build_with_custom_fields(name, object, metadata)
|
19
|
-
if self.respond_to?(:custom_fields_for?) && self.custom_fields_for?(metadata.name)
|
20
|
-
# puts "[Accessors] build_with_custom_fields #{name}"
|
21
|
-
metadata = self.clone_metadata_for_custom_fields(metadata)
|
22
|
-
end
|
23
|
-
|
24
|
-
build_without_custom_fields(name, object, metadata)
|
25
|
-
end
|
26
|
-
|
27
|
-
alias_method_chain :build, :custom_fields
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|
31
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
module Mongoid # :nodoc:
|
2
|
-
module Relations #:nodoc:
|
3
|
-
|
4
|
-
module Builders
|
5
|
-
|
6
|
-
module ClassMethods #:nodoc:
|
7
|
-
|
8
|
-
def builder_with_custom_fields(name, metadata)
|
9
|
-
tap do
|
10
|
-
define_method("build_#{name}") do |*args|
|
11
|
-
if self.custom_fields_for?(metadata.name)
|
12
|
-
metadata = self.clone_metadata_for_custom_fields(metadata)
|
13
|
-
end
|
14
|
-
|
15
|
-
attributes = args.first || {}
|
16
|
-
options = args.size > 1 ? args[1] : {}
|
17
|
-
document = Factory.build(metadata.klass, attributes, options)
|
18
|
-
_building do
|
19
|
-
send("#{name}=", document)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
alias_method_chain :builder, :custom_fields
|
26
|
-
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,112 +0,0 @@
|
|
1
|
-
module CustomFields
|
2
|
-
module ProxyClass
|
3
|
-
|
4
|
-
module Base
|
5
|
-
|
6
|
-
extend ActiveSupport::Concern
|
7
|
-
|
8
|
-
included do
|
9
|
-
cattr_accessor :custom_fields, :_parent, :association_name, :built_at, :version
|
10
|
-
end
|
11
|
-
|
12
|
-
module InstanceMethods
|
13
|
-
|
14
|
-
# Returns the list of the custom fields used to build this class
|
15
|
-
#
|
16
|
-
# @return [ List ] the list of custom fields
|
17
|
-
#
|
18
|
-
def custom_fields
|
19
|
-
self.class.custom_fields
|
20
|
-
end
|
21
|
-
|
22
|
-
# Returns the fields specified by the custom fields and their values
|
23
|
-
#
|
24
|
-
# @return [ Hash ] the hash
|
25
|
-
#
|
26
|
-
def aliased_attributes
|
27
|
-
hash = { :created_at => self.created_at, :updated_at => self.updated_at } rescue {}
|
28
|
-
|
29
|
-
(self.custom_fields || []).each do |field|
|
30
|
-
case field.kind
|
31
|
-
when 'file' then hash[field._alias] = self.send(field._name.to_sym).url
|
32
|
-
else
|
33
|
-
hash[field._alias] = self.send(field._name.to_sym)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
hash
|
38
|
-
end
|
39
|
-
|
40
|
-
end
|
41
|
-
|
42
|
-
module ClassMethods
|
43
|
-
|
44
|
-
# Returns the fields specified by the custom fields and their values
|
45
|
-
#
|
46
|
-
def model_name
|
47
|
-
@_model_name ||= ActiveModel::Name.new(self.superclass)
|
48
|
-
end
|
49
|
-
|
50
|
-
# Declares a field within the class based on the information given by the custom field
|
51
|
-
#
|
52
|
-
# @param [ Field ] field The custom field
|
53
|
-
#
|
54
|
-
def apply_custom_field(field)
|
55
|
-
# puts "field #{field._name} persisted? #{field.persisted?} / valid ? #{field.quick_valid?}"
|
56
|
-
return if !field.persisted? || !field.quick_valid?
|
57
|
-
|
58
|
-
self.custom_fields ||= []
|
59
|
-
|
60
|
-
if self.lookup_custom_field(field._name).nil?
|
61
|
-
self.custom_fields << field
|
62
|
-
field.apply(self)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
# Determines if the class has already declared the field
|
67
|
-
#
|
68
|
-
# @param [ String ] name The name of the custom field
|
69
|
-
#
|
70
|
-
# @return [ true, false ] True if found it, false if not.
|
71
|
-
#
|
72
|
-
def lookup_custom_field(name)
|
73
|
-
self.custom_fields.detect { |f| f._name == name }
|
74
|
-
end
|
75
|
-
|
76
|
-
# Convenient method to get the name of a custom field from its alias
|
77
|
-
#
|
78
|
-
# @param [ String ] value The _alias value of the custom field
|
79
|
-
#
|
80
|
-
# @return [ String ] The name of the custom field.
|
81
|
-
#
|
82
|
-
def custom_field_alias_to_name(value)
|
83
|
-
self.custom_fields.detect { |f| f._alias == value }._name
|
84
|
-
end
|
85
|
-
|
86
|
-
# Convenient method to get the _alias of a custom field from its name
|
87
|
-
#
|
88
|
-
# @param [ String ] value The name value of the custom field
|
89
|
-
#
|
90
|
-
# @return [ String ] The _alias of the custom field.
|
91
|
-
#
|
92
|
-
def custom_field_name_to_alias(value)
|
93
|
-
self.custom_fields.detect { |f| f._name == value }._alias
|
94
|
-
end
|
95
|
-
|
96
|
-
# Tells Mongoid that this class is a child of a super class (even if it is no true)
|
97
|
-
#
|
98
|
-
def hereditary?
|
99
|
-
false
|
100
|
-
end
|
101
|
-
|
102
|
-
end
|
103
|
-
|
104
|
-
end
|
105
|
-
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|