create_custom_attributes 0.5.2 → 0.5.3
Sign up to get free protection for your applications and to get access to all the features.
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
|