spaceborne 0.1.12 → 0.1.13

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
  SHA1:
3
- metadata.gz: cecb429979a5bbafcdf2456c67afe00ac6a59120
4
- data.tar.gz: 0b312d718ab77fb05effac5407be2f23e3c455cb
3
+ metadata.gz: 6dcf5788db09b9481c533588b9195a5f2555c5eb
4
+ data.tar.gz: a9c53ea3c698e175a53689e1f8fac534dd29f7c7
5
5
  SHA512:
6
- metadata.gz: fa6a5f063b41054844f8569c449d29f6f1ed55f6f30351015e41f8ad7781be728a9ecd754ea43efc9c6f3c1cfd1ca4482fbe71b2277eb65dad5ffa26966fb1c1
7
- data.tar.gz: 83b22d29b9f577f88d6cb6f5d008106c3a80989930cf26224e0a76400aff70ce0690a18207f3ff937a3b0b238769a6006cd77c334be73a47140387384fbdc630
6
+ metadata.gz: 9eb5f6d3eccb530d6dcf8f3e74e60def75e9ce6cb6f3d54939a87260aa5b84ea479c65ec816d61660149389bc00bcd8a4738cfac9c1d73f627e7edcad669333c
7
+ data.tar.gz: 6df63627e5d075195d7b396e2b3c57ab7595e9a7313d987103e2378042b300d486b880cc0848a9871291c76fefc5e0e4a0d940e2bbaa3c8eff8260ee8e77273d
data/.rubocop.yml ADDED
@@ -0,0 +1,36 @@
1
+ Style/FrozenStringLiteralComment:
2
+ Enabled: false
3
+
4
+ Metrics/BlockLength:
5
+ Exclude:
6
+ - 'Rakefile'
7
+ - '**/*.rake'
8
+ - 'spec/**/*.rb'
9
+ - '*.gemspec'
10
+
11
+ Metrics/MethodLength:
12
+ Exclude:
13
+ - 'bin/*'
14
+
15
+ Metrics/ModuleLength:
16
+ Exclude:
17
+ - 'Rakefile'
18
+ - '**/*.rake'
19
+ - 'spec/**/*.rb'
20
+ - 'bin/*'
21
+
22
+ Metrics/ClassLength:
23
+ Exclude:
24
+ - 'bin/*'
25
+
26
+ Metrics/LineLength:
27
+ Exclude:
28
+ - 'spec/airborne/**/*.rb'
29
+
30
+ Style/DateTime:
31
+ Exclude:
32
+ - 'spec/airborne/**/*.rb'
33
+
34
+ Lint/RescueException:
35
+ Exclude:
36
+ - 'lib/spaceborne.rb'
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ spaceborne
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ruby-2.4.1
data/Gemfile CHANGED
@@ -5,6 +5,6 @@ gemspec
5
5
  gem 'simplecov', require: false, group: :test
6
6
 
7
7
  group :test do
8
- gem 'webmock'
9
8
  gem 'sinatra'
9
+ gem 'webmock'
10
10
  end
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
3
 
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
6
- task :default => :spec
6
+ task default: :spec
data/lib/spaceborne.rb CHANGED
@@ -1,80 +1,140 @@
1
1
  require 'airborne'
2
- require "spaceborne/version"
2
+ require 'spaceborne/version'
3
3
  require 'rest-client'
4
4
  require 'byebug'
5
5
  require 'json'
6
6
 
7
+ # module for apitesting with spaceborne
7
8
  module Spaceborne
8
- def is_json?(headers)
9
- headers.has_key?(:content_type) && headers[:content_type].include?('application/json')
9
+ def json?(headers)
10
+ headers.key?(:content_type) &&
11
+ headers[:content_type].include?('application/json')
10
12
  end
11
- def wrap_request(&block)
12
- block.call
13
+
14
+ def add_time
15
+ "TIME: #{Time.now.strftime('%d/%m/%Y %H:%M')}"
16
+ end
17
+
18
+ def add_request
19
+ if @request_body
20
+ "REQUEST: #{response.request.method.upcase} #{response.request.url}"\
21
+ " HEADERS:\n#{JSON.pretty_generate(response.request.headers)}"\
22
+ " PAYLOAD:\n#{@request_body}"
23
+ else
24
+ ''
25
+ end
26
+ end
27
+
28
+ def add_response
29
+ "RESPONSE: #{response.code}"\
30
+ " HEADERS:\n#{JSON.pretty_generate(response.headers)}"\
31
+ << response_body
32
+ end
33
+
34
+ def response_body
35
+ return '' if response.request.method.casecmp('head').zero?
36
+ str = if json?(response.headers)
37
+ " JSON_BODY\n#{JSON.pretty_generate(json_body)}"
38
+ else
39
+ " BODY\n#{response.body}"
40
+ end
41
+ str
42
+ end
43
+
44
+ def request_info(str = '')
45
+ str << add_time << add_request << add_response
46
+ str
47
+ end
48
+
49
+ def wrap_request
50
+ yield
13
51
  rescue Exception => e
14
52
  raise e unless response
15
- puts "TIME: #{Time.now.strftime("%d/%m/%Y %H:%M")}"
16
- puts "REQUEST: #{response.request.method.upcase} #{response.request.url}"
17
- puts " HEADERS:\n#{JSON::pretty_generate(response.request.headers)}"
18
- puts " PAYLOAD:\n#{@request_body}" if @request_body
19
- puts "RESPONSE: #{response.code}"
20
- puts " HEADERS:\n#{JSON::pretty_generate(response.headers)}"
21
- if response.request.method.downcase != 'head'
22
- if is_json?(response.headers)
23
- puts " JSON_BODY\n#{JSON::pretty_generate(json_body)}"
24
- else
25
- puts " BODY\n#{response.body}"
26
- end
27
- end
53
+ puts request_info
28
54
  raise e
29
55
  end
30
56
  end
31
57
 
58
+ # monkeypatch Airborne
32
59
  module Airborne
33
60
  def json_body
34
61
  @json_body ||= JSON.parse(response.body, symbolize_names: true)
35
- rescue
36
- fail InvalidJsonError, 'Api request returned invalid json'
62
+ rescue StandardError
63
+ raise InvalidJsonError, 'Api request returned invalid json'
37
64
  end
65
+
66
+ # spaceborne enhancements
38
67
  module RestClientRequester
39
- def make_request(method, url, options = {})
40
- @json_body = nil
41
- @request_body = nil
42
- if options[:headers] && options[:headers].has_key?(:use_proxy)
43
- proxy_option = options[:headers][:use_proxy]
44
- RestClient.proxy = proxy_option
68
+ def body?(method)
69
+ case method
70
+ when :post, :patch, :put
71
+ true
72
+ else
73
+ false
45
74
  end
75
+ end
76
+
77
+ def split_options(options)
78
+ local = {}
79
+ local[:nonjson_data] = options.dig(:headers, :nonjson_data)
80
+ options[:headers].delete(:nonjson_data) if local[:nonjson_data]
81
+ local[:is_hash] = options[:body].is_a?(Hash)
82
+ local[:proxy] = options.dig(:headers, :use_proxy)
83
+ local
84
+ end
85
+
86
+ def calc_headers(options, local)
46
87
  headers = base_headers.merge(options[:headers] || {})
47
- res = if method == :post || method == :patch || method == :put
48
- begin
49
- @request_body = options[:body].nil? ? '' : options[:body]
50
- if options[:body].is_a?(Hash)
51
- if headers.delete(:nonjson_data)
52
- headers.delete('Content-Type')
53
- else
54
- headers.merge!(no_restclient_headers: true)
55
- @request_body = @request_body.to_json
56
- end
57
- end
58
- RestClient.send(method, get_url(url), @request_body, headers)
59
- rescue RestClient::Exception => e
60
- e.response
61
- end
88
+ return headers unless local[:is_hash]
89
+ if options[:nonjson_data]
90
+ headers.delete('Content-Type')
62
91
  else
