survey-gizmo-ruby 3.0.3 → 4.0.0

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