survey-gizmo-ruby 0.6.0 → 0.7.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.
data/README.md CHANGED
@@ -28,7 +28,7 @@ Integrate with the [Survey Gizmo API](http://developer.surveygizmo.com/resources
28
28
 
29
29
  ## Adding API Objects
30
30
 
31
- Currently, the following API objects are included in the gem: `Survey`, `Question`, `Option`, `Page`. If you want to use something that isn't included you can easily write a class that handles it. Here's an example of the `SurveyGizmo::API::Survey` class:
31
+ Currently, the following API objects are included in the gem: `Survey`, `Question`, `Option`, `Page`, `Response`. If you want to use something that isn't included you can easily write a class that handles it. Here's an example of the `SurveyGizmo::API::Survey` class:
32
32
 
33
33
  class Survey
34
34
  # the base where most of the methods for handling the API are stored
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.0
1
+ 0.7.0
@@ -52,6 +52,14 @@ module SurveyGizmo
52
52
  resource
53
53
  end
54
54
 
55
+ # Deleted the Resource from Survey Gizmo
56
+ # @param [Hash] conditions
57
+ # @return [Boolean]
58
+ def destroy(conditions)
59
+ response = Response.new SurveyGizmo.delete(handle_route(:delete, conditions))
60
+ response.ok?
61
+ end
62
+
55
63
  # Define the path where a resource is located
56
64
  # @param [String] path
57
65
  # the path in Survey Gizmo for the resource
@@ -103,7 +111,9 @@ module SurveyGizmo
103
111
  path = @paths[key]
104
112
  raise "No routes defined for `#{key}` in #{self.name}" unless path
105
113
  options = interp.last.is_a?(Hash) ? interp.pop : path.scan(/:(\w+)/).inject({}){|hash, k| hash.merge(k.to_sym => interp.shift) }
106
- path.gsub(/:(\w+)/){|m| options[$1.to_sym] }
114
+ path.gsub(/:(\w+)/) do |m|
115
+ options[$1.to_sym].tap{ |result| raise(SurveyGizmo::URLError, "Missing parameters in request: `#{m}`") unless result }
116
+ end
107
117
  end
108
118
  end
109
119
 
@@ -20,6 +20,8 @@ module SurveyGizmo
20
20
 
21
21
  format :json
22
22
 
23
+ URLError = Class.new(RuntimeError)
24
+
23
25
  # The base uri for this version of the API is $1
24
26
  base_uri 'https://restapi.surveygizmo.com/v1'
25
27
 
@@ -11,7 +11,7 @@ describe "Survey Gizmo Resource" do
11
11
  let(:create_attributes){ {:title => 'Spec', :test_id => 5} }
12
12
  let(:get_attributes) { create_attributes.merge(:id => 1) }
13
13
  let(:update_attributes){ {:title => 'Updated'} }
14
- let(:first_params){ {:id => 1} }
14
+ let(:first_params){ {:id => 1, :test_id => 5} }
15
15
  let(:uri_paths){
16
16
  {
17
17
  :get => '/test/1',
@@ -28,18 +28,20 @@ describe "Survey Gizmo Resource" do
28
28
 
29
29
  it '#reload' do
30
30
  stub_request(:get, /#{@base}/).to_return(json_response(true, get_attributes))
31
- obj = described_class.new(create_attributes)
32
- obj.attributes.reject{|k,v| v.blank? }.should == create_attributes
31
+ obj = described_class.new(get_attributes.merge(update_attributes))
32
+ obj.attributes.reject{|k,v| v.blank? }.should == get_attributes.merge(update_attributes)
33
33
  obj.reload
34
34
  obj.attributes.reject{|k,v| v.blank? }.should == get_attributes
35
35
  end
36
36
 
37
37
  it '#valid?'
38
-
39
- it "should track descendants" do
40
- SurveyGizmo::Resource.descendants.should include(SurveyGizmoSpec::ResourceTest)
41
- end
42
38
 
39
+ it "should raise an error if params are missing" do
40
+ lambda {
41
+ SurveyGizmoSpec::ResourceTest.destroy(:test_id => 5)
42
+ }.should raise_error(SurveyGizmo::URLError, 'Missing parameters in request: `:id`')
43
+ end
44
+
43
45
  it_should_behave_like 'an API object'
44
46
  it_should_behave_like 'an object with errors'
45
47
  end
@@ -65,7 +67,7 @@ describe "Survey Gizmo Resource" do
65
67
  create_attributes.merge(:id => 1)
66
68
  }
67
69
  let(:update_attributes){ {:survey_id => 1234, :page_id => 1, :title => 'Updated'} }
68
- let(:first_params){ {:id => 1, :survey_id => 1234} }
70
+ let(:first_params){ {:id => 1, :survey_id => 1234, :page_id => 1} }
69
71
  let(:uri_paths){
70
72
  { :get => '/survey/1234/surveyquestion/1',
71
73
  :create => '/survey/1234/surveypage/1/surveyquestion',
@@ -3,7 +3,12 @@ shared_examples_for 'an API object' do
3
3
  SurveyGizmo.setup(:user => 'test@test.com', :password => 'password')
4
4
  end
5
5
 
6
- context "create" do
6
+ it "should be descendant of SurveyGizmo::Resource" do
7
+ SurveyGizmo::Resource.descendants.should include(described_class)
8
+ end
9
+
10
+
11
+ context "#create" do
7
12
  it "should make a request" do
8
13
  stub_api_call(:put)
9
14
  described_class.create(create_attributes)
@@ -23,7 +28,7 @@ shared_examples_for 'an API object' do
23
28
  end
24
29
  end
25
30
 
26
- context "get" do
31
+ context "#get" do
27
32
  it "should make a request" do
28
33
  stub_request(:get, /#{@base}/).to_return(json_response(true, get_attributes))
29
34
  described_class.first(first_params)
@@ -42,7 +47,7 @@ shared_examples_for 'an API object' do
42
47
  end
43
48
  end
44
49
 
45
- context "update" do
50
+ context "instance#update" do
46
51
  before(:each) do
47
52
  @obj = described_class.new(get_attributes)
48
53
  @obj.__send__(:clean!)
@@ -73,7 +78,7 @@ shared_examples_for 'an API object' do
73
78
 
74
79
  end
75
80
 
76
- context "destroy" do
81
+ context "instance#destroy" do
77
82
  before(:each) do
78
83
  @obj = described_class.new(get_attributes)
79
84
  @obj.__send__(:clean!)
@@ -103,7 +108,20 @@ shared_examples_for 'an API object' do
103
108
  end
104
109
  end
105
110
 
106
- context '#save' do
111
+ context '#destroy', :focused => true do
112
+ it "should make a request" do
113
+ stub_api_call(:delete)
114
+ described_class.destroy(first_params)
115
+ a_request(:delete, /#{@base}#{uri_paths[:delete]}/).should have_been_made
116
+ end
117
+
118
+ it "should return result" do
119
+ stub_api_call(:delete)
120
+ described_class.destroy(first_params).should be_true
121
+ end
122
+ end
123
+
124
+ context 'instance#save' do
107
125
  it "should call create on a new resource" do
108
126
  stub_api_call(:put)
109
127
  obj = described_class.new(create_attributes)
@@ -8,7 +8,7 @@ shared_examples_for 'an object with errors' do
8
8
 
9
9
  context "class methods" do
10
10
  it { described_class.first(get_attributes).should be_nil }
11
- it { described_class.all(get_attributes).should be_empty }
11
+ it { described_class.all(get_attributes).should be_empty }
12
12
  end
13
13
 
14
14
  context "instance methods" do
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: 0.6.0
4
+ version: 0.7.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-13 00:00:00.000000000Z
12
+ date: 2012-03-02 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &70195630027920 !ruby/object:Gem::Requirement
16
+ requirement: &70321870190520 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 3.0.1
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70195630027920
24
+ version_requirements: *70321870190520
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: i18n
27
- requirement: &70195630026500 !ruby/object:Gem::Requirement
27
+ requirement: &70321870172640 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70195630026500
35
+ version_requirements: *70321870172640
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: virtus
38
- requirement: &70195630025000 !ruby/object:Gem::Requirement
38
+ requirement: &70321870170640 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 0.0.5
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70195630025000
46
+ version_requirements: *70321870170640
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: httparty
49
- requirement: &70195630006520 !ruby/object:Gem::Requirement
49
+ requirement: &70321870169380 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70195630006520
57
+ version_requirements: *70321870169380
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: bluecloth
60
- requirement: &70195630005200 !ruby/object:Gem::Requirement
60
+ requirement: &70321870167280 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70195630005200
68
+ version_requirements: *70321870167280
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: yard
71
- requirement: &70195630002980 !ruby/object:Gem::Requirement
71
+ requirement: &70321870160460 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 0.7.0
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70195630002980
79
+ version_requirements: *70321870160460
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: bundler
82
- requirement: &70195629996380 !ruby/object:Gem::Requirement
82
+ requirement: &70321870158060 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: 1.0.0
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70195629996380
90
+ version_requirements: *70321870158060
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: jeweler
93
- requirement: &70195629994020 !ruby/object:Gem::Requirement
93
+ requirement: &70321870156640 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ~>
@@ -98,7 +98,7 @@ dependencies:
98
98
  version: 1.6.4
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *70195629994020
101
+ version_requirements: *70321870156640
102
102
  description: ''
103
103
  email: self@ripthejacker.com
104
104
  executables: []
@@ -148,7 +148,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
148
148
  version: '0'
149
149
  segments:
150
150
  - 0
151
- hash: -3511147689201295286
151
+ hash: 746384856005912275
152
152
  required_rubygems_version: !ruby/object:Gem::Requirement
153
153
  none: false
154
154
  requirements: