survey-gizmo-ruby 5.0.4 → 6.0.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 +4 -4
- data/README.md +20 -20
- data/lib/survey-gizmo-ruby.rb +0 -1
- data/lib/survey_gizmo/configuration.rb +15 -38
- data/lib/survey_gizmo/connection.rb +20 -2
- data/lib/survey_gizmo/faraday_middleware/pester_survey_gizmo.rb +4 -6
- data/lib/survey_gizmo/logger.rb +3 -0
- data/lib/survey_gizmo/resource.rb +4 -4
- data/lib/survey_gizmo/version.rb +1 -1
- data/spec/configuration_spec.rb +5 -5
- data/spec/spec_helper.rb +6 -6
- data/survey-gizmo-ruby.gemspec +0 -1
- metadata +2 -16
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 30f8503c9d46c13e9b4e6eb1d4f43b590b3190b9
|
|
4
|
+
data.tar.gz: 00583ecebd74b93a0d6c9111860f45ef8b79e289
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4332bf1ec4094d68e58866578c2a1b6a31755e0d59127c162502cf73a7e47d7dab52dddbbce4a1b24dcdbdf0f2070896f4e7c48b283f8780a2c74ebe264dbd87
|
|
7
|
+
data.tar.gz: 8569ffac734405c8e1d54afbdd2c458dfdbd609a35650b676708c508e64c7d45370e18a49be0ee2b43a691700e2c4ef3077abec2311dcdc5bc57e80613ee85d7
|
data/README.md
CHANGED
|
@@ -8,6 +8,10 @@ Currently supports SurveyGizmo API **v4** (default) and **v3**.
|
|
|
8
8
|
|
|
9
9
|
## Versions
|
|
10
10
|
|
|
11
|
+
### Major Changes in 6.x
|
|
12
|
+
* **BREAKING CHANGE**: SurveyGizmo changed the authentication so you need to configure `api_token` and `api_token_secret` instead of user and password.
|
|
13
|
+
* **BREAKING CHANGE**: Pester has been removed as the retry source in favor of Faraday's `Request::Retry`.
|
|
14
|
+
|
|
11
15
|
### Major Changes in 5.x
|
|
12
16
|
|
|
13
17
|
* **BREAKING CHANGE**: `.all` returns an `Enumerator`, not an `Array`. This will break your code if you are using the return value of `.all` without iterating over it.
|
|
@@ -47,8 +51,8 @@ require 'survey-gizmo-ruby'
|
|
|
47
51
|
|
|
48
52
|
# Configure your credentials
|
|
49
53
|
SurveyGizmo.configure do |config|
|
|
50
|
-
config.
|
|
51
|
-
config.
|
|
54
|
+
config.api_token = 'still_tippin_woodgraingrip'
|
|
55
|
+
config.api_token_secret = 'it_takes_grindin_to_be_a_king'
|
|
52
56
|
|
|
53
57
|
# Optional - Defaults to v4, but you can probably set to v3 safely if you suspect a bug in v4
|
|
54
58
|
config.api_version = 'v4'
|
|
@@ -61,32 +65,28 @@ SurveyGizmo.configure do |config|
|
|
|
61
65
|
|
|
62
66
|
# Optional - Defaults to 300 seconds
|
|
63
67
|
config.timeout_seconds = 600
|
|
68
|
+
|
|
69
|
+
# Optional - Defaults to 3 retries with a 60 second delay interval
|
|
70
|
+
config.retry_attempts = 3
|
|
71
|
+
config.retry_interval = 60
|
|
64
72
|
end
|
|
65
73
|
```
|
|
66
74
|
|
|
67
|
-
|
|
75
|
+
`api_token` and `api_token_secret` can be read from environment variables, in which case you would set them like this:
|
|
68
76
|
|
|
69
|
-
|
|
77
|
+
```bash
|
|
78
|
+
$ export SURVEYGIZMO_API_TOKEN=till_tippin_woodgraingrip
|
|
79
|
+
$ export SURVEYGIZMO_API_TOKEN_SECRET=it_takes_grindin_to_be_a_king
|
|
80
|
+
$ bundle exec ruby whatever
|
|
81
|
+
```
|
|
70
82
|
|
|
71
|
-
|
|
83
|
+
And then your ruby code just has to make sure to call
|
|
72
84
|
|
|
73
85
|
```ruby
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
# Retry 10 times
|
|
77
|
-
config.environments[:survey_gizmo_ruby][:max_attempts] = 10
|
|
78
|
-
# Backoff for 2 minutes
|
|
79
|
-
config.environments[:survey_gizmo_ruby][:delay_interval] = 120
|
|
80
|
-
# Retry different exception classes
|
|
81
|
-
config.environments[:survey_gizmo_ruby][:retry_error_classes] = [MyExceptionClass, MyOtherExceptionClass]
|
|
82
|
-
end
|
|
86
|
+
SurveyGizmo.configure
|
|
87
|
+
````
|
|
83
88
|
|
|
84
|
-
|
|
85
|
-
# (use with caution! Can include exceptions Rails likes to throw on SIGHUP)
|
|
86
|
-
Pester.configure do |config|
|
|
87
|
-
config.environments[:survey_gizmo_ruby][:retry_error_classes] = nil
|
|
88
|
-
end
|
|
89
|
-
```
|
|
89
|
+
once at some point.
|
|
90
90
|
|
|
91
91
|
## Usage
|
|
92
92
|
|
data/lib/survey-gizmo-ruby.rb
CHANGED
|
@@ -10,48 +10,12 @@ module SurveyGizmo
|
|
|
10
10
|
def configure
|
|
11
11
|
@configuration ||= Configuration.new
|
|
12
12
|
yield(configuration) if block_given?
|
|
13
|
-
configure_pester
|
|
14
13
|
end
|
|
15
14
|
|
|
16
15
|
def reset!
|
|
17
16
|
self.configuration = Configuration.new
|
|
18
|
-
Pester.configure { |c| c.environments[:survey_gizmo_ruby] = nil }
|
|
19
|
-
configure_pester
|
|
20
17
|
Connection.reset!
|
|
21
18
|
end
|
|
22
|
-
|
|
23
|
-
private
|
|
24
|
-
|
|
25
|
-
def configure_pester
|
|
26
|
-
default_config = {
|
|
27
|
-
on_retry: Pester::Behaviors::Sleep::Constant,
|
|
28
|
-
logger: configuration.logger,
|
|
29
|
-
max_attempts: 2,
|
|
30
|
-
delay_interval: 60,
|
|
31
|
-
retry_error_classes: retryables
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
Pester.configure do |c|
|
|
35
|
-
if c.environments[:survey_gizmo_ruby].nil?
|
|
36
|
-
c.environments[:survey_gizmo_ruby] = default_config
|
|
37
|
-
else
|
|
38
|
-
default_config.each { |k,v| c.environments[:survey_gizmo_ruby][k] ||= v unless k == :retry_error_classes }
|
|
39
|
-
|
|
40
|
-
# Don't set :retry_error_classes to something when user has configured nothing
|
|
41
|
-
if c.environments[:survey_gizmo_ruby][:retry_error_classes].nil? && !c.environments[:survey_gizmo_ruby].has_key?(:retry_error_classes)
|
|
42
|
-
c.environments[:survey_gizmo_ruby][:retry_error_classes] = retryables
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def retryables
|
|
49
|
-
[
|
|
50
|
-
Net::ReadTimeout,
|
|
51
|
-
Faraday::Error::TimeoutError,
|
|
52
|
-
SurveyGizmo::RateLimitExceededError
|
|
53
|
-
]
|
|
54
|
-
end
|
|
55
19
|
end
|
|
56
20
|
|
|
57
21
|
class Configuration
|
|
@@ -59,22 +23,35 @@ module SurveyGizmo
|
|
|
59
23
|
DEFAULT_API_VERSION = 'v4'
|
|
60
24
|
DEFAULT_RESULTS_PER_PAGE = 50
|
|
61
25
|
DEFAULT_TIMEOUT_SECONDS = 300
|
|
26
|
+
DEFAULT_RETRIES = 3
|
|
27
|
+
DEFAULT_RETRY_INTERVAL = 60
|
|
62
28
|
|
|
63
|
-
attr_accessor :
|
|
64
|
-
attr_accessor :
|
|
29
|
+
attr_accessor :api_token
|
|
30
|
+
attr_accessor :api_token_secret
|
|
65
31
|
|
|
66
32
|
attr_accessor :api_debug
|
|
67
33
|
attr_accessor :api_url
|
|
68
34
|
attr_accessor :api_version
|
|
69
35
|
attr_accessor :logger
|
|
70
36
|
attr_accessor :results_per_page
|
|
37
|
+
|
|
71
38
|
attr_accessor :timeout_seconds
|
|
39
|
+
attr_accessor :retry_attempts
|
|
40
|
+
attr_accessor :retry_interval
|
|
41
|
+
|
|
72
42
|
|
|
73
43
|
def initialize
|
|
44
|
+
@api_token = ENV['SURVEYGIZMO_API_TOKEN'] || nil
|
|
45
|
+
@api_token_secret = ENV['SURVEYGIZMO_API_TOKEN_SECRET'] || nil
|
|
46
|
+
|
|
74
47
|
@api_url = DEFAULT_REST_API_URL
|
|
75
48
|
@api_version = DEFAULT_API_VERSION
|
|
76
49
|
@results_per_page = DEFAULT_RESULTS_PER_PAGE
|
|
50
|
+
|
|
77
51
|
@timeout_seconds = DEFAULT_TIMEOUT_SECONDS
|
|
52
|
+
@retry_attempts = DEFAULT_RETRIES
|
|
53
|
+
@retry_interval = DEFAULT_RETRY_INTERVAL
|
|
54
|
+
|
|
78
55
|
@logger = SurveyGizmo::Logger.new(STDOUT)
|
|
79
56
|
@api_debug = ENV['GIZMO_DEBUG'].to_s =~ /^(true|t|yes|y|1)$/i
|
|
80
57
|
end
|
|
@@ -14,19 +14,37 @@ module SurveyGizmo
|
|
|
14
14
|
def connection
|
|
15
15
|
options = {
|
|
16
16
|
url: SurveyGizmo.configuration.api_url,
|
|
17
|
-
params: {
|
|
17
|
+
params: {
|
|
18
|
+
api_token: SurveyGizmo.configuration.api_token,
|
|
19
|
+
api_token_secret: SurveyGizmo.configuration.api_token_secret
|
|
20
|
+
},
|
|
18
21
|
request: {
|
|
19
22
|
timeout: SurveyGizmo.configuration.timeout_seconds,
|
|
20
23
|
open_timeout: SurveyGizmo.configuration.timeout_seconds
|
|
21
24
|
}
|
|
22
25
|
}
|
|
23
26
|
|
|
27
|
+
retry_options = {
|
|
28
|
+
max: SurveyGizmo.configuration.retry_attempts,
|
|
29
|
+
interval: SurveyGizmo.configuration.retry_interval,
|
|
30
|
+
exceptions: [
|
|
31
|
+
SurveyGizmo::BadResponseError,
|
|
32
|
+
SurveyGizmo::RateLimitExceededError,
|
|
33
|
+
Errno::ETIMEDOUT,
|
|
34
|
+
Net::ReadTimeout,
|
|
35
|
+
Faraday::Error::TimeoutError,
|
|
36
|
+
'Timeout::Error',
|
|
37
|
+
'Error::TimeoutError'
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
|
|
24
41
|
@connection ||= Faraday.new(options) do |connection|
|
|
42
|
+
connection.request :retry, retry_options
|
|
25
43
|
connection.request :url_encoded
|
|
26
44
|
|
|
27
45
|
connection.response :parse_survey_gizmo_data
|
|
28
46
|
connection.response :pester_survey_gizmo
|
|
29
|
-
connection.response :logger,
|
|
47
|
+
connection.response :logger, SurveyGizmo.configuration.logger, bodies: true if SurveyGizmo.configuration.api_debug
|
|
30
48
|
connection.response :json, content_type: /\bjson$/
|
|
31
49
|
|
|
32
50
|
connection.adapter Faraday.default_adapter
|
|
@@ -6,12 +6,10 @@ module SurveyGizmo
|
|
|
6
6
|
Faraday::Response.register_middleware(pester_survey_gizmo: self)
|
|
7
7
|
|
|
8
8
|
def call(environment)
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
fail BadResponseError, response.body['message'] unless response.body['result_ok'] && response.body['result_ok'].to_s =~ /^true$/i
|
|
14
|
-
end
|
|
9
|
+
@app.call(environment).on_complete do |response|
|
|
10
|
+
fail RateLimitExceededError if response.status == 429
|
|
11
|
+
fail BadResponseError, "Bad response code #{response.status} in #{response.inspect}" unless response.status == 200
|
|
12
|
+
fail BadResponseError, response.body['message'] unless response.body['result_ok'] && response.body['result_ok'].to_s =~ /^true$/i
|
|
15
13
|
end
|
|
16
14
|
end
|
|
17
15
|
end
|
data/lib/survey_gizmo/logger.rb
CHANGED
|
@@ -3,6 +3,9 @@ require 'logger'
|
|
|
3
3
|
module SurveyGizmo
|
|
4
4
|
class Logger < ::Logger
|
|
5
5
|
def format_message(severity, timestamp, progname, msg)
|
|
6
|
+
msg.gsub!(/#{Regexp.quote(SurveyGizmo.configuration.api_token)}/, '<SG_API_KEY>') if SurveyGizmo.configuration.api_token
|
|
7
|
+
msg.gsub!(/#{Regexp.quote(SurveyGizmo.configuration.api_token_secret)}/, '<SG_API_SECRET>') if SurveyGizmo.configuration.api_token_secret
|
|
8
|
+
|
|
6
9
|
"#{timestamp.strftime('%Y-%m-%d %H:%M:%S')} #{severity} #{msg}\n"
|
|
7
10
|
end
|
|
8
11
|
end
|
|
@@ -35,10 +35,10 @@ module SurveyGizmo
|
|
|
35
35
|
# Properties from the conditions hash (e.g. survey_id) will be added to the returned objects
|
|
36
36
|
def all(conditions = {})
|
|
37
37
|
fail ':all_pages and :page are mutually exclusive' if conditions[:page] && conditions[:all_pages]
|
|
38
|
-
logger.warn('WARNING: Only retrieving first page of results!')
|
|
38
|
+
logger.warn('WARNING: Only retrieving first page of results!') unless conditions[:page] || conditions[:all_pages]
|
|
39
39
|
|
|
40
40
|
all_pages = conditions.delete(:all_pages)
|
|
41
|
-
conditions[:resultsperpage]
|
|
41
|
+
conditions[:resultsperpage] ||= SurveyGizmo.configuration.results_per_page
|
|
42
42
|
|
|
43
43
|
Enumerator.new do |yielder|
|
|
44
44
|
response = nil
|
|
@@ -78,8 +78,8 @@ module SurveyGizmo
|
|
|
78
78
|
# @route is either a hash to be used directly or a string from which standard routes will be built
|
|
79
79
|
def routes
|
|
80
80
|
fail "route not set in #{name}" unless @route
|
|
81
|
-
|
|
82
81
|
return @route if @route.is_a?(Hash)
|
|
82
|
+
|
|
83
83
|
routes = { create: @route }
|
|
84
84
|
[:get, :update, :delete].each { |k| routes[k] = @route + '/:id' }
|
|
85
85
|
routes
|
|
@@ -130,7 +130,7 @@ module SurveyGizmo
|
|
|
130
130
|
|
|
131
131
|
### BELOW HERE ARE INSTANCE METHODS ###
|
|
132
132
|
|
|
133
|
-
# If we have an id, it's an update
|
|
133
|
+
# If we have an id, it's an update because we already know the surveygizmo assigned id
|
|
134
134
|
# Returns itself if successfully saved, but with attributes (like id) added by SurveyGizmo
|
|
135
135
|
def save
|
|
136
136
|
method, path = id ? [:post, :update] : [:put, :create]
|
data/lib/survey_gizmo/version.rb
CHANGED
data/spec/configuration_spec.rb
CHANGED
|
@@ -4,8 +4,8 @@ require 'survey_gizmo/configuration'
|
|
|
4
4
|
describe SurveyGizmo::Configuration do
|
|
5
5
|
before(:each) do
|
|
6
6
|
SurveyGizmo.configure do |config|
|
|
7
|
-
config.
|
|
8
|
-
config.
|
|
7
|
+
config.api_token = 'token'
|
|
8
|
+
config.api_token_secret = 'doken'
|
|
9
9
|
end
|
|
10
10
|
end
|
|
11
11
|
|
|
@@ -15,10 +15,10 @@ describe SurveyGizmo::Configuration do
|
|
|
15
15
|
|
|
16
16
|
it 'should allow changing user and pass' do
|
|
17
17
|
SurveyGizmo.configure do |config|
|
|
18
|
-
config.
|
|
19
|
-
config.
|
|
18
|
+
config.api_token = 'slimthug'
|
|
19
|
+
config.api_token_secret = 'fourfourz'
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
-
expect(SurveyGizmo::Connection.send(:connection).params).to eq(
|
|
22
|
+
expect(SurveyGizmo::Connection.send(:connection).params).to eq('api_token' => 'slimthug', 'api_token_secret' => 'fourfourz')
|
|
23
23
|
end
|
|
24
24
|
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -12,13 +12,13 @@ RSpec.configure do |config|
|
|
|
12
12
|
|
|
13
13
|
config.before(:each) do
|
|
14
14
|
SurveyGizmo.configure do |config|
|
|
15
|
-
config.
|
|
16
|
-
config.
|
|
17
|
-
config.logger.level = Logger::FATAL
|
|
18
|
-
end
|
|
15
|
+
config.api_token = 'king_of_the_whirled'
|
|
16
|
+
config.api_token_secret = 'dreamword'
|
|
19
17
|
|
|
20
|
-
|
|
21
|
-
config.
|
|
18
|
+
config.retry_attempts = 0
|
|
19
|
+
config.retry_interval = 0
|
|
20
|
+
|
|
21
|
+
config.logger.level = Logger::FATAL
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
@base = "#{SurveyGizmo.configuration.api_url}/#{SurveyGizmo.configuration.api_version}"
|
data/survey-gizmo-ruby.gemspec
CHANGED
|
@@ -21,7 +21,6 @@ Gem::Specification.new do |gem|
|
|
|
21
21
|
gem.add_dependency 'faraday', '>= 0.9.1', '~> 0.9'
|
|
22
22
|
gem.add_dependency 'faraday_middleware', '~> 0.10'
|
|
23
23
|
gem.add_dependency 'i18n'
|
|
24
|
-
gem.add_dependency 'pester', '>= 1.0.0'
|
|
25
24
|
gem.add_dependency 'virtus', '>= 1.0.0'
|
|
26
25
|
|
|
27
26
|
gem.add_development_dependency 'rspec', '~> 2.11.0'
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: survey-gizmo-ruby
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 6.0.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Kabari Hendrick
|
|
@@ -11,7 +11,7 @@ authors:
|
|
|
11
11
|
autorequire:
|
|
12
12
|
bindir: bin
|
|
13
13
|
cert_chain: []
|
|
14
|
-
date: 2016-
|
|
14
|
+
date: 2016-02-29 00:00:00.000000000 Z
|
|
15
15
|
dependencies:
|
|
16
16
|
- !ruby/object:Gem::Dependency
|
|
17
17
|
name: activesupport
|
|
@@ -103,20 +103,6 @@ dependencies:
|
|
|
103
103
|
- - ">="
|
|
104
104
|
- !ruby/object:Gem::Version
|
|
105
105
|
version: '0'
|
|
106
|
-
- !ruby/object:Gem::Dependency
|
|
107
|
-
name: pester
|
|
108
|
-
requirement: !ruby/object:Gem::Requirement
|
|
109
|
-
requirements:
|
|
110
|
-
- - ">="
|
|
111
|
-
- !ruby/object:Gem::Version
|
|
112
|
-
version: 1.0.0
|
|
113
|
-
type: :runtime
|
|
114
|
-
prerelease: false
|
|
115
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
116
|
-
requirements:
|
|
117
|
-
- - ">="
|
|
118
|
-
- !ruby/object:Gem::Version
|
|
119
|
-
version: 1.0.0
|
|
120
106
|
- !ruby/object:Gem::Dependency
|
|
121
107
|
name: virtus
|
|
122
108
|
requirement: !ruby/object:Gem::Requirement
|