active_tools 0.0.50 → 0.0.51

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: 2fed305b8948e972bfa8d49c0d9bcbb10719c249
4
- data.tar.gz: 2af83ee21be57d34ec36368ce65a00ec331d4ca6
3
+ metadata.gz: 3690b827d1bbd74263c304724e70dcee2edeb90d
4
+ data.tar.gz: a971e63143d76aeb518becfec2d20be3a4999f5e
5
5
  SHA512:
6
- metadata.gz: ae3f3d27967889287e0b28102b6d1154d3480c7deff13d426151923416abc56ca3bb4e9a06347ee1a6e679747aaae809a310000d3aeb39312a291333c1ee6f45
7
- data.tar.gz: 2dc855f78c179f89914d581997f92f65708279b373eab60e77cff7cf126a72d72e7f2dfaa71f048f00ac221ddc8d97086962a9da36daa8e6aa59b4e38ad0f9ab
6
+ metadata.gz: cdc442425869c45f6d5a580e60cf4145f1bad3e99c5c411e0e4934870644cffa63638369f2b3548b3f55902e123261a229c52e78254142457c623756bb1247b6
7
+ data.tar.gz: be4c77d4de9e5e21cd737b9ff1282881c46a1072c4aa63f438e03d061d844d48cd1f41b319b9fbd49812550958f08c868786ce9435b61193ff7dc3c1707d6b6d
@@ -0,0 +1,22 @@
1
+ module ActiveTools
2
+ module ActionPack
3
+ module ActionView
4
+ module FieldName
5
+
6
+ end
7
+ end
8
+ end
9
+
10
+ module OnLoadActionView
11
+
12
+ def field_name(builder, *args)
13
+ [object_name_to_field_id(builder.object_name), *args].join("_")
14
+ end
15
+
16
+ def object_name_to_field_id(val)
17
+ val.gsub(/\]\[|[^-a-zA-Z0-9:.]/, "_").sub(/_$/, "")
18
+ end
19
+
20
+ end
21
+
22
+ end
@@ -18,13 +18,14 @@ module ActiveTools
18
18
  @update_if = @options[:update_if]
19
19
  @destroy_if = @options[:destroy_if]
20
20
  @uniq_by = Array(@options[:uniq_by]).map(&:to_s)
21
+ @target_process = @options[:target_process]
21
22
  association.load_target
22
23
  end
23
-
24
+
24
25
  def klass
25
26
  association.klass||reflection.class_name.constantize
26
27
  end
27
-
28
+
28
29
  def association
29
30
  owner.association(assoc_name)
30
31
  end
@@ -48,9 +49,9 @@ module ActiveTools
48
49
  end
49
50
  end
50
51
  end
51
-
52
+
52
53
  def try_nullify
53
- if nullify_target?
54
+ if nullify_target?
54
55
  store_backup!
55
56
  self.target = nil
56
57
  true
@@ -58,10 +59,10 @@ module ActiveTools
58
59
  end
59
60
 
60
61
  def try_commit
61
- try_commit_existed || try_update
62
+ try_commit_existed || try_restore_refreshed_backup
62
63
  end
63
64
 
64
- def try_destroy
65
+ def try_destroy
65
66
  try_destroy_backup
66
67
  try_destroy_target
67
68
  end
@@ -69,29 +70,25 @@ module ActiveTools
69
70
  def template_attributes
70
71
  attributes(@template, *@remote_attributes)
71
72
  end
72
-
73
+
73
74
  def target_attributes
74
75
  attributes(target, *@remote_attributes)
75
76
  end
76
77
 
77
- def try_update
78
+ def try_restore_refreshed_backup
78
79
  if updateable_backup?
79
- warn "Adaptive updating: <#{@backup.class.name}: #{@backup.class.primary_key}: #{@backup.send(@backup.class.primary_key)}>"
80
- begin
81
- @backup.update(template_attributes)
82
- rescue ::ActiveRecord::StaleObjectError
83
- @backup.reload
84
- try_update
85
- rescue ::ActiveRecord::StatementInvalid
86
- @backup.reload
87
- try_update
80
+ warn "Adaptive going to update: <#{@backup.class.name}: #{@backup.class.primary_key}: #{@backup.send(@backup.class.primary_key)}>"
81
+ @backup.attributes = template_attributes
82
+ if @backup.valid?
83
+ restore_backup!
84
+ true
85
+ else
86
+ false
88
87
  end
89
- restore_backup!
90
- true
91
88
  end
92
89
  end
