survey-gizmo-ruby 0.6.0 → 0.7.0

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