63
- begin
64
- RestClient.send(method, get_url(url), headers)
65
- rescue RestClient::Exception => e
66
- e.response
67
- end
92
+ headers[:no_restclient_headers] = true
93
+ end
94
+ headers
95
+ end
96
+
97
+ def handle_proxy(options, local)
98
+ return unless local[:proxy]
99
+ RestClient.proxy = local[:proxy]
100
+ options[:headers].delete(:use_proxy)
101
+ end
102
+
103
+ def calc_body(options, local)
104
+ return '' unless options[:body]
105
+ if local[:nonjson_data] || !local[:is_hash]
106
+ options[:body]
107
+ else
108
+ options[:body].to_json
109
+ end
110
+ end
111
+
112
+ def send_restclient(method, url, body, headers)
113
+ if body?(method)
114
+ RestClient.send(method, url, body, headers)
115
+ else
116
+ RestClient.send(method, url, headers)
68
117
  end
69
- res
118
+ end
119
+
120
+ def make_request(method, url, options = {})
121
+ local_options = split_options(options)
122
+ handle_proxy(options, local_options)
123
+ hdrs = calc_headers(options, local_options)
124
+ send_restclient(method, get_url(url),
125
+ calc_body(options, local_options), hdrs)
126
+ rescue RestClient::Exception => e
127
+ e.response
70
128
  end
71
129
 
72
130
  private
131
+
73
132
  def base_headers
74
133
  { content_type: :json }.merge(Airborne.configuration.headers || {})
75
134
  end
76
135
  end
77
136
 
137
+ # Extend airborne's expectations
78
138
  module RequestExpectations
79
139
  def call_with_relative_path(data, args)
80
140
  if args.length == 2
@@ -111,17 +171,14 @@ module Airborne
111
171
  end
112
172
  end
113
173
 
174
+ # extension to handle hash value checking
114
175
  module PathMatcher
115
176
  def get_by_path(path, json, &block)
116
- fail PathError, "Invalid Path, contains '..'" if /\.\./ =~ path
177
+ raise PathError, "Invalid Path, contains '..'" if /\.\./ =~ path
117
178
  type = false
118
- if path.class == Symbol
119
- parts = path.to_s.split('.')
120
- else
121
- parts = path.split('.')
122
- end
179
+ parts = path.to_s.split('.')
123
180
  parts.each_with_index do |part, index|
124
- if part == '*' || part == '?'
181
+ if %w[* ?].include?(part)
125
182
  ensure_array_or_hash(path, json)
126
183
  type = part
127
184
  if index < parts.length.pred
@@ -131,8 +188,9 @@ module Airborne
131
188
  end
132
189
  begin
133
190
  json = process_json(part, json)
134
- rescue
135
- raise PathError, "Expected #{json.class}\nto be an object with property #{part}"
191
+ rescue StandardError
192
+ raise PathError,
193
+ "Expected #{json.class}\nto be an object with property #{part}"
136
194
  end
137
195
  end
138
196
  if type == '*'
@@ -140,7 +198,7 @@ module Airborne
140
198
  when 'Array'
141
199
  expect_all(json, &block)
142
200
  when 'Hash'
143
- json.each do |k,v|
201
+ json.each do |k, _v|
144
202
  yield json[k]
145
203
  end
146
204
  end
@@ -152,8 +210,10 @@ module Airborne
152
210
  end
153
211
 
154
212
  def ensure_array_or_hash(path, json)
155
- fail RSpec::Expectations::ExpectationNotMetError, "Expected #{path} to be array or hash, got #{json.class} from JSON response" unless
156
- json.class == Array || json.class == Hash
213
+ return if json.class == Array || json.class == Hash
214
+ raise RSpec::Expectations::ExpectationNotMetError,
215
+ "Expected #{path} to be array or hash, got #{json.class}"\
216
+ ' from JSON response'
157
217
  end
158
218
  end
159
219
  end
@@ -1,3 +1,3 @@
1
1
  module Spaceborne
2
- VERSION = "0.1.12"
2
+ VERSION = '0.1.13'.freeze
3
3
  end
data/spaceborne.gemspec CHANGED
@@ -1,34 +1,35 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require 'spaceborne/version'
5
4
 
6
5
  Gem::Specification.new do |spec|
7
- spec.name = "spaceborne"
6
+ spec.name = 'spaceborne'
8
7
  spec.version = Spaceborne::VERSION
9
- spec.authors = ["Keith Williams"]
10
- spec.email = ["keithrw@comcast.net"]
8
+ spec.authors = ['Keith Williams']
9
+ spec.email = ['keithrw@comcast.net']
11
10
 
