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: dc552dc1d4611f73fe12579a4ce65aea76a4a3bc
4
- data.tar.gz: 8bbbdc05b0261609125ce0cc6b25f1efcf2b90e7
3
+ metadata.gz: 06c297e0cd6b991be546243a4dac67daac49da1a
4
+ data.tar.gz: fe6165192b2580a744e289f960584428048861d1
5
5
  SHA512:
6
- metadata.gz: 694b6a66cae8731de68d98833ed5d40d176d2d0a94824e53cf95b0c1453e2d776eaa254d6f5ac8827aa9500100e0f145848b8b6f593a923779c9b0b6a597bb72
7
- data.tar.gz: 4d37e57058d2ae9e5f2f8f3587203b3acc32019f879274d0d485252e9aa7321ef18950ccda7485681f2c5bcdb0c99b0e36dc8c59e4b293489215cdce5047eff1
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, :only_integer => true, :greater_than_or_equal_to => 0
19
- validates_numericality_of :max_length, :only_integer => true, :greater_than_or_equal_to => 0
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
- return customizable.custom_field_values
16
+ customizable.custom_field_values
17
17
  end
18
18
 
19
19
  def self.value_by_field_id(customizable, field_id)
20
- return customizable.populated_custom_field_value(field_id)
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
@@ -1,3 +1,3 @@
1
1
  module CustomAttributes
2
- VERSION = '0.5.2'.freeze
2
+ VERSION = '0.5.3'.freeze
3
3
  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.2
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-20 00:00:00.000000000 Z
11
+ date: 2017-11-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails