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