survey-gizmo-ruby 1.0.5 → 2.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 +4 -4
- data/.gitignore +3 -1
- data/Gemfile +1 -2
- data/README.md +88 -50
- data/Rakefile +2 -1
- data/lib/survey-gizmo-ruby.rb +1 -1
- data/lib/survey_gizmo/api/contact.rb +3 -3
- data/lib/survey_gizmo/api/option.rb +3 -4
- data/lib/survey_gizmo/api/page.rb +9 -5
- data/lib/survey_gizmo/api/question.rb +31 -17
- data/lib/survey_gizmo/api/response.rb +8 -9
- data/lib/survey_gizmo/api/survey.rb +21 -6
- data/lib/survey_gizmo/resource.rb +114 -214
- data/lib/survey_gizmo/rest_response.rb +82 -0
- data/lib/survey_gizmo/survey_gizmo.rb +27 -22
- data/spec/resource_spec.rb +81 -55
- data/spec/support/methods.rb +7 -4
- data/spec/support/spec_shared_api_object.rb +25 -71
- data/spec/support/spec_shared_object_with_errors.rb +6 -8
- data/spec/support/test_resource_classes.rb +4 -21
- data/spec/survey-gizmo-ruby_spec.rb +8 -98
- data/survey-gizmo-ruby.gemspec +22 -17
- metadata +68 -11
- data/lib/survey_gizmo/collection.rb +0 -72
@@ -0,0 +1,82 @@
|
|
1
|
+
# This class normalizes the response returned by Survey Gizmo
|
2
|
+
class RestResponse
|
3
|
+
attr_accessor :raw_response
|
4
|
+
attr_accessor :parsed_response
|
5
|
+
|
6
|
+
def initialize(rest_response)
|
7
|
+
@raw_response = rest_response
|
8
|
+
@parsed_response = rest_response.parsed_response
|
9
|
+
return unless data
|
10
|
+
|
11
|
+
# Handle really crappy [] notation in SG API, so far just in SurveyResponse
|
12
|
+
(data.is_a?(Array) ? data : [data]).each do |datum|
|
13
|
+
datum.keys.grep(/^\[/).each do |key|
|
14
|
+
next if datum[key].nil? || datum[key].length == 0
|
15
|
+
|
16
|
+
parent = find_attribute_parent(key)
|
17
|
+
datum[parent] ||= {}
|
18
|
+
|
19
|
+
case key.downcase
|
20
|
+
when /(url|variable.*standard)/
|
21
|
+
datum[parent][cleanup_attribute_name(key).to_sym] = datum[key]
|
22
|
+
when /variable.*shown/
|
23
|
+
datum[parent][cleanup_attribute_name(key).to_i] = datum[key].include?('1')
|
24
|
+
when /variable/
|
25
|
+
datum[parent][cleanup_attribute_name(key).to_i] = datum[key].to_i
|
26
|
+
when /question/
|
27
|
+
datum[parent][key] = datum[key]
|
28
|
+
end
|
29
|
+
|
30
|
+
datum.delete(key)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def ok?
|
36
|
+
if ENV['GIZMO_DEBUG']
|
37
|
+
ap 'SG Response: '
|
38
|
+
ap @parsed_response
|
39
|
+
end
|
40
|
+
|
41
|
+
if @parsed_response['result_ok'] && @parsed_response['result_ok'].to_s.downcase == 'false' && @parsed_response['message'] && @parsed_response['code'] && @parsed_response['message'] =~ /service/i
|
42
|
+
raise Exception, "#{@parsed_response['message']}: #{@parsed_response['code']}"
|
43
|
+
end
|
44
|
+
@parsed_response['result_ok'] && @parsed_response['result_ok'].to_s.downcase == 'true'
|
45
|
+
end
|
46
|
+
|
47
|
+
# The parsed JSON data of the response
|
48
|
+
def data
|
49
|
+
@_data ||= @parsed_response['data'] #|| {'id' => @parsed_response['id']}
|
50
|
+
end
|
51
|
+
|
52
|
+
# The error message if there is one
|
53
|
+
def message
|
54
|
+
@_message ||= @parsed_response['message']
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def cleanup_attribute_name(attr)
|
61
|
+
attr.downcase.gsub(/[^[:alnum:]]+/, '_')
|
62
|
+
.gsub(/(url|variable|standard|shown)/, '')
|
63
|
+
.gsub(/_+/, '_')
|
64
|
+
.gsub(/^_/, '')
|
65
|
+
.gsub(/_$/, '')
|
66
|
+
end
|
67
|
+
|
68
|
+
def find_attribute_parent(attr)
|
69
|
+
case attr.downcase
|
70
|
+
when /url/
|
71
|
+
'url'
|
72
|
+
when /variable.*standard/
|
73
|
+
'meta'
|
74
|
+
when /variable.*shown/
|
75
|
+
'shown'
|
76
|
+
when /variable/
|
77
|
+
'variable'
|
78
|
+
when /question/
|
79
|
+
'answers'
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -1,23 +1,24 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
|
10
|
-
|
11
|
-
require
|
12
|
-
|
13
|
-
|
14
|
-
require
|
15
|
-
require
|
16
|
-
require
|
17
|
-
require
|
18
|
-
require
|
19
|
-
require
|
20
|
-
require
|
1
|
+
require 'active_support/core_ext/string'
|
2
|
+
require 'active_support/core_ext/module'
|
3
|
+
require 'active_support/core_ext/hash'
|
4
|
+
require 'active_support/core_ext/object/blank'
|
5
|
+
require 'active_support/concern'
|
6
|
+
require 'awesome_print'
|
7
|
+
require 'virtus'
|
8
|
+
require 'httparty'
|
9
|
+
require 'digest/md5'
|
10
|
+
|
11
|
+
require 'survey_gizmo/resource'
|
12
|
+
require 'survey_gizmo/rest_response'
|
13
|
+
|
14
|
+
require 'survey_gizmo/api/survey'
|
15
|
+
require 'survey_gizmo/api/survey_campaign'
|
16
|
+
require 'survey_gizmo/api/question'
|
17
|
+
require 'survey_gizmo/api/option'
|
18
|
+
require 'survey_gizmo/api/page'
|
19
|
+
require 'survey_gizmo/api/contact'
|
20
|
+
require 'survey_gizmo/api/response'
|
21
|
+
require 'survey_gizmo/api/email_message'
|
21
22
|
|
22
23
|
module SurveyGizmo
|
23
24
|
include HTTParty
|
@@ -42,7 +43,11 @@ module SurveyGizmo
|
|
42
43
|
# The account password
|
43
44
|
def self.setup(opts = {})
|
44
45
|
self.options = opts
|
45
|
-
default_params({
|
46
|
+
default_params({ 'user:md5' => "#{opts[:user]}:#{Digest::MD5.hexdigest(opts[:password])}" })
|
46
47
|
end
|
47
48
|
|
48
|
-
|
49
|
+
def self.reset
|
50
|
+
@@options = {}
|
51
|
+
default_params({})
|
52
|
+
end
|
53
|
+
end
|
data/spec/resource_spec.rb
CHANGED
@@ -1,56 +1,61 @@
|
|
1
|
-
require
|
2
|
-
describe
|
1
|
+
require 'spec_helper'
|
2
|
+
describe 'Survey Gizmo Resource' do
|
3
3
|
|
4
4
|
describe SurveyGizmo::Resource do
|
5
5
|
before(:each) do
|
6
|
-
SurveyGizmo.setup(:
|
6
|
+
SurveyGizmo.setup(user: 'test@test.com', password: 'password')
|
7
7
|
end
|
8
8
|
|
9
|
-
let(:described_class)
|
10
|
-
|
11
|
-
let(:
|
12
|
-
let(:
|
13
|
-
let(:
|
14
|
-
let(:first_params){ {:id => 1, :test_id => 5} }
|
9
|
+
let(:described_class) { SurveyGizmoSpec::ResourceTest }
|
10
|
+
let(:create_attributes) { {title: 'Spec', test_id: 5} }
|
11
|
+
let(:update_attributes) { {title: 'Updated'} }
|
12
|
+
let(:first_params) { {id: 1, test_id: 5} }
|
13
|
+
let(:get_attributes) { create_attributes.merge(id: 1) }
|
15
14
|
let(:uri_paths){
|
16
15
|
{
|
17
|
-
:
|
18
|
-
:
|
19
|
-
:
|
20
|
-
:
|
16
|
+
get: '/test/1',
|
17
|
+
create: '/test/5/resource',
|
18
|
+
update: '/test/5/resource/1',
|
19
|
+
delete: '/test/5/resource/1'
|
21
20
|
}
|
22
21
|
}
|
23
22
|
|
24
|
-
it "#new?" do
|
25
|
-
described_class.new.should be_new
|
26
|
-
end
|
27
|
-
|
28
|
-
|
29
23
|
it '#reload' do
|
30
24
|
stub_request(:get, /#{@base}/).to_return(json_response(true, get_attributes))
|
31
25
|
obj = described_class.new(get_attributes.merge(update_attributes))
|
32
|
-
obj.attributes.reject{|k,v| v.blank? }.should == get_attributes.merge(update_attributes)
|
26
|
+
obj.attributes.reject {|k,v| v.blank? }.should == get_attributes.merge(update_attributes)
|
33
27
|
obj.reload
|
34
|
-
obj.attributes.reject{|k,v| v.blank? }.should == get_attributes
|
28
|
+
obj.attributes.reject {|k,v| v.blank? }.should == get_attributes
|
35
29
|
end
|
36
30
|
|
37
|
-
it '
|
38
|
-
|
39
|
-
it "should raise an error if params are missing" do
|
31
|
+
it 'should raise an error if params are missing' do
|
40
32
|
lambda {
|
41
|
-
SurveyGizmoSpec::ResourceTest.destroy(:
|
42
|
-
}.should raise_error(SurveyGizmo::URLError, 'Missing parameters in request: `:id`')
|
33
|
+
SurveyGizmoSpec::ResourceTest.destroy(test_id: 5)
|
34
|
+
}.should raise_error(SurveyGizmo::URLError, 'Missing RESTful parameters in request: `:id`')
|
43
35
|
end
|
44
36
|
|
45
37
|
it_should_behave_like 'an API object'
|
46
38
|
it_should_behave_like 'an object with errors'
|
39
|
+
|
40
|
+
context '#convert_filters_into_query_string' do
|
41
|
+
let(:page) { 2 }
|
42
|
+
let(:filters) { {page: page, filters: [{field: 'istestdata', operator: '<>', value: 1}] }}
|
43
|
+
|
44
|
+
it 'should generate the correct page request' do
|
45
|
+
expect(SurveyGizmoSpec::ResourceTest.convert_filters_into_query_string(page: page)).to eq("?page=#{page}")
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should generate the correct filter fragment' do
|
49
|
+
expect(SurveyGizmoSpec::ResourceTest.convert_filters_into_query_string(filters)).to eq("?filter%5Bfield%5D%5B0%5D=istestdata&filter%5Boperator%5D%5B0%5D=%3C%3E&filter%5Bvalue%5D%5B0%5D=1&page=#{page}")
|
50
|
+
end
|
51
|
+
end
|
47
52
|
end
|
48
53
|
|
49
54
|
describe SurveyGizmo::API::Survey do
|
50
|
-
let(:create_attributes){ {:
|
51
|
-
let(:get_attributes)
|
52
|
-
let(:update_attributes){ {:
|
53
|
-
let(:first_params){ {:
|
55
|
+
let(:create_attributes) { { title: 'Spec', type: 'survey', status: 'In Design' } }
|
56
|
+
let(:get_attributes) { create_attributes.merge(first_params) }
|
57
|
+
let(:update_attributes) { { title: 'Updated'} }
|
58
|
+
let(:first_params) { { id: 1234} }
|
54
59
|
let(:uri_paths){
|
55
60
|
h = { :create => '/survey' }
|
56
61
|
h.default = '/survey/1234'
|
@@ -59,16 +64,20 @@ describe "Survey Gizmo Resource" do
|
|
59
64
|
|
60
65
|
it_should_behave_like 'an API object'
|
61
66
|
it_should_behave_like 'an object with errors'
|
67
|
+
|
68
|
+
it 'should parse the number of completed records correctly' do
|
69
|
+
survey = described_class.new('statistics' => [['Partial', 2], ['Disqualified', 28], ['Complete', 15]])
|
70
|
+
expect(survey.number_of_completed_responses).to eq(15)
|
71
|
+
end
|
62
72
|
end
|
63
73
|
|
64
74
|
describe SurveyGizmo::API::Question do
|
65
|
-
let(:
|
66
|
-
let(:
|
67
|
-
|
68
|
-
}
|
69
|
-
let(:
|
70
|
-
let(:
|
71
|
-
let(:uri_paths){
|
75
|
+
let(:base_params) { {survey_id: 1234, page_id: 1} }
|
76
|
+
let(:create_attributes) { base_params.merge(title: 'Spec Question', type: 'radio', properties: {'required' => true, 'option_sort' => false}) }
|
77
|
+
let(:update_attributes) { base_params.merge(title: 'Updated') }
|
78
|
+
let(:first_params) { base_params.merge(id: 1) }
|
79
|
+
let(:get_attributes) { create_attributes.merge(id: 1) }
|
80
|
+
let(:uri_paths) {
|
72
81
|
{ :get => '/survey/1234/surveyquestion/1',
|
73
82
|
:create => '/survey/1234/surveypage/1/surveyquestion',
|
74
83
|
:update => '/survey/1234/surveypage/1/surveyquestion/1',
|
@@ -79,25 +88,44 @@ describe "Survey Gizmo Resource" do
|
|
79
88
|
it_should_behave_like 'an API object'
|
80
89
|
it_should_behave_like 'an object with errors'
|
81
90
|
|
82
|
-
it
|
83
|
-
|
84
|
-
|
91
|
+
it 'should handle the title hash returned from the API' do
|
92
|
+
expect(described_class.new('title' => {'English' => 'Some title'}).title).to eq('Some title')
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'should handle the _subtype key' do
|
96
|
+
described_class.new(:_subtype => 'radio').type.should == 'radio'
|
85
97
|
end
|
86
98
|
|
87
|
-
it
|
88
|
-
|
89
|
-
|
99
|
+
it 'should have no subquestions' do
|
100
|
+
expect(described_class.new().sub_questions).to eq([])
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'should find the survey' do
|
104
|
+
stub_request(:get, /#{@base}\/survey\/1234/).to_return(json_response(true, get_attributes))
|
105
|
+
described_class.new(base_params).survey
|
106
|
+
a_request(:get, /#{@base}\/survey\/1234/).should have_been_made
|
107
|
+
end
|
108
|
+
|
109
|
+
context 'with subquestions' do
|
110
|
+
let(:parent_id) { 33 }
|
111
|
+
let(:question_with_subquestions) { described_class.new(id: parent_id, survey_id: 1234, sub_question_skus: [1, 2])}
|
112
|
+
it 'should have 2 subquestions and they should have the right parent question' do
|
113
|
+
stub_request(:get, /#{@base}/).to_return(json_response(true, get_attributes))
|
114
|
+
expect(question_with_subquestions.sub_questions.size).to eq(2)
|
115
|
+
|
116
|
+
question_with_subquestions.sub_questions.first.parent_question
|
117
|
+
a_request(:get, /#{@base}\/survey\/1234\/surveyquestion\/#{parent_id}/).should have_been_made
|
118
|
+
end
|
90
119
|
end
|
91
120
|
end
|
92
121
|
|
93
122
|
describe SurveyGizmo::API::Option do
|
94
|
-
let(:
|
95
|
-
let(:
|
96
|
-
|
97
|
-
}
|
98
|
-
let(:
|
99
|
-
let(:
|
100
|
-
let(:uri_paths){
|
123
|
+
let(:survey_and_page) { {survey_id: 1234, page_id: 1} }
|
124
|
+
let(:create_attributes) { survey_and_page.merge(question_id: 1, title: 'Spec Question', value: 'Spec Answer') }
|
125
|
+
let(:update_attributes) { survey_and_page.merge(question_id: 1, title: 'Updated') }
|
126
|
+
let(:first_params) { survey_and_page.merge(id: 1, question_id: 1) }
|
127
|
+
let(:get_attributes) { create_attributes.merge(id: 1) }
|
128
|
+
let(:uri_paths) {
|
101
129
|
h = { :create => '/survey/1234/surveypage/1/surveyquestion/1/surveyoption' }
|
102
130
|
h.default = '/survey/1234/surveypage/1/surveyquestion/1/surveyoption/1'
|
103
131
|
h
|
@@ -108,12 +136,10 @@ describe "Survey Gizmo Resource" do
|
|
108
136
|
end
|
109
137
|
|
110
138
|
describe SurveyGizmo::API::Page do
|
111
|
-
let(:create_attributes){ {:survey_id => 1234, :title => {'English' => 'Spec Page'}} }
|
112
|
-
let(:get_attributes)
|
113
|
-
|
114
|
-
}
|
115
|
-
let(:update_attributes){ {:survey_id => 1234, :title => 'Updated'} }
|
116
|
-
let(:first_params){ {:id => 1, :survey_id => 1234 } }
|
139
|
+
let(:create_attributes) { {:survey_id => 1234, :title => {'English' => 'Spec Page'}} }
|
140
|
+
let(:get_attributes) { create_attributes.merge(:id => 1) }
|
141
|
+
let(:update_attributes) { {:survey_id => 1234, :title => 'Updated'} }
|
142
|
+
let(:first_params) { {:id => 1, :survey_id => 1234 } }
|
117
143
|
let(:uri_paths){
|
118
144
|
h = { :create => '/survey/1234/surveypage' }
|
119
145
|
h.default = '/survey/1234/surveypage/1'
|
data/spec/support/methods.rb
CHANGED
@@ -5,13 +5,16 @@ module SurveyGizmoSpec
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def request_params(opts = {})
|
8
|
-
{
|
8
|
+
{'user:pass' => 'test@test.com:password'}.merge(opts)
|
9
9
|
end
|
10
10
|
|
11
11
|
def json_response(result, data)
|
12
|
-
body = {:
|
13
|
-
result ? body.merge!(:
|
14
|
-
{
|
12
|
+
body = {result_ok: result}
|
13
|
+
result ? body.merge!(data: data) : body.merge!(message: data)
|
14
|
+
{
|
15
|
+
headers: {'Content-Type' => 'application/json'},
|
16
|
+
body: body.to_json
|
17
|
+
}
|
15
18
|
end
|
16
19
|
end
|
17
20
|
end
|
@@ -1,126 +1,81 @@
|
|
1
1
|
shared_examples_for 'an API object' do
|
2
|
-
before(:
|
3
|
-
SurveyGizmo.setup(:
|
2
|
+
before(:all) do
|
3
|
+
SurveyGizmo.setup(user: 'test@test.com', password: 'password')
|
4
4
|
end
|
5
|
-
|
5
|
+
|
6
6
|
it "should be descendant of SurveyGizmo::Resource" do
|
7
7
|
SurveyGizmo::Resource.descendants.should include(described_class)
|
8
8
|
end
|
9
|
-
|
10
|
-
|
9
|
+
|
11
10
|
context "#create" do
|
12
11
|
it "should make a request" do
|
13
12
|
stub_api_call(:put)
|
14
13
|
described_class.create(create_attributes)
|
15
14
|
a_request(:put, /#{@base}#{uri_paths[:create]}/).should have_been_made
|
16
15
|
end
|
17
|
-
|
16
|
+
|
18
17
|
it "should return a new instance" do
|
19
18
|
stub_api_call(:put)
|
20
19
|
obj = described_class.create(create_attributes)
|
21
20
|
obj.should be_instance_of(described_class)
|
22
21
|
end
|
23
|
-
|
22
|
+
|
24
23
|
it "should set the attributes" do
|
25
24
|
stub_request(:put, /#{@base}/).to_return(json_response(true, create_attributes))
|
26
25
|
obj = described_class.create(create_attributes)
|
27
26
|
obj.attributes.reject{|k,v| v.blank? }.should == create_attributes
|
28
27
|
end
|
29
28
|
end
|
30
|
-
|
29
|
+
|
31
30
|
context "#get" do
|
32
31
|
it "should make a request" do
|
33
32
|
stub_request(:get, /#{@base}/).to_return(json_response(true, get_attributes))
|
34
33
|
described_class.first(first_params)
|
35
34
|
a_request(:get, /#{@base}#{uri_paths[:get]}/).should have_been_made
|
36
35
|
end
|
37
|
-
|
36
|
+
|
38
37
|
it "should set the attributes" do
|
39
38
|
stub_request(:get, /#{@base}/).to_return(json_response(true, get_attributes))
|
40
39
|
obj = described_class.first(first_params)
|
41
40
|
obj.attributes.reject{|k,v| v.blank? }.should == get_attributes
|
42
41
|
end
|
43
|
-
|
42
|
+
|
44
43
|
it "should return false if the request fails" do
|
45
44
|
stub_request(:get, /#{@base}/).to_return(json_response(false, "something is wrong"))
|
46
45
|
described_class.first(first_params).should == nil
|
47
46
|
end
|
48
47
|
end
|
49
|
-
|
50
|
-
context "instance#update" do
|
51
|
-
before(:each) do
|
52
|
-
@obj = described_class.new(get_attributes)
|
53
|
-
@obj.__send__(:clean!)
|
54
|
-
end
|
55
|
-
|
56
|
-
it "should make a request" do
|
57
|
-
stub_api_call(:post)
|
58
|
-
@obj.update
|
59
|
-
a_request(:post, /#{@base}#{uri_paths[:update]}/).should have_been_made
|
60
|
-
end
|
61
|
-
|
62
|
-
it 'should change object state to saved' do
|
63
|
-
stub_api_call(:post)
|
64
|
-
@obj.update(update_attributes)
|
65
|
-
@obj.should be_saved
|
66
|
-
end
|
67
|
-
|
68
|
-
it "should not be marked saved if the request fails" do
|
69
|
-
stub_api_call(:post, false)
|
70
|
-
@obj.update
|
71
|
-
@obj.should_not be_saved
|
72
|
-
end
|
73
|
-
|
74
|
-
xit "cannot be updated if new" do
|
75
|
-
@obj.instance_variable_set('@_state', nil)
|
76
|
-
@obj.update(update_attributes).should be_false
|
77
|
-
end
|
78
|
-
|
79
|
-
end
|
80
|
-
|
48
|
+
|
81
49
|
context "instance#destroy" do
|
82
50
|
before(:each) do
|
83
51
|
@obj = described_class.new(get_attributes)
|
84
|
-
@obj.__send__(:clean!)
|
85
52
|
end
|
86
|
-
|
53
|
+
|
87
54
|
it "should make a request" do
|
88
55
|
stub_api_call(:delete)
|
89
56
|
@obj.destroy
|
90
57
|
a_request(:delete, /#{@base}#{uri_paths[:delete]}/).should have_been_made
|
91
58
|
end
|
92
|
-
|
93
|
-
it 'should change object state to destroyed' do
|
94
|
-
stub_api_call(:delete)
|
95
|
-
@obj.destroy
|
96
|
-
@obj.should be_destroyed
|
97
|
-
end
|
98
|
-
|
99
|
-
it "should not be marked destroyed if the request fails" do
|
100
|
-
stub_api_call(:delete, false)
|
101
|
-
@obj.destroy
|
102
|
-
@obj.should_not be_destroyed
|
103
|
-
end
|
104
|
-
|
59
|
+
|
105
60
|
it "cannot be destroyed if new" do
|
106
|
-
@obj.
|
61
|
+
@obj.id = nil
|
107
62
|
@obj.destroy.should be_false
|
108
63
|
end
|
109
64
|
end
|
110
|
-
|
65
|
+
|
111
66
|
context '#destroy', :focused => true do
|
112
67
|
it "should make a request" do
|
113
68
|
stub_api_call(:delete)
|
114
69
|
described_class.destroy(first_params)
|
115
70
|
a_request(:delete, /#{@base}#{uri_paths[:delete]}/).should have_been_made
|
116
71
|
end
|
117
|
-
|
72
|
+
|
118
73
|
it "should return result" do
|
119
74
|
stub_api_call(:delete)
|
120
75
|
described_class.destroy(first_params).should be_true
|
121
76
|
end
|
122
77
|
end
|
123
|
-
|
78
|
+
|
124
79
|
context 'instance#save' do
|
125
80
|
it "should call create on a new resource" do
|
126
81
|
stub_api_call(:put)
|
@@ -128,16 +83,15 @@ shared_examples_for 'an API object' do
|
|
128
83
|
obj.save
|
129
84
|
a_request(:put, /#{@base}#{uri_paths[:create]}/).should have_been_made
|
130
85
|
end
|
131
|
-
|
86
|
+
|
132
87
|
it "should call update on a created resource" do
|
133
88
|
obj = described_class.new(get_attributes)
|
134
|
-
obj.__send__(:clean!)
|
135
89
|
stub_api_call(:post)
|
136
90
|
obj.save
|
137
91
|
a_request(:post, /#{@base}#{uri_paths[:update]}/).should have_been_made
|
138
92
|
end
|
139
93
|
end
|
140
|
-
|
94
|
+
|
141
95
|
context '#all' do
|
142
96
|
before(:all) do
|
143
97
|
@array = [
|
@@ -146,30 +100,30 @@ shared_examples_for 'an API object' do
|
|
146
100
|
{:id => 3, :title => 'resource 3'}
|
147
101
|
]
|
148
102
|
end
|
149
|
-
|
103
|
+
|
150
104
|
it "should make a get request" do
|
151
105
|
stub_request(:get, /#{@base}/).to_return(json_response(true, []))
|
152
106
|
described_class.all(get_attributes)
|
153
107
|
a_request(:get, /#{@base}#{uri_paths[:create]}/).should have_been_made
|
154
108
|
end
|
155
|
-
|
109
|
+
|
156
110
|
it "should create a collection using the class" do
|
157
111
|
stub_request(:get, /#{@base}/).to_return(json_response(true, @array))
|
158
112
|
collection = described_class.all(get_attributes)
|
159
|
-
collection.should be_instance_of(
|
160
|
-
end
|
161
|
-
|
113
|
+
collection.should be_instance_of(Array)
|
114
|
+
end
|
115
|
+
|
162
116
|
it "should return instances of the class" do
|
163
117
|
stub_request(:get, /#{@base}/).to_return(json_response(true, @array))
|
164
118
|
collection = described_class.all(get_attributes)
|
165
119
|
collection.first.should be_instance_of(described_class)
|
166
120
|
end
|
167
|
-
|
121
|
+
|
168
122
|
it "should include all elements" do
|
169
123
|
stub_request(:get, /#{@base}/).to_return(json_response(true, @array))
|
170
124
|
collection = described_class.all(get_attributes)
|
171
125
|
collection.length.should == 3
|
172
126
|
end
|
173
127
|
end
|
174
|
-
|
128
|
+
|
175
129
|
end
|