infopark_reactor 1.10.0.beta → 1.11.0.beta2
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/abstract_model.rb +7 -0
- data/app/models/rails_connector/abstract_obj.rb +31 -0
- data/app/models/rails_connector/attribute.rb +94 -0
- data/app/models/rails_connector/blob_mapping.rb +12 -0
- data/app/models/rails_connector/channel.rb +41 -0
- data/app/models/rails_connector/content.rb +12 -0
- data/app/models/rails_connector/meta/eager_loader.rb +41 -0
- data/app/models/rails_connector/obj_class.rb +143 -0
- data/app/models/rails_connector/object_with_meta_data.rb +18 -0
- data/infopark_reactor.gemspec +4 -4
- data/lib/generators/cm/migration/USAGE +8 -0
- data/lib/generators/cm/migration/migration_generator.rb +16 -0
- data/lib/generators/cm/migration/templates/template.rb +8 -0
- data/lib/infopark_reactor.rb +35 -1
- data/lib/reactor/attributes.rb +2 -4
- data/lib/reactor/cm/attribute.rb +91 -0
- data/lib/reactor/cm/bridge.rb +50 -0
- data/lib/reactor/cm/channel.rb +18 -0
- data/lib/reactor/cm/editorial_group.rb +23 -0
- data/lib/reactor/cm/group.rb +241 -0
- data/lib/reactor/cm/language.rb +57 -0
- data/lib/reactor/cm/link.rb +136 -0
- data/lib/reactor/cm/live_group.rb +23 -0
- data/lib/reactor/cm/log_entry.rb +64 -0
- data/lib/reactor/cm/missing_credentials.rb +8 -0
- data/lib/reactor/cm/multi_xml_request.rb +102 -0
- data/lib/reactor/cm/obj.rb +544 -0
- data/lib/reactor/cm/obj_class.rb +187 -0
- data/lib/reactor/cm/object_base.rb +165 -0
- data/lib/reactor/cm/permissions.rb +44 -0
- data/lib/reactor/cm/user.rb +139 -0
- data/lib/reactor/cm/workflow.rb +41 -0
- data/lib/reactor/cm/xml_attribute.rb +36 -0
- data/lib/reactor/cm/xml_markup.rb +86 -0
- data/lib/reactor/cm/xml_multi_request_error.rb +10 -0
- data/lib/reactor/cm/xml_request.rb +83 -0
- data/lib/reactor/cm/xml_request_error.rb +11 -0
- data/lib/reactor/cm/xml_response.rb +43 -0
- data/lib/reactor/cm/xml_single_request_error.rb +21 -0
- data/lib/reactor/configuration.rb +8 -0
- data/lib/{engine.rb → reactor/engine.rb} +16 -1
- data/lib/reactor/legacy.rb +3 -3
- data/lib/reactor/link/temporary_link.rb +8 -4
- data/lib/reactor/migration.rb +87 -0
- data/lib/reactor/permission.rb +2 -2
- data/lib/reactor/persistence.rb +14 -12
- data/lib/reactor/plans/common_attribute.rb +33 -0
- data/lib/reactor/plans/common_channel.rb +32 -0
- data/lib/reactor/plans/common_group.rb +45 -0
- data/lib/reactor/plans/common_obj_class.rb +70 -0
- data/lib/reactor/plans/create_attribute.rb +33 -0
- data/lib/reactor/plans/create_channel.rb +24 -0
- data/lib/reactor/plans/create_group.rb +35 -0
- data/lib/reactor/plans/create_obj.rb +49 -0
- data/lib/reactor/plans/create_obj_class.rb +29 -0
- data/lib/reactor/plans/delete_attribute.rb +24 -0
- data/lib/reactor/plans/delete_channel.rb +22 -0
- data/lib/reactor/plans/delete_group.rb +29 -0
- data/lib/reactor/plans/delete_obj.rb +23 -0
- data/lib/reactor/plans/delete_obj_class.rb +23 -0
- data/lib/reactor/plans/prepared.rb +16 -0
- data/lib/reactor/plans/rename_group.rb +33 -0
- data/lib/reactor/plans/rename_obj_class.rb +25 -0
- data/lib/reactor/plans/update_attribute.rb +24 -0
- data/lib/reactor/plans/update_group.rb +31 -0
- data/lib/reactor/plans/update_obj.rb +31 -0
- data/lib/reactor/plans/update_obj_class.rb +27 -0
- data/lib/reactor/rails_connector_meta.rb +144 -0
- data/lib/reactor/tools/migrator.rb +136 -0
- data/lib/reactor/tools/response_handler/base.rb +23 -0
- data/lib/reactor/tools/response_handler/string.rb +20 -0
- data/lib/reactor/tools/response_handler/xml_attribute.rb +53 -0
- data/lib/reactor/tools/smart_xml_logger.rb +70 -0
- data/lib/reactor/tools/sower.rb +90 -0
- data/lib/reactor/tools/uploader.rb +134 -0
- data/lib/reactor/tools/versioner.rb +121 -0
- data/lib/reactor/tools/workflow_generator.rb +1 -1
- data/lib/reactor/tools/xml_attributes.rb +71 -0
- data/lib/reactor/version.rb +1 -1
- data/lib/tasks/cm_migrate.rake +8 -0
- data/lib/tasks/cm_seeds.rake +41 -0
- metadata +82 -13
- data/README.md +0 -186
@@ -0,0 +1,187 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'reactor/cm/xml_request'
|
3
|
+
require 'reactor/cm/xml_response'
|
4
|
+
require 'reactor/cm/xml_request_error'
|
5
|
+
|
6
|
+
module Reactor
|
7
|
+
module Cm
|
8
|
+
class ObjClass
|
9
|
+
def self.exists?(name)
|
10
|
+
klass = ObjClass.new
|
11
|
+
begin
|
12
|
+
return klass.send(:get, name).ok?
|
13
|
+
rescue
|
14
|
+
return false
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.create(name, type)
|
19
|
+
klass = ObjClass.new
|
20
|
+
klass.send(:create,name, type)
|
21
|
+
klass
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.get(name)
|
25
|
+
klass = ObjClass.new
|
26
|
+
klass.send(:get, name)
|
27
|
+
klass
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.rename(current_name, new_name)
|
31
|
+
request = XmlRequest.prepare do |xml|
|
32
|
+
xml.tag!('objClass-where') do
|
33
|
+
xml.tag!('name', current_name)
|
34
|
+
end
|
35
|
+
xml.tag!('objClass-set') do
|
36
|
+
xml.tag!('name', new_name)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
request.execute!
|
40
|
+
end
|
41
|
+
|
42
|
+
def set(key, value, options={})
|
43
|
+
@params_options[key.to_sym] = (!options.nil? && !options.empty? && options) || {}
|
44
|
+
@params[key.to_sym] = value
|
45
|
+
end
|
46
|
+
|
47
|
+
def preset(key, value)
|
48
|
+
@preset[key] = value
|
49
|
+
end
|
50
|
+
|
51
|
+
def preset_attributes
|
52
|
+
request = XmlRequest.prepare do |xml|
|
53
|
+
xml.where_key_tag!(base_name, 'name', @name)
|
54
|
+
xml.get_key_tag!(base_name, 'presetAttributes')
|
55
|
+
end
|
56
|
+
response = request.execute!
|
57
|
+
result = response.xpath('//dictitem')
|
58
|
+
result = [result] unless result.kind_of?(Array)
|
59
|
+
result.map do |dictitem|
|
60
|
+
key = dictitem.children.detect {|c| c.name == 'key'}.text
|
61
|
+
value = dictitem.children.detect {|c| c.name == 'value'}.text
|
62
|
+
{key => value}
|
63
|
+
end.inject({}, &:merge)
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
def save!
|
68
|
+
request = XmlRequest.prepare do |xml|
|
69
|
+
xml.where_key_tag!(base_name, 'name', @name)
|
70
|
+
xml.set_tag!(base_name) do
|
71
|
+
@params.each do |key, value|
|
72
|
+
if @params_options[key][:cdata]
|
73
|
+
xml.tag!(key.to_s) do
|
74
|
+
xml.cdata!(value)
|
75
|
+
end
|
76
|
+
else
|
77
|
+
xml.value_tag!(key.to_s, value)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
unless @preset.empty?
|
81
|
+
all_preset = (preset_attributes.merge(@preset))
|
82
|
+
xml.tag!('presetAttributes') do
|
83
|
+
@preset.each do |key, value|
|
84
|
+
xml.tag!('dictitem') do
|
85
|
+
xml.tag!('key') do
|
86
|
+
xml.text!(key.to_s)
|
87
|
+
end
|
88
|
+
xml.tag!('value') do
|
89
|
+
xml.text!(value.to_s)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
response = request.execute!
|
98
|
+
end
|
99
|
+
|
100
|
+
def has_attribute?(attr_name)
|
101
|
+
attributes.include? attr_name
|
102
|
+
end
|
103
|
+
|
104
|
+
def attributes
|
105
|
+
__attributes_get('attributes')
|
106
|
+
end
|
107
|
+
|
108
|
+
def attributes=(attr_arr)
|
109
|
+
__attributes_set('attributes', attr_arr)
|
110
|
+
end
|
111
|
+
|
112
|
+
def mandatory_attributes
|
113
|
+
__attributes_get('mandatoryAttributes')
|
114
|
+
end
|
115
|
+
|
116
|
+
def mandatory_attributes=(attr_arr)
|
117
|
+
__attributes_set('mandatoryAttributes', attr_arr)
|
118
|
+
end
|
119
|
+
|
120
|
+
def delete!
|
121
|
+
request = XmlRequest.prepare do |xml|
|
122
|
+
xml.where_key_tag!(base_name, 'name', @name)
|
123
|
+
xml.tag!("#{base_name}-delete")
|
124
|
+
end
|
125
|
+
response = request.execute!
|
126
|
+
end
|
127
|
+
|
128
|
+
protected
|
129
|
+
def base_name
|
130
|
+
'objClass'
|
131
|
+
end
|
132
|
+
|
133
|
+
def initialize(name=nil)
|
134
|
+
@name = name
|
135
|
+
@params = {}
|
136
|
+
@params_options = {}
|
137
|
+
@preset = {}
|
138
|
+
end
|
139
|
+
|
140
|
+
def get(name)
|
141
|
+
request = XmlRequest.prepare do |xml|
|
142
|
+
xml.where_key_tag!(base_name, 'name', name)
|
143
|
+
xml.get_key_tag!(base_name, 'name')
|
144
|
+
end
|
145
|
+
response = request.execute!
|
146
|
+
@name = name
|
147
|
+
response
|
148
|
+
end
|
149
|
+
|
150
|
+
def create(name, type)
|
151
|
+
request = XmlRequest.prepare do |xml|
|
152
|
+
xml.create_tag!(base_name) do |xml|
|
153
|
+
xml.tag!('name') do
|
154
|
+
xml.text!(name)
|
155
|
+
end
|
156
|
+
xml.tag!('objType') do
|
157
|
+
xml.text!(type)
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
response = request.execute!
|
162
|
+
@name = name
|
163
|
+
response
|
164
|
+
end
|
165
|
+
|
166
|
+
private
|
167
|
+
def __attributes_get(field)
|
168
|
+
request = XmlRequest.prepare do |xml|
|
169
|
+
xml.where_key_tag!(base_name, 'name', @name)
|
170
|
+
xml.get_key_tag!(base_name, field)
|
171
|
+
end
|
172
|
+
response = request.execute!
|
173
|
+
items = response.xpath("//listitem/text()")
|
174
|
+
return [items.to_s] unless items.kind_of?(Array)
|
175
|
+
items.map(&:to_s)
|
176
|
+
end
|
177
|
+
|
178
|
+
def __attributes_set(field, attr_arr)
|
179
|
+
request = XmlRequest.prepare do |xml|
|
180
|
+
xml.where_key_tag!(base_name, 'name', @name)
|
181
|
+
xml.set_key_tag!(base_name, field, attr_arr)
|
182
|
+
end
|
183
|
+
response = request.execute!
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
@@ -0,0 +1,165 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'reactor/tools/xml_attributes'
|
3
|
+
|
4
|
+
module Reactor
|
5
|
+
module Cm
|
6
|
+
class ObjectBase
|
7
|
+
def self.inherited(subclass)
|
8
|
+
# dynamic binding is required, otherwise class attributes
|
9
|
+
# aren't stored in the correct class
|
10
|
+
subclass.send(:include, Reactor::XmlAttributes)
|
11
|
+
end
|
12
|
+
|
13
|
+
# Default base_name is lowercased class name (without namespaces)
|
14
|
+
def self.base_name
|
15
|
+
self.name.split('::').last.downcase
|
16
|
+
end
|
17
|
+
|
18
|
+
def base_name
|
19
|
+
self.class.base_name
|
20
|
+
end
|
21
|
+
|
22
|
+
# Sets the base name for the object. Use it when inheriting the class, for example:
|
23
|
+
# class Obj < ObjectBase
|
24
|
+
# set_base_name 'obj'
|
25
|
+
# end
|
26
|
+
def self.set_base_name(base_name_value)
|
27
|
+
# we us evaluation of a string in this case, because
|
28
|
+
# define_method cannot handle default values
|
29
|
+
self.class_eval <<-EOH
|
30
|
+
def self.base_name
|
31
|
+
'#{base_name_value}'
|
32
|
+
end
|
33
|
+
EOH
|
34
|
+
end
|
35
|
+
|
36
|
+
private_class_method :new
|
37
|
+
# Constructor of this class should never be called directly.
|
38
|
+
# Use class methods .get and .create instead (as well as helper method .exists?)
|
39
|
+
def initialize(pk_val)
|
40
|
+
primary_key_value_set(pk_val)
|
41
|
+
end
|
42
|
+
|
43
|
+
# Reloads the data from CM. Fetches all defined attributes.
|
44
|
+
def reload
|
45
|
+
request = XmlRequest.prepare do |xml|
|
46
|
+
xml.where_key_tag!(base_name, primary_key, primary_key_value)
|
47
|
+
xml.get_key_tag!(base_name, self.class.xml_attribute_names)
|
48
|
+
end
|
49
|
+
|
50
|
+
response = request.execute!
|
51
|
+
|
52
|
+
self.class.attributes.each do |attr_name, attr_def|
|
53
|
+
self.send(:"#{attr_name}=", self.class.response_handler.get(response, attr_def))
|
54
|
+
end
|
55
|
+
|
56
|
+
self
|
57
|
+
end
|
58
|
+
|
59
|
+
# Saves all settable instance attributes to the Content Manager.
|
60
|
+
def save!
|
61
|
+
request = XmlRequest.prepare do |xml|
|
62
|
+
xml.where_key_tag!(base_name, primary_key, primary_key_value)
|
63
|
+
xml.set_tag!(base_name) do
|
64
|
+
self.class.attributes(:set).each do |name, xml_attribute|
|
65
|
+
value = self.send(name)
|
66
|
+
serialize_attribute_to_xml(xml, xml_attribute, value)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
response = request.execute!
|
72
|
+
|
73
|
+
response.ok?
|
74
|
+
end
|
75
|
+
|
76
|
+
# Alias for #save!
|
77
|
+
def save ; save! ; end
|
78
|
+
|
79
|
+
# Proxy method. @see .delete!(login)
|
80
|
+
def delete!
|
81
|
+
self.class.delete!(self.primary_key_value)
|
82
|
+
end
|
83
|
+
|
84
|
+
def serialize_attribute_to_xml(xml, xml_attribute, value)
|
85
|
+
self.class.serialize_attribute_to_xml(xml, xml_attribute, value)
|
86
|
+
end
|
87
|
+
|
88
|
+
def self.serialize_attribute_to_xml(xml, xml_attribute, value)
|
89
|
+
xml.value_tag!(xml_attribute.name, value)
|
90
|
+
end
|
91
|
+
|
92
|
+
# Returns true when object with given primary key exists in CM
|
93
|
+
# Returns false otherwise
|
94
|
+
def self.exists?(pk_val)
|
95
|
+
request = XmlRequest.prepare do |xml|
|
96
|
+
xml.where_key_tag!(base_name, primary_key, pk_val)
|
97
|
+
xml.get_key_tag!(base_name, primary_key)
|
98
|
+
end
|
99
|
+
|
100
|
+
response = request.execute!
|
101
|
+
|
102
|
+
return response.ok?
|
103
|
+
|
104
|
+
rescue XmlRequestError => e
|
105
|
+
return false
|
106
|
+
end
|
107
|
+
|
108
|
+
# Returns an instance of the class for object with given primary key
|
109
|
+
# XmlRequestError will be raised when error occurs (for example
|
110
|
+
# when there is no object with given primary key)
|
111
|
+
def self.get(pk_val)
|
112
|
+
obj = new(pk_val)
|
113
|
+
obj.reload
|
114
|
+
obj
|
115
|
+
end
|
116
|
+
|
117
|
+
# Removes object with given pk from CM.
|
118
|
+
# Returns true on success, raises XmlRequestError on error
|
119
|
+
def self.delete!(pk_val)
|
120
|
+
request = XmlRequest.prepare do |xml|
|
121
|
+
xml.where_key_tag!(base_name, primary_key, pk_val)
|
122
|
+
xml.delete_tag!(base_name)
|
123
|
+
end
|
124
|
+
|
125
|
+
return request.execute!.ok?
|
126
|
+
end
|
127
|
+
# Alias for #delete!
|
128
|
+
def delete ; delete! ; end
|
129
|
+
|
130
|
+
class << self
|
131
|
+
# This method should never be called directly. It should always be overriden!
|
132
|
+
# pk_value is the value of primary key, it should have its double in attributes hash
|
133
|
+
# attributes is a hash of attributes set on creation {:name => 'value'}
|
134
|
+
protected
|
135
|
+
def create(pk_value, attributes)
|
136
|
+
request = XmlRequest.prepare do |xml|
|
137
|
+
xml.create_tag!(base_name) do
|
138
|
+
attributes.each do |attr_name, attr_value|
|
139
|
+
#serialize_attribute_to_xml(xml, xml_attribute, value)
|
140
|
+
xml.value_tag!(attr_name, attr_value)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
response = request.execute!
|
146
|
+
|
147
|
+
return get(pk_value)
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
protected
|
152
|
+
def primary_key
|
153
|
+
self.class.primary_key
|
154
|
+
end
|
155
|
+
|
156
|
+
def primary_key_value
|
157
|
+
instance_variable_get("@#{self.primary_key}")
|
158
|
+
end
|
159
|
+
|
160
|
+
def primary_key_value_set(value)
|
161
|
+
instance_variable_set("@#{self.primary_key}", value)
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Reactor
|
2
|
+
module Cm
|
3
|
+
module Permissions
|
4
|
+
def self.included(base)
|
5
|
+
base.instance_eval do
|
6
|
+
attribute :global_permissions, :name => :globalPermissions, :type => :list
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
# Returns true, if a global permission with the given +name+ exists, false otherwise.
|
11
|
+
def global_permission?(name)
|
12
|
+
self.global_permissions.include?(name.to_s)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Add the given +permissions+ to the current set of group permissions.
|
16
|
+
def grant_global_permissions!(permissions)
|
17
|
+
permissions = permissions.kind_of?(Array) ? permissions : [permissions]
|
18
|
+
permissions = self.global_permissions | permissions
|
19
|
+
|
20
|
+
set_global_permissions!(permissions)
|
21
|
+
end
|
22
|
+
|
23
|
+
# Take away the given +permissions+ from the current set of group permissions.
|
24
|
+
def revoke_global_permissions!(permissions)
|
25
|
+
permissions = permissions.kind_of?(Array) ? permissions : [permissions]
|
26
|
+
permissions = self.global_permissions - permissions
|
27
|
+
|
28
|
+
set_global_permissions(permissions)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Set the group permissions to the given +permissions+.
|
32
|
+
def set_global_permissions!(permissions)
|
33
|
+
request = XmlRequest.prepare do |xml|
|
34
|
+
xml.where_key_tag!(base_name, self.class.primary_key, self.name)
|
35
|
+
xml.set_key_tag!(base_name, self.class.xml_attribute(:global_permissions).name, permissions)
|
36
|
+
end
|
37
|
+
|
38
|
+
request.execute!
|
39
|
+
|
40
|
+
self.global_permissions = permissions
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,139 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'reactor/cm/object_base'
|
3
|
+
require 'reactor/configuration'
|
4
|
+
require 'reactor/cm/language'
|
5
|
+
require 'reactor/tools/xml_attributes'
|
6
|
+
|
7
|
+
require 'reactor/cm/permissions'
|
8
|
+
|
9
|
+
module Reactor
|
10
|
+
|
11
|
+
module Cm
|
12
|
+
|
13
|
+
class User
|
14
|
+
|
15
|
+
class Internal < Reactor::Cm::ObjectBase
|
16
|
+
set_base_name 'user'
|
17
|
+
|
18
|
+
# Attribute definitions
|
19
|
+
attribute :login, :except => [:set]
|
20
|
+
attribute :super_user, :except => [:set], :name => :isSuperUser
|
21
|
+
attribute :default_group, :name => :defaultGroup
|
22
|
+
attribute :groups, :type => :list
|
23
|
+
attribute :real_name, :name => :realName
|
24
|
+
|
25
|
+
include Permissions
|
26
|
+
|
27
|
+
def name
|
28
|
+
self.login
|
29
|
+
end
|
30
|
+
|
31
|
+
def change_password(new_password)
|
32
|
+
request = XmlRequest.prepare do |xml|
|
33
|
+
xml.where_key_tag!(base_name, primary_key, primary_key_value)
|
34
|
+
xml.set_tag!(base_name) do
|
35
|
+
xml.tag!('password', :verifyNewPassword => new_password) do
|
36
|
+
xml.text!(new_password)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
response = request.execute!
|
42
|
+
|
43
|
+
response.ok?
|
44
|
+
end
|
45
|
+
|
46
|
+
def has_password?(password)
|
47
|
+
::Reactor::Cm::User.new(self.login).has_password?(password)
|
48
|
+
end
|
49
|
+
|
50
|
+
primary_key :login
|
51
|
+
|
52
|
+
# Returns true if user is root, false otherwise
|
53
|
+
def super_user?
|
54
|
+
super_user == '1'
|
55
|
+
end
|
56
|
+
|
57
|
+
# Creates a user with given login and sets its default group
|
58
|
+
# Returns instance of the class for user with given login
|
59
|
+
def self.create(login, default_group)
|
60
|
+
super(login, {:login => login, :defaultGroup => default_group})
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
include XmlAttributes
|
66
|
+
|
67
|
+
attribute :name
|
68
|
+
attribute :groups, :type => :list
|
69
|
+
attribute :global_permissions, :name => :globalPermissions, :type => :list
|
70
|
+
|
71
|
+
|
72
|
+
primary_key 'login'
|
73
|
+
|
74
|
+
def initialize(name)
|
75
|
+
@name = name
|
76
|
+
end
|
77
|
+
|
78
|
+
def has_password?(password)
|
79
|
+
request = XmlRequest.prepare do |xml|
|
80
|
+
xml.where_key_tag!(base_name, self.class.primary_key, self.name)
|
81
|
+
xml.get_tag!(base_name) do |xml3|
|
82
|
+
xml3.tag!('hasPassword', :password => password)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
response = request.execute!
|
86
|
+
response.xpath('//hasPassword/text()') == '1'
|
87
|
+
end
|
88
|
+
|
89
|
+
def is_root?
|
90
|
+
request = XmlRequest.prepare do |xml|
|
91
|
+
xml.where_key_tag!(base_name, self.class.primary_key, self.name)
|
92
|
+
xml.get_key_tag!(base_name, 'isSuperUser')
|
93
|
+
end
|
94
|
+
|
95
|
+
response = request.execute!
|
96
|
+
|
97
|
+
response.xpath('//isSuperUser/text()') == '1'
|
98
|
+
end
|
99
|
+
|
100
|
+
def language
|
101
|
+
Reactor::Cm::Language.get(self.name)
|
102
|
+
end
|
103
|
+
|
104
|
+
def global_permissions
|
105
|
+
xml_attribute = self.class.xml_attribute(:global_permissions)
|
106
|
+
|
107
|
+
request = XmlRequest.prepare do |xml|
|
108
|
+
xml.where_key_tag!(base_name, self.class.primary_key, self.name)
|
109
|
+
xml.get_key_tag!(base_name, xml_attribute.name)
|
110
|
+
end
|
111
|
+
|
112
|
+
response = request.execute!
|
113
|
+
|
114
|
+
self.class.response_handler.get(response, xml_attribute)
|
115
|
+
end
|
116
|
+
|
117
|
+
def groups
|
118
|
+
xml_attribute = self.class.xml_attribute(:groups)
|
119
|
+
|
120
|
+
request = XmlRequest.prepare do |xml|
|
121
|
+
xml.where_key_tag!(base_name, self.class.primary_key, self.name)
|
122
|
+
xml.get_key_tag!(base_name, xml_attribute.name)
|
123
|
+
end
|
124
|
+
|
125
|
+
response = request.execute!
|
126
|
+
|
127
|
+
self.class.response_handler.get(response, xml_attribute)
|
128
|
+
end
|
129
|
+
|
130
|
+
protected
|
131
|
+
def base_name
|
132
|
+
'userProxy'
|
133
|
+
end
|
134
|
+
|
135
|
+
end
|
136
|
+
|
137
|
+
end
|
138
|
+
|
139
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'reactor/cm/object_base'
|
3
|
+
|
4
|
+
module Reactor
|
5
|
+
module Cm
|
6
|
+
class Workflow < ObjectBase
|
7
|
+
# Attribute definitions
|
8
|
+
attribute :name, :except => [:set]
|
9
|
+
attribute :title
|
10
|
+
attribute :is_enabled, :name => :isEnabled
|
11
|
+
attribute :edit_groups, :name => :editGroups, :type => :list
|
12
|
+
attribute :mutiple_signatures, :name => :allowsMultipleSignatures
|
13
|
+
# This attribute should be used as follows:
|
14
|
+
# workflow.signatures = [{:attribute => 'mySigAttr', :group => 'myGroup'},{:attribute => 'mySigAttr', :group => 'myOtherGroup'}]
|
15
|
+
attribute :signatures, :name => :signatureDefs, :type => :signaturelist
|
16
|
+
|
17
|
+
primary_key :name
|
18
|
+
|
19
|
+
# Creates a workflow with given name. A list of edit groups
|
20
|
+
# may also be specified - otherwise it defaults to empty list
|
21
|
+
def self.create(name, edit_groups = [])
|
22
|
+
super(name, {:name => name, :editGroups => edit_groups})
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.serialize_attribute_to_xml(xml, xml_attribute, value)
|
26
|
+
if xml_attribute.name.to_sym == :signatureDefs
|
27
|
+
xml.tag!('signatureDefs') do
|
28
|
+
(value || []).each do |hash|
|
29
|
+
xml.tag!('listitem') do
|
30
|
+
xml.tag!('listitem', hash[:attribute])
|
31
|
+
xml.tag!('listitem', hash[:group])
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
else
|
36
|
+
super(xml, xml_attribute, value)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module Reactor
|
3
|
+
|
4
|
+
module Cm
|
5
|
+
|
6
|
+
class XmlAttribute
|
7
|
+
|
8
|
+
AVAILABLE_SCOPES = [:get, :set, :create]
|
9
|
+
|
10
|
+
attr_accessor :name
|
11
|
+
attr_accessor :type
|
12
|
+
attr_accessor :scopes
|
13
|
+
|
14
|
+
def initialize(name, type, options)
|
15
|
+
@name = name
|
16
|
+
@type = type.presence || :string
|
17
|
+
|
18
|
+
@scopes =
|
19
|
+
if options[:except].present?
|
20
|
+
AVAILABLE_SCOPES - options[:except]
|
21
|
+
elsif options[:only].present?
|
22
|
+
options[:only]
|
23
|
+
else
|
24
|
+
AVAILABLE_SCOPES
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def scope?(name)
|
29
|
+
self.scopes.include?(name)
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'builder'
|
3
|
+
|
4
|
+
module Reactor
|
5
|
+
module Cm
|
6
|
+
class XmlMarkup < Builder::XmlMarkup
|
7
|
+
|
8
|
+
def where_key_tag!(base_name, key, value)
|
9
|
+
where_tag!(base_name) do |xml|
|
10
|
+
xml.tag!(key.to_s) do
|
11
|
+
xml.text!(value.to_s)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def where_tag!(base_name)
|
17
|
+
tag!("#{base_name}-where") do |xml|
|
18
|
+
yield xml
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def create_tag!(base_name)
|
23
|
+
tag!("#{base_name}-create") do |xml|
|
24
|
+
yield xml
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def delete_tag!(base_name)
|
29
|
+
tag!("#{base_name}-delete")
|
30
|
+
end
|
31
|
+
|
32
|
+
def get_key_tag!(base_name, key)
|
33
|
+
get_tag!(base_name) do |xml|
|
34
|
+
if key.kind_of?(::Array)
|
35
|
+
key.each {|k| xml.tag!(k.to_s) }
|
36
|
+
else
|
37
|
+
xml.tag!(key.to_s) ; end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def get_tag!(base_name)
|
42
|
+
tag!("#{base_name}-get") do |xml|
|
43
|
+
yield xml
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def set_key_tag!(base_name, key, value, options = {})
|
48
|
+
set_tag!(base_name) do
|
49
|
+
value_tag!(key, value, options)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def set_tag!(base_name)
|
54
|
+
tag!("#{base_name}-set") do |xml|
|
55
|
+
yield xml
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def value_tag!(key, value, options = {})
|
60
|
+
if value.kind_of? ::Array then array_value_tag!(key, value, options)
|
61
|
+
elsif value.kind_of? ::Hash then hash_value_tag!(key, value)
|
62
|
+
else tag!(key.to_s) { text!(value.to_s) }
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def array_value_tag!(name, values, options = {})
|
67
|
+
tag!(name.to_s, options) do
|
68
|
+
values.each do |value|
|
69
|
+
tag!('listitem') do
|
70
|
+
text!(value.to_s)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def hash_value_tag!(name, hash)
|
77
|
+
hash.each do |value, attr_hash|
|
78
|
+
tag!(name.to_s, attr_hash) do
|
79
|
+
text!(value.to_s)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|