custom_fields 2.0.0.rc2 → 2.0.0.rc3
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/config/locales/en.yml +3 -2
- data/config/locales/fr.yml +3 -0
- data/lib/custom_fields/field.rb +1 -1
- data/lib/custom_fields/target.rb +6 -5
- data/lib/custom_fields/types/belongs_to.rb +65 -0
- data/lib/custom_fields/types/has_many.rb +58 -0
- data/lib/custom_fields/types/many_to_many.rb +54 -0
- data/lib/custom_fields/types/relationship_default.rb +43 -0
- data/lib/custom_fields/version.rb +1 -1
- data/lib/custom_fields.rb +4 -0
- metadata +31 -27
data/config/locales/en.yml
CHANGED
data/config/locales/fr.yml
CHANGED
data/lib/custom_fields/field.rb
CHANGED
@@ -6,7 +6,7 @@ module CustomFields
|
|
6
6
|
include ::Mongoid::Timestamps
|
7
7
|
|
8
8
|
## types ##
|
9
|
-
%w(default string text date boolean file select).each do |type|
|
9
|
+
%w(default string text date boolean file select relationship_default belongs_to has_many many_to_many).each do |type|
|
10
10
|
include "CustomFields::Types::#{type.classify}::Field".constantize
|
11
11
|
end
|
12
12
|
|
data/lib/custom_fields/target.rb
CHANGED
@@ -7,7 +7,7 @@ module CustomFields
|
|
7
7
|
included do
|
8
8
|
|
9
9
|
## types ##
|
10
|
-
%w(default string text date boolean file select).each do |type|
|
10
|
+
%w(default string text date boolean file select belongs_to has_many many_to_many).each do |type|
|
11
11
|
include "CustomFields::Types::#{type.classify}::Target".constantize
|
12
12
|
end
|
13
13
|
|
@@ -34,8 +34,11 @@ module CustomFields
|
|
34
34
|
# @return [ Class] the anonymous custom klass
|
35
35
|
#
|
36
36
|
def build_klass_with_custom_fields(recipe)
|
37
|
-
|
38
|
-
|
37
|
+
name = recipe['name']
|
38
|
+
|
39
|
+
# puts "CREATING #{name}, #{recipe.inspect}" # DEBUG
|
40
|
+
|
41
|
+
parent.const_set(name, Class.new(self)).tap do |klass|
|
39
42
|
klass.cattr_accessor :version
|
40
43
|
|
41
44
|
klass.version = recipe['version']
|
@@ -71,8 +74,6 @@ module CustomFields
|
|
71
74
|
parent.send(:remove_const, name) if klass
|
72
75
|
|
73
76
|
klass = build_klass_with_custom_fields(recipe)
|
74
|
-
|
75
|
-
parent.const_set(name, klass)
|
76
77
|
end
|
77
78
|
|
78
79
|
klass
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module CustomFields
|
2
|
+
|
3
|
+
module Types
|
4
|
+
|
5
|
+
module BelongsTo
|
6
|
+
|
7
|
+
module Field
|
8
|
+
|
9
|
+
extend ActiveSupport::Concern
|
10
|
+
|
11
|
+
included do
|
12
|
+
|
13
|
+
def belongs_to_to_recipe
|
14
|
+
{ 'class_name' => self.class_name }
|
15
|
+
end
|
16
|
+
|
17
|
+
def belongs_to_is_relationship?
|
18
|
+
self.type == 'belongs_to'
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
module Target
|
26
|
+
|
27
|
+
extend ActiveSupport::Concern
|
28
|
+
|
29
|
+
module ClassMethods
|
30
|
+
|
31
|
+
# Adds a belongs_to relationship between 2 models
|
32
|
+
#
|
33
|
+
# @param [ Class ] klass The class to modify
|
34
|
+
# @param [ Hash ] rule It contains the name of the field and if it is required or not
|
35
|
+
#
|
36
|
+
def apply_belongs_to_custom_field(klass, rule)
|
37
|
+
# puts "#{klass.inspect}.belongs_to #{rule['name'].inspect}, :class_name => #{rule['class_name'].inspect}" # DEBUG
|
38
|
+
|
39
|
+
position_name = "position_in_#{rule['name'].underscore}"
|
40
|
+
|
41
|
+
# puts "#{klass.inspect}.field :#{position_name}" # DEBUG
|
42
|
+
|
43
|
+
klass.field position_name, :type => Integer, :default => 0
|
44
|
+
|
45
|
+
klass.belongs_to rule['name'].to_sym, :class_name => rule['class_name']
|
46
|
+
|
47
|
+
if rule['required']
|
48
|
+
klass.validates_presence_of rule['name'].to_sym
|
49
|
+
end
|
50
|
+
|
51
|
+
klass.before_create do |object|
|
52
|
+
position = (object.class.max(position_name.to_sym) || 0) + 1
|
53
|
+
object.send(:"#{position_name}=", position)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module CustomFields
|
2
|
+
|
3
|
+
module Types
|
4
|
+
|
5
|
+
module HasMany
|
6
|
+
|
7
|
+
module Field
|
8
|
+
|
9
|
+
extend ActiveSupport::Concern
|
10
|
+
|
11
|
+
included do
|
12
|
+
|
13
|
+
def has_many_to_recipe
|
14
|
+
{ 'class_name' => self.class_name, 'inverse_of' => self.inverse_of }
|
15
|
+
end
|
16
|
+
|
17
|
+
def has_many_to_is_relationship?
|
18
|
+
self.type == 'has_many'
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
module Target
|
26
|
+
|
27
|
+
extend ActiveSupport::Concern
|
28
|
+
|
29
|
+
module ClassMethods
|
30
|
+
|
31
|
+
# Adds a has_many relationship between 2 mongoid models
|
32
|
+
#
|
33
|
+
# @param [ Class ] klass The class to modify
|
34
|
+
# @param [ Hash ] rule It contains the name of the relation and if it is required or not
|
35
|
+
#
|
36
|
+
def apply_has_many_custom_field(klass, rule)
|
37
|
+
# puts "#{klass.inspect}.has_many #{rule['name'].inspect}, :class_name => #{rule['class_name'].inspect}, :inverse_of => #{rule['inverse_of']}" # DEBUG
|
38
|
+
|
39
|
+
position_name = "position_in_#{rule['inverse_of']}"
|
40
|
+
|
41
|
+
klass.has_many rule['name'], :class_name => rule['class_name'], :inverse_of => rule['inverse_of'], :order => position_name.to_sym.asc
|
42
|
+
|
43
|
+
klass.accepts_nested_attributes_for rule['name'], :allow_destroy => true
|
44
|
+
|
45
|
+
if rule['required']
|
46
|
+
klass.validates_length_of rule['name'], :minimum => 1
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module CustomFields
|
2
|
+
|
3
|
+
module Types
|
4
|
+
|
5
|
+
module ManyToMany
|
6
|
+
|
7
|
+
module Field
|
8
|
+
|
9
|
+
extend ActiveSupport::Concern
|
10
|
+
|
11
|
+
included do
|
12
|
+
|
13
|
+
def many_to_many_to_recipe
|
14
|
+
{ 'class_name' => self.class_name, 'inverse_of' => self.inverse_of }
|
15
|
+
end
|
16
|
+
|
17
|
+
def many_to_many_is_relationship?
|
18
|
+
self.type == 'many_to_many'
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
module Target
|
26
|
+
|
27
|
+
extend ActiveSupport::Concern
|
28
|
+
|
29
|
+
module ClassMethods
|
30
|
+
|
31
|
+
# Adds a many_to_many relationship between 2 mongoid models
|
32
|
+
#
|
33
|
+
# @param [ Class ] klass The class to modify
|
34
|
+
# @param [ Hash ] rule It contains the name of the relation and if it is required or not
|
35
|
+
#
|
36
|
+
def apply_many_to_many_custom_field(klass, rule)
|
37
|
+
# puts "#{klass.inspect}.many_to_many #{rule['name'].inspect}, :class_name => #{rule['class_name'].inspect}" # DEBUG
|
38
|
+
|
39
|
+
klass.has_and_belongs_to_many rule['name'], :class_name => rule['class_name'], :inverse_of => rule['inverse_of']
|
40
|
+
|
41
|
+
if rule['required']
|
42
|
+
klass.validates_length_of rule['name'], :minimum => 1
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module CustomFields
|
2
|
+
|
3
|
+
module Types
|
4
|
+
|
5
|
+
module RelationshipDefault
|
6
|
+
|
7
|
+
module Field
|
8
|
+
|
9
|
+
extend ActiveSupport::Concern
|
10
|
+
|
11
|
+
included do
|
12
|
+
|
13
|
+
field :class_name
|
14
|
+
field :inverse_of
|
15
|
+
|
16
|
+
validates_presence_of :class_name, :if => :is_relationship?
|
17
|
+
validate :ensure_class_name_security, :if => :is_relationship?
|
18
|
+
|
19
|
+
def is_relationship?
|
20
|
+
method_name = :"#{self.type}_is_relationship?"
|
21
|
+
self.respond_to?(method_name) && self.send(method_name)
|
22
|
+
end
|
23
|
+
|
24
|
+
protected
|
25
|
+
|
26
|
+
def ensure_class_name_security
|
27
|
+
true
|
28
|
+
# FIXME: to be overridden in the target application
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
|
data/lib/custom_fields.rb
CHANGED
@@ -34,6 +34,10 @@ require 'custom_fields/types/date'
|
|
34
34
|
require 'custom_fields/types/boolean'
|
35
35
|
require 'custom_fields/types/file'
|
36
36
|
require 'custom_fields/types/select'
|
37
|
+
require 'custom_fields/types/relationship_default'
|
38
|
+
require 'custom_fields/types/belongs_to'
|
39
|
+
require 'custom_fields/types/has_many'
|
40
|
+
require 'custom_fields/types/many_to_many'
|
37
41
|
require 'custom_fields/field'
|
38
42
|
require 'custom_fields/source'
|
39
43
|
require 'custom_fields/target'
|
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.rc3
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,33 +9,33 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-02-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mongoid
|
16
|
-
requirement: &
|
16
|
+
requirement: &2157026880 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 2.4.
|
21
|
+
version: 2.4.3
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2157026880
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: activesupport
|
27
|
-
requirement: &
|
27
|
+
requirement: &2157025140 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: 3.1
|
32
|
+
version: 3.2.1
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2157025140
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: carrierwave-mongoid
|
38
|
-
requirement: &
|
38
|
+
requirement: &2157024340 !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: *2157024340
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: yard
|
49
|
-
requirement: &
|
49
|
+
requirement: &2157023280 !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: *2157023280
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: bson
|
60
|
-
requirement: &
|
60
|
+
requirement: &2157022720 !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: *2157022720
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: mongo
|
71
|
-
requirement: &
|
71
|
+
requirement: &2157038420 !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: *2157038420
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: bson_ext
|
82
|
-
requirement: &
|
82
|
+
requirement: &2157037860 !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: *2157037860
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: mocha
|
93
|
-
requirement: &
|
93
|
+
requirement: &2157037360 !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: *2157037360
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: rspec
|
104
|
-
requirement: &
|
104
|
+
requirement: &2157036760 !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: *2157036760
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: database_cleaner
|
115
|
-
requirement: &
|
115
|
+
requirement: &2157036200 !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: *2157036200
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: RedCloth
|
126
|
-
requirement: &
|
126
|
+
requirement: &2157035680 !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: *2157035680
|
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,10 +156,14 @@ 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/types/belongs_to.rb
|
159
160
|
- lib/custom_fields/types/boolean.rb
|
160
161
|
- lib/custom_fields/types/date.rb
|
161
162
|
- lib/custom_fields/types/default.rb
|
162
163
|
- lib/custom_fields/types/file.rb
|
164
|
+
- lib/custom_fields/types/has_many.rb
|
165
|
+
- lib/custom_fields/types/many_to_many.rb
|
166
|
+
- lib/custom_fields/types/relationship_default.rb
|
163
167
|
- lib/custom_fields/types/select.rb
|
164
168
|
- lib/custom_fields/types/string.rb
|
165
169
|
- lib/custom_fields/types/text.rb
|
@@ -183,7 +187,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
183
187
|
version: '0'
|
184
188
|
segments:
|
185
189
|
- 0
|
186
|
-
hash:
|
190
|
+
hash: -2284291224344609482
|
187
191
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
188
192
|
none: false
|
189
193
|
requirements:
|