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.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/app/models/rails_connector/abstract_model.rb +7 -0
  3. data/app/models/rails_connector/abstract_obj.rb +31 -0
  4. data/app/models/rails_connector/attribute.rb +94 -0
  5. data/app/models/rails_connector/blob_mapping.rb +12 -0
  6. data/app/models/rails_connector/channel.rb +41 -0
  7. data/app/models/rails_connector/content.rb +12 -0
  8. data/app/models/rails_connector/meta/eager_loader.rb +41 -0
  9. data/app/models/rails_connector/obj_class.rb +143 -0
  10. data/app/models/rails_connector/object_with_meta_data.rb +18 -0
  11. data/infopark_reactor.gemspec +4 -4
  12. data/lib/generators/cm/migration/USAGE +8 -0
  13. data/lib/generators/cm/migration/migration_generator.rb +16 -0
  14. data/lib/generators/cm/migration/templates/template.rb +8 -0
  15. data/lib/infopark_reactor.rb +35 -1
  16. data/lib/reactor/attributes.rb +2 -4
  17. data/lib/reactor/cm/attribute.rb +91 -0
  18. data/lib/reactor/cm/bridge.rb +50 -0
  19. data/lib/reactor/cm/channel.rb +18 -0
  20. data/lib/reactor/cm/editorial_group.rb +23 -0
  21. data/lib/reactor/cm/group.rb +241 -0
  22. data/lib/reactor/cm/language.rb +57 -0
  23. data/lib/reactor/cm/link.rb +136 -0
  24. data/lib/reactor/cm/live_group.rb +23 -0
  25. data/lib/reactor/cm/log_entry.rb +64 -0
  26. data/lib/reactor/cm/missing_credentials.rb +8 -0
  27. data/lib/reactor/cm/multi_xml_request.rb +102 -0
  28. data/lib/reactor/cm/obj.rb +544 -0
  29. data/lib/reactor/cm/obj_class.rb +187 -0
  30. data/lib/reactor/cm/object_base.rb +165 -0
  31. data/lib/reactor/cm/permissions.rb +44 -0
  32. data/lib/reactor/cm/user.rb +139 -0
  33. data/lib/reactor/cm/workflow.rb +41 -0
  34. data/lib/reactor/cm/xml_attribute.rb +36 -0
  35. data/lib/reactor/cm/xml_markup.rb +86 -0
  36. data/lib/reactor/cm/xml_multi_request_error.rb +10 -0
  37. data/lib/reactor/cm/xml_request.rb +83 -0
  38. data/lib/reactor/cm/xml_request_error.rb +11 -0
  39. data/lib/reactor/cm/xml_response.rb +43 -0
  40. data/lib/reactor/cm/xml_single_request_error.rb +21 -0
  41. data/lib/reactor/configuration.rb +8 -0
  42. data/lib/{engine.rb → reactor/engine.rb} +16 -1
  43. data/lib/reactor/legacy.rb +3 -3
  44. data/lib/reactor/link/temporary_link.rb +8 -4
  45. data/lib/reactor/migration.rb +87 -0
  46. data/lib/reactor/permission.rb +2 -2
  47. data/lib/reactor/persistence.rb +14 -12
  48. data/lib/reactor/plans/common_attribute.rb +33 -0
  49. data/lib/reactor/plans/common_channel.rb +32 -0
  50. data/lib/reactor/plans/common_group.rb +45 -0
  51. data/lib/reactor/plans/common_obj_class.rb +70 -0
  52. data/lib/reactor/plans/create_attribute.rb +33 -0
  53. data/lib/reactor/plans/create_channel.rb +24 -0
  54. data/lib/reactor/plans/create_group.rb +35 -0
  55. data/lib/reactor/plans/create_obj.rb +49 -0
  56. data/lib/reactor/plans/create_obj_class.rb +29 -0
  57. data/lib/reactor/plans/delete_attribute.rb +24 -0
  58. data/lib/reactor/plans/delete_channel.rb +22 -0
  59. data/lib/reactor/plans/delete_group.rb +29 -0
  60. data/lib/reactor/plans/delete_obj.rb +23 -0
  61. data/lib/reactor/plans/delete_obj_class.rb +23 -0
  62. data/lib/reactor/plans/prepared.rb +16 -0
  63. data/lib/reactor/plans/rename_group.rb +33 -0
  64. data/lib/reactor/plans/rename_obj_class.rb +25 -0
  65. data/lib/reactor/plans/update_attribute.rb +24 -0
  66. data/lib/reactor/plans/update_group.rb +31 -0
  67. data/lib/reactor/plans/update_obj.rb +31 -0
  68. data/lib/reactor/plans/update_obj_class.rb +27 -0
  69. data/lib/reactor/rails_connector_meta.rb +144 -0
  70. data/lib/reactor/tools/migrator.rb +136 -0
  71. data/lib/reactor/tools/response_handler/base.rb +23 -0
  72. data/lib/reactor/tools/response_handler/string.rb +20 -0
  73. data/lib/reactor/tools/response_handler/xml_attribute.rb +53 -0
  74. data/lib/reactor/tools/smart_xml_logger.rb +70 -0
  75. data/lib/reactor/tools/sower.rb +90 -0
  76. data/lib/reactor/tools/uploader.rb +134 -0
  77. data/lib/reactor/tools/versioner.rb +121 -0
  78. data/lib/reactor/tools/workflow_generator.rb +1 -1
  79. data/lib/reactor/tools/xml_attributes.rb +71 -0
  80. data/lib/reactor/version.rb +1 -1
  81. data/lib/tasks/cm_migrate.rake +8 -0
  82. data/lib/tasks/cm_seeds.rake +41 -0
  83. metadata +82 -13
  84. 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
@@ -0,0 +1,10 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'reactor/cm/xml_request_error'
3
+
4
+ module Reactor
5
+ module Cm
6
+ class XmlMultiRequestError < XmlRequestError
7
+
8
+ end
9
+ end
10
+ end