wor-requests 0.1.1 → 0.1.2
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 +5 -5
- data/.travis.yml +7 -6
- data/CHANGELOG.md +8 -0
- data/README.md +28 -8
- data/lib/generators/templates/base_service.rb.erb +22 -0
- data/lib/generators/wor/requests/service_generator.rb +12 -1
- data/lib/wor/requests.rb +2 -0
- data/lib/wor/requests/base.rb +13 -5
- data/lib/wor/requests/malformed_base_url.rb +9 -0
- data/lib/wor/requests/version.rb +1 -1
- data/wor-requests.gemspec +2 -2
- metadata +10 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f9b90d0e2c2d7625668dd56b8b5ca6fd2bb1be90a95f64dab63351ae68f34f39
|
4
|
+
data.tar.gz: 18ad91e482c4308f8867a41b87422f3de9711996a385121fbe13a5c300404f50
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c91be95c5797371e4f9c96b0f0d18a935df24cafacf81e14a4c039daca2204cdca4f3525d216c9dd90fa2c2f60e1c4a63d66165505ff744410d39cc58fad4a9e
|
7
|
+
data.tar.gz: ca4426836c9832f24ead8f3091c5cb073a5de770e89cd431064ff108bc889da3fc347ee8ef542e0b770b4f33998acb2163e044a1c2402260fd9cfaa2175d1818
|
data/.travis.yml
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
- 2.
|
4
|
-
- 2.
|
5
|
-
- 2.
|
3
|
+
- 2.3.8
|
4
|
+
- 2.4.6
|
5
|
+
- 2.5.5
|
6
|
+
- 2.6.3
|
6
7
|
|
7
|
-
|
8
|
+
before_install:
|
9
|
+
- gem update --system
|
8
10
|
- gem install bundler
|
9
|
-
- bundle install --retry=3
|
10
11
|
|
11
12
|
script:
|
13
|
+
- bundle exec rubocop lib spec -R --format simple
|
12
14
|
- bundle exec rspec
|
13
|
-
- bundle exec rubocop -R --format simple
|
14
15
|
- bundle exec codeclimate-test-reporter
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,14 @@
|
|
1
1
|
|
2
2
|
## Change log
|
3
3
|
|
4
|
+
### V0.1.2
|
5
|
+
* [#42](https://github.com/Wolox/wor-requests/pull/42): Service generator - [@blacksam07](https://github.com/blacksam07).
|
6
|
+
* [#41](https://github.com/Wolox/wor-requests/pull/41): Add validation when base_url method is empty - [@blacksam07](https://github.com/blacksam07).
|
7
|
+
* [#39](https://github.com/Wolox/wor-requests/pull/39): Handling the case when response body is empty - [@mnmallea](https://github.com/mnmallea).
|
8
|
+
|
9
|
+
### V0.1.1
|
10
|
+
* [#35](https://github.com/Wolox/wor-requests/pull/35): updated version - [@hdf1986](https://github.com/hdf1986).
|
11
|
+
|
4
12
|
### [0.1.0]
|
5
13
|
|
6
14
|
#### Added
|
data/README.md
CHANGED
@@ -1,9 +1,7 @@
|
|
1
1
|
# Wolox on Rails - Requests
|
2
2
|
[](https://badge.fury.io/rb/wor-requests)
|
3
|
-
[](https://gemnasium.com/github.com/Wolox/wor-requests)
|
4
3
|
[](https://travis-ci.org/Wolox/wor-requests)
|
5
4
|
[](https://codeclimate.com/github/Wolox/wor-requests)
|
6
|
-
[](https://codeclimate.com/github/Wolox/wor-requests/coverage)
|
7
5
|
|
8
6
|
Make external requests in you service objects, with easy logging and error handling!
|
9
7
|
|
@@ -33,8 +31,29 @@ Wor::Requests.configure do |config|
|
|
33
31
|
end
|
34
32
|
```
|
35
33
|
|
36
|
-
##
|
34
|
+
## Generators
|
35
|
+
```ruby
|
36
|
+
rails generate wor:requests:service NAME
|
37
|
+
```
|
38
|
+
|
39
|
+
### Generator options
|
40
|
+
#### module
|
41
|
+
Specifying the module name as:
|
42
|
+
|
43
|
+
```ruby
|
44
|
+
rails generate wor:requests:service NAME --module MODULE_NAME
|
45
|
+
```
|
46
|
+
We can create a service with an inner class called NAME, and external module called MODULE_NAME
|
37
47
|
|
48
|
+
```ruby
|
49
|
+
module ModuleName
|
50
|
+
class NameService < Wor::Requests::Base
|
51
|
+
# Your code here
|
52
|
+
end
|
53
|
+
end
|
54
|
+
```
|
55
|
+
|
56
|
+
## Service example
|
38
57
|
To write your first Service using Wor-requests you can write something like this:
|
39
58
|
|
40
59
|
```ruby
|
@@ -57,12 +76,9 @@ class GithubService < Wor::Requests::Base
|
|
57
76
|
end
|
58
77
|
end
|
59
78
|
|
60
|
-
puts GithubService.new.repositories('
|
79
|
+
puts GithubService.new.repositories('wolox')
|
61
80
|
```
|
62
81
|
|
63
|
-
Or, even easier, run `rails generate wor:requests:service NAME` in your Rails root
|
64
|
-
|
65
|
-
|
66
82
|
If you need to send body parameters in a post request you can write something like this:
|
67
83
|
|
68
84
|
```ruby
|
@@ -104,8 +120,12 @@ ExternalService.new.post_request_example(token)
|
|
104
120
|
7. Create a new Pull Request
|
105
121
|
|
106
122
|
## About ##
|
123
|
+
This project was developed by [Diego Raffo](https://github.com/enanodr) along with [Michel Agopian](https://github.com/mishuagopian) and it was written by [Wolox](http://www.wolox.com.ar).
|
124
|
+
|
125
|
+
Maintainers: [Samir Tapiero](https://github.com/blacksam07)
|
126
|
+
|
127
|
+
Contributors: [Diego Raffo](https://github.com/enanodr) [Michel Agopian](https://github.com/mishuagopian)
|
107
128
|
|
108
|
-
This project is maintained by [Diego Raffo](https://github.com/enanodr) along with [Michel Agopian](https://github.com/mishuagopian) and it was written by [Wolox](http://www.wolox.com.ar).
|
109
129
|

|
110
130
|
|
111
131
|
## License
|
@@ -1,3 +1,24 @@
|
|
1
|
+
<% if @module_name.present? %>
|
2
|
+
module <%= @module_name.camelize %>
|
3
|
+
class <%= class_name %>Service < Wor::Requests::Base
|
4
|
+
# An example of how to get all repositories for the specified user in github.com
|
5
|
+
# def repositories(username)
|
6
|
+
# get(
|
7
|
+
# attempting_to: "get repositories of #{username}",
|
8
|
+
# path: "/users/#{username}/repos"
|
9
|
+
# )
|
10
|
+
# rescue Wor::Requests::RequestError => e
|
11
|
+
# puts e.message
|
12
|
+
# end
|
13
|
+
|
14
|
+
# protected
|
15
|
+
|
16
|
+
# def base_url
|
17
|
+
# 'https://api.github.com'
|
18
|
+
# end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
<% else %>
|
1
22
|
class <%= class_name %>Service < Wor::Requests::Base
|
2
23
|
# An example of how to get all repositories for the specified user in github.com
|
3
24
|
# def repositories(username)
|
@@ -15,3 +36,4 @@ class <%= class_name %>Service < Wor::Requests::Base
|
|
15
36
|
# 'https://api.github.com'
|
16
37
|
# end
|
17
38
|
end
|
39
|
+
<% end %>
|
@@ -2,11 +2,22 @@ module Wor
|
|
2
2
|
module Requests
|
3
3
|
module Generators
|
4
4
|
class ServiceGenerator < Rails::Generators::NamedBase
|
5
|
+
SERVICE_DIR_PATH = 'app/services'.freeze
|
5
6
|
source_root File.expand_path('../../../templates', __FILE__)
|
6
7
|
desc 'Creates Wor-requests service for your application'
|
7
8
|
|
9
|
+
class_option :module, type: :string
|
10
|
+
|
8
11
|
def create_service
|
9
|
-
|
12
|
+
@module_name = options[:module]
|
13
|
+
|
14
|
+
generator_dir_path = "#{SERVICE_DIR_PATH}
|
15
|
+
#{("/#{@module_name.underscore}" if @module_name.present?)}"
|
16
|
+
generator_path = "#{generator_dir_path}/#{file_name}_service.rb"
|
17
|
+
|
18
|
+
FileUtils.mkdir_p(generator_dir_path) unless File.exist?(generator_dir_path)
|
19
|
+
|
20
|
+
template 'base_service.rb.erb', generator_path
|
10
21
|
end
|
11
22
|
end
|
12
23
|
end
|
data/lib/wor/requests.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require_relative 'requests/base'
|
2
2
|
require_relative 'requests/request_error'
|
3
|
+
require_relative 'requests/malformed_base_url'
|
3
4
|
require_relative 'requests/version'
|
4
5
|
require 'logger'
|
5
6
|
|
@@ -22,6 +23,7 @@ module Wor
|
|
22
23
|
|
23
24
|
def self.default_response_type=(type)
|
24
25
|
return unless VALID_RESPONSE_TYPES.include?(type)
|
26
|
+
|
25
27
|
@config[:default_response_type] = type
|
26
28
|
end
|
27
29
|
|
data/lib/wor/requests/base.rb
CHANGED
@@ -45,6 +45,7 @@ module Wor
|
|
45
45
|
resp = HTTParty.send(options[:method], uri(options[:path]), request_parameters(options))
|
46
46
|
|
47
47
|
return after_success(resp, options, &block) if resp.success?
|
48
|
+
|
48
49
|
after_error(resp, options)
|
49
50
|
end
|
50
51
|
|
@@ -72,6 +73,7 @@ module Wor
|
|
72
73
|
log_success(options[:attempting_to])
|
73
74
|
|
74
75
|
return yield(response) if block_given?
|
76
|
+
|
75
77
|
handle_response(response, options[:response_type])
|
76
78
|
end
|
77
79
|
|
@@ -85,35 +87,39 @@ module Wor
|
|
85
87
|
end
|
86
88
|
|
87
89
|
def formatted_base_url
|
90
|
+
raise MalformedBaseUrl if base_url.nil?
|
91
|
+
|
88
92
|
base_url[-1] != '/' ? "#{base_url}/" : base_url
|
89
93
|
end
|
90
94
|
|
91
95
|
def formatted_path(path)
|
92
96
|
return '' if path.nil?
|
93
97
|
return path if path[0] != '/'
|
98
|
+
|
94
99
|
path.slice!(0)
|
95
100
|
path
|
96
101
|
end
|
97
102
|
|
98
103
|
def log_success(attempt)
|
99
104
|
return unless present?(attempt)
|
105
|
+
|
100
106
|
logger.info "SUCCESS: #{attempt}"
|
101
107
|
end
|
102
108
|
|
103
109
|
def log_attempt(attempt)
|
104
110
|
return unless present?(attempt)
|
111
|
+
|
105
112
|
logger.info "ATTEMPTING TO: #{attempt}"
|
106
113
|
end
|
107
114
|
|
108
115
|
def log_error(response, attempting_to)
|
109
116
|
return unless present?(attempting_to)
|
117
|
+
|
110
118
|
response_error = "ERROR when trying to #{attempting_to}. "
|
111
119
|
response_error << "Got status code: #{response.code}. "
|
112
|
-
if present?(response.body)
|
113
|
-
response_error << "Response error: #{JSON.parse(response.body)}"
|
114
|
-
end
|
120
|
+
response_error << "Response error: #{JSON.parse(response.body)}" if present?(response.body)
|
115
121
|
logger.error response_error
|
116
|
-
rescue => e
|
122
|
+
rescue JSON::ParserError => e
|
117
123
|
logger.error("#{response_error} ERROR while parsing response body: #{e.message}.")
|
118
124
|
end
|
119
125
|
|
@@ -139,18 +145,20 @@ module Wor
|
|
139
145
|
|
140
146
|
def validate_method!(method)
|
141
147
|
return true if VALID_HTTP_VERBS.include?(method)
|
148
|
+
|
142
149
|
raise ArgumentError, "#{method} is not a valid method."
|
143
150
|
end
|
144
151
|
|
145
152
|
def response_type(type)
|
146
153
|
return type if Wor::Requests::VALID_RESPONSE_TYPES.include?(type)
|
154
|
+
|
147
155
|
default_response_type
|
148
156
|
end
|
149
157
|
|
150
158
|
def handle_response(response, response_type)
|
151
159
|
case response_type(response_type)
|
152
160
|
when :json
|
153
|
-
JSON.parse(response.body)
|
161
|
+
JSON.parse(response.body) if response.body.present?
|
154
162
|
else
|
155
163
|
response.body
|
156
164
|
end
|
data/lib/wor/requests/version.rb
CHANGED
data/wor-requests.gemspec
CHANGED
@@ -22,13 +22,13 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.require_paths = ['lib']
|
23
23
|
|
24
24
|
spec.add_dependency 'httparty', '~> 0.13'
|
25
|
-
spec.add_dependency 'railties', '>= 4.1.0', '
|
25
|
+
spec.add_dependency 'railties', '>= 4.1.0', '<= 6.0.0'
|
26
26
|
|
27
27
|
spec.add_development_dependency 'faker'
|
28
28
|
spec.add_development_dependency 'webmock'
|
29
29
|
spec.add_development_dependency 'byebug', '~> 9.0'
|
30
30
|
spec.add_development_dependency 'rubocop', '~> 0.47.0'
|
31
|
-
spec.add_development_dependency 'bundler', '~>
|
31
|
+
spec.add_development_dependency 'bundler', '~> 2.0'
|
32
32
|
spec.add_development_dependency 'rake', '~> 10.0'
|
33
33
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
34
34
|
spec.add_development_dependency 'codeclimate-test-reporter', '~> 1.0.0'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wor-requests
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- draffo
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2019-10-31 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: httparty
|
@@ -32,9 +32,9 @@ dependencies:
|
|
32
32
|
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: 4.1.0
|
35
|
-
- - "
|
35
|
+
- - "<="
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version:
|
37
|
+
version: 6.0.0
|
38
38
|
type: :runtime
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -42,9 +42,9 @@ dependencies:
|
|
42
42
|
- - ">="
|
43
43
|
- !ruby/object:Gem::Version
|
44
44
|
version: 4.1.0
|
45
|
-
- - "
|
45
|
+
- - "<="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 6.0.0
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: faker
|
50
50
|
requirement: !ruby/object:Gem::Requirement
|
@@ -107,14 +107,14 @@ dependencies:
|
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '
|
110
|
+
version: '2.0'
|
111
111
|
type: :development
|
112
112
|
prerelease: false
|
113
113
|
version_requirements: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
117
|
+
version: '2.0'
|
118
118
|
- !ruby/object:Gem::Dependency
|
119
119
|
name: rake
|
120
120
|
requirement: !ruby/object:Gem::Requirement
|
@@ -210,6 +210,7 @@ files:
|
|
210
210
|
- lib/wor/requests.rb
|
211
211
|
- lib/wor/requests/base.rb
|
212
212
|
- lib/wor/requests/invalid_options_error.rb
|
213
|
+
- lib/wor/requests/malformed_base_url.rb
|
213
214
|
- lib/wor/requests/request_error.rb
|
214
215
|
- lib/wor/requests/version.rb
|
215
216
|
- wor-requests.gemspec
|
@@ -232,8 +233,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
232
233
|
- !ruby/object:Gem::Version
|
233
234
|
version: '0'
|
234
235
|
requirements: []
|
235
|
-
|
236
|
-
rubygems_version: 2.6.11
|
236
|
+
rubygems_version: 3.0.1
|
237
237
|
signing_key:
|
238
238
|
specification_version: 4
|
239
239
|
summary: Make external requests in you service objects, with easy logging and error
|