surveymonkey 0.3.0 → 0.4.0
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/lib/surveymonkey.rb +110 -10
- data/lib/surveymonkey/version.rb +1 -1
- data/surveymonkey.gemspec +1 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f76a9537a7930fbe4e0cb07df9a37ae6f0af006b
|
4
|
+
data.tar.gz: 40359b7c3c9f074de14439a927ab2487e12ea158
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: daa7736f969950a13f79936f0047d712110e113bea725503da70629b4b3f651b5a732d042d31107dcb6cf4109c3f784eb254903814be6af60731b370e3fe4578
|
7
|
+
data.tar.gz: 50840782d00d245888fd066e80f9f5c6fab6a9cd00ad949281d3a68b2da71dbbf698176a8c88da38e24f41386bfc3f0a0a56c0e82182c273bd144a7548481dac
|
data/lib/surveymonkey.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
|
+
require "deep_merge"
|
1
2
|
require "logging"
|
2
3
|
|
3
4
|
require "surveymonkey/version"
|
4
5
|
require "surveymonkey/logging"
|
6
|
+
require "surveymonkey/error"
|
5
7
|
require "surveymonkey/request"
|
6
8
|
|
7
9
|
##
|
@@ -12,6 +14,21 @@ module Surveymonkey
|
|
12
14
|
class << self
|
13
15
|
# Constants
|
14
16
|
|
17
|
+
##
|
18
|
+
# Default page size for paginated API requests
|
19
|
+
|
20
|
+
DefaultPageSize = 1000
|
21
|
+
|
22
|
+
##
|
23
|
+
# API methods that support pagination
|
24
|
+
|
25
|
+
PaginatedMethods = {
|
26
|
+
:get_survey_list => 'surveys',
|
27
|
+
:get_collector_list => 'collectors',
|
28
|
+
:get_respondent_list => 'respondents',
|
29
|
+
:get_template_list => 'templates',
|
30
|
+
}
|
31
|
+
|
15
32
|
# Public methods
|
16
33
|
|
17
34
|
##
|
@@ -21,29 +38,112 @@ module Surveymonkey
|
|
21
38
|
|
22
39
|
def method_missing(method_name, *args)
|
23
40
|
begin
|
24
|
-
$log.debug
|
41
|
+
$log.debug sprintf("%s: %s\n", __method__, 'enter')
|
25
42
|
|
26
|
-
|
27
|
-
$log.debug(sprintf("%s: method_params: %s\n", __method__, method_params.inspect))
|
43
|
+
the_args = Hash(Array(args).shift) || {}
|
28
44
|
|
29
|
-
|
30
|
-
|
31
|
-
|
45
|
+
# extract page_size if passed in args
|
46
|
+
page_size = the_args.delete('page_size') { |key| DefaultPageSize }.to_i
|
47
|
+
$log.debug sprintf("%s: page_size: %i\n", __method__, page_size)
|
48
|
+
|
49
|
+
method_params = the_args
|
50
|
+
$log.debug sprintf("%s: method_params: %s\n", __method__, method_params.inspect)
|
51
|
+
|
52
|
+
# is this a paginated method?
|
53
|
+
pagination_field = PaginatedMethods.fetch(method_name, nil)
|
54
|
+
if pagination_field
|
55
|
+
$log.info sprintf("calling method '%s' with pagination, page size %i", method_name, page_size)
|
56
|
+
paginate_request(method_name, pagination_field, page_size, method_params)
|
57
|
+
else
|
58
|
+
$log.info sprintf("calling method '%s' without pagination", method_name)
|
59
|
+
Surveymonkey::Request.new(method_name.to_s, method_params).execute
|
60
|
+
end
|
32
61
|
|
33
62
|
rescue TypeError => e
|
34
|
-
$log.fatal
|
63
|
+
$log.fatal sprintf("%s: method parameters must be a hash\n", __method__)
|
35
64
|
exit 1
|
65
|
+
|
36
66
|
rescue KeyError => e
|
37
|
-
$log.fatal
|
67
|
+
$log.fatal sprintf("%s: method '%s' not implemented\n", __method__, method_name.to_s)
|
38
68
|
exit 1
|
69
|
+
|
39
70
|
rescue StandardError => e
|
40
|
-
$log.error
|
41
|
-
raise
|
71
|
+
$log.error sprintf("%s: %s\n", __method__, e.message)
|
72
|
+
raise e
|
73
|
+
|
42
74
|
end
|
43
75
|
end
|
44
76
|
|
45
77
|
# Private methods
|
46
78
|
private
|
47
79
|
|
80
|
+
##
|
81
|
+
# Execute a series of requests, collating the results.
|
82
|
+
|
83
|
+
def paginate_request(api_method, field, page_size = 1000, method_params = {}) # :nodoc:
|
84
|
+
begin
|
85
|
+
$log.debug sprintf("%s: enter", __method__)
|
86
|
+
|
87
|
+
current_page = 1
|
88
|
+
num_results = page_size
|
89
|
+
final_response = {}
|
90
|
+
results = []
|
91
|
+
|
92
|
+
$log.info sprintf("%s: requesting pages of %i items", __method__, page_size)
|
93
|
+
|
94
|
+
while num_results >= page_size
|
95
|
+
|
96
|
+
method_params.merge!({'page' => current_page})
|
97
|
+
method_params.merge!({'page_size' => page_size})
|
98
|
+
|
99
|
+
$log.debug sprintf("requesting %s: %s", api_method, method_params.inspect)
|
100
|
+
|
101
|
+
response = execute_request(api_method.to_sym, method_params)
|
102
|
+
|
103
|
+
page_results = response.fetch('data', {}).fetch(field, [])
|
104
|
+
|
105
|
+
$log.info sprintf("%s returned batch of %i results", api_method, page_results.length)
|
106
|
+
|
107
|
+
results.concat(page_results)
|
108
|
+
|
109
|
+
$log.info sprintf("%i total results collected from %s", results.length, api_method)
|
110
|
+
|
111
|
+
num_results = page_results.length
|
112
|
+
|
113
|
+
current_page = current_page.next
|
114
|
+
|
115
|
+
final_response.deep_merge!(response)
|
116
|
+
end
|
117
|
+
|
118
|
+
final_response['data'].store(field, results.uniq)
|
119
|
+
|
120
|
+
final_response
|
121
|
+
|
122
|
+
rescue Surveymonkey::Error => e
|
123
|
+
$log.error sprintf("SurveyMonkey API error: %s", e.message)
|
124
|
+
raise e
|
125
|
+
|
126
|
+
rescue StandardError => e
|
127
|
+
$log.error(sprintf("%s: %s\n", __method__, e.message))
|
128
|
+
raise e
|
129
|
+
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
##
|
134
|
+
# Execute a single API request.
|
135
|
+
def execute_request(method_name, method_params = {}) # :nodoc:
|
136
|
+
begin
|
137
|
+
$log.debug sprintf("%s: %s %s", __method__, method_name.to_s, method_params.inspect)
|
138
|
+
|
139
|
+
Surveymonkey::Request.new(method_name.to_s, {'method_params' => method_params}).execute
|
140
|
+
|
141
|
+
rescue StandardError => e
|
142
|
+
$log.error sprintf("%s: %s\n", __method__, e.message)
|
143
|
+
raise e
|
144
|
+
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
48
148
|
end
|
49
149
|
end
|
data/lib/surveymonkey/version.rb
CHANGED
data/surveymonkey.gemspec
CHANGED
@@ -28,6 +28,7 @@ Gem::Specification.new do |spec|
|
|
28
28
|
spec.add_development_dependency "rspec", "~> 2.4"
|
29
29
|
spec.add_development_dependency "rubygems-tasks", "~> 0.2"
|
30
30
|
|
31
|
+
spec.add_runtime_dependency "deep_merge", "~> 1"
|
31
32
|
spec.add_runtime_dependency "httparty", "~> 0.13"
|
32
33
|
spec.add_runtime_dependency "json", "~> 1.8"
|
33
34
|
spec.add_runtime_dependency "logging", "~> 2"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: surveymonkey
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steve Huff
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - ~>
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0.2'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: deep_merge
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ~>
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '1'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ~>
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '1'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: httparty
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|