infopark_reactor 1.10.0.beta → 1.11.0.beta2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|