infopark_reactor 1.19.0 → 1.20.0

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: eb189ac8a5cd0bb234270e74c7a2b311c84fc2bb
4
- data.tar.gz: 983ff98495d04e26f6bf7e48b642cc05be2ce17b
3
+ metadata.gz: 4565152e9620ee1549db9c630f29fc09963aca7c
4
+ data.tar.gz: 2f73a2ba9c91bf01bb6e976c5dc3f7c95ae69131
5
5
  SHA512:
6
- metadata.gz: 4db219d0c89f10a994f0a24c0f428130c456cf9076dc560e3ee9b3a06020ebe1b1244619f14696871fdf1e5708164cdb6c8865060c177dca355551ef2925bda9
7
- data.tar.gz: 5044a959288429fe7c95b9be2080b0c2fe003164af3574c7b745e07b1b455a7a84256123014f9ae1799dc8daeaa3a4e5a1f108713d9e9fd1c5e6aa4e49e750aa
6
+ metadata.gz: ea47b54ec12a7c0d158194e00af28291028d63a9873fb88b66cf881891ed1f55ea3ab26709aa7741f45eeaf79bf6aa16b255170a0b5e9ad39fc04e80639aff04
7
+ data.tar.gz: 666ca185f3ff1ecbbc9fc489c37c88e2cfa7be23c48e2fa4da3aa9de8408635f7641dad6fb308bc6d2c2e521a328cadf93766abc55310afb06d3237c05abed37
@@ -197,6 +197,14 @@ module Reactor
197
197
  set(:body, value)
198
198
  end
199
199
 
200
+ def blob
201
+ if attr_dict.respond_to?(:blob)
202
+ attr_dict.send :blob
203
+ else
204
+ nil
205
+ end
206
+ end
207
+
200
208
  def blob=(value)
201
209
  set(:blob, value)
202
210
  end
@@ -230,9 +238,14 @@ module Reactor
230
238
  not_formated_value = value
231
239
  formated_value = serialize_value(key, value)
232
240
  crul_set(attr, formated_value, options)
241
+
242
+ __send__(:attribute_will_change!, key)
243
+
233
244
  active_record_set(key, formated_value) if active_record_attr?(key)
234
245
  rails_connector_set(key, formated_value)
235
- send(key)
246
+
247
+ # return new value
248
+ __send__(key)
236
249
  end
237
250
 
238
251
 
@@ -346,6 +359,7 @@ module Reactor
346
359
  if Reactor.rails4_2?
347
360
  @attributes.write_from_user(field.to_s, value)
348
361
  else
362
+ @attributes_cache.delete(field.to_s)
349
363
  @attributes[field.to_s] = value
350
364
  end
351
365
  end
@@ -14,7 +14,7 @@ module Reactor
14
14
 
15
15
  private
16
16
  def serialize_html
17
- link_expressions = [/(href|src)\s*=\s*"([^"]*)"/, /(href|src)\s*=\s*'([^']*)'/]
17
+ link_expressions = [/(href|src|usemap)\s*=\s*"([^"]*)"/, /(href|src|usemap)\s*=\s*'([^']*)'/]
18
18
  link_expressions.each do |expr|
19
19
  @value.gsub!(expr) do |string|
20
20
  link = Reactor::Support::LinkMatcher.new($2)
@@ -16,6 +16,10 @@ module Reactor
16
16
  super(transform_into_link(link_data))
17
17
  end
18
18
 
19
+ def []=(idx, value)
20
+ super(idx, transform_into_link(value))
21
+ end
22
+
19
23
  # install #size_changed callback
20
24
  Array.instance_methods(false).each do |meth|
21
25
  old = instance_method(meth)
@@ -142,15 +142,42 @@ module Reactor
142
142
  end
143
143
  end
144
144
 
145
- def set_mutiple(attrs)
145
+ def set_multiple(attrs)
146
146
  attrs.each {|a,(v,o)| set(a,v,o||{}) }
147
147
  end
148
148
 
149
149
  def composite_save(attrs, links_to_add, links_to_remove, links_to_set, links_modified=false)
150
- set_mutiple(attrs)
150
+ set_multiple(attrs)
151
151
 
152
152
  skip_version_creation = @attrs.empty? && links_to_remove.empty? && links_to_set.empty? && !links_modified
153
153
 
