custom_fields 2.0.0.rc13 → 2.1.0.rc
Sign up to get free protection for your applications and to get access to all the features.
- data/README.textile +1 -1
- data/lib/custom_fields/extensions/mongoid/relations/referenced/many.rb +3 -0
- data/lib/custom_fields/source.rb +2 -0
- data/lib/custom_fields/target.rb +0 -1
- data/lib/custom_fields/target_helpers.rb +82 -19
- data/lib/custom_fields/types/boolean.rb +24 -5
- data/lib/custom_fields/types/date.rb +32 -1
- data/lib/custom_fields/types/default.rb +39 -0
- data/lib/custom_fields/types/file.rb +29 -0
- data/lib/custom_fields/types/has_many.rb +3 -2
- data/lib/custom_fields/types/select.rb +38 -0
- data/lib/custom_fields/types/string.rb +24 -1
- data/lib/custom_fields/types/text.rb +23 -0
- data/lib/custom_fields/version.rb +1 -1
- metadata +47 -47
data/README.textile
CHANGED
data/lib/custom_fields/source.rb
CHANGED
@@ -101,6 +101,8 @@ module CustomFields
|
|
101
101
|
|
102
102
|
# puts "old_metadata = #{old_metadata.klass.inspect} / #{old_metadata.object_id.inspect}" # DEBUG
|
103
103
|
|
104
|
+
# puts "[CustomFields] refresh_metadata_with_custom_fields, #{name.inspect}, self = #{self.inspect}"
|
105
|
+
|
104
106
|
self.send(name).metadata = old_metadata.clone.tap do |metadata|
|
105
107
|
# Rails.logger.debug "[CustomFields] refresh_metadata_with_custom_fields #{metadata.klass}" if defined?(Rails) # DEBUG
|
106
108
|
|
data/lib/custom_fields/target.rb
CHANGED
@@ -2,7 +2,7 @@ module CustomFields
|
|
2
2
|
|
3
3
|
module TargetHelpers
|
4
4
|
|
5
|
-
#
|
5
|
+
# Return the list of the getters dynamically based on the
|
6
6
|
# custom_fields recipe in order to get the formatted values
|
7
7
|
# of the custom fields.
|
8
8
|
# If a block is passed, then the list will be filtered accordingly with
|
@@ -15,7 +15,7 @@ module CustomFields
|
|
15
15
|
# rule['name] != 'foo'
|
16
16
|
# end
|
17
17
|
#
|
18
|
-
# @
|
18
|
+
# @return [ List ] a list of method names (string)
|
19
19
|
#
|
20
20
|
def custom_fields_methods(&filter)
|
21
21
|
self.custom_fields_recipe['rules'].map do |rule|
|
@@ -28,12 +28,12 @@ module CustomFields
|
|
28
28
|
end.compact.flatten
|
29
29
|
end
|
30
30
|
|
31
|
-
#
|
31
|
+
# List all the setters that are used by the custom_fields
|
32
32
|
# in order to get updated thru a html form for instance.
|
33
33
|
#
|
34
|
-
# @
|
34
|
+
# @return [ List ] a list of method names (string)
|
35
35
|
#
|
36
|
-
def
|
36
|
+
def custom_fields_safe_setters
|
37
37
|
self.custom_fields_recipe['rules'].map do |rule|
|
38
38
|
case rule['type'].to_sym
|
39
39
|
when :date then "formatted_#{rule['name']}"
|
@@ -46,12 +46,47 @@ module CustomFields
|
|
46
46
|
end.compact.flatten
|
47
47
|
end
|
48
48
|
|
49
|
-
#
|
49
|
+
# Build a hash for all the non-relationship fields
|
50
|
+
# meaning string, text, date, boolean, select, file types.
|
51
|
+
# This hash stores their name and their value.
|
52
|
+
#
|
53
|
+
# @return [ Hash ] Field name / formatted value
|
54
|
+
#
|
55
|
+
def custom_fields_basic_attributes
|
56
|
+
{}.tap do |hash|
|
57
|
+
self.non_relationship_custom_fields.each do |rule|
|
58
|
+
name, type = rule['name'], rule['type'].to_sym
|
59
|
+
|
60
|
+
# method of the custom getter
|
61
|
+
method_name = "#{type}_attribute_get"
|
62
|
+
|
63
|
+
hash.merge!(self.class.send(method_name, self, name))
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
# Set the values (and their related fields) for all the non-relationship fields
|
69
|
+
# meaning string, text, date, boolean, select, file types.
|
70
|
+
#
|
71
|
+
# @param [ Hash ] The attributes for the custom fields and their related fields.
|
72
|
+
#
|
73
|
+
def custom_fields_basic_attributes=(attributes)
|
74
|
+
self.non_relationship_custom_fields.each do |rule|
|
75
|
+
name, type = rule['name'], rule['type'].to_sym
|
76
|
+
|
77
|
+
# method of the custom getter
|
78
|
+
method_name = "#{type}_attribute_set"
|
79
|
+
|
80
|
+
self.class.send(method_name, self, name, attributes)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# Check if the rule defined by the name is a "many" relationship kind.
|
50
85
|
# A "many" relationship includes "has_many" and "many_to_many"
|
51
86
|
#
|
52
|
-
# @
|
87
|
+
# @param [ String ] name The name of the rule
|
53
88
|
#
|
54
|
-
# @
|
89
|
+
# @return [ Boolean ] True if the rule is a "many" relationship kind.
|
55
90
|
#
|
56
91
|
def is_a_custom_field_many_relationship?(name)
|
57
92
|
rule = self.custom_fields_recipe['rules'].detect do |rule|
|
@@ -59,31 +94,59 @@ module CustomFields
|
|
59
94
|
end
|
60
95
|
end
|
61
96
|
|
62
|
-
#
|
97
|
+
# Return the rules of the custom fields which do not describe a relationship.
|
98
|
+
#
|
99
|
+
# @return [ Array ] List of rules (Hash)
|
100
|
+
#
|
101
|
+
def non_relationship_custom_fields
|
102
|
+
self.custom_fields_recipe['rules'].find_all do |rule|
|
103
|
+
!%w(belongs_to has_many many_to_many).include?(rule['type'])
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
# Return the rules of the custom fields which describe a relationship.
|
108
|
+
#
|
109
|
+
# @return [ Array ] List of rules (Hash)
|
110
|
+
#
|
111
|
+
def relationship_custom_fields
|
112
|
+
self.custom_fields_recipe['rules'].find_all do |rule|
|
113
|
+
%w(belongs_to has_many many_to_many).include?(rule['type'])
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
# Return the names of all the select fields of this object
|
63
118
|
def select_custom_fields
|
64
119
|
group_custom_fields 'select'
|
65
120
|
end
|
66
121
|
|
67
|
-
#
|
122
|
+
# Return the names of all the file custom_fields of this object
|
68
123
|
#
|
69
|
-
# @
|
124
|
+
# @return [ Array ] List of names
|
70
125
|
#
|
71
126
|
def file_custom_fields
|
72
127
|
group_custom_fields 'file'
|
73
128
|
end
|
74
129
|
|
75
|
-
#
|
130
|
+
# Return the names of all the belongs_to custom_fields of this object
|
131
|
+
#
|
132
|
+
# @return [ Array ] List of names
|
133
|
+
#
|
134
|
+
def belongs_to_custom_fields
|
135
|
+
group_custom_fields 'belongs_to'
|
136
|
+
end
|
137
|
+
|
138
|
+
# Return the names of all the has_many custom_fields of this object
|
76
139
|
#
|
77
|
-
# @
|
140
|
+
# @return [ Array ] Array of array [name, inverse_of]
|
78
141
|
#
|
79
142
|
def has_many_custom_fields
|
80
143
|
group_custom_fields('has_many') { |rule| [rule['name'], rule['inverse_of']] }
|
81
144
|
end
|
82
145
|
|
83
|
-
#
|
146
|
+
# Return the names of all the many_to_many custom_fields of this object.
|
84
147
|
# It also adds the property used to set/get the target ids.
|
85
148
|
#
|
86
|
-
# @
|
149
|
+
# @return [ Array ] Array of array [name, <name in singular>_ids]
|
87
150
|
#
|
88
151
|
def many_to_many_custom_fields
|
89
152
|
group_custom_fields('many_to_many') { |rule| [rule['name'], "#{rule['name'].singularize}_ids"] }
|
@@ -91,13 +154,13 @@ module CustomFields
|
|
91
154
|
|
92
155
|
protected
|
93
156
|
|
94
|
-
#
|
157
|
+
# Get the names of the getter methods for a field.
|
95
158
|
# The names depend on the field type.
|
96
159
|
#
|
97
|
-
# @
|
98
|
-
# @
|
160
|
+
# @param [ String ] name Name of the field
|
161
|
+
# @param [ String ] type Type of the field
|
99
162
|
#
|
100
|
-
# @
|
163
|
+
# @return [ Object ] A string or an array of names
|
101
164
|
#
|
102
165
|
def custom_fields_getters_for(name, type)
|
103
166
|
case type.to_sym
|
@@ -12,17 +12,36 @@ module CustomFields
|
|
12
12
|
|
13
13
|
module ClassMethods
|
14
14
|
|
15
|
-
# Adds a boolean field
|
15
|
+
# Adds a boolean field. It can not be required.
|
16
16
|
#
|
17
17
|
# @param [ Class ] klass The class to modify
|
18
|
-
# @param [ Hash ] rule It contains the name of the field
|
18
|
+
# @param [ Hash ] rule It contains the name of the field.
|
19
19
|
#
|
20
20
|
def apply_boolean_custom_field(klass, rule)
|
21
21
|
klass.field rule['name'], :type => ::Boolean, :localize => rule['localized'] || false, :default => false
|
22
|
+
end
|
23
|
+
|
24
|
+
# Build a hash storing the boolean value (true / false) for
|
25
|
+
# a boolean custom field of an instance.
|
26
|
+
#
|
27
|
+
# @param [ Object ] instance An instance of the class enhanced by the custom_fields
|
28
|
+
# @param [ String ] name The name of the boolean custom field
|
29
|
+
#
|
30
|
+
# @return [ Hash ] field name => true / false
|
31
|
+
#
|
32
|
+
def boolean_attribute_get(instance, name)
|
33
|
+
default_attribute_get(instance, name)
|
34
|
+
end
|
22
35
|
|
23
|
-
|
24
|
-
|
25
|
-
|
36
|
+
# Set the value for the instance and the boolean field specified by
|
37
|
+
# the 2 params.
|
38
|
+
#
|
39
|
+
# @param [ Object ] instance An instance of the class enhanced by the custom_fields
|
40
|
+
# @param [ String ] name The name of the boolean custom field
|
41
|
+
# @param [ Hash ] attributes The attributes used to fetch the values
|
42
|
+
#
|
43
|
+
def boolean_attribute_set(instance, name, attributes)
|
44
|
+
self.default_attribute_set(instance, name, attributes)
|
26
45
|
end
|
27
46
|
|
28
47
|
end
|
@@ -31,6 +31,37 @@ module CustomFields
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
+
# Build a hash storing the formatted value for
|
35
|
+
# a date custom field of an instance.
|
36
|
+
#
|
37
|
+
# @param [ Object ] instance An instance of the class enhanced by the custom_fields
|
38
|
+
# @param [ String ] name The name of the date custom field
|
39
|
+
#
|
40
|
+
# @return [ Hash ] field name => formatted date
|
41
|
+
#
|
42
|
+
def date_attribute_get(instance, name)
|
43
|
+
if value = instance.send(:"formatted_#{name}")
|
44
|
+
{ name => value, "formatted_#{name}" => value }
|
45
|
+
else
|
46
|
+
{}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Set the value for the instance and the date field specified by
|
51
|
+
# the 2 params.
|
52
|
+
#
|
53
|
+
# @param [ Object ] instance An instance of the class enhanced by the custom_fields
|
54
|
+
# @param [ String ] name The name of the date custom field
|
55
|
+
# @param [ Hash ] attributes The attributes used to fetch the values
|
56
|
+
#
|
57
|
+
def date_attribute_set(instance, name, attributes)
|
58
|
+
return unless attributes.key?(name) || attributes.key?("formatted_#{name}")
|
59
|
+
|
60
|
+
value = attributes[name] || attributes["formatted_#{name}"]
|
61
|
+
|
62
|
+
instance.send(:"formatted_#{name}=", value)
|
63
|
+
end
|
64
|
+
|
34
65
|
end
|
35
66
|
|
36
67
|
protected
|
@@ -38,7 +69,7 @@ module CustomFields
|
|
38
69
|
def _set_formatted_date(name, value)
|
39
70
|
if value.is_a?(::String) && !value.blank?
|
40
71
|
date = ::Date._strptime(value, I18n.t('date.formats.default'))
|
41
|
-
value = ::Date.new(date[:year], date[:mon], date[:mday])
|
72
|
+
value = date ? ::Date.new(date[:year], date[:mon], date[:mday]) : nil
|
42
73
|
end
|
43
74
|
|
44
75
|
self.send(:"#{name}=", value)
|
@@ -54,6 +54,45 @@ module CustomFields
|
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
|
+
# Build a hash storing the formatted (or not) values
|
58
|
+
# for a custom field of an instance.
|
59
|
+
# Since aliases are accepted, we return a hash. Beside,
|
60
|
+
# it is more convenient to use (ex: API).
|
61
|
+
# By default, it only returns hash with only one entry
|
62
|
+
# whose key is the second parameter and the value the
|
63
|
+
# value of the field in the instance given in first parameter.
|
64
|
+
#
|
65
|
+
# @param [ Object ] instance An instance of the class enhanced by the custom_fields
|
66
|
+
# @param [ String ] name The name of the custom field
|
67
|
+
#
|
68
|
+
# @return [ Hash ] field name => formatted value or empty hash if no value
|
69
|
+
#
|
70
|
+
def default_attribute_get(instance, name)
|
71
|
+
unless (value = instance.send(name.to_sym)).nil?
|
72
|
+
{ name => instance.send(name.to_sym) }
|
73
|
+
else
|
74
|
+
{}
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
# Set the value for the instance and the field specified by
|
79
|
+
# the 2 params.
|
80
|
+
# Since the value can come from different attributes and other
|
81
|
+
# params can modify the instance too, we need to pass a hash
|
82
|
+
# instead of a single value.
|
83
|
+
#
|
84
|
+
# @param [ Object ] instance An instance of the class enhanced by the custom_fields
|
85
|
+
# @param [ String ] name The name of the custom field
|
86
|
+
# @param [ Hash ] attributes The attributes used to fetch the values
|
87
|
+
#
|
88
|
+
def default_attribute_set(instance, name, attributes)
|
89
|
+
# do not go further if the name is not one of the attributes keys.
|
90
|
+
return unless attributes.key?(name)
|
91
|
+
|
92
|
+
# simple assign
|
93
|
+
instance.send(:"#{name}=", attributes[name])
|
94
|
+
end
|
95
|
+
|
57
96
|
end
|
58
97
|
|
59
98
|
end
|
@@ -31,6 +31,35 @@ module CustomFields
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
+
# Build a hash storing the url for a file custom field of an instance.
|
35
|
+
#
|
36
|
+
# @param [ Object ] instance An instance of the class enhanced by the custom_fields
|
37
|
+
# @param [ String ] name The name of the file custom field
|
38
|
+
#
|
39
|
+
# @return [ Hash ] field name => url or empty hash if no file
|
40
|
+
#
|
41
|
+
def file_attribute_get(instance, name)
|
42
|
+
if instance.send(:"#{name}?")
|
43
|
+
value = instance.send(name.to_sym).url
|
44
|
+
{ name => value, "#{name}_url" => value }
|
45
|
+
else
|
46
|
+
{}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Set the value for the instance and the file field specified by
|
51
|
+
# the 2 params.
|
52
|
+
#
|
53
|
+
# @param [ Object ] instance An instance of the class enhanced by the custom_fields
|
54
|
+
# @param [ String ] name The name of the file custom field
|
55
|
+
# @param [ Hash ] attributes The attributes used to fetch the values
|
56
|
+
#
|
57
|
+
def file_attribute_set(instance, name, attributes)
|
58
|
+
[name, "remote_#{name}_url", "remove_#{name}"].each do |_name|
|
59
|
+
self.default_attribute_set(instance, _name, attributes)
|
60
|
+
end.compact
|
61
|
+
end
|
62
|
+
|
34
63
|
end
|
35
64
|
|
36
65
|
end
|
@@ -38,9 +38,10 @@ module CustomFields
|
|
38
38
|
|
39
39
|
position_name = "position_in_#{rule['inverse_of']}"
|
40
40
|
|
41
|
-
_order_by
|
41
|
+
_order_by = rule['order_by'] || position_name.to_sym.asc
|
42
|
+
_inverse_of = rule['inverse_of'].blank? ? nil : rule['inverse_of'] # an empty String can cause weird behaviours
|
42
43
|
|
43
|
-
klass.has_many rule['name'], :class_name => rule['class_name'], :inverse_of =>
|
44
|
+
klass.has_many rule['name'], :class_name => rule['class_name'], :inverse_of => _inverse_of, :order => _order_by do
|
44
45
|
|
45
46
|
def filtered(conditions = {}, order_by = nil)
|
46
47
|
list = conditions.empty? ? self : self.where(conditions)
|
@@ -89,6 +89,44 @@ module CustomFields
|
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
92
|
+
# Build a hash storing the values (id and option name) for
|
93
|
+
# a select custom field of an instance.
|
94
|
+
#
|
95
|
+
# @param [ Object ] instance An instance of the class enhanced by the custom_fields
|
96
|
+
# @param [ String ] name The name of the select custom field
|
97
|
+
#
|
98
|
+
# @return [ Hash ] fields: <name>: option name, <name>_id: id of the option
|
99
|
+
#
|
100
|
+
def select_attribute_get(instance, name)
|
101
|
+
if value = instance.send(name.to_sym)
|
102
|
+
{
|
103
|
+
name => value,
|
104
|
+
"#{name}_id" => instance.send(:"#{name}_id")
|
105
|
+
}
|
106
|
+
else
|
107
|
+
{}
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
# Set the value for the instance and the select field specified by
|
112
|
+
# the 2 params.
|
113
|
+
#
|
114
|
+
# @param [ Object ] instance An instance of the class enhanced by the custom_fields
|
115
|
+
# @param [ String ] name The name of the select custom field
|
116
|
+
# @param [ Hash ] attributes The attributes used to fetch the values
|
117
|
+
#
|
118
|
+
def select_attribute_set(instance, name, attributes)
|
119
|
+
id_or_name = attributes[name] || attributes["#{name}_id"]
|
120
|
+
|
121
|
+
return if id_or_name.nil?
|
122
|
+
|
123
|
+
option = _select_options(name).detect do |option|
|
124
|
+
[option['_id'], option['name']].include?(id_or_name)
|
125
|
+
end
|
126
|
+
|
127
|
+
instance.send(:"#{name}_id=", option['_id'])
|
128
|
+
end
|
129
|
+
|
92
130
|
# Returns a list of documents groupes by select values defined in the custom fields recipe
|
93
131
|
#
|
94
132
|
# @param [ Class ] klass The class to modify
|
@@ -12,7 +12,7 @@ module CustomFields
|
|
12
12
|
|
13
13
|
module ClassMethods
|
14
14
|
|
15
|
-
#
|
15
|
+
# Add a string field
|
16
16
|
#
|
17
17
|
# @param [ Class ] klass The class to modify
|
18
18
|
# @param [ Hash ] rule It contains the name of the field and if it is required or not
|
@@ -21,6 +21,29 @@ module CustomFields
|
|
21
21
|
apply_custom_field(klass, rule)
|
22
22
|
end
|
23
23
|
|
24
|
+
# Build a hash storing the raw value for
|
25
|
+
# a string custom field of an instance.
|
26
|
+
#
|
27
|
+
# @param [ Object ] instance An instance of the class enhanced by the custom_fields
|
28
|
+
# @param [ String ] name The name of the string custom field
|
29
|
+
#
|
30
|
+
# @return [ Hash ] field name => raw value
|
31
|
+
#
|
32
|
+
def string_attribute_get(instance, name)
|
33
|
+
self.default_attribute_get(instance, name)
|
34
|
+
end
|
35
|
+
|
36
|
+
# Set the value for the instance and the string field specified by
|
37
|
+
# the 2 params.
|
38
|
+
#
|
39
|
+
# @param [ Object ] instance An instance of the class enhanced by the custom_fields
|
40
|
+
# @param [ String ] name The name of the string custom field
|
41
|
+
# @param [ Hash ] attributes The attributes used to fetch the values
|
42
|
+
#
|
43
|
+
def string_attribute_set(instance, name, attributes)
|
44
|
+
self.default_attribute_set(instance, name, attributes)
|
45
|
+
end
|
46
|
+
|
24
47
|
end
|
25
48
|
|
26
49
|
end
|
@@ -31,6 +31,29 @@ module CustomFields
|
|
31
31
|
apply_custom_field(klass, rule)
|
32
32
|
end
|
33
33
|
|
34
|
+
# Build a hash storing the raw value for
|
35
|
+
# a string custom field of an instance.
|
36
|
+
#
|
37
|
+
# @param [ Object ] instance An instance of the class enhanced by the custom_fields
|
38
|
+
# @param [ String ] name The name of the string custom field
|
39
|
+
#
|
40
|
+
# @return [ Hash ] field name => raw value
|
41
|
+
#
|
42
|
+
def text_attribute_get(instance, name)
|
43
|
+
default_attribute_get(instance, name)
|
44
|
+
end
|
45
|
+
|
46
|
+
# Set the value for the instance and the text field specified by
|
47
|
+
# the 2 params.
|
48
|
+
#
|
49
|
+
# @param [ Object ] instance An instance of the class enhanced by the custom_fields
|
50
|
+
# @param [ String ] name The name of the text custom field
|
51
|
+
# @param [ Hash ] attributes The attributes used to fetch the values
|
52
|
+
#
|
53
|
+
def text_attribute_set(instance, name, attributes)
|
54
|
+
self.default_attribute_set(instance, name, attributes)
|
55
|
+
end
|
56
|
+
|
34
57
|
end
|
35
58
|
|
36
59
|
end
|
metadata
CHANGED
@@ -1,203 +1,203 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: custom_fields
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.rc13
|
5
4
|
prerelease: 6
|
5
|
+
version: 2.1.0.rc
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Didier Lafforgue
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-12-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
+
type: :runtime
|
16
|
+
version_requirements: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 2.4.12
|
15
22
|
name: mongoid
|
23
|
+
prerelease: false
|
16
24
|
requirement: !ruby/object:Gem::Requirement
|
17
25
|
none: false
|
18
26
|
requirements:
|
19
27
|
- - ~>
|
20
28
|
- !ruby/object:Gem::Version
|
21
|
-
version: 2.4.
|
29
|
+
version: 2.4.12
|
30
|
+
- !ruby/object:Gem::Dependency
|
22
31
|
type: :runtime
|
23
|
-
prerelease: false
|
24
32
|
version_requirements: !ruby/object:Gem::Requirement
|
25
33
|
none: false
|
26
34
|
requirements:
|
27
35
|
- - ~>
|
28
36
|
- !ruby/object:Gem::Version
|
29
|
-
version: 2.
|
30
|
-
- !ruby/object:Gem::Dependency
|
37
|
+
version: 3.2.9
|
31
38
|
name: activesupport
|
39
|
+
prerelease: false
|
32
40
|
requirement: !ruby/object:Gem::Requirement
|
33
41
|
none: false
|
34
42
|
requirements:
|
35
43
|
- - ~>
|
36
44
|
- !ruby/object:Gem::Version
|
37
|
-
version: 3.2.
|
45
|
+
version: 3.2.9
|
46
|
+
- !ruby/object:Gem::Dependency
|
38
47
|
type: :runtime
|
39
|
-
prerelease: false
|
40
48
|
version_requirements: !ruby/object:Gem::Requirement
|
41
49
|
none: false
|
42
50
|
requirements:
|
43
51
|
- - ~>
|
44
52
|
- !ruby/object:Gem::Version
|
45
|
-
version:
|
46
|
-
- !ruby/object:Gem::Dependency
|
53
|
+
version: 0.2.1
|
47
54
|
name: carrierwave-mongoid
|
55
|
+
prerelease: false
|
48
56
|
requirement: !ruby/object:Gem::Requirement
|
49
57
|
none: false
|
50
58
|
requirements:
|
51
59
|
- - ~>
|
52
60
|
- !ruby/object:Gem::Version
|
53
61
|
version: 0.2.1
|
54
|
-
|
55
|
-
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
type: :development
|
56
64
|
version_requirements: !ruby/object:Gem::Requirement
|
57
65
|
none: false
|
58
66
|
requirements:
|
59
67
|
- - ~>
|
60
68
|
- !ruby/object:Gem::Version
|
61
|
-
version: 0.
|
62
|
-
- !ruby/object:Gem::Dependency
|
69
|
+
version: 0.7.3
|
63
70
|
name: yard
|
71
|
+
prerelease: false
|
64
72
|
requirement: !ruby/object:Gem::Requirement
|
65
73
|
none: false
|
66
74
|
requirements:
|
67
75
|
- - ~>
|
68
76
|
- !ruby/object:Gem::Version
|
69
77
|
version: 0.7.3
|
78
|
+
- !ruby/object:Gem::Dependency
|
70
79
|
type: :development
|
71
|
-
prerelease: false
|
72
80
|
version_requirements: !ruby/object:Gem::Requirement
|
73
81
|
none: false
|
74
82
|
requirements:
|
75
83
|
- - ~>
|
76
84
|
- !ruby/object:Gem::Version
|
77
|
-
version:
|
78
|
-
- !ruby/object:Gem::Dependency
|
85
|
+
version: 1.3.1
|
79
86
|
name: bson
|
87
|
+
prerelease: false
|
80
88
|
requirement: !ruby/object:Gem::Requirement
|
81
89
|
none: false
|
82
90
|
requirements:
|
83
91
|
- - ~>
|
84
92
|
- !ruby/object:Gem::Version
|
85
93
|
version: 1.3.1
|
94
|
+
- !ruby/object:Gem::Dependency
|
86
95
|
type: :development
|
87
|
-
prerelease: false
|
88
96
|
version_requirements: !ruby/object:Gem::Requirement
|
89
97
|
none: false
|
90
98
|
requirements:
|
91
99
|
- - ~>
|
92
100
|
- !ruby/object:Gem::Version
|
93
101
|
version: 1.3.1
|
94
|
-
- !ruby/object:Gem::Dependency
|
95
102
|
name: mongo
|
103
|
+
prerelease: false
|
96
104
|
requirement: !ruby/object:Gem::Requirement
|
97
105
|
none: false
|
98
106
|
requirements:
|
99
107
|
- - ~>
|
100
108
|
- !ruby/object:Gem::Version
|
101
109
|
version: 1.3.1
|
110
|
+
- !ruby/object:Gem::Dependency
|
102
111
|
type: :development
|
103
|
-
prerelease: false
|
104
112
|
version_requirements: !ruby/object:Gem::Requirement
|
105
113
|
none: false
|
106
114
|
requirements:
|
107
115
|
- - ~>
|
108
116
|
- !ruby/object:Gem::Version
|
109
117
|
version: 1.3.1
|
110
|
-
- !ruby/object:Gem::Dependency
|
111
118
|
name: bson_ext
|
119
|
+
prerelease: false
|
112
120
|
requirement: !ruby/object:Gem::Requirement
|
113
121
|
none: false
|
114
122
|
requirements:
|
115
123
|
- - ~>
|
116
124
|
- !ruby/object:Gem::Version
|
117
125
|
version: 1.3.1
|
126
|
+
- !ruby/object:Gem::Dependency
|
118
127
|
type: :development
|
119
|
-
prerelease: false
|
120
128
|
version_requirements: !ruby/object:Gem::Requirement
|
121
129
|
none: false
|
122
130
|
requirements:
|
123
131
|
- - ~>
|
124
132
|
- !ruby/object:Gem::Version
|
125
|
-
version:
|
126
|
-
- !ruby/object:Gem::Dependency
|
133
|
+
version: 0.9.12
|
127
134
|
name: mocha
|
135
|
+
prerelease: false
|
128
136
|
requirement: !ruby/object:Gem::Requirement
|
129
137
|
none: false
|
130
138
|
requirements:
|
131
139
|
- - ~>
|
132
140
|
- !ruby/object:Gem::Version
|
133
141
|
version: 0.9.12
|
142
|
+
- !ruby/object:Gem::Dependency
|
134
143
|
type: :development
|
135
|
-
prerelease: false
|
136
144
|
version_requirements: !ruby/object:Gem::Requirement
|
137
145
|
none: false
|
138
146
|
requirements:
|
139
147
|
- - ~>
|
140
148
|
- !ruby/object:Gem::Version
|
141
|
-
version:
|
142
|
-
- !ruby/object:Gem::Dependency
|
149
|
+
version: '2.6'
|
143
150
|
name: rspec
|
151
|
+
prerelease: false
|
144
152
|
requirement: !ruby/object:Gem::Requirement
|
145
153
|
none: false
|
146
154
|
requirements:
|
147
155
|
- - ~>
|
148
156
|
- !ruby/object:Gem::Version
|
149
157
|
version: '2.6'
|
158
|
+
- !ruby/object:Gem::Dependency
|
150
159
|
type: :development
|
151
|
-
prerelease: false
|
152
160
|
version_requirements: !ruby/object:Gem::Requirement
|
153
161
|
none: false
|
154
162
|
requirements:
|
155
163
|
- - ~>
|
156
164
|
- !ruby/object:Gem::Version
|
157
|
-
version:
|
158
|
-
- !ruby/object:Gem::Dependency
|
165
|
+
version: 0.6.1
|
159
166
|
name: simplecov
|
167
|
+
prerelease: false
|
160
168
|
requirement: !ruby/object:Gem::Requirement
|
161
169
|
none: false
|
162
170
|
requirements:
|
163
171
|
- - ~>
|
164
172
|
- !ruby/object:Gem::Version
|
165
173
|
version: 0.6.1
|
174
|
+
- !ruby/object:Gem::Dependency
|
166
175
|
type: :development
|
167
|
-
prerelease: false
|
168
176
|
version_requirements: !ruby/object:Gem::Requirement
|
169
177
|
none: false
|
170
178
|
requirements:
|
171
179
|
- - ~>
|
172
180
|
- !ruby/object:Gem::Version
|
173
|
-
version: 0.6.
|
174
|
-
- !ruby/object:Gem::Dependency
|
181
|
+
version: 0.6.7
|
175
182
|
name: database_cleaner
|
183
|
+
prerelease: false
|
176
184
|
requirement: !ruby/object:Gem::Requirement
|
177
185
|
none: false
|
178
186
|
requirements:
|
179
187
|
- - ~>
|
180
188
|
- !ruby/object:Gem::Version
|
181
189
|
version: 0.6.7
|
190
|
+
- !ruby/object:Gem::Dependency
|
182
191
|
type: :development
|
183
|
-
prerelease: false
|
184
192
|
version_requirements: !ruby/object:Gem::Requirement
|
185
|
-
none: false
|
186
|
-
requirements:
|
187
|
-
- - ~>
|
188
|
-
- !ruby/object:Gem::Version
|
189
|
-
version: 0.6.7
|
190
|
-
- !ruby/object:Gem::Dependency
|
191
|
-
name: RedCloth
|
192
|
-
requirement: !ruby/object:Gem::Requirement
|
193
193
|
none: false
|
194
194
|
requirements:
|
195
195
|
- - ~>
|
196
196
|
- !ruby/object:Gem::Version
|
197
197
|
version: 4.2.8
|
198
|
-
|
198
|
+
name: RedCloth
|
199
199
|
prerelease: false
|
200
|
-
|
200
|
+
requirement: !ruby/object:Gem::Requirement
|
201
201
|
none: false
|
202
202
|
requirements:
|
203
203
|
- - ~>
|
@@ -256,10 +256,10 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
256
256
|
requirements:
|
257
257
|
- - ! '>='
|
258
258
|
- !ruby/object:Gem::Version
|
259
|
-
version: '0'
|
260
259
|
segments:
|
261
260
|
- 0
|
262
|
-
hash:
|
261
|
+
hash: -612963602801593079
|
262
|
+
version: '0'
|
263
263
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
264
264
|
none: false
|
265
265
|
requirements:
|
@@ -268,7 +268,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
268
268
|
version: 1.3.6
|
269
269
|
requirements: []
|
270
270
|
rubyforge_project: nowarning
|
271
|
-
rubygems_version: 1.8.
|
271
|
+
rubygems_version: 1.8.23
|
272
272
|
signing_key:
|
273
273
|
specification_version: 3
|
274
274
|
summary: Custom fields extension for Mongoid
|