93
90
 
94
- def try_commit_existed
91
+ def try_commit_existed
95
92
  if @template.present? && @uniq_by.any? && (existed = detect_existed) && !(@backup.present? && same_records?(@backup, existed, :attributes => @uniq_by))
96
93
  warn "Adaptive fetching existed <#{existed.class.name}: #{existed.class.primary_key}: #{existed.send(existed.class.primary_key)}>"
97
94
  self.target = existed
@@ -99,10 +96,10 @@ module ActiveTools
99
96
  @backup.mark_for_destruction
100
97
  end
101
98
  true
102
- end
99
+ end
103
100
  end
104
101
 
105
- def try_destroy_backup
102
+ def try_destroy_backup
106
103
  if destroyable_backup?
107
104
  warn "Adaptive destroying backed up: <#{@backup.class.name}: #{@backup.class.primary_key}: #{@backup.send(@backup.class.primary_key)}>"
108
105
  begin
@@ -117,9 +114,9 @@ module ActiveTools
117
114
  end
118
115
  end
119
116
 
120
- def try_destroy_target
117
+ def try_destroy_target
121
118
  if destroyable_target?
122
- warn "Adaptive destroying target: <#{target.class.name}: #{target.class.primary_key}: #{target.send(target.class.primary_key)}>"
119
+ warn "Adaptive destroying target: <#{target.class.name}: #{target.class.primary_key}: #{target.send(target.class.primary_key)}>"
123
120
  begin
124
121
  target.destroy
125
122
  rescue ::ActiveRecord::StaleObjectError
@@ -131,6 +128,25 @@ module ActiveTools
131
128
  end
132
129
  end
133
130
  end
131
+
132
+ def target_process_do
133
+ @target_process.try(:call, target, owner)
134
+ end
135
+
136
+ def update_target_if_changed!
137
+ if target.changes.any?
138
+ warn "Adaptive updating: <#{target.class.name}: #{target.class.primary_key}: #{target.send(target.class.primary_key)}>"
139
+ begin
140
+ target.save
141
+ rescue ::ActiveRecord::StaleObjectError
142
+ target.reload
143
+ update_target_if_changed!
144
+ rescue ::ActiveRecord::StatementInvalid
145
+ target.reload
146
+ update_target_if_changed!
147
+ end
148
+ end
149
+ end
134
150
 
135
151
  def clear!
136
152
  @template = nil
@@ -138,7 +154,7 @@ module ActiveTools
138
154
  end
139
155
 
140
156
  private
141
-
157
+
142
158
  def target_id
143
159
  association.send(:target_id)
144
160
  end
@@ -174,7 +190,7 @@ module ActiveTools
174
190
  def destroyable_target?
175
191
  target.try(:persisted?) && (!target.destroyed?||target.marked_for_destruction?) && @destroy_if.try(:call, target.reload, owner)
176
192
  end
177
-
193
+
178
194
  def attributes(object, *attrs)
179
195
  array = attrs.map do |a|
180
196
  begin
@@ -187,7 +203,7 @@ module ActiveTools
187
203
  end
188
204
 
189
205
  def create_template!
190
- if target.nil? || @template.nil?
206
+ if target.nil? || @template.nil?
191
207
  self.target = template
192
208
  end
193
209
  end
@@ -201,13 +217,13 @@ module ActiveTools
201
217
  @backup = nil
202
218
  end
203
219
  end
204
-
220
+
205
221
  def store_backup!
206
222
  if target.try(:persisted?)
207
223
  @backup ||= target
208
224
  end
209
225
  end
210
-
226
+
211
227
  def same_records?(*args)
212
228
  options = args.extract_options!
213
229
  attributes = options[:attributes]
@@ -255,10 +271,10 @@ module ActiveTools
255
271
  @template.tap do |t|
256
272
  @init_proc.try(:call, t, owner)
257
273
  end
258
- end
274
+ end
259
275
  end
260
276
 
261
277
  end
262
278
  end
263
-
264
- end
279
+
280
+ end
@@ -4,12 +4,12 @@ module ActiveTools
4
4
  module ActiveRecord
5
5
  module AdaptiveBelongsTo
6
6
  extend ::ActiveSupport::Concern
7
-
7
+
8
8
  included do
9
9
  end
10
10
 
11
11
  module ClassMethods
12
-
12
+
13
13
  def relation_options_under(*args)
14
14
  path = args.extract_options!
15
15
  local_attribute = args.first
@@ -36,15 +36,15 @@ module ActiveTools
36
36
  end
37
37
  {:outer_values => outer_values, :where_values => where_values}
38
38
  end
39
-
39
+
40
40
  class_eval do
41
41
  define_method local_method do
42
42
  self.class.send(local_method, self)
43
43
  end
44
44
  end
45
-
45
+
46
46
  end
47
-
47
+
48
48
  def adaptive_belongs_to(*args)
49
49
  options = args.extract_options!
50
50
  assoc_name = args.first
@@ -52,19 +52,24 @@ module ActiveTools
52
52
  raise(ArgumentError, ":#{assoc_name} method doesn't look like an association accessor!")
53
53
  end
54
54
  adapter_name = "#{assoc_name}_adaptive"
55
-
55
+
56
56
  raise(TypeError, "Option :attributes must be a Hash. #{options[:attributes].class} passed!") unless options[:attributes].is_a?(Hash)
57
57
  attr_map = HashWithIndifferentAccess.new(options.delete(:attributes))
58
58
  valid_options = Hash(options.delete(:valid_with)).symbolize_keys
59
59
  valid_with assoc_name, valid_options.merge(:attributes => attr_map) #, :fit => true
60
-
60
+
61
61
  class_attribute :adaptive_options unless defined?(adaptive_options)
62
62
  self.adaptive_options ||= {}
63
63
  self.adaptive_options[assoc_name.to_sym] = options.merge(:attr_map => attr_map)
64
-
64
+
65
65
  class_eval <<-EOV
66
66
  before_validation do
67
67
  #{adapter_name}.try_nullify||#{adapter_name}.try_commit
68
+ #{adapter_name}.target_process_do
69
+ end
70
+
71
+ before_save do
72
+ #{adapter_name}.update_target_if_changed!
68
73
  end
69
74
 
70
75
  after_save do
@@ -75,7 +80,7 @@ module ActiveTools
75
80
  after_destroy do
76
81
  #{adapter_name}.try_destroy
77
82
  end
78
-
83
+
79
84
  def #{adapter_name}
80
85
  @#{adapter_name} ||= ActiveTools::ActiveRecord::AdaptiveBelongsTo::Adapter.new(self, :#{assoc_name}, adaptive_options[:#{assoc_name}])
81
86
  end
@@ -92,10 +97,10 @@ module ActiveTools
92
97
  end
93
98
  end
94
99
  end
95
-
100
+
96
101
  end
97
102
  end
98
-
103
+
99
104
  # def reload(*args)
100
105
  # super.tap do |record|
101
106
  # adaptive_options.keys.each do |assoc_name|
@@ -105,12 +110,12 @@ module ActiveTools
105
110
  # end
106
111
  # end
107
112
  # end
108
-
113
+
109
114
  end
110
115
  end
111
-
116
+
112
117
  module OnLoadActiveRecord
113
118
  include ActiveRecord::AdaptiveBelongsTo
114
119
  end
115
-
116
- end
120
+
121
+ end
@@ -11,6 +11,11 @@ module ActiveTools
11
11
  module ClassMethods
12
12
  def custom_counter_cache_for(*args)
13
13
  mapping = args.extract_options!
14
+
15
+ class_attribute :custom_counter_cache_options unless defined?(custom_counter_cache_options)
16
+ self.custom_counter_cache_options ||= {}
17
+ self.custom_counter_cache_options[:mapping] = mapping.with_indifferent_access
18
+
14
19
  mapping.each do |assoc_name, value|
15
20
  assoc_name = assoc_name.to_s
16
21
  if assoc_name.last == "*"
@@ -1,3 +1,3 @@
1
1
  module ActiveTools
2
- VERSION = "0.0.50"
2
+ VERSION = "0.0.51"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.50
4
+ version: 0.0.51
5
5
  platform: ruby
6
6
  authors:
7
7
  - Valery Kvon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-15 00:00:00.000000000 Z
11
+ date: 2016-08-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -63,6 +63,7 @@ files:
63
63
  - lib/active_tools/action_pack/action_dispatch.rb
64
64
  - lib/active_tools/action_pack/action_dispatch/flash_stack.rb
65
65
  - lib/active_tools/action_pack/action_view.rb
66
+ - lib/active_tools/action_pack/action_view/field_name.rb
66
67
  - lib/active_tools/action_pack/action_view/perform_as_tree.rb
67
68
  - lib/active_tools/action_pack/action_view/tag_attributes.rb
68
69
  - lib/active_tools/action_pack/action_view/uniq_content_for.rb