custom_fielder 0.5.8 → 0.6.0
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.
- checksums.yaml +4 -4
- data/app/models/custom_fielder/field.rb +11 -0
- data/app/models/custom_fielder/{custom_field.rb → value.rb} +48 -24
- data/db/migrate/20160525133243_create_custom_fielder_values.rb +13 -0
- data/db/migrate/{20160525133922_create_custom_fielder_field_attributes.rb → 20160525133922_create_custom_fielder_fields.rb} +5 -2
- data/lib/custom_fielder/custom_fieldable.rb +16 -15
- data/lib/custom_fielder/version.rb +1 -1
- metadata +5 -5
- data/app/models/custom_fielder/field_attributes.rb +0 -18
- data/db/migrate/20160525133243_create_custom_fielder_custom_fields.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ba1a35b8ba0a749348e09d583d71ca7289338b1d
|
4
|
+
data.tar.gz: 0c82c5566b04597e87ec82659a4fa46fe36cc173
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fb0fdd4f0c2cb97a7155a5753a939d63efe10b4d777a5acb5311caad7eda66630d3873ee1a9b95e239bd316d168b8c099197922ae407d1628aff9b449a9d6880
|
7
|
+
data.tar.gz: 1ab60451a738ac239bd040b7b9f91752cc46149cbb92637d4a374524d46ed6af5997dd15bfbf097a63a5618b351e1d4ae0ddf607a96ed5bb39fb3349aadbd82c
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module CustomFielder
|
2
|
+
class Field < ActiveRecord::Base
|
3
|
+
has_many :values
|
4
|
+
|
5
|
+
validates :name, presence: true
|
6
|
+
validates :field_type, presence: true,
|
7
|
+
inclusion: { in: %w[Array Integer Float Date DateTime Boolean String] }
|
8
|
+
validates :fieldable_type, presence: true
|
9
|
+
validates :allow_blank, inclusion: { in: [true, false] }
|
10
|
+
end
|
11
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module CustomFielder
|
2
|
-
class
|
2
|
+
class Value < ActiveRecord::Base
|
3
3
|
include TypeCheckingHelper
|
4
4
|
include DeserializationHelper
|
5
5
|
|
@@ -8,18 +8,16 @@ module CustomFielder
|
|
8
8
|
validate :check_type
|
9
9
|
validate :check_allow_blank
|
10
10
|
validate :check_allowed_values
|
11
|
+
validate :check_fieldable_type
|
11
12
|
|
12
|
-
belongs_to :
|
13
|
-
belongs_to :
|
13
|
+
belongs_to :field, dependent: :destroy
|
14
|
+
belongs_to :fieldable, polymorphic: true
|
14
15
|
|
15
16
|
scope :active, -> { where(active: true) }
|
16
17
|
scope :inactive, -> { where(active: false) }
|
17
18
|
|
18
|
-
scope :
|
19
|
-
scope :
|
20
|
-
scope :fields_with_class_and_attributes, -> (klass, field_attrs) do
|
21
|
-
where(custom_fieldable_type: klass, field_attributes: field_attrs)
|
22
|
-
end
|
19
|
+
scope :values_with_field, -> (field) { where(field: field) }
|
20
|
+
scope :values_with_class, -> (klass) { where(fieldable_type: klass) }
|
23
21
|
|
24
22
|
##
|
25
23
|
# Because everything is stored as string with ActiveRecord
|
@@ -35,25 +33,25 @@ module CustomFielder
|
|
35
33
|
##
|
36
34
|
# Activates all CustomFields that belong to passed field attributes
|
37
35
|
#
|
38
|
-
# @param field_attrs [
|
36
|
+
# @param field_attrs [CustomFielder::Field]
|
39
37
|
#
|
40
38
|
# @return [Nil]
|
41
39
|
#
|
42
|
-
def activate_field_for_all(
|
43
|
-
|
44
|
-
|
40
|
+
def activate_field_for_all(field)
|
41
|
+
values = all.where(field: field)
|
42
|
+
values.each { |value| value.active = true; value.save }
|
45
43
|
end
|
46
44
|
|
47
45
|
##
|
48
46
|
# Deactivates all CustomFields that belong to passed field attributes
|
49
47
|
#
|
50
|
-
# @param field_attrs [
|
48
|
+
# @param field_attrs [CustomFielder::Field]
|
51
49
|
#
|
52
50
|
# @return [Nil]
|
53
51
|
#
|
54
|
-
def deactivate_field_for_all(
|
55
|
-
|
56
|
-
|
52
|
+
def deactivate_field_for_all(field)
|
53
|
+
values = all.where(field: field)
|
54
|
+
values.each { |value| value.active = false; value.save }
|
57
55
|
end
|
58
56
|
end
|
59
57
|
|
@@ -65,7 +63,16 @@ module CustomFielder
|
|
65
63
|
# @return [String]
|
66
64
|
#
|
67
65
|
def type
|
68
|
-
@type ||=
|
66
|
+
@type ||= field.field_type
|
67
|
+
end
|
68
|
+
|
69
|
+
##
|
70
|
+
# Gets the fieldable type from the field
|
71
|
+
#
|
72
|
+
# @return [String]
|
73
|
+
#
|
74
|
+
def field_fieldable_type
|
75
|
+
@field_fieldable_type ||= field.fieldable_type
|
69
76
|
end
|
70
77
|
|
71
78
|
##
|
@@ -74,7 +81,7 @@ module CustomFielder
|
|
74
81
|
# @return [Boolean]
|
75
82
|
#
|
76
83
|
def allow_blank
|
77
|
-
@allow_blank ||=
|
84
|
+
@allow_blank ||= field.allow_blank
|
78
85
|
end
|
79
86
|
|
80
87
|
##
|
@@ -84,8 +91,8 @@ module CustomFielder
|
|
84
91
|
#
|
85
92
|
def allowed_values
|
86
93
|
@allowed_values ||= begin
|
87
|
-
unless
|
88
|
-
deserialize('Array',
|
94
|
+
unless field.allowed_values.nil?
|
95
|
+
deserialize('Array', field.allowed_values)
|
89
96
|
else
|
90
97
|
nil
|
91
98
|
end
|
@@ -98,7 +105,7 @@ module CustomFielder
|
|
98
105
|
# @return [String]
|
99
106
|
#
|
100
107
|
def default
|
101
|
-
@default ||=
|
108
|
+
@default ||= field.default
|
102
109
|
end
|
103
110
|
|
104
111
|
##
|
@@ -142,6 +149,13 @@ module CustomFielder
|
|
142
149
|
value_not_allowed_error unless allowed_values.include?(value)
|
143
150
|
end
|
144
151
|
|
152
|
+
##
|
153
|
+
# @return [Nil] Adds error if invalid
|
154
|
+
#
|
155
|
+
def check_fieldable_type
|
156
|
+
value_fieldable_type_error unless field_fieldable_type == fieldable_type
|
157
|
+
end
|
158
|
+
|
145
159
|
##
|
146
160
|
# If a value is passed that does not match field type adds
|
147
161
|
# a mismatch error
|
@@ -149,7 +163,7 @@ module CustomFielder
|
|
149
163
|
# @return [Nil]
|
150
164
|
#
|
151
165
|
def value_mismatch_error
|
152
|
-
errors.add(:value, '
|
166
|
+
errors.add(:value, 'Value passed does not match field type')
|
153
167
|
end
|
154
168
|
|
155
169
|
##
|
@@ -159,7 +173,7 @@ module CustomFielder
|
|
159
173
|
# @return [Nil]
|
160
174
|
#
|
161
175
|
def value_blank_error
|
162
|
-
errors.add(:value, '
|
176
|
+
errors.add(:value, 'Blank value not allowed')
|
163
177
|
end
|
164
178
|
|
165
179
|
##
|
@@ -169,7 +183,17 @@ module CustomFielder
|
|
169
183
|
# @return [Nil]
|
170
184
|
#
|
171
185
|
def value_not_allowed_error
|
172
|
-
errors.add(:value, '
|
186
|
+
errors.add(:value, 'Value passed not in options')
|
187
|
+
end
|
188
|
+
|
189
|
+
##
|
190
|
+
# If a value is trying to be assigned to a model that is different
|
191
|
+
# than the one the field was made for adds value fieldable type error
|
192
|
+
#
|
193
|
+
# @return [Nil]
|
194
|
+
#
|
195
|
+
def value_fieldable_type_error
|
196
|
+
errors.add(:value, "Can't assign value to a #{fieldable_type} when field is for #{field_fieldable_type}")
|
173
197
|
end
|
174
198
|
|
175
199
|
##
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class CreateCustomFielderValues < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :custom_fielder_values do |t|
|
4
|
+
t.references :fieldable, polymorphic: true, null: false, index: { name: 'index_values_on_fieldable_type_and_fieldable_id' }
|
5
|
+
t.integer :field_id, null: false
|
6
|
+
t.boolean :active, null: false, default: true
|
7
|
+
t.string :value
|
8
|
+
t.text :note
|
9
|
+
|
10
|
+
t.timestamps null: false
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -1,8 +1,9 @@
|
|
1
|
-
class
|
1
|
+
class CreateCustomFielderFields < ActiveRecord::Migration
|
2
2
|
def change
|
3
|
-
create_table :
|
3
|
+
create_table :custom_fielder_fields do |t|
|
4
4
|
t.string :name, null: false
|
5
5
|
t.string :field_type, null: false
|
6
|
+
t.string :fieldable_type, null: false
|
6
7
|
t.string :default
|
7
8
|
t.boolean :allow_blank, null: false, default: false
|
8
9
|
t.string :allowed_values
|
@@ -10,5 +11,7 @@ class CreateCustomFielderFieldAttributes < ActiveRecord::Migration
|
|
10
11
|
|
11
12
|
t.timestamps null: false
|
12
13
|
end
|
14
|
+
|
15
|
+
add_index :custom_fielder_fields, [:name, :fieldable_type], unique: true
|
13
16
|
end
|
14
17
|
end
|
@@ -3,21 +3,22 @@ module CustomFielder
|
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
5
|
included do
|
6
|
-
has_many :
|
7
|
-
|
6
|
+
has_many :custom_fielder_fields,
|
7
|
+
through: :custom_fielder_values,
|
8
|
+
class_name: 'CustomFielder::Field',
|
9
|
+
source: :field
|
10
|
+
|
11
|
+
has_many :custom_fielder_values,
|
12
|
+
as: :fieldable,
|
8
13
|
dependent: :destroy,
|
9
|
-
class_name: 'CustomFielder::
|
14
|
+
class_name: 'CustomFielder::Value'
|
15
|
+
|
10
16
|
|
11
|
-
|
12
|
-
|
13
|
-
class_name: 'CustomFielder::FieldAttributes',
|
14
|
-
source: :field_attributes
|
17
|
+
accepts_nested_attributes_for :custom_fielder_values, allow_destroy: true
|
18
|
+
accepts_nested_attributes_for :custom_fielder_fields, allow_destroy: false
|
15
19
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
alias_method :custom_fields, :custom_fielder_custom_fields
|
20
|
-
alias_method :custom_field_attributes, :custom_fielder_field_attributes
|
20
|
+
alias_method :custom_fields, :custom_fielder_fields
|
21
|
+
alias_method :custom_field_values, :custom_fielder_values
|
21
22
|
|
22
23
|
##
|
23
24
|
# Returns a hash where the keys are the field names
|
@@ -26,9 +27,9 @@ module CustomFielder
|
|
26
27
|
# @return [Hash]
|
27
28
|
#
|
28
29
|
def get_custom_fields_with_values
|
29
|
-
|
30
|
-
field_name =
|
31
|
-
h[field_name] =
|
30
|
+
custom_field_values.inject(Hash.new) do |h, field_value|
|
31
|
+
field_name = field_value.field.name
|
32
|
+
h[field_name] = field_value.value; h
|
32
33
|
end
|
33
34
|
end
|
34
35
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: custom_fielder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Hurst
|
@@ -67,12 +67,12 @@ files:
|
|
67
67
|
- app/helpers/custom_fielder/application_helper.rb
|
68
68
|
- app/helpers/custom_fielder/deserialization_helper.rb
|
69
69
|
- app/helpers/custom_fielder/type_checking_helper.rb
|
70
|
-
- app/models/custom_fielder/
|
71
|
-
- app/models/custom_fielder/
|
70
|
+
- app/models/custom_fielder/field.rb
|
71
|
+
- app/models/custom_fielder/value.rb
|
72
72
|
- app/views/layouts/custom_fielder/application.html.erb
|
73
73
|
- config/routes.rb
|
74
|
-
- db/migrate/
|
75
|
-
- db/migrate/
|
74
|
+
- db/migrate/20160525133243_create_custom_fielder_values.rb
|
75
|
+
- db/migrate/20160525133922_create_custom_fielder_fields.rb
|
76
76
|
- lib/custom_fielder.rb
|
77
77
|
- lib/custom_fielder/custom_fieldable.rb
|
78
78
|
- lib/custom_fielder/engine.rb
|
@@ -1,18 +0,0 @@
|
|
1
|
-
module CustomFielder
|
2
|
-
class FieldAttributes < ActiveRecord::Base
|
3
|
-
has_many :custom_fields
|
4
|
-
|
5
|
-
before_save :serialize_allowed_values
|
6
|
-
|
7
|
-
validates :name, presence: true
|
8
|
-
validates :field_type, presence: true,
|
9
|
-
inclusion: { in: %w[Array Integer Float Date DateTime Boolean String] }
|
10
|
-
validates :allow_blank, inclusion: { in: [true, false] }
|
11
|
-
|
12
|
-
private
|
13
|
-
|
14
|
-
def serialize_allowed_values
|
15
|
-
allowed_values = allowed_values.to_s
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
class CreateCustomFielderCustomFields < ActiveRecord::Migration
|
2
|
-
def change
|
3
|
-
create_table :custom_fielder_custom_fields do |t|
|
4
|
-
t.references :custom_fieldable, polymorphic: true, index: { name: 'index_custom_fields_on_fieldable_type_and_fieldable_id' }, null: false
|
5
|
-
t.integer :field_attributes_id, null: false
|
6
|
-
t.boolean :active, null: false, default: true
|
7
|
-
t.string :value
|
8
|
-
t.text :note
|
9
|
-
|
10
|
-
t.timestamps null: false
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|