atomsphere 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 25eae7b31f1b5dd9f640ec1a7942192a1fbec4c2aeffda74f9af08ce31879224
4
- data.tar.gz: d4e1d956c1abbf2e74125b24c725b0664b8be0fc57078804e2eb120f43ab822b
3
+ metadata.gz: 4bb21b9a66774a9fee3486b96ce9d8f52e7ed633013c828f391bc9cafa56c4d3
4
+ data.tar.gz: 7f849cfd2473ada55b2cec071583d114658a8b403295dc9c9a26423d077f5351
5
5
  SHA512:
6
- metadata.gz: 675f2fca40b7842b44b4abdb04993cd8af67f37095d3fcc1f039ba75f151b3166a4bfaa5fc63b94ee0b3f58d91eac332ce1bbcc3454cdc7c1a819e5a8b6459f4
7
- data.tar.gz: edfc117e3812d520b4de08efbb1eee30052f6b58bd4bb42d15ab15200516f58b06bed5c9694de61728e0a17141afe85bfd619ef6bcb24adae12bf09b62117bf6
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
  ```
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'atomsphere'
3
- s.version = '0.1.6'
3
+ s.version = '0.1.7'
4
4
  s.licenses = ['MIT']
5
5
  s.summary = "Unofficial Ruby client for the Dell Boomi Atomsphere API"
6
6
  s.authors = ["Warren Guy"]
@@ -1,5 +1,5 @@
1
1
  module Atomsphere
2
- VERSION = '0.1.6'
2
+ VERSION = '0.1.7'
3
3
  ROOT = "#{File.expand_path(__dir__)}/atomsphere"
4
4
 
5
5
  %w(configuration query api action).each{ |m| require "#{ROOT}/#{m}" }
@@ -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
- response = Response.new(request, http.request(request))
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.code if 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
@@ -5,26 +5,24 @@ module Atomsphere
5
5
 
6
6
  def initialize object_type=nil
7
7
  @object_type ||= object_type
8
- @page = nil
8
+ @page = 0
9
9
  @result_pages = []
10
10
  @filter = GroupingExpression.new
11
11
  end
12
12
 
13
13
  def validate!
14
- methods.select{ |m| m =~ /^validate_[a-z0-9_]\!$/ }.each{ |v| send(v) }
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
- @result_pages[0] ||= api_client.post [object_type, :query], to_hash
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.nil? && query_token.nil?
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
- @result_pages[@page += 1] = api_client.post [object_type, :queryMore], query_token
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
- page.nil? ? nil : result_pages.last.to_hash['queryToken']
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
- methods.select{ |m| m =~ /^validate_[a-z0-9_]\!$/ }.each{ |v| send(v) }
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
- send :"#{v}=", params[v.to_sym]
30
+ instance_variable_set :"@#{v}", params[v.to_sym]
31
31
  end
32
32
  end
33
33
 
34
34
  def validate!
35
- methods.select{ |m| m =~ /^validate_[a-z0-9_]\!$/ }.each{ |v| send(v) }
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.is_a?(Array) && argument.size.eql?(OPERATORS[operator])
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.6
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-12 00:00:00.000000000 Z
11
+ date: 2019-01-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rotp