custom_fields 2.0.0.rc3 → 2.0.0.rc4
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/lib/custom_fields/target.rb +4 -1
- data/lib/custom_fields/target_helpers.rb +124 -0
- data/lib/custom_fields/version.rb +1 -1
- data/lib/custom_fields.rb +1 -0
- metadata +27 -26
data/lib/custom_fields/target.rb
CHANGED
@@ -11,6 +11,8 @@ module CustomFields
|
|
11
11
|
include "CustomFields::Types::#{type.classify}::Target".constantize
|
12
12
|
end
|
13
13
|
|
14
|
+
include ::CustomFields::TargetHelpers
|
15
|
+
|
14
16
|
## fields ##
|
15
17
|
field :custom_fields_recipe, :type => Hash
|
16
18
|
|
@@ -44,7 +46,8 @@ module CustomFields
|
|
44
46
|
klass.version = recipe['version']
|
45
47
|
|
46
48
|
# copy scopes from the parent class (scopes does not inherit automatically from the parents in mongoid)
|
47
|
-
#
|
49
|
+
# FIXME (Did): not needed anymore ?
|
50
|
+
# klass.write_inheritable_attribute(:scopes, self.scopes)
|
48
51
|
|
49
52
|
recipe['rules'].each do |rule|
|
50
53
|
self.send(:"apply_#{rule['type']}_custom_field", klass, rule)
|
@@ -0,0 +1,124 @@
|
|
1
|
+
module CustomFields
|
2
|
+
|
3
|
+
module TargetHelpers
|
4
|
+
|
5
|
+
# Returns the list of the getters dynamically based on the
|
6
|
+
# custom_fields recipe in order to get the formatted values
|
7
|
+
# of the custom fields.
|
8
|
+
# If a block is passed, then the list will be filtered accordingly with
|
9
|
+
# the following logic. If the block is evaluated as true, then the method
|
10
|
+
# will be kept in the list, otherwise it will be removed.
|
11
|
+
#
|
12
|
+
# @example
|
13
|
+
# # keep all the methods except for the field named 'foo'
|
14
|
+
# project.custom_fields_methods do |rule|
|
15
|
+
# rule['name] != 'foo'
|
16
|
+
# end
|
17
|
+
#
|
18
|
+
# @returns [ List ] a list of method names (string)
|
19
|
+
#
|
20
|
+
def custom_fields_methods(&filter)
|
21
|
+
self.custom_fields_recipe['rules'].map do |rule|
|
22
|
+
method = self.custom_fields_getters_for rule['name'], rule['type']
|
23
|
+
if block_given?
|
24
|
+
filter.call(rule) ? method : nil
|
25
|
+
else
|
26
|
+
method
|
27
|
+
end
|
28
|
+
end.compact.flatten
|
29
|
+
end
|
30
|
+
|
31
|
+
# Lists all the attributes that are used by the custom_fields
|
32
|
+
# in order to get updated thru a html form for instance.
|
33
|
+
#
|
34
|
+
# @returns [ List ] a list of attributes (string)
|
35
|
+
#
|
36
|
+
def custom_fields_safe_attributes
|
37
|
+
self.custom_fields_recipe['rules'].map do |rule|
|
38
|
+
case rule['type'].to_sym
|
39
|
+
when :date then "formatted_#{rule['name']}"
|
40
|
+
when :file then [rule['name'], "remove_#{rule['name']}"]
|
41
|
+
when :select, :belongs_to then ["#{rule['name']}_id", "position_in_#{rule['name']}"]
|
42
|
+
when :has_many, :many_to_many then nil
|
43
|
+
else
|
44
|
+
rule['name']
|
45
|
+
end
|
46
|
+
end.compact.flatten
|
47
|
+
end
|
48
|
+
|
49
|
+
# Determines if the rule defined by the name is a "many" relationship kind.
|
50
|
+
# A "many" relationship includes "has_many" and "many_to_many"
|
51
|
+
#
|
52
|
+
# @params [ String ] name The name of the rule
|
53
|
+
#
|
54
|
+
# @returns [ Boolean ] True if the rule is a "many" relationship kind.
|
55
|
+
#
|
56
|
+
def is_a_custom_field_many_relationship?(name)
|
57
|
+
rule = self.custom_fields_recipe['rules'].detect do |rule|
|
58
|
+
rule['name'] == name && _custom_field_many_relationship?(rule['type'])
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
# Returns the names of all the file custom_fields of this object
|
63
|
+
#
|
64
|
+
# @returns [ Array ] List of names
|
65
|
+
#
|
66
|
+
def file_custom_fields
|
67
|
+
group_custom_fields 'file'
|
68
|
+
end
|
69
|
+
|
70
|
+
# Returns the names of all the has_many custom_fields of this object
|
71
|
+
#
|
72
|
+
# @returns [ Array ] Array of array [name, inverse_of]
|
73
|
+
#
|
74
|
+
def has_many_custom_fields
|
75
|
+
group_custom_fields('has_many') { |rule| [rule['name'], rule['inverse_of']] }
|
76
|
+
end
|
77
|
+
|
78
|
+
# Returns the names of all the many_to_many custom_fields of this object.
|
79
|
+
# It also adds the property used to set/get the target ids.
|
80
|
+
#
|
81
|
+
# @returns [ Array ] Array of array [name, <name in singular>_ids]
|
82
|
+
#
|
83
|
+
def many_to_many_custom_fields
|
84
|
+
group_custom_fields('many_to_many') { |rule| [rule['name'], "#{rule['name'].singularize}_ids"] }
|
85
|
+
end
|
86
|
+
|
87
|
+
protected
|
88
|
+
|
89
|
+
# Gets the names of the getter methods for a field.
|
90
|
+
# The names depend on the field type.
|
91
|
+
#
|
92
|
+
# @params [ String ] name Name of the field
|
93
|
+
# @params [ String ] type Type of the field
|
94
|
+
#
|
95
|
+
# @returns [ Object ] A string or an array of names
|
96
|
+
#
|
97
|
+
def custom_fields_getters_for(name, type)
|
98
|
+
case type.to_sym
|
99
|
+
when :select then [name, "#{name}_id"]
|
100
|
+
when :date then "formatted_#{name}"
|
101
|
+
when :file then "#{name}_url"
|
102
|
+
when :belongs_to then "#{name}_id"
|
103
|
+
else
|
104
|
+
name
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
#:nodoc:
|
109
|
+
def _custom_field_many_relationship?(type)
|
110
|
+
%w(has_many many_to_many).include?(type)
|
111
|
+
end
|
112
|
+
|
113
|
+
#:nodoc:
|
114
|
+
def group_custom_fields(type, &block)
|
115
|
+
unless block_given?
|
116
|
+
block = lambda { |rule| rule['name'] }
|
117
|
+
end
|
118
|
+
|
119
|
+
self.custom_fields_recipe['rules'].find_all { |rule| rule['type'] == type }.map(&block)
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
123
|
+
|
124
|
+
end
|
data/lib/custom_fields.rb
CHANGED
@@ -40,6 +40,7 @@ require 'custom_fields/types/has_many'
|
|
40
40
|
require 'custom_fields/types/many_to_many'
|
41
41
|
require 'custom_fields/field'
|
42
42
|
require 'custom_fields/source'
|
43
|
+
require 'custom_fields/target_helpers'
|
43
44
|
require 'custom_fields/target'
|
44
45
|
|
45
46
|
# Load all the translation files
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: custom_fields
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.
|
4
|
+
version: 2.0.0.rc4
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-02-
|
12
|
+
date: 2012-02-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mongoid
|
16
|
-
requirement: &
|
16
|
+
requirement: &2157299580 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 2.4.3
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2157299580
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: activesupport
|
27
|
-
requirement: &
|
27
|
+
requirement: &2157299000 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 3.2.1
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2157299000
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: carrierwave-mongoid
|
38
|
-
requirement: &
|
38
|
+
requirement: &2157298380 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 0.1.3
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2157298380
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: yard
|
49
|
-
requirement: &
|
49
|
+
requirement: &2157313620 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 0.7.3
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2157313620
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: bson
|
60
|
-
requirement: &
|
60
|
+
requirement: &2157312440 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.3.1
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2157312440
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: mongo
|
71
|
-
requirement: &
|
71
|
+
requirement: &2157311920 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 1.3.1
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2157311920
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: bson_ext
|
82
|
-
requirement: &
|
82
|
+
requirement: &2157311340 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ~>
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: 1.3.1
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *2157311340
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: mocha
|
93
|
-
requirement: &
|
93
|
+
requirement: &2157310860 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ~>
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: 0.9.12
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *2157310860
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: rspec
|
104
|
-
requirement: &
|
104
|
+
requirement: &2157310360 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ~>
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: '2.6'
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *2157310360
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: database_cleaner
|
115
|
-
requirement: &
|
115
|
+
requirement: &2157309800 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ~>
|
@@ -120,10 +120,10 @@ dependencies:
|
|
120
120
|
version: 0.6.7
|
121
121
|
type: :development
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *2157309800
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: RedCloth
|
126
|
-
requirement: &
|
126
|
+
requirement: &2157309220 !ruby/object:Gem::Requirement
|
127
127
|
none: false
|
128
128
|
requirements:
|
129
129
|
- - ~>
|
@@ -131,7 +131,7 @@ dependencies:
|
|
131
131
|
version: 4.2.8
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
|
-
version_requirements: *
|
134
|
+
version_requirements: *2157309220
|
135
135
|
description: Manage custom fields to a mongoid document or a collection. This module
|
136
136
|
is one of the core features we implemented in our custom cms named Locomotive.
|
137
137
|
email:
|
@@ -156,6 +156,7 @@ files:
|
|
156
156
|
- lib/custom_fields/field.rb
|
157
157
|
- lib/custom_fields/source.rb
|
158
158
|
- lib/custom_fields/target.rb
|
159
|
+
- lib/custom_fields/target_helpers.rb
|
159
160
|
- lib/custom_fields/types/belongs_to.rb
|
160
161
|
- lib/custom_fields/types/boolean.rb
|
161
162
|
- lib/custom_fields/types/date.rb
|
@@ -187,7 +188,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
187
188
|
version: '0'
|
188
189
|
segments:
|
189
190
|
- 0
|
190
|
-
hash:
|
191
|
+
hash: 3101050019055810117
|
191
192
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
192
193
|
none: false
|
193
194
|
requirements:
|
@@ -196,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
196
197
|
version: 1.3.6
|
197
198
|
requirements: []
|
198
199
|
rubyforge_project: nowarning
|
199
|
-
rubygems_version: 1.8.
|
200
|
+
rubygems_version: 1.8.15
|
200
201
|
signing_key:
|
201
202
|
specification_version: 3
|
202
203
|
summary: Custom fields extension for Mongoid
|