infopark_reactor 1.14.0.beta2 → 1.15.0.beta1
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 +4 -4
- data/app/models/rails_connector/blob_mapping.rb +4 -0
- data/lib/infopark_reactor.rb +3 -0
- data/lib/rails_connector/meta/eager_loader.rb +91 -0
- data/lib/reactor/attributes.rb +2 -2
- data/lib/reactor/cm/obj_class.rb +15 -2
- data/lib/reactor/configuration.rb +3 -0
- data/lib/reactor/persistence.rb +10 -6
- data/lib/reactor/session.rb +8 -1
- data/lib/reactor/sudo.rb +4 -3
- data/lib/reactor/version.rb +1 -1
- metadata +3 -3
- data/app/models/rails_connector/meta/eager_loader.rb +0 -41
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a56b31ba2e29489af380f651342ddc82f3b542d3
|
4
|
+
data.tar.gz: 9ed150774b911bb3dfb2c311d7a84dff1dc4fd72
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 78174cc1ebf120f5f844e1ebcb26c1f1e4245cb63bd03540bca50a380e455717c11580e4607a62e2406f1392991f1686670e7d39b5930259b598f3290dc3b134
|
7
|
+
data.tar.gz: 4faab19e5c534b811533d7a106057c03ed9fc2cff51fc70013a1743d2460db98e05ca12aa8d04bae89bedea2e4c3c3defc9004eb1afb2a2dd0884eeeba889ca4
|
@@ -8,5 +8,9 @@ module RailsConnector
|
|
8
8
|
def self.get_fingerprint(name)
|
9
9
|
find_by_blob_name(name).fingerprint
|
10
10
|
end
|
11
|
+
|
12
|
+
def self.get_fingerprint_map(blob_names)
|
13
|
+
Hash[self.where(:blob_name => blob_names).select([:blob_name, :fingerprint]).map {|b| [b.blob_name, b.fingerprint] }]
|
14
|
+
end
|
11
15
|
end
|
12
16
|
end
|
data/lib/infopark_reactor.rb
CHANGED
@@ -69,6 +69,9 @@ require 'reactor/already_released'
|
|
69
69
|
require 'reactor/no_working_version'
|
70
70
|
require 'reactor/not_permitted'
|
71
71
|
|
72
|
+
# require eager loader
|
73
|
+
require 'rails_connector/meta/eager_loader'
|
74
|
+
|
72
75
|
# require components
|
73
76
|
require 'reactor/main'
|
74
77
|
require 'reactor/rc_independent'
|
@@ -0,0 +1,91 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'singleton'
|
3
|
+
require 'set'
|
4
|
+
|
5
|
+
module RailsConnector
|
6
|
+
module Meta
|
7
|
+
class EagerLoader
|
8
|
+
include Singleton
|
9
|
+
attr_reader :obj_classes
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
# Rails.logger.debug "EagerLoader: I am eager to start working"
|
13
|
+
@obj_classes = {}
|
14
|
+
# Rails 3.1 contains a bug that screws attribute loading
|
15
|
+
# attributes are set to assigned classes
|
16
|
+
if ::Rails::VERSION::MAJOR == 3 && ::Rails::VERSION::MINOR == 1
|
17
|
+
RailsConnector::ObjClass.all.each do |obj_class|
|
18
|
+
obj_class.custom_attributes
|
19
|
+
@obj_classes[obj_class.name] = obj_class
|
20
|
+
end
|
21
|
+
else
|
22
|
+
RailsConnector::ObjClass.includes(:custom_attributes_raw).all.each do |obj_class|
|
23
|
+
@obj_classes[obj_class.name] = obj_class
|
24
|
+
end
|
25
|
+
preload_attribute_blobs
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def obj_class(name)
|
30
|
+
name = name.to_s
|
31
|
+
if !@obj_classes.fetch(name, nil).nil?
|
32
|
+
@obj_classes[name]
|
33
|
+
else
|
34
|
+
# TODO: preload_attribute_blobs for obj_class
|
35
|
+
@obj_classes[name] ||= RailsConnector::ObjClass.find_by_obj_class_name(name)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def forget_obj_class(name)
|
40
|
+
@obj_classes.delete(name.to_s)
|
41
|
+
end
|
42
|
+
|
43
|
+
protected
|
44
|
+
def preload_attribute_blobs
|
45
|
+
attribute_names = Set.new
|
46
|
+
@obj_classes.each do |_, obj_class|
|
47
|
+
obj_class.custom_attributes.each do |attribute_name, _|
|
48
|
+
attribute_names << attribute_name
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
blob_names = attribute_names.map {|attribute_name| "#{attribute_name}.jsonAttributeDict" }
|
53
|
+
# Fiona >= 6.8
|
54
|
+
if RailsConnector::BlobMapping.exists?
|
55
|
+
blob_names = attribute_names.map {|attribute_name| "#{attribute_name}.jsonAttributeDict" }
|
56
|
+
fingerprint_map = RailsConnector::BlobMapping.get_fingerprint_map(blob_names)
|
57
|
+
blob_fingerprints = fingerprint_map.values
|
58
|
+
# NOTE: this is correct!
|
59
|
+
blobs = RailsConnector::Blob.where(:blob_name => blob_fingerprints).to_a
|
60
|
+
blob_map = Hash[blobs.map {|b| [b.blob_name, b]}]
|
61
|
+
|
62
|
+
@obj_classes.each do |_, obj_class|
|
63
|
+
obj_class.custom_attributes.each do |_, attribute|
|
64
|
+
blob_name = "#{attribute.name}.jsonAttributeDict"
|
65
|
+
fingerprint = fingerprint_map[blob_name]
|
66
|
+
blob = blob_map[fingerprint]
|
67
|
+
|
68
|
+
next unless blob && blob.blob_data?
|
69
|
+
attribute.instance_variable_set(:@blob_data, ::JSON.parse(blob.blob_data))
|
70
|
+
end
|
71
|
+
end
|
72
|
+
# Fiona = 6.7
|
73
|
+
else
|
74
|
+
blob_names = attribute_names.map {|attribute_name| "#{attribute_name}.jsonAttributeDict" }
|
75
|
+
blobs = RailsConnector::Blob.where(:blob_name => blob_names).to_a
|
76
|
+
blob_map = Hash[blobs.map {|b| [b.blob_name, b]}]
|
77
|
+
|
78
|
+
@obj_classes.each do |_, obj_class|
|
79
|
+
obj_class.custom_attributes.each do |_, attribute|
|
80
|
+
blob_name = "#{attribute.name}.jsonAttributeDict"
|
81
|
+
blob = blob_map[blob_name]
|
82
|
+
|
83
|
+
next unless blob && blob.blob_data?
|
84
|
+
attribute.instance_variable_set(:@blob_data, ::JSON.parse(blob.blob_data))
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
data/lib/reactor/attributes.rb
CHANGED
@@ -41,7 +41,7 @@ module Reactor
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def regenerate_attribute_handler(obj_class_name)
|
44
|
-
generate_attribute_handler(RailsConnector::
|
44
|
+
generate_attribute_handler(RailsConnector::Meta::EagerLoader.instance.obj_class(obj_class_name))
|
45
45
|
end
|
46
46
|
|
47
47
|
protected
|
@@ -55,7 +55,7 @@ module Reactor
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def generate_attribute_handlers
|
58
|
-
RailsConnector::
|
58
|
+
RailsConnector::Meta::EagerLoader.instance.obj_classes.each do |_, obj_class|
|
59
59
|
# Rails.logger.debug "Reactor::AttributeHandlers: preparing obj class #{obj_class.name}"
|
60
60
|
generate_attribute_handler(obj_class) if obj_class.name =~ /^[A-Z]/
|
61
61
|
end
|
data/lib/reactor/cm/obj_class.rb
CHANGED
@@ -58,7 +58,12 @@ module Reactor
|
|
58
58
|
result = [result] unless result.kind_of?(Array)
|
59
59
|
result.map do |dictitem|
|
60
60
|
key = dictitem.children.detect {|c| c.name == 'key'}.text
|
61
|
-
|
61
|
+
raw_value = dictitem.children.detect {|c| c.name == 'value'}
|
62
|
+
if raw_value.children.detect {|c| c.kind_of?(::REXML::Text) }
|
63
|
+
value = raw_value.text
|
64
|
+
else
|
65
|
+
value = raw_value.children.map {|c| c.text }
|
66
|
+
end
|
62
67
|
{key => value}
|
63
68
|
end.inject({}, &:merge)
|
64
69
|
end
|
@@ -86,7 +91,15 @@ module Reactor
|
|
86
91
|
xml.text!(key.to_s)
|
87
92
|
end
|
88
93
|
xml.tag!('value') do
|
89
|
-
|
94
|
+
if value.kind_of?(Array)
|
95
|
+
value.each do |item|
|
96
|
+
xml.tag!('listitem') do
|
97
|
+
xml.text!(item.to_s)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
else
|
101
|
+
xml.text!(value.to_s)
|
102
|
+
end
|
90
103
|
end
|
91
104
|
end
|
92
105
|
end
|
data/lib/reactor/persistence.rb
CHANGED
@@ -481,12 +481,16 @@ module Reactor
|
|
481
481
|
end
|
482
482
|
module ClassMethods
|
483
483
|
def sanitize_name(old_name)
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
484
|
+
if Reactor::Configuration.sanitize_obj_name
|
485
|
+
character_map = {'ä' => 'ae', 'ö' => 'oe', 'ü' => 'ue', 'ß' => 'ss', 'Ä' => 'Ae', 'Ö' => 'Oe', 'Ü' => 'Ue'}
|
486
|
+
new_name = old_name.gsub(/[^-$a-zA-Z0-9]/) {|char| character_map[char] || '_'}.
|
487
|
+
gsub(/__+/,'_').
|
488
|
+
gsub(/^_+/,'').
|
489
|
+
gsub(/_+$/,'')
|
490
|
+
new_name
|
491
|
+
else
|
492
|
+
old_name
|
493
|
+
end
|
490
494
|
end
|
491
495
|
|
492
496
|
if Reactor.rails4_x?
|
data/lib/reactor/session.rb
CHANGED
@@ -10,7 +10,14 @@ class Reactor::Session
|
|
10
10
|
include Observable
|
11
11
|
|
12
12
|
def self.instance
|
13
|
-
self.
|
13
|
+
self.for(Reactor::Configuration.xml_access[:username])
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.for(user_name)
|
17
|
+
self.new.tap do |instance|
|
18
|
+
instance.instance_variable_set(:@user_name, user_name)
|
19
|
+
instance.send(:proper_notify_observers, user_name, false)
|
20
|
+
end
|
14
21
|
end
|
15
22
|
|
16
23
|
def marshal_dump
|
data/lib/reactor/sudo.rb
CHANGED
@@ -2,11 +2,12 @@
|
|
2
2
|
module Reactor
|
3
3
|
module Sudo
|
4
4
|
def self.su(other_user_name, &block)
|
5
|
-
|
6
|
-
|
5
|
+
rsession = Reactor::Session.instance
|
6
|
+
current_user_name = rsession.user_name
|
7
|
+
rsession.user_name = other_user_name
|
7
8
|
yield
|
8
9
|
ensure
|
9
|
-
|
10
|
+
rsession.user_name = current_user_name || 'root'
|
10
11
|
end
|
11
12
|
end
|
12
13
|
end
|
data/lib/reactor/version.rb
CHANGED
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.
|
4
|
+
version: 1.15.0.beta1
|
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-
|
11
|
+
date: 2015-09-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -105,7 +105,6 @@ files:
|
|
105
105
|
- app/models/rails_connector/blob_mapping.rb
|
106
106
|
- app/models/rails_connector/channel.rb
|
107
107
|
- app/models/rails_connector/content.rb
|
108
|
-
- app/models/rails_connector/meta/eager_loader.rb
|
109
108
|
- app/models/rails_connector/obj_class.rb
|
110
109
|
- app/models/rails_connector/obj_class_attr.rb
|
111
110
|
- app/models/rails_connector/object_with_meta_data.rb
|
@@ -115,6 +114,7 @@ files:
|
|
115
114
|
- lib/generators/cm/migration/migration_generator.rb
|
116
115
|
- lib/generators/cm/migration/templates/template.rb
|
117
116
|
- lib/infopark_reactor.rb
|
117
|
+
- lib/rails_connector/meta/eager_loader.rb
|
118
118
|
- lib/reactor/already_released.rb
|
119
119
|
- lib/reactor/attributes.rb
|
120
120
|
- lib/reactor/attributes/date_serializer.rb
|
@@ -1,41 +0,0 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
|
-
require 'singleton'
|
3
|
-
|
4
|
-
module RailsConnector
|
5
|
-
module Meta
|
6
|
-
class EagerLoader
|
7
|
-
include Singleton
|
8
|
-
def initialize
|
9
|
-
# Rails.logger.debug "EagerLoader: I am eager to start working"
|
10
|
-
@obj_classes = {}
|
11
|
-
# Rails 3.1 contains a bug that screws attribute loading
|
12
|
-
# attributes are set to assigned classes
|
13
|
-
if ::Rails::VERSION::MAJOR == 3 && ::Rails::VERSION::MINOR == 1
|
14
|
-
RailsConnector::ObjClass.all.each do |obj_class|
|
15
|
-
obj_class.custom_attributes
|
16
|
-
@obj_classes[obj_class.name] = obj_class
|
17
|
-
end
|
18
|
-
else
|
19
|
-
RailsConnector::ObjClass.includes(:custom_attributes_raw).all.each do |obj_class|
|
20
|
-
@obj_classes[obj_class.name] = obj_class
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def obj_class(name)
|
26
|
-
name = name.to_s
|
27
|
-
if !@obj_classes.fetch(name, nil).nil?
|
28
|
-
# puts "EagerLoader: I've already loaded it: #{name}"
|
29
|
-
@obj_classes[name]
|
30
|
-
else
|
31
|
-
# puts "EagerLoader: NO HAVE: #{name}"
|
32
|
-
@obj_classes[name] ||= RailsConnector::ObjClass.find_by_obj_class_name(name)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def forget_obj_class(name)
|
37
|
-
@obj_classes.delete(name.to_s)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|