survey-gizmo-ruby 3.0.3 → 4.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ff4381315b3f5ce301adca67c272f4966b4c5e8e
4
- data.tar.gz: 21531bfec2ce56c5946b14ffd7a7f011d177ceeb
3
+ metadata.gz: ea584803e0be7b02dc62f295924bc21bac08f0ba
4
+ data.tar.gz: 183b970af5cdee838e5a64e331e232faf1075541
5
5
  SHA512:
6
- metadata.gz: 453a7400ff86b0f8ac68d525b3e5dad504c46bd20fb002e9dfb4bb8f5964f9c907c781a4afb7f3c4a4b0ab423a5dd3716f2b8d2c4d71620d4bcf25786e2eb2ee
7
- data.tar.gz: 7b4d3ccc7cdde1a2fdeba1883d91669ae87c98f982ad78149830820c52b24201bcd287442c3e487db7caaef5c268ac1b19b5ab88562213d88a08ee59f98a8765
6
+ metadata.gz: 74f7f2967b1dedb1f95d88e47ff03d5c038d7b9ed7e57170c4463d02af57b983c64b50b5f97c46b61c87843e2add15ce97aacf99dbe21422daae3ed0cca15a4b
7
+ data.tar.gz: 2e000e5f1e3c657959ffd82455355cdf5b9dddf319a850700cf2b3e707377bbad5182eb01cb938a790c1cff8602ed6b27091fffab2ccda89f99aaa401a136cae
data/README.md CHANGED
@@ -6,7 +6,12 @@ Currently supports SurveyGizmo API **v4** (default) and **v3**.
6
6
 
7
7
  ## Versions
8
8
 
9
- ### Major Changes in 3.0
9
+ ### Major Changes in 4.x
10
+
11
+ * BREAKING CHANGE: There is no more error tracking. If the API gives an error or bad response, an exception will be raised.
12
+ * BREAKING CHANGE: There is no more ```copy``` method
13
+
14
+ ### Major Changes in 3.x
10
15
 
11
16
  * BREAKING CHANGE: Configuration is completely different
12
17
  * Important Change: Defaults to using the v4 SurveyGizmo API endpoint to take advantage of various API bug fixes (notably team ownership is broken in v3)
@@ -32,16 +37,19 @@ require 'survey-gizmo-ruby'
32
37
 
33
38
  # Configure your credentials
34
39
  SurveyGizmo.configure do |config|
35
- config.user = 'still_tippin@test.com'
36
- config.password = 'ittakesgrindintobeaking'
40
+ config.user = 'still_tippin@woodgraingrip.com'
41
+ config.password = 'it_takes_grindin_to_be_a_king'
37
42
 
38
43
  # api_version defaults to v4, but you can probably set to v3 safely if you suspect a bug in v4
39
44
  config.api_version = 'v4'
40
45
  end
41
46
 
47
+ # Retrieve all your surveys
48
+ surveys = SurveyGizmo::API::Survey.all
49
+
42
50
  # Retrieve the survey with id: 12345
43
51
  survey = SurveyGizmo::API::Survey.first(id: 12345)
44
- survey.title # => My Title
52
+ survey.title # => "My Title"
45
53
  survey.pages # => [page1, page2,...]
46
54
  survey.number_of_completed_responses # => 355
47
55
  survey.server_has_new_results_since?(Time.now.utc - 2.days) # => true
@@ -52,22 +60,21 @@ questions = SurveyGizmo::API::Question.all(survey_id: survey.id, page_id: 1)
52
60
  # Or just retrieve all questions for all pages of this survey
53
61
  questions = survey.questions
54
62
 
55
- # Create a question for your survey
63
+ # Create a question for your survey. The returned object will be given an :id parameter by SG.
56
64
  question = SurveyGizmo::API::Question.create(survey_id: survey.id, title: 'Do you like ruby?', type: 'checkbox')
65
+ # Update a question
57
66
  question.title = "Do you LOVE Ruby?"
58
- question.save # => question # (but now with the id assigned by SurveyGizmo as the :id property)
59
-
60
- # Error handling
61
- question.save # => false
62
- question.errors # => ['There was an error']
67
+ question.save
68
+ # Destroy a question
69
+ question.destroy
63
70
 
64
71
  # Retrieving SurveyResponses for a given survey.
65
- # Note that because of both options being hashes, you need to enclose them both in
72
+ # Note that because both options are hashes, you need to enclose them both in
66
73
  # braces to page successfully!
67
74
  responses = SurveyGizmo::API::Response.all({ survey_id: survey.id }, { page: 1 })
68
75
 
69
76
  # Retrieving page 2 of non test data SurveyResponses
70
- filters = {page: 2, filters: [{ field: 'istestdata', operator: '<>', value: 1 }] }
77
+ filters = { page: 2, filters: [{ field: 'istestdata', operator: '<>', value: 1 }] }
71
78
  responses = SurveyGizmo::API::Response.all({ survey_id: survey_id }, filters)
72
79
  ```
73
80
 
@@ -127,9 +134,11 @@ The [Virtus](https://github.com/solnic/virtus) gem is included to handle the att
127
134
 
128
135
  ## Desirable/Missing Features
129
136
 
137
+ * Better foreign language support
138
+ * Use Faraday instead of Httparty (partied too hard)
139
+ * Better specs with VCR/Webmock would be nice.
130
140
  * There are several API objects that are available and not included in this gem. AccountTeams, for instance, has some skeleton code but is untested.
131
141
  * OAuth authentication ability.
132
- * Better specs with VCR/Webmock would be nice.
133
142
 
134
143
  # Copyright
135
144
 
@@ -12,6 +12,7 @@ require 'survey_gizmo/version'
12
12
  require 'survey_gizmo/survey_gizmo'
13
13
  require 'survey_gizmo/configuration'
14
14
 
15
+ require 'survey_gizmo/multilingual_title'
15
16
  require 'survey_gizmo/resource'
16
17
  require 'survey_gizmo/rest_response'
17
18
 
@@ -11,18 +11,11 @@ module SurveyGizmo; module API
11
11
  attribute :value, String
12
12
  attribute :properties, Hash
13
13
 
14
- # routing
14
+ include SurveyGizmo::MultilingualTitle
15
+
15
16
  route '/survey/:survey_id/surveypage/:page_id/surveyquestion/:question_id/surveyoption', via: :create
16
17
  route '/survey/:survey_id/surveypage/:page_id/surveyquestion/:question_id/surveyoption/:id', via: [:get, :update, :delete]
17
18
 
18
- # survey gizmo sends a hash back for :title
19
- # @private
20
- def title_with_multilingual=(val)
21
- self.title_without_multilingual = val.is_a?(Hash) ? val['English'] : val
22
- end
23
-
24
- alias_method_chain :title=, :multilingual
25
-
26
19
  def to_param_options
27
20
  { id: self.id, survey_id: self.survey_id, page_id: self.page_id, question_id: self.question_id }
28
21
  end
@@ -10,9 +10,11 @@ module SurveyGizmo; module API
10
10
  attribute :after, Integer
11
11
  attribute :survey_id, Integer
12
12
 
13
+ include SurveyGizmo::MultilingualTitle
14
+
13
15
  # routing
14
- route '/survey/:survey_id/surveypage', :via => :create
15
- route '/survey/:survey_id/surveypage/:id', :via => [:get, :update, :delete]
16
+ route '/survey/:survey_id/surveypage', via: :create
17
+ route '/survey/:survey_id/surveypage/:id', via: [:get, :update, :delete]
16
18
 
17
19
  def survey
18
20
  @survey ||= SurveyGizmo::API::Survey.first(id: survey_id)
@@ -22,13 +24,6 @@ module SurveyGizmo; module API
22
24
  @questions ||= SurveyGizmo::API::Question.all(survey_id: survey_id, page_id: id)
23
25
  end
24
26
 
25
- # survey gizmo sends a hash back for :title
26
- def title_with_multilingual=(val)
27
- self.title_without_multilingual = val.is_a?(Hash) ? val : { 'English' => val }
28
- end
29
-
30
- alias_method_chain :title=, :multilingual
31
-
32
27
  def to_param_options
33
28
  { id: self.id, survey_id: self.survey_id }
34
29
  end
@@ -4,7 +4,7 @@ module SurveyGizmo; module API
4
4
  include SurveyGizmo::Resource
5
5
 
6
6
  attribute :id, Integer
7
- attribute :title, String
7
+ attribute :title, Hash
8
8
  attribute :type, String
9
9
  attribute :description, String
10
10
  attribute :shortname, String
@@ -17,6 +17,8 @@ module SurveyGizmo; module API
17
17
 
18
18
  alias_attribute :_subtype, :type
19
19
 
20
+ include SurveyGizmo::MultilingualTitle
21
+
20
22
  route '/survey/:survey_id/surveyquestion/:id', via: :get
21
23
  route '/survey/:survey_id/surveypage/:page_id/surveyquestion', via: :create
22
24
  route '/survey/:survey_id/surveypage/:page_id/surveyquestion/:id', via: [:update, :delete]
@@ -38,14 +40,6 @@ module SurveyGizmo; module API
38
40
  .each { |subquestion| subquestion.parent_question_id = id }
39
41
  end
40
42
 
41
- # survey gizmo sends a hash back for :title
42
- # @private
43
- def title_with_multilingual=(val)
44
- self.title_without_multilingual = val.is_a?(Hash) ? val['English'] : val
45
- end
46
-
47
- alias_method_chain :title=, :multilingual
48
-
49
43
  # @see SurveyGizmo::Resource#to_param_options
50
44
  def to_param_options
51
45
  { id: self.id, survey_id: self.survey_id, page_id: self.page_id }
@@ -17,7 +17,6 @@ module SurveyGizmo; module API
17
17
  attribute :url, Hash # READ-ONLY
18
18
  attribute :answers, Hash # READ-ONLY
19
19
 
20
- # routing
21
20
  route '/survey/:survey_id/surveyresponse', via: :create
22
21
  route '/survey/:survey_id/surveyresponse/:id', via: [:get, :update, :delete]
23
22
 
@@ -53,7 +53,7 @@ module SurveyGizmo; module API
53
53
  filters = [{
54
54
  field: 'datesubmitted',
55
55
  operator: '>=',
56
- value: time.in_time_zone("Eastern Time (US & Canada)").strftime('%Y-%m-%d %H:%M:%S')
56
+ value: time.in_time_zone('Eastern Time (US & Canada)').strftime('%Y-%m-%d %H:%M:%S')
57
57
  }]
58
58
  responses = SurveyGizmo::API::Response.all({ survey_id: self.id }, { page: 1, filters: filters })
59
59
  responses.size > 0
@@ -0,0 +1,16 @@
1
+ # Inclusion of this module must come AFTER the virtus call:
2
+ # attribute :title
3
+
4
+ module SurveyGizmo
5
+ module MultilingualTitle
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ alias_method_chain :title=, :multilingual
10
+ end
11
+
12
+ def title_with_multilingual=(val)
13
+ self.title_without_multilingual = val.is_a?(Hash) ? val['English'] : val
14
+ end
15
+ end
16
+ end
@@ -16,116 +16,52 @@ module SurveyGizmo
16
16
  @descendants ||= Set.new
17
17
  end
18
18
 
19
- # These are methods that every API resource has to access resources
20
- # in Survey Gizmo
19
+ # These are methods that every API resource can use to access resources in SurveyGizmo
21
20
  module ClassMethods
22
-
23
- # Convert a [Hash] of filters into a query string
24
- # @param [Hash] filters - simple pagination or other options at the top level, and surveygizmo "filters" at the :filters key
25
- # @return [String]
26
- #
27
- # example input: { page: 2, filters: [{:field=>"istestdata", :operator=>"<>", :value=>1}] }
28
- #
29
- # The top level keys (e.g. page, resultsperpage) get simply encoded in the url, while the
30
- # contents of the array of hashes passed at filters[:filters] gets turned into the format
31
- # SurveyGizmo expects for its internal filtering, for example:
32
- #
33
- # filter[field][0]=istestdata&filter[operator][0]=<>&filter[value][0]=1
34
- def convert_filters_into_query_string(filters = nil)
35
- return '' unless filters && filters.size > 0
36
-
37
- output_filters = filters[:filters] || []
38
- filter_hash = {}
39
- output_filters.each_with_index do |filter,i|
40
- filter_hash.merge!(
41
- "filter[field][#{i}]".to_sym => "#{filter[:field]}",
42
- "filter[operator][#{i}]".to_sym => "#{filter[:operator]}",
43
- "filter[value][#{i}]".to_sym => "#{filter[:value]}",
44
- )
45
- end
46
- simple_filters = filters.reject { |k,v| k == :filters }
47
- filter_hash.merge!(simple_filters)
48
-
49
- uri = Addressable::URI.new
50
- uri.query_values = filter_hash
51
- "?#{uri.query}"
52
- end
53
-
54
- # Get a list of resources
55
- # @param [Hash] conditions
56
- # @param [Hash] filters
57
- # @return [Array] of objects of this class
21
+ # Get an array of resources
58
22
  def all(conditions = {}, filters = nil)
59
23
  response = RestResponse.new(SurveyGizmo.get(handle_route(:create, conditions) + convert_filters_into_query_string(filters)))
60
- if response.ok?
61
- _collection = response.data.map { |datum| datum.is_a?(Hash) ? self.new(datum) : datum }
62
-
63
- # Add in the properties from the conditions hash because many of the important ones (like survey_id) are
64
- # not often part of the SurveyGizmo returned data
65
- conditions.keys.each do |k|
66
- if conditions[k] && instance_methods.include?(k)
67
- _collection.each { |c| c[k] ||= conditions[k] }
68
- end
69
- end
24
+ _collection = response.data.map { |datum| datum.is_a?(Hash) ? self.new(datum) : datum }
70
25
 
71
- # Sub questions are not pulled by default so we have to retrieve them
72
- if self == SurveyGizmo::API::Question
73
- _collection += _collection.map { |question| question.sub_questions }.flatten
26
+ # Add in the properties from the conditions hash because many of the important ones (like survey_id) are
27
+ # not often part of the SurveyGizmo returned data
28
+ conditions.keys.each do |k|
29
+ if conditions[k] && instance_methods.include?(k)
30
+ _collection.each { |c| c[k] ||= conditions[k] }
74
31
  end
32
+ end
75
33
 
76
- _collection
77
- else
78
- []
34
+ # Sub questions are not pulled by default so we have to retrieve them manually
35
+ # SurveyGizmo claims they will fix this bug and eventually all questions will be
36
+ # returned in one request.
37
+ if self == SurveyGizmo::API::Question
38
+ _collection += _collection.map { |question| question.sub_questions }.flatten
79
39
  end
40
+
41
+ _collection
80
42
  end
81
43
 
82
- # Get the first resource
83
- # @param [Hash] conditions
84
- # @param [Hash] filters
85
- # @return [Object, nil]
44
+ # Retrieve a single resource.
86
45
  def first(conditions = {}, filters = nil)
87
46
  response = RestResponse.new(SurveyGizmo.get(handle_route(:get, conditions) + convert_filters_into_query_string(filters)))
88
47
  # Add in the properties from the conditions hash because many of the important ones (like survey_id) are
89
48
  # not often part of the SurveyGizmo's returned data
90
- response.ok? ? new(conditions.merge(response.data)) : nil
49
+ new(conditions.merge(response.data))
91
50
  end
92
51
 
93
- # Create a new resource
94
- # @param [Hash] attributes
95
- # @return [Resource]
96
- # The newly created Resource instance
52
+ # Create a new resource. Returns the newly created Resource instance.
97
53
  def create(attributes = {})
98
54
  resource = new(attributes)
99
55
  resource.create_record_in_surveygizmo
100
56
  resource
101
57
  end
102
58
 
103
- # Copy a resource
104
- # @param [Integer] id
105
- # @param [Hash] attributes
106
- # @return [Resource]
107
- # The newly created resource instance
108
- def copy(attributes = {})
109
- attributes[:copy] = true
110
- resource = new(attributes)
111
- resource.__send__(:_copy)
112
- resource
113
- end
114
-
115
- # Deleted the Resource from Survey Gizmo
116
- # @param [Hash] conditions
117
- # @return [Boolean]
59
+ # Delete resources
118
60
  def destroy(conditions)
119
- RestResponse.new(SurveyGizmo.delete(handle_route(:delete, conditions))).ok?
61
+ RestResponse.new(SurveyGizmo.delete(handle_route(:delete, conditions)))
120
62
  end
121
63
 
122
64
  # Define the path where a resource is located
123
- # @param [String] path
124
- # the path in Survey Gizmo for the resource
125
- # @param [Hash] options
126
- # @option options [Array] :via
127
- # which is `:get`, `:create`, `:update`, `:delete`, or `:any`
128
- # @scope class
129
65
  def route(path, options)
130
66
  methods = options[:via]
131
67
  methods = [:get, :create, :update, :delete] if methods == :any
@@ -134,67 +70,84 @@ module SurveyGizmo
134
70
 
135
71
  # This method replaces the :page_id, :survey_id, etc strings defined in each model's URI routes with the
136
72
  # values being passed in interpolation hash with the same keys.
137
- # @api private
138
73
  def handle_route(key, interpolation_hash)
139
74
  path = @paths[key]
140
- raise "No routes defined for `#{key}` in #{self.name}" unless path
141
- raise "User/password hash not setup!" if SurveyGizmo.default_params.empty?
75
+ fail "No routes defined for `#{key}` in #{self.name}" unless path
76
+ fail "User/password hash not setup!" if SurveyGizmo.default_params.empty?
142
77
 
143
78
  path.gsub(/:(\w+)/) do |m|
144
79
  raise(SurveyGizmo::URLError, "Missing RESTful parameters in request: `#{m}`") unless interpolation_hash[$1.to_sym]
145
80
  interpolation_hash[$1.to_sym]
146
81
  end
147
82
  end
83
+
84
+ # Convert a [Hash] of filters into a query string
85
+ # @param [Hash] filters - simple pagination or other options at the top level, and surveygizmo "filters" at the :filters key
86
+ # @return [String]
87
+ #
88
+ # example input: { page: 2, filters: [{:field=>"istestdata", :operator=>"<>", :value=>1}] }
89
+ #
90
+ # The top level keys (e.g. page, resultsperpage) get simply encoded in the url, while the
91
+ # contents of the array of hashes passed in the filters hash get turned into the format
92
+ # SurveyGizmo expects for its internal filtering, for example:
93
+ #
94
+ # filter[field][0]=istestdata&filter[operator][0]=<>&filter[value][0]=1
95
+ def convert_filters_into_query_string(filters = nil)
96
+ return '' unless filters && filters.size > 0
97
+
98
+ output_filters = filters[:filters] || []
99
+ filter_hash = {}
100
+ output_filters.each_with_index do |filter,i|
101
+ filter_hash.merge!(
102
+ "filter[field][#{i}]".to_sym => "#{filter[:field]}",
103
+ "filter[operator][#{i}]".to_sym => "#{filter[:operator]}",
104
+ "filter[value][#{i}]".to_sym => "#{filter[:value]}",
105
+ )
106
+ end
107
+ simple_filters = filters.reject { |k,v| k == :filters }
108
+ filter_hash.merge!(simple_filters)
109
+
110
+ uri = Addressable::URI.new
111
+ uri.query_values = filter_hash
112
+ "?#{uri.query}"
113
+ end
148
114
  end
149
115
 
150
- # Save the instance to Survey Gizmo
116
+ # Save the resource to SurveyGizmo
151
117
  def save
152
118
  if id
153
119
  # Then it's an update, because we already know the surveygizmo assigned id
154
- handle_response(SurveyGizmo.post(handle_route(:update), query: self.attributes_without_blanks))
155
- @latest_response.ok?
120
+ RestResponse.new(SurveyGizmo.post(handle_route(:update), query: self.attributes_without_blanks))
156
121
  else
157
122
  create_record_in_surveygizmo
158
123
  end
159
124
  end
160
125
 
161
- # fetch resource from SurveyGizmo and reload the attributes
162
- # @return [self, false]
163
- # Returns the object, if saved. Otherwise returns false.
126
+ # Repopulate the attributes based on what is on SurveyGizmo's servers
164
127
  def reload
165
- handle_response(SurveyGizmo.get(handle_route(:get)))
166
- if @latest_response.ok?
167
- self.attributes = @latest_response['data']
168
- self
169
- else
170
- false
171
- end
128
+ self.attributes = RestResponse.new(SurveyGizmo.get(handle_route(:get))).data
129
+ self
172
130
  end
173
131
 
174
- # Deleted the Resource from Survey Gizmo
175
- # @return [Boolean]
132
+ # Delete the Resource from Survey Gizmo
176
133
  def destroy
177
- if id
178
- handle_response(SurveyGizmo.delete(handle_route(:delete)))
179
- @latest_response.ok?
180
- else
181
- false
182
- end
134
+ fail "No id; can't delete #{self.inspect}!" unless id
135
+ RestResponse.new(SurveyGizmo.delete(handle_route(:delete)))
183
136
  end
184
137
 
185
138
  # Sets the hash that will be used to interpolate values in routes. It needs to be defined per model.
186
139
  # @return [Hash] a hash of the values needed in routing
187
140
  def to_param_options
188
- raise "Define #to_param_options in #{self.class.name}"
141
+ fail "Define #to_param_options in #{self.class.name}"
189
142
  end
190
143
 
191
- # Any errors returned by Survey Gizmo
192
- # @return [Array]
193
- def errors
194
- @errors ||= []
144
+ # Returns itself if successfully saved, but with attributes added by SurveyGizmo
145
+ def create_record_in_surveygizmo(attributes = {})
146
+ rest_response = RestResponse.new(SurveyGizmo.put(handle_route(:create), query: self.attributes_without_blanks))
147
+ self.attributes = rest_response.data
148
+ self
195
149
  end
196
150
 
197
- # @visibility private
198
151
  def inspect
199
152
  if ENV['GIZMO_DEBUG']
