bonita 0.1.0

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 (47) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +5 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +50 -0
  9. data/Rakefile +6 -0
  10. data/VERSION +1 -0
  11. data/bin/console +14 -0
  12. data/bin/setup +8 -0
  13. data/bonita.gemspec +41 -0
  14. data/lib/bonita.rb +52 -0
  15. data/lib/bonita/client.rb +105 -0
  16. data/lib/bonita/error.rb +25 -0
  17. data/lib/bonita/error_handler.rb +20 -0
  18. data/lib/bonita/mappings/bpm/process_mapping.rb +31 -0
  19. data/lib/bonita/mappings/customuserinfo/definition_mapping.rb +23 -0
  20. data/lib/bonita/mappings/customuserinfo/user_mapping.rb +18 -0
  21. data/lib/bonita/mappings/customuserinfo/value_mapping.rb +16 -0
  22. data/lib/bonita/mappings/error_mapping.rb +18 -0
  23. data/lib/bonita/mappings/identity/group_mapping.rb +39 -0
  24. data/lib/bonita/mappings/identity/membership_mapping.rb +26 -0
  25. data/lib/bonita/mappings/identity/role_mapping.rb +30 -0
  26. data/lib/bonita/mappings/identity/user_mapping.rb +53 -0
  27. data/lib/bonita/middleware/csrf.rb +19 -0
  28. data/lib/bonita/models/base_model.rb +29 -0
  29. data/lib/bonita/models/bpm/process.rb +19 -0
  30. data/lib/bonita/models/customuserinfo/definition.rb +10 -0
  31. data/lib/bonita/models/customuserinfo/user.rb +10 -0
  32. data/lib/bonita/models/customuserinfo/value.rb +8 -0
  33. data/lib/bonita/models/identity/group.rb +18 -0
  34. data/lib/bonita/models/identity/membership.rb +12 -0
  35. data/lib/bonita/models/identity/role.rb +15 -0
  36. data/lib/bonita/models/identity/user.rb +23 -0
  37. data/lib/bonita/resources/bpm/process_resource.rb +38 -0
  38. data/lib/bonita/resources/customuserinfo/definition_resource.rb +31 -0
  39. data/lib/bonita/resources/customuserinfo/user_resource.rb +18 -0
  40. data/lib/bonita/resources/customuserinfo/value_resource.rb +18 -0
  41. data/lib/bonita/resources/identity/group_resource.rb +43 -0
  42. data/lib/bonita/resources/identity/membership_resource.rb +31 -0
  43. data/lib/bonita/resources/identity/role_resource.rb +44 -0
  44. data/lib/bonita/resources/identity/user_resource.rb +58 -0
  45. data/lib/bonita/utils.rb +93 -0
  46. data/lib/bonita/version.rb +6 -0
  47. metadata +194 -0
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+ module Bonita
3
+ module Bpm
4
+ # API reference : http://documentation.bonitasoft.com/?page=bpm-api#toc27
5
+ class ProcessResource < ResourceKit::Resource
6
+ include ErrorHandler
7
+
8
+ resources do
9
+ action :instantiate do
10
+ path 'bonita/API/bpm/process/:processId/instantiation'
11
+ verb :post
12
+ body { |object| object.to_json }
13
+ handler(200) { |response| JSON.parse response.body }
14
+ end
15
+
16
+ action :search do
17
+ query_keys :s, :f, :o, :d, :c
18
+ path 'bonita/API/bpm/process'
19
+ verb :get
20
+ handler(200) { |response| ProcessMapping.extract_collection(response.body, :read) }
21
+ end
22
+
23
+ action :find do
24
+ path 'bonita/API/bpm/process/:processId'
25
+ verb :get
26
+ handler(200) { |response| ProcessMapping.extract_single(response.body, :read) }
27
+ end
28
+
29
+ action :update do
30
+ path 'bonita/API/bpm/process/:processId'
31
+ verb :put
32
+ body { |object| Bonita::Utils::UpdateHandler.new(object, ProcessMapping).call }
33
+ handler(200) { |response| ProcessMapping.extract_single(response.body, :read) }
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+ module Bonita
3
+ module Customuserinfo
4
+ # API reference : http://documentation.bonitasoft.com/?page=bpm-api#toc27
5
+ class DefinitionResource < ResourceKit::Resource
6
+ include ErrorHandler
7
+
8
+ resources do
9
+ action :create do
10
+ path 'bonita/API/customuserinfo/definition'
11
+ verb :post
12
+ body { |object| DefinitionMapping.safe_representation_for(:create, object) }
13
+ handler(200) { |response| DefinitionMapping.extract_single(response.body, :read) }
14
+ end
15
+
16
+ action :delete do
17
+ path 'bonita/API/customuserinfo/definition/:definitionId'
18
+ verb :delete
19
+ handler(200) { true }
20
+ end
21
+
22
+ action :all do
23
+ query_keys :c, :p
24
+ path 'bonita/API/customuserinfo/definition'
25
+ verb :get
26
+ handler(200) { |response| DefinitionMapping.extract_collection(response.body, :read) }
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+ module Bonita
3
+ module Customuserinfo
4
+ # API reference : http://documentation.bonitasoft.com/?page=customuserinfo-api#toc11
5
+ class UserResource < ResourceKit::Resource
6
+ include ErrorHandler
7
+
8
+ resources do
9
+ action :search do
10
+ query_keys :s, :f, :o, :c
11
+ path 'bonita/API/customuserinfo/user'
12
+ verb :get
13
+ handler(200) { |response| UserMapping.extract_collection(response.body, :read) }
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+ module Bonita
3
+ module Customuserinfo
4
+ # API reference : http://documentation.bonitasoft.com/?page=customuserinfo-api#toc9
5
+ class ValueResource < ResourceKit::Resource
6
+ include ErrorHandler
7
+
8
+ resources do
9
+ action :associate_definition_to_user do
10
+ path 'bonita/API/customuserinfo/value/:userId/:definitionId'
11
+ verb :put
12
+ body { |object| object.select { |k| k == :value }.to_json }
13
+ handler(200) { true }
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+ module Bonita
3
+ module Identity
4
+ # API reference : http://documentation.bonitasoft.com/?page=bpm-api#toc8
5
+ class GroupResource < ResourceKit::Resource
6
+ include ErrorHandler
7
+
8
+ resources do
9
+ action :create do
10
+ path '/bonita/API/identity/group'
11
+ verb :post
12
+ body { |object| GroupMapping.representation_for(:create, object) }
13
+ handler(200) { |response| GroupMapping.extract_single(response.body, :read) }
14
+ end
15
+
16
+ action :read do
17
+ path 'bonita/API/identity/group/:groupId'
18
+ verb :get
19
+ handler(200) { |response| GroupMapping.extract_single(response.body, :read) }
20
+ end
21
+
22
+ action :search do
23
+ query_keys :s, :f, :o, :d, :c
24
+ path 'bonita/API/identity/group'
25
+ verb :get
26
+ handler(200) { |response|; GroupMapping.extract_collection(response.body, :read) }
27
+ end
28
+
29
+ action :update do
30
+ path 'bonita/API/identity/group/:groupId/'
31
+ verb :put
32
+ body { |object| Bonita::Utils::UpdateHandler.new(object, GroupMapping).call }
33
+ handler(200) { |response| GroupMapping.extract_single(response.body, :read) }
34
+ end
35
+ action :delete do
36
+ path 'bonita/API/identity/group/:groupId'
37
+ verb :delete
38
+ handler(200) { true }
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+ module Bonita
3
+ module Identity
4
+ # API reference : http://documentation.bonitasoft.com/?page=bpm-api#toc8
5
+ class MembershipResource < ResourceKit::Resource
6
+ include ErrorHandler
7
+
8
+ resources do
9
+ action :create do
10
+ path '/bonita/API/identity/membership'
11
+ verb :post
12
+ body { |object| MembershipMapping.safe_representation_for(:create, object) }
13
+ handler(200) { |response| MembershipMapping.extract_single(response.body, :read) }
14
+ end
15
+
16
+ action :search do
17
+ query_keys :s, :f, :o, :d, :c
18
+ path 'bonita/API/identity/membership'
19
+ verb :get
20
+ handler(200) { |response, payload| Bonita::Utils::SearchHandler.new(response, payload, self).call }
21
+ end
22
+
23
+ action :delete do
24
+ path 'bonita/API/identity/membership/:membershipId'
25
+ verb :delete
26
+ handler(200) { true }
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+ module Bonita
3
+ module Identity
4
+ # API reference : http://documentation.bonitasoft.com/?page=bpm-api#toc26
5
+ class RoleResource < ResourceKit::Resource
6
+ include ErrorHandler
7
+
8
+ resources do
9
+ action :create do
10
+ path '/bonita/API/identity/role'
11
+ verb :post
12
+ body { |object| RoleMapping.safe_representation_for(:create, object) }
13
+ handler(200) { |response| RoleMapping.extract_single(response.body, :read) }
14
+ end
15
+
16
+ action :read do
17
+ path 'bonita/API/identity/role/:roleId'
18
+ verb :get
19
+ handler(200) { |response| RoleMapping.extract_single(response.body, :read) }
20
+ end
21
+
22
+ action :search do
23
+ query_keys :s, :f, :o, :d, :c
24
+ path 'bonita/API/identity/role'
25
+ verb :get
26
+ handler(200) { |response|; RoleMapping.extract_collection(response.body, :read) }
27
+ end
28
+
29
+ action :update do
30
+ path 'bonita/API/identity/role/:roleId/'
31
+ verb :put
32
+ body { |object| Bonita::Utils::UpdateHandler.new(object, RoleMapping).call }
33
+ handler(200) { true }
34
+ end
35
+
36
+ action :delete do
37
+ path 'bonita/API/identity/role/:roleId'
38
+ verb :delete
39
+ handler(200) { true }
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+ module Bonita
3
+ module Identity
4
+ # API reference : http://documentation.bonitasoft.com/?page=bpm-api#toc36
5
+ class UserResource < ResourceKit::Resource
6
+ include ErrorHandler
7
+
8
+ resources do
9
+ action :create do
10
+ path '/bonita/API/identity/user'
11
+ verb :post
12
+ body { |object| UserMapping.safe_representation_for(:create, object) }
13
+ handler(200) { |response| UserMapping.extract_single(response.body, :read) }
14
+ end
15
+
16
+ action :read do
17
+ path 'bonita/API/identity/user/:userId'
18
+ verb :get
19
+ handler(200) { |response| UserMapping.extract_single(response.body, :read) }
20
+ end
21
+
22
+ action :search do
23
+ query_keys :s, :f, :o, :d, :c
24
+ path 'bonita/API/identity/user'
25
+ verb :get
26
+ handler(200) { |response| UserMapping.extract_collection(response.body, :read) }
27
+ end
28
+
29
+ action :update do
30
+ path 'bonita/API/identity/user/:userId'
31
+ verb :put
32
+ body { |object| Bonita::Utils::UpdateHandler.new(object, UserMapping).call }
33
+ handler(200) { |response| UserMapping.extract_single(response.body, :read) }
34
+ end
35
+
36
+ action :delete do
37
+ path 'bonita/API/identity/user/:userId'
38
+ verb :delete
39
+ handler(200) { true }
40
+ end
41
+
42
+ action :enable do
43
+ path 'bonita/API/identity/user/:userId'
44
+ verb :put
45
+ body { |_object| { enabled: 'true' }.to_json }
46
+ handler(200) { true }
47
+ end
48
+
49
+ action :disable do
50
+ path 'bonita/API/identity/user/:userId'
51
+ verb :put
52
+ body { { enabled: 'false' }.to_json }
53
+ handler(200) { true }
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,93 @@
1
+ class Hash
2
+ # Replace nil values with empty strings recursively
3
+ # @return [Hash]
4
+ def denilize(h = self)
5
+ h.each_with_object({}) do |(k, v), g|
6
+ g[k] =
7
+ if Hash === v
8
+ denilize(v)
9
+ else
10
+ v ? v : ''
11
+ end
12
+ end
13
+ end
14
+ end
15
+
16
+
17
+ module Kartograph::DSL::ClassMethods
18
+ # Implementation of Kartograph::DSL#representation_for but replace nil values in object with empty strings
19
+ def safe_representation_for(scope, object, dumper = Kartograph.default_dumper)
20
+ dumper.dump(hash_for(scope, object).denilize)
21
+ end
22
+ end
23
+
24
+ module Bonita
25
+ module Utils
26
+ module MappingResolver
27
+ private
28
+
29
+ def child_mapper(deploy)
30
+ Object.const_get "#{namespace}::#{strip_prefix_and_suffix(deploy).capitalize}Mapping"
31
+ end
32
+
33
+ def mapper
34
+ Object.const_get @resource.class.name.gsub('Resource', 'Mapping')
35
+ end
36
+
37
+ def namespace
38
+ @resource.class.name.gsub(/::\w+Resource/, '')
39
+ end
40
+
41
+ # Given the following input strings :
42
+ # foo_id
43
+ # fooId
44
+ # parent_foo_id
45
+ # This method will always return 'foo'
46
+ def strip_prefix_and_suffix(deploy)
47
+ deploy.gsub(/Id|_id/, '').split('_')[-1]
48
+ end
49
+ end
50
+
51
+ class UpdateHandler
52
+ include MappingResolver
53
+
54
+ def initialize(object, mapper)
55
+ @object = object
56
+ @mapper = mapper
57
+ end
58
+
59
+ def call
60
+ if @object.is_a? Hash
61
+ JSON.dump @object
62
+ else
63
+ @mapper.representation_for(:update, @object)
64
+ end
65
+ end
66
+ end
67
+
68
+ class SearchHandler
69
+ include MappingResolver
70
+
71
+ def initialize(response, payload, resource)
72
+ @response = response
73
+ @payload = payload
74
+ @resource = resource
75
+ end
76
+
77
+ def call
78
+ extract.map do |obj|
79
+ @payload[:d].each do |deploy|
80
+ obj.send("#{deploy}=", child_mapper(deploy).extract_single(obj.send(deploy).to_json, :read))
81
+ end
82
+ obj
83
+ end
84
+ end
85
+
86
+ private
87
+
88
+ def extract
89
+ @extract ||= mapper.extract_collection(@response.body, :read)
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+ module Bonita
3
+ VERSION = File.read(
4
+ File.expand_path(File.join('..', '..', 'VERSION'), File.dirname(__FILE__))
5
+ ).strip
6
+ end
metadata ADDED
@@ -0,0 +1,194 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bonita
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Pierre Deville
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2017-04-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.0'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '5.1'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">"
28
+ - !ruby/object:Gem::Version
29
+ version: '3.0'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '5.1'
33
+ - !ruby/object:Gem::Dependency
34
+ name: resource_kit
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: 0.1.6
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: 0.1.6
47
+ - !ruby/object:Gem::Dependency
48
+ name: kartograph
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: 0.2.4
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: 0.2.4
61
+ - !ruby/object:Gem::Dependency
62
+ name: faraday-cookie_jar
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: 0.0.6
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: 0.0.6
75
+ - !ruby/object:Gem::Dependency
76
+ name: bundler
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '1.14'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '1.14'
89
+ - !ruby/object:Gem::Dependency
90
+ name: rake
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '10.0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '10.0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: rspec
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '3.0'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '3.0'
117
+ description: Unofficial REST API client for Bonita BPM
118
+ email:
119
+ - pierre.deville@effilab.com
120
+ executables: []
121
+ extensions: []
122
+ extra_rdoc_files: []
123
+ files:
124
+ - ".gitignore"
125
+ - ".rspec"
126
+ - ".travis.yml"
127
+ - CODE_OF_CONDUCT.md
128
+ - Gemfile
129
+ - LICENSE.txt
130
+ - README.md
131
+ - Rakefile
132
+ - VERSION
133
+ - bin/console
134
+ - bin/setup
135
+ - bonita.gemspec
136
+ - lib/bonita.rb
137
+ - lib/bonita/client.rb
138
+ - lib/bonita/error.rb
139
+ - lib/bonita/error_handler.rb
140
+ - lib/bonita/mappings/bpm/process_mapping.rb
141
+ - lib/bonita/mappings/customuserinfo/definition_mapping.rb
142
+ - lib/bonita/mappings/customuserinfo/user_mapping.rb
143
+ - lib/bonita/mappings/customuserinfo/value_mapping.rb
144
+ - lib/bonita/mappings/error_mapping.rb
145
+ - lib/bonita/mappings/identity/group_mapping.rb
146
+ - lib/bonita/mappings/identity/membership_mapping.rb
147
+ - lib/bonita/mappings/identity/role_mapping.rb
148
+ - lib/bonita/mappings/identity/user_mapping.rb
149
+ - lib/bonita/middleware/csrf.rb
150
+ - lib/bonita/models/base_model.rb
151
+ - lib/bonita/models/bpm/process.rb
152
+ - lib/bonita/models/customuserinfo/definition.rb
153
+ - lib/bonita/models/customuserinfo/user.rb
154
+ - lib/bonita/models/customuserinfo/value.rb
155
+ - lib/bonita/models/identity/group.rb
156
+ - lib/bonita/models/identity/membership.rb
157
+ - lib/bonita/models/identity/role.rb
158
+ - lib/bonita/models/identity/user.rb
159
+ - lib/bonita/resources/bpm/process_resource.rb
160
+ - lib/bonita/resources/customuserinfo/definition_resource.rb
161
+ - lib/bonita/resources/customuserinfo/user_resource.rb
162
+ - lib/bonita/resources/customuserinfo/value_resource.rb
163
+ - lib/bonita/resources/identity/group_resource.rb
164
+ - lib/bonita/resources/identity/membership_resource.rb
165
+ - lib/bonita/resources/identity/role_resource.rb
166
+ - lib/bonita/resources/identity/user_resource.rb
167
+ - lib/bonita/utils.rb
168
+ - lib/bonita/version.rb
169
+ homepage: http://example.com
170
+ licenses:
171
+ - MIT
172
+ metadata:
173
+ allowed_push_host: https://rubygems.org
174
+ post_install_message:
175
+ rdoc_options: []
176
+ require_paths:
177
+ - lib
178
+ required_ruby_version: !ruby/object:Gem::Requirement
179
+ requirements:
180
+ - - ">="
181
+ - !ruby/object:Gem::Version
182
+ version: '0'
183
+ required_rubygems_version: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ requirements: []
189
+ rubyforge_project:
190
+ rubygems_version: 2.6.8
191
+ signing_key:
192
+ specification_version: 4
193
+ summary: Unofficial REST API client for Bonita BPM
194
+ test_files: []