154
+ # The save procedure consists of following steps:
155
+ # First request (assign attributes):
156
+ # a. Execute take to assign the edited content to the current user
157
+ # b. Execute edit to create an edited content if there is none present
158
+ # c. Set object attributes (name, permalink, etc.)
159
+ # d. Set content attributes (title, body etc. + custom attributes)
160
+ # e. Resolve all links in *html* attributes
161
+ # Second request (overwrite linklists):
162
+ # f. Remove superflous links
163
+ # g. Overwrite existing links
164
+ # h. Add missing links
165
+ #
166
+ # Second request is optional and only happens if linklists
167
+ # have been changed.
168
+ #
169
+ # Steps a,b,d,e,f,g,h are optional and are skipped if only
170
+ # object attributes have been supplied.
171
+ #
172
+ # It can happen that the second request is received by
173
+ # a different CM slave than the first request. If additionaly
174
+ # the slave has invalid cache (for example when the cache
175
+ # invalidate command has not yet been fully propagated among
176
+ # slaves), then race condition can occur.
177
+ # It is therefore extremely important for the second request
178
+ # to be resistant against invalid cache, otherwise then
179
+ # save operation aborts.
180
+
154
181
  resp = MultiXmlRequest.execute do |reqs|
155
182
  reqs.optional {|xml| SimpleCommandRequest.build(xml, @obj_id, 'take') } unless skip_version_creation
156
183
  reqs.optional {|xml| SimpleCommandRequest.build(xml, @obj_id, 'edit') } unless skip_version_creation
@@ -158,6 +185,7 @@ module Reactor
158
185
 
159
186
  reqs.mandatory {|xml| ObjSetRequest.build(xml, @obj_id, @obj_attrs) } unless @obj_attrs.empty? #important! requires different permissions
160
187
  reqs.mandatory {|xml| ContentSetRequest.build(xml, @obj_id, @attrs, @attr_options) } unless skip_version_creation
188
+ reqs.mandatory {|xml| ResolveRefsRequest.build(xml, @obj_id) } unless skip_version_creation
161
189
  end
162
190
 
163
191
  resp.assert_success
@@ -165,20 +193,21 @@ module Reactor
165
193
  yield(attrs, links_to_add, links_to_remove, links_to_set) if block_given?
166
194
 
167
195
  resp = MultiXmlRequest.execute do |reqs|
196
+ reqs.optional {|xml| SimpleCommandRequest.build(xml, @obj_id, 'take') }
197
+ reqs.optional {|xml| SimpleCommandRequest.build(xml, @obj_id, 'edit') }
198
+
168
199
  links_to_remove.each do |link_id|
169
200
  reqs.mandatory {|xml| LinkDeleteRequest.build(xml, link_id) }
170
201
  end
171
- links_to_add.each do |(attr, link)|
172
-
173
- reqs.mandatory {|xml| LinkAddRequest.build(xml, @obj_id, attr, link) }
174
- end
175
202
 
176
203
  links_to_set.each do |(link_id, link)|
177
204
  reqs.mandatory {|xml| LinkSetRequest.build(xml, link_id, link) }
178
205
  end
179
206
 
180
- reqs.optional {|xml| ResolveRefsRequest.build(xml, @obj_id) }
181
- end unless skip_version_creation
207
+ links_to_add.each do |(attr, link)|
208
+ reqs.mandatory {|xml| LinkAddRequest.build(xml, @obj_id, attr, link) }
209
+ end
210
+ end unless skip_version_creation || (links_to_remove.empty? && links_to_add.empty? && links_to_set.empty?)
182
211
 
183
212
  resp.assert_success
184
213
  end
@@ -288,7 +288,12 @@ module Reactor
288
288
  end
289
289
 
290
290
  def sanitize_name
291
- self.name = self.class.send(:sanitize_name, self.name)
291
+ return unless self.name.present?
292
+
293
+ sanitized_name = self.class.send(:sanitize_name, self.name)
294
+ if sanitized_name != self.name
295
+ self.name = sanitized_name
296
+ end
292
297
  end
293
298
 
294
299
  def crul_attributes_set?
@@ -1,4 +1,4 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module Reactor
3
- VERSION = "1.19.0"
3
+ VERSION = "1.20.0"
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: infopark_reactor
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.19.0
4
+ version: 1.20.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomasz Przedmojski
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-09 00:00:00.000000000 Z
11
+ date: 2016-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails