atomsphere 0.1.6 → 0.1.7
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.
- checksums.yaml +4 -4
- data/README.md +9 -0
- data/atomsphere.gemspec +1 -1
- data/lib/atomsphere.rb +1 -1
- data/lib/atomsphere/api/client.rb +35 -1
- data/lib/atomsphere/api/response.rb +3 -2
- data/lib/atomsphere/query.rb +18 -12
- data/lib/atomsphere/query/grouping_expression.rb +2 -1
- data/lib/atomsphere/query/simple_expression.rb +11 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4bb21b9a66774a9fee3486b96ce9d8f52e7ed633013c828f391bc9cafa56c4d3
|
4
|
+
data.tar.gz: 7f849cfd2473ada55b2cec071583d114658a8b403295dc9c9a26423d077f5351
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 632193c167af5174b7c050714c9bb05c844ae863eab4a6330daba8c9a372603e2414e77ce0acd61fe41536ba1032398af536af1ae41963326af0bc95c9881824
|
7
|
+
data.tar.gz: 3f4c067af23f0b447dd9692eff618a6107f901025e2ce253db119d744febe119729046d03296df660a02a5b429f0447fd719986362b6ce7b619e57f251f55ffa
|
data/README.md
CHANGED
@@ -8,6 +8,15 @@ Implements authentication (including OTP), querying, and some actions. See *Usag
|
|
8
8
|
|
9
9
|
## Usage
|
10
10
|
|
11
|
+
Install the `atomsphere` gem from rubygems or add it to your `Gemfile`:
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
source 'https://rubygems.org'
|
15
|
+
gem 'atomsphere'
|
16
|
+
```
|
17
|
+
|
18
|
+
and require `atomsphere`:
|
19
|
+
|
11
20
|
```ruby
|
12
21
|
require 'atomsphere'
|
13
22
|
```
|
data/atomsphere.gemspec
CHANGED
data/lib/atomsphere.rb
CHANGED
@@ -83,7 +83,41 @@ module Atomsphere
|
|
83
83
|
|
84
84
|
def http_request request
|
85
85
|
request['X-Boomi-OTP'] = generate_otp if config.otp_secret
|
86
|
-
|
86
|
+
|
87
|
+
begin
|
88
|
+
response = Response.new(request, http.request(request))
|
89
|
+
rescue => e
|
90
|
+
raise ApiError.new(request, response)
|
91
|
+
else
|
92
|
+
raise ApiError.new(
|
93
|
+
request,
|
94
|
+
response,
|
95
|
+
e,
|
96
|
+
'response code was nil'
|
97
|
+
) if response.code.nil?
|
98
|
+
|
99
|
+
raise ApiError.new(
|
100
|
+
request,
|
101
|
+
response,
|
102
|
+
e,
|
103
|
+
"API responded with error #{response.code}: #{response.message}"
|
104
|
+
) if response.code >= 400
|
105
|
+
end
|
106
|
+
|
107
|
+
response
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
class ApiError < StandardError
|
112
|
+
attr_reader :request, :response, :original, :message
|
113
|
+
|
114
|
+
def initialize(request, response, original=nil, message=nil)
|
115
|
+
@request = request
|
116
|
+
@response = response
|
117
|
+
@original = original
|
118
|
+
@message = message
|
119
|
+
|
120
|
+
super(message)
|
87
121
|
end
|
88
122
|
end
|
89
123
|
end
|
@@ -3,12 +3,13 @@ require 'json'
|
|
3
3
|
module Atomsphere
|
4
4
|
module Api
|
5
5
|
class Response
|
6
|
-
attr_reader :request, :code, :response
|
6
|
+
attr_reader :request, :code, :response, :message
|
7
7
|
|
8
8
|
def initialize(request, response)
|
9
9
|
@request = request
|
10
10
|
@response = response
|
11
|
-
@code = response.
|
11
|
+
@code = response.nil? ? nil : response.code.to_i
|
12
|
+
@message = response.nil? ? nil : response.message
|
12
13
|
end
|
13
14
|
|
14
15
|
def to_hash
|
data/lib/atomsphere/query.rb
CHANGED
@@ -5,26 +5,24 @@ module Atomsphere
|
|
5
5
|
|
6
6
|
def initialize object_type=nil
|
7
7
|
@object_type ||= object_type
|
8
|
-
@page =
|
8
|
+
@page = 0
|
9
9
|
@result_pages = []
|
10
10
|
@filter = GroupingExpression.new
|
11
11
|
end
|
12
12
|
|
13
13
|
def validate!
|
14
|
-
|
14
|
+
private_methods.select{ |m| m =~ /^validate_[a-z0-9_]+\!$/ }.each{ |v| send(v) }
|
15
15
|
filter.validate!
|
16
|
+
|
16
17
|
true
|
17
18
|
end
|
18
19
|
|
19
20
|
def run
|
20
|
-
|
21
|
-
@page = 0
|
22
|
-
|
23
|
-
result_pages[0]
|
21
|
+
next_page
|
24
22
|
end
|
25
23
|
|
26
24
|
def results
|
27
|
-
result_pages.map(&:to_hash).map{ |h| h['result'] }.flatten(1)
|
25
|
+
result_pages.map(&:to_hash).map{ |h| h['result'] }.map(&:compact).flatten(1)
|
28
26
|
end
|
29
27
|
|
30
28
|
def all_results
|
@@ -33,21 +31,25 @@ module Atomsphere
|
|
33
31
|
end
|
34
32
|
|
35
33
|
def last_page?
|
36
|
-
!page.
|
34
|
+
!page.eql?(0) && query_token.nil?
|
37
35
|
end
|
38
36
|
|
39
37
|
def next_page
|
40
38
|
return false if last_page?
|
41
|
-
return run if page.nil?
|
42
39
|
|
43
40
|
begin
|
44
|
-
|
41
|
+
response = if query_token.nil?
|
42
|
+
@page = 1
|
43
|
+
api_client.post([object_type, :query], to_hash)
|
44
|
+
else
|
45
|
+
api_client.post([object_type, :queryMore], query_token)
|
46
|
+
end
|
45
47
|
rescue => e
|
46
48
|
@page -= 1
|
47
49
|
raise e
|
48
50
|
end
|
49
51
|
|
50
|
-
result_pages[page]
|
52
|
+
result_pages[page-1] = response
|
51
53
|
end
|
52
54
|
|
53
55
|
def to_hash
|
@@ -76,7 +78,11 @@ module Atomsphere
|
|
76
78
|
end
|
77
79
|
|
78
80
|
def query_token
|
79
|
-
|
81
|
+
if result_pages.last.nil? || !result_pages.last.to_hash.keys.include?('queryToken')
|
82
|
+
nil
|
83
|
+
else
|
84
|
+
result_pages.last.to_hash['queryToken']
|
85
|
+
end
|
80
86
|
end
|
81
87
|
end
|
82
88
|
|
@@ -18,8 +18,9 @@ module Atomsphere
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def validate!
|
21
|
-
|
21
|
+
private_methods.select{ |m| m =~ /^validate_[a-z0-9_]+\!$/ }.each{ |v| "#{v}"; send(v) }
|
22
22
|
@nested_expression.each(&:validate!)
|
23
|
+
|
23
24
|
true
|
24
25
|
end
|
25
26
|
|
@@ -27,12 +27,12 @@ module Atomsphere
|
|
27
27
|
}.merge(params)
|
28
28
|
|
29
29
|
%w(operator property argument).each do |v|
|
30
|
-
|
30
|
+
instance_variable_set :"@#{v}", params[v.to_sym]
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
34
|
def validate!
|
35
|
-
|
35
|
+
private_methods.select{ |m| m =~ /^validate_[a-z0-9_]+\!$/ }.each{ |v| send(v) }
|
36
36
|
true
|
37
37
|
end
|
38
38
|
|
@@ -50,6 +50,14 @@ module Atomsphere
|
|
50
50
|
to_hash.to_json
|
51
51
|
end
|
52
52
|
|
53
|
+
def operator= arg
|
54
|
+
unless OPERATORS.keys.include? arg.to_sym
|
55
|
+
raise ArgumentError, "operator must be one of: #{OPERATORS.keys.join(', ')}"
|
56
|
+
end
|
57
|
+
|
58
|
+
instance_variable_set :@operator, arg.to_sym
|
59
|
+
end
|
60
|
+
|
53
61
|
private
|
54
62
|
def validate_operator!
|
55
63
|
unless OPERATORS.include? operator
|
@@ -62,7 +70,7 @@ module Atomsphere
|
|
62
70
|
end
|
63
71
|
|
64
72
|
def validate_argument!
|
65
|
-
unless argument.
|
73
|
+
unless [*argument].size.eql?(OPERATORS[operator])
|
66
74
|
raise ArgumentError, "'#{operator}' expects #{OPERATORS[operator]} argument(s)"
|
67
75
|
end
|
68
76
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: atomsphere
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Warren Guy
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-01-
|
11
|
+
date: 2019-01-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rotp
|