12
11
  spec.summary = 'Gem supporting API testing'
13
12
  spec.description = 'Extends brooklynDev/airborne'
14
- spec.homepage = "https://github.com/keithrw54/spaceborne.git"
15
- spec.license = "MIT"
13
+ spec.homepage = 'https://github.com/keithrw54/spaceborne.git'
14
+ spec.license = 'MIT'
16
15
 
17
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
- spec.bindir = "exe"
16
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
+ f.match(%r{^(test|spec|features)/})
18
+ end
19
+ spec.bindir = 'exe'
19
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
- spec.require_paths = ["lib"]
21
+ spec.require_paths = ['lib']
21
22
 
22
- spec.add_runtime_dependency 'rspec', '~> 3.1'
23
- spec.add_runtime_dependency 'rest-client', '< 3.0', '>= 1.7.3'
24
- spec.add_runtime_dependency 'rack-test', '~> 0.6', '>= 0.6.2'
25
- spec.add_runtime_dependency 'rack'
26
23
  spec.add_runtime_dependency 'activesupport'
27
- spec.add_runtime_dependency "airborne", "~> 0.2.13"
28
- spec.add_runtime_dependency "curlyrest", "~> 0.1.0"
24
+ spec.add_runtime_dependency 'airborne', '~> 0.2.13'
25
+ spec.add_runtime_dependency 'curlyrest', '~> 0.1.0'
26
+ spec.add_runtime_dependency 'rack'
27
+ spec.add_runtime_dependency 'rack-test', '~> 0.6', '>= 0.6.2'
28
+ spec.add_runtime_dependency 'rest-client', '< 3.0', '>= 1.7.3'
29
+ spec.add_runtime_dependency 'rspec', '~> 3.1'
29
30
  spec.add_development_dependency 'webmock', '~> 0'
30
31
 
31
- spec.add_development_dependency "bundler", "~> 1.11"
32
- spec.add_development_dependency "rake", "~> 10.0"
33
- spec.add_development_dependency "byebug", "~> 2.0"
32
+ spec.add_development_dependency 'bundler', '~> 1.11'
33
+ spec.add_development_dependency 'byebug', '~> 2.0'
34
+ spec.add_development_dependency 'rake', '~> 10.0'
34
35
  end
metadata CHANGED
@@ -1,69 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spaceborne
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.12
4
+ version: 0.1.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keith Williams
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-07-13 00:00:00.000000000 Z
11
+ date: 2018-08-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rspec
14
+ name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '3.1'
19
+ version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '3.1'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rest-client
28
+ name: airborne
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "<"
32
- - !ruby/object:Gem::Version
33
- version: '3.0'
34
- - - ">="
31
+ - - "~>"
35
32
  - !ruby/object:Gem::Version
36
- version: 1.7.3
33
+ version: 0.2.13
37
34
  type: :runtime
38
35
  prerelease: false
39
36
  version_requirements: !ruby/object:Gem::Requirement
40
37
  requirements:
41
- - - "<"
42
- - !ruby/object:Gem::Version
43
- version: '3.0'
44
- - - ">="
38
+ - - "~>"
45
39
  - !ruby/object:Gem::Version
46
- version: 1.7.3
40
+ version: 0.2.13
47
41
  - !ruby/object:Gem::Dependency
48
- name: rack-test
42
+ name: curlyrest
49
43
  requirement: !ruby/object:Gem::Requirement
50
44
  requirements:
51
45
  - - "~>"
52
46
  - !ruby/object:Gem::Version
53
- version: '0.6'
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- version: 0.6.2
47
+ version: 0.1.0
57
48
  type: :runtime
58
49
  prerelease: false
59
50
  version_requirements: !ruby/object:Gem::Requirement
60
51
  requirements:
61
52
  - - "~>"
62
53
  - !ruby/object:Gem::Version
63
- version: '0.6'
64
- - - ">="
65
- - !ruby/object:Gem::Version
66
- version: 0.6.2
54
+ version: 0.1.0
67
55
  - !ruby/object:Gem::Dependency
68
56
  name: rack
69
57
  requirement: !ruby/object:Gem::Requirement
