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: 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