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.
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