@@ -79,47 +67,59 @@ dependencies:
79
67
  - !ruby/object:Gem::Version
80
68
  version: '0'
81
69
  - !ruby/object:Gem::Dependency
82
- name: activesupport
70
+ name: rack-test
83
71
  requirement: !ruby/object:Gem::Requirement
84
72
  requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.6'
85
76
  - - ">="
86
77
  - !ruby/object:Gem::Version
87
- version: '0'
78
+ version: 0.6.2
88
79
  type: :runtime
89
80
  prerelease: false
90
81
  version_requirements: !ruby/object:Gem::Requirement
91
82
  requirements:
83
+ - - "~>"
84
+ - !ruby/object:Gem::Version
85
+ version: '0.6'
92
86
  - - ">="
93
87
  - !ruby/object:Gem::Version
94
- version: '0'
88
+ version: 0.6.2
95
89
  - !ruby/object:Gem::Dependency
96
- name: airborne
90
+ name: rest-client
97
91
  requirement: !ruby/object:Gem::Requirement
98
92
  requirements:
99
- - - "~>"
93
+ - - "<"
100
94
  - !ruby/object:Gem::Version
101
- version: 0.2.13
95
+ version: '3.0'
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: 1.7.3
102
99
  type: :runtime
103
100
  prerelease: false
104
101
  version_requirements: !ruby/object:Gem::Requirement
105
102
  requirements:
106
- - - "~>"
103
+ - - "<"
107
104
  - !ruby/object:Gem::Version
108
- version: 0.2.13
105
+ version: '3.0'
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: 1.7.3
109
109
  - !ruby/object:Gem::Dependency
110
- name: curlyrest
110
+ name: rspec
111
111
  requirement: !ruby/object:Gem::Requirement
112
112
  requirements:
113
113
  - - "~>"
114
114
  - !ruby/object:Gem::Version
115
- version: 0.1.0
115
+ version: '3.1'
116
116
  type: :runtime
117
117
  prerelease: false
118
118
  version_requirements: !ruby/object:Gem::Requirement
119
119
  requirements:
120
120
  - - "~>"
121
121
  - !ruby/object:Gem::Version
122
- version: 0.1.0
122
+ version: '3.1'
123
123
  - !ruby/object:Gem::Dependency
124
124
  name: webmock
125
125
  requirement: !ruby/object:Gem::Requirement
@@ -149,33 +149,33 @@ dependencies:
149
149
  - !ruby/object:Gem::Version
150
150
  version: '1.11'
151
151
  - !ruby/object:Gem::Dependency
152
- name: rake
152
+ name: byebug
153
153
  requirement: !ruby/object:Gem::Requirement
154
154
  requirements:
155
155
  - - "~>"
156
156
  - !ruby/object:Gem::Version
157
- version: '10.0'
157
+ version: '2.0'
158
158
  type: :development
159
159
  prerelease: false
160
160
  version_requirements: !ruby/object:Gem::Requirement
161
161
  requirements:
162
162
  - - "~>"
163
163
  - !ruby/object:Gem::Version
164
- version: '10.0'
164
+ version: '2.0'
165
165
  - !ruby/object:Gem::Dependency
166
- name: byebug
166
+ name: rake
167
167
  requirement: !ruby/object:Gem::Requirement
168
168
  requirements:
169
169
  - - "~>"
170
170
  - !ruby/object:Gem::Version
171
- version: '2.0'
171
+ version: '10.0'
172
172
  type: :development
173
173
  prerelease: false
174
174
  version_requirements: !ruby/object:Gem::Requirement
175
175
  requirements:
176
176
  - - "~>"
177
177
  - !ruby/object:Gem::Version
178
- version: '2.0'
178
+ version: '10.0'
179
179
  description: Extends brooklynDev/airborne
180
180
  email:
181
181
  - keithrw@comcast.net
@@ -185,6 +185,9 @@ extra_rdoc_files: []
185
185
  files:
186
186
  - ".gitignore"
187
187
  - ".rspec"
188
+ - ".rubocop.yml"
189
+ - ".ruby-gemset"
190
+ - ".ruby-version"
188
191
  - Gemfile
189
192
  - LICENSE.txt
190
193
  - README.md