bonita 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []