create_custom_attributes 0.5.2 → 0.5.3
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 06c297e0cd6b991be546243a4dac67daac49da1a
|
4
|
+
data.tar.gz: fe6165192b2580a744e289f960584428048861d1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 75bceb2b33c6c8b10e492b4907cd2ab6ede17419303aa4c9f87182bd7865a81220326a7c75c96034f4d7793a5601bdc421106d6425962f83b360ee8338176ab5
|
7
|
+
data.tar.gz: d6a61d3dc48f7a0bc0f456a79115a78be44ae67e7e28f9379475274f2bdba1dc89f6779d0ac0dfeef7d9f1ae2fe28607da0c6c2e0b8c08a034b353e1205e14fa
|
@@ -15,8 +15,8 @@ module CustomAttributes
|
|
15
15
|
|
16
16
|
attr_accessor :edit_tag_style
|
17
17
|
|
18
|
-
validates_numericality_of :min_length, :
|
19
|
-
validates_numericality_of :max_length, :
|
18
|
+
validates_numericality_of :min_length, only_integer: true, greater_than_or_equal_to: 0
|
19
|
+
validates_numericality_of :max_length, only_integer: true, greater_than_or_equal_to: 0
|
20
20
|
validates_presence_of :name, :field_type
|
21
21
|
validates_uniqueness_of :name, scope: :model_type
|
22
22
|
validates_length_of :name, maximum: 30
|
@@ -25,6 +25,9 @@ module CustomAttributes
|
|
25
25
|
|
26
26
|
before_create do |field|
|
27
27
|
field.set_slug
|
28
|
+
|
29
|
+
field.ensure_position_integrity
|
30
|
+
field.set_position
|
28
31
|
end
|
29
32
|
|
30
33
|
before_save do |field|
|
@@ -83,6 +86,10 @@ module CustomAttributes
|
|
83
86
|
errors.add :default, message
|
84
87
|
end
|
85
88
|
end
|
89
|
+
|
90
|
+
if position.present? && self.class.where(position: position, model_type: model_type).where.not(id: id).count > 0
|
91
|
+
errors.add :position, ::I18n.t('activerecord.errors.messages.invalid_position')
|
92
|
+
end
|
86
93
|
end
|
87
94
|
|
88
95
|
# Helper function used in validate_custom_field
|
@@ -149,12 +156,42 @@ module CustomAttributes
|
|
149
156
|
end
|
150
157
|
end
|
151
158
|
|
159
|
+
def decrement_position
|
160
|
+
change_position_by(-1)
|
161
|
+
end
|
162
|
+
|
163
|
+
def increment_position
|
164
|
+
change_position_by(1)
|
165
|
+
end
|
166
|
+
|
152
167
|
protected
|
153
168
|
|
154
169
|
def set_slug
|
155
170
|
self.slug = create_slug
|
156
171
|
end
|
157
172
|
|
173
|
+
def set_position
|
174
|
+
return unless position.nil?
|
175
|
+
|
176
|
+
last_position = self.class.where(model_type: model_type).order(position: :desc).first.try(:position)
|
177
|
+
self.position = 1
|
178
|
+
self.position = last_position + 1 unless last_position.nil?
|
179
|
+
end
|
180
|
+
|
181
|
+
def change_position_by(diff)
|
182
|
+
new_pos = position + diff unless position.nil?
|
183
|
+
|
184
|
+
swap_field = self.class.find_by(model_type: model_type, position: new_pos)
|
185
|
+
|
186
|
+
if swap_field.present?
|
187
|
+
swap_field.position = position
|
188
|
+
swap_field.save(validate: false)
|
189
|
+
|
190
|
+
self.position = new_pos
|
191
|
+
save
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
158
195
|
def create_slug(iterator = 0)
|
159
196
|
new_slug = name.strip.gsub(/([^A-Za-z0-9])+/) { '_' }.downcase
|
160
197
|
|
@@ -162,6 +199,24 @@ module CustomAttributes
|
|
162
199
|
new_slug = create_slug(iterator += 1) unless CustomField.where(slug: new_slug).count == 0
|
163
200
|
new_slug
|
164
201
|
end
|
202
|
+
|
203
|
+
def customizable_class
|
204
|
+
model_type.gsub('CustomField', '').constantize
|
205
|
+
rescue NameError
|
206
|
+
false
|
207
|
+
end
|
208
|
+
|
209
|
+
def ensure_position_integrity
|
210
|
+
expected_position = 1
|
211
|
+
self.class.where(model_type: model_type).order(position: :asc).each do |field|
|
212
|
+
if expected_position != field.position
|
213
|
+
field.position = expected_position
|
214
|
+
field.save
|
215
|
+
end
|
216
|
+
|
217
|
+
expected_position += 1
|
218
|
+
end
|
219
|
+
end
|
165
220
|
end
|
166
221
|
end
|
167
222
|
end
|
@@ -13,11 +13,11 @@ module CustomAttributes
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def self.all_values(customizable)
|
16
|
-
|
16
|
+
customizable.custom_field_values
|
17
17
|
end
|
18
18
|
|
19
19
|
def self.value_by_field_id(customizable, field_id)
|
20
|
-
|
20
|
+
customizable.populated_custom_field_value(field_id)
|
21
21
|
end
|
22
22
|
|
23
23
|
def self.update_field_value(customizable, field_id, value)
|
@@ -28,5 +28,15 @@ module CustomAttributes
|
|
28
28
|
customizable.custom_value_for(field_id)
|
29
29
|
end
|
30
30
|
end
|
31
|
+
|
32
|
+
module CustomField
|
33
|
+
def self.increment_position(field)
|
34
|
+
field.increment_position
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.decrement_position(field)
|
38
|
+
field.decrement_position
|
39
|
+
end
|
40
|
+
end
|
31
41
|
end
|
32
42
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: create_custom_attributes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Grützmacher
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-11-
|
11
|
+
date: 2017-11-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|