200
153
  ap "CLASS: #{self.class}"
@@ -220,18 +173,6 @@ module SurveyGizmo
220
173
  "#<#{self.class.name}:#{self.object_id}>\n#{attribute_strings.join()}"
221
174
  end
222
175
 
223
- # Returns itself if successfully saved, but with attributes added by SurveyGizmo
224
- def create_record_in_surveygizmo(attributes = {})
225
- http = RestResponse.new(SurveyGizmo.put(handle_route(:create), query: self.attributes_without_blanks))
226
- handle_response(http)
227
- if http.ok?
228
- self.attributes = http.data
229
- self
230
- else
231
- false
232
- end
233
- end
234
-
235
176
  protected
236
177
 
237
178
  def attributes_without_blanks
@@ -243,27 +184,5 @@ module SurveyGizmo
243
184
  def handle_route(key)
244
185
  self.class.handle_route(key, to_param_options)
245
186
  end
246
-
247
- def handle_response(rest_response, &block)
248
- @latest_response = rest_response
249
- if @latest_response.ok?
250
- self.errors.clear
251
- true
252
- else
253
- errors << @latest_response.message
254
- false
255
- end
256
- end
257
-
258
- def _copy(attributes = {})
259
- http = RestResponse.new(SurveyGizmo.post(handle_route(:update), query: self.attributes_without_blanks))
260
- handle_response(http) do
261
- if http.ok?
262
- self.attributes = http.data
263
- else
264
- false
265
- end
266
- end
267
- end
268
187
  end
269
188
  end
@@ -1,4 +1,4 @@
1
- # This class normalizes the response returned by Survey Gizmo
1
+ # This class normalizes the response returned by Survey Gizmo, including validation.
2
2
  class RestResponse
3
3
  attr_accessor :raw_response
4
4
  attr_accessor :parsed_response
@@ -6,16 +6,20 @@ class RestResponse
6
6
  def initialize(rest_response)
7
7
  @raw_response = rest_response
8
8
  @parsed_response = rest_response.parsed_response
9
+
10
+ if ENV['GIZMO_DEBUG']
11
+ ap 'SG Response: '
12
+ ap @parsed_response
13
+ end
14
+
15
+ fail "Bad response: #{rest_response.inspect}" unless @parsed_response['result_ok'] && @parsed_response['result_ok'].to_s.downcase == 'true'
9
16
  return unless data
10
17
 
11
18
  # Handle really crappy [] notation in SG API, so far just in SurveyResponse
12
19
  (data.is_a?(Array) ? data : [data]).each do |datum|
13
-
14
- # SurveyGizmo returns date information in EST, but does not
15
- # provide time zone information in their API responses.
16
- #
17
- # See https://surveygizmov4.helpgizmo.com/help/article/link/date-and-time-submitted
18
20
  unless datum['datesubmitted'].blank?
21
+ # SurveyGizmo returns date information in EST but does not provide time zone information.
22
+ # See https://surveygizmov4.helpgizmo.com/help/article/link/date-and-time-submitted
19
23
  datum['datesubmitted'] = datum['datesubmitted'] + ' EST'
20
24
  end
21
25
 
@@ -41,18 +45,6 @@ class RestResponse
41
45
  end
42
46
  end
43
47
 
44
- def ok?
45
- if ENV['GIZMO_DEBUG']
46
- ap 'SG Response: '
47
- ap @parsed_response
48
- end
49
-
50
- if @parsed_response['result_ok'] && @parsed_response['result_ok'].to_s.downcase == 'false' && @parsed_response['message'] && @parsed_response['code'] && @parsed_response['message'] =~ /service/i
51
- raise Exception, "#{@parsed_response['message']}: #{@parsed_response['code']}"
52
- end
53
- @parsed_response['result_ok'] && @parsed_response['result_ok'].to_s.downcase == 'true'
54
- end
55
-
56
48
  # The parsed JSON data of the response
57
49
  def data
58
50
  @_data ||= @parsed_response['data']
@@ -1,3 +1,3 @@
1
1
  module SurveyGizmo
2
- VERSION = '3.0.3'
2
+ VERSION = '4.0.0'
3
3
  end
@@ -135,7 +135,7 @@ describe 'Survey Gizmo Resource' do
135
135
  end
136
136
 
137
137
  describe SurveyGizmo::API::Page do
138
- let(:create_attributes) { {:survey_id => 1234, :title => {'English' => 'Spec Page'}} }
138
+ let(:create_attributes) { {:survey_id => 1234, :title => 'Spec Page' } }
139
139
  let(:get_attributes) { create_attributes.merge(:id => 1) }
140
140
  let(:update_attributes) { {:survey_id => 1234, :title => 'Updated'} }
141
141
  let(:first_params) { {:id => 1, :survey_id => 1234 } }
@@ -39,7 +39,7 @@ shared_examples_for 'an API object' do
39
39
 
40
40
  it "should return false if the request fails" do
41
41
  stub_request(:get, /#{@base}/).to_return(json_response(false, "something is wrong"))
42
- described_class.first(first_params).should == nil
42
+ expect { described_class.first(first_params) }.to raise_error
43
43
  end
44
44
  end
45
45
 
@@ -56,7 +56,7 @@ shared_examples_for 'an API object' do
56
56
 
57
57
  it "cannot be destroyed if new" do
58
58
  @obj.id = nil
59
- @obj.destroy.should be_false
59
+ expect { @obj.destroy }.to raise_error
60
60
  end
61
61
  end
62
62
 
@@ -3,31 +3,10 @@ shared_examples_for 'an object with errors' do
3
3
  stub_request(:any, /#{@base}/).to_return(json_response(false, 'There was an error!'))
4
4
  end
5
5
 
6
- context "class methods" do
7
- it { described_class.first(get_attributes).should be_nil }
8
- it { described_class.all(get_attributes).should be_empty }
9
- end
10
-
11
- context "instance methods" do
12
- before(:each) do
13
- @obj = described_class.new(create_attributes)
14
- end
15
-
16
- it "should have an errors array" do
17
- @obj.errors.should == []
18
- end
19
-
20
- it "should add errors on failed requests" do
21
- @obj.save.should == false
22
- @obj.errors.should include('There was an error!')
23
- end
24
-
25
- it "should empty the errors array if object gets saved" do
26
- stub_request(:any, /#{@base}/).to_return(json_response(false, 'There was an error!'), json_response(true, get_attributes))
27
- @obj.save.should == false
28
- @obj.errors.should_not be_empty
29
- @obj.save.id.nil?.should == false
30
- @obj.errors.should be_empty
6
+ context 'class methods' do
7
+ it 'should raise errors' do
8
+ expect { described_class.first(get_attributes) }.to raise_error
9
+ expect { described_class.all(get_attributes) }.to raise_error
31
10
  end
32
11
  end
33
12
  end
@@ -22,8 +22,6 @@ Gem::Specification.new do |gem|
22
22
  gem.add_dependency 'i18n'
23
23
  gem.add_dependency 'virtus', '>= 1.0.0'
24
24
 
25
- gem.add_development_dependency 'bluecloth'
26
- gem.add_development_dependency 'net-http-spy'
27
25
  gem.add_development_dependency 'rspec', '~> 2.11.0'
28
26
  gem.add_development_dependency 'rake'
29
27
  gem.add_development_dependency 'webmock'
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: 3.0.3
4
+ version: 4.0.0
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: 2015-09-23 00:00:00.000000000 Z
14
+ date: 2015-10-19 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: activesupport
@@ -97,34 +97,6 @@ dependencies:
97
97
  - - ">="
98
98
  - !ruby/object:Gem::Version
99
99
  version: 1.0.0
100
- - !ruby/object:Gem::Dependency
101
- name: bluecloth
102
- requirement: !ruby/object:Gem::Requirement
103
- requirements:
104
- - - ">="
105
- - !ruby/object:Gem::Version
106
- version: '0'
107
- type: :development
108
- prerelease: false
109
- version_requirements: !ruby/object:Gem::Requirement
110
- requirements:
111
- - - ">="
112
- - !ruby/object:Gem::Version
113
- version: '0'
114
- - !ruby/object:Gem::Dependency
115
- name: net-http-spy
116
- requirement: !ruby/object:Gem::Requirement
117
- requirements:
118
- - - ">="
119
- - !ruby/object:Gem::Version
120
- version: '0'
121
- type: :development
122
- prerelease: false
123
- version_requirements: !ruby/object:Gem::Requirement
124
- requirements:
125
- - - ">="
126
- - !ruby/object:Gem::Version
127
- version: '0'
128
100
  - !ruby/object:Gem::Dependency
129
101
  name: rspec
130
102
  requirement: !ruby/object:Gem::Requirement
@@ -206,6 +178,7 @@ files:
206
178
  - lib/survey_gizmo/api/survey.rb
207
179
  - lib/survey_gizmo/api/survey_campaign.rb
208
180
  - lib/survey_gizmo/configuration.rb
181
+ - lib/survey_gizmo/multilingual_title.rb
209
182
  - lib/survey_gizmo/resource.rb
210
183
  - lib/survey_gizmo/rest_response.rb
211
184
  - lib/survey_gizmo/survey_gizmo.rb
@@ -242,7 +215,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
242
215
  version: '0'
243
216
  requirements: []
244
217
  rubyforge_project:
245
- rubygems_version: 2.4.5
218
+ rubygems_version: 2.4.5.1
246
219
  signing_key:
247
220
  specification_version: 4
248
221
  summary: Gem to use the SurveyGizmo.com REST API, v3+