surveymonkey 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|