sqwiggle-ruby 0.0.2 → 0.0.3

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: c96444e1599a78bc667b4fa719e89ba6657c5669
4
- data.tar.gz: 3db518ea9a461c24af426565f8c84791b104c588
3
+ metadata.gz: 337c69c157e6af33a4d852b43fd83867bde0fd27
4
+ data.tar.gz: 0caa91ae54889f9718ce9a847255a34f15bc8adf
5
5
  SHA512:
6
- metadata.gz: 6f73fb590c240d8ed98eb995539dc1caafcc54c663636dbd8f7781d94606bd6fef456b647cfea2460256dae52d0a92b5deefd7f107ae38ecb0aec12f3a97228b
7
- data.tar.gz: 2e0464663d867a7c6c2ef9cce8d91cd940316f215485046b1946e48a39ce309e67743e641b256ebd0c7b39775a13c91d2dfc9cf19cec2af6825a646edf0de63d
6
+ metadata.gz: be9226f208fcf0257a5f7b1de72c47f636f8700f652372a6f13b103e6b89ea3a8973cd6b97b2ed150e048465e07f0cd6c1c52c2797884198ec4c7b5b692a146f
7
+ data.tar.gz: 5fcb090da68dd6dbacaef49d580a913f8925487ad1937077708df6e2cd80fe6a1437958e42e5510a1b61d825080f788b7269c8da0094cd8c337439930948c64d
data/Gemfile CHANGED
@@ -1,8 +1,4 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'rspec'
4
- gem 'webmock'
5
- gem 'fuubar'
6
-
7
3
  # Specify your gem's dependencies in sqwiggle-ruby.gemspec
8
4
  gemspec
@@ -2,12 +2,12 @@ module Sqwiggle
2
2
  module Api
3
3
  class ErrorHandler < Faraday::Response::Middleware
4
4
  def on_complete(env)
5
- raise Errors::BadRequestError if env[:status] == 400
6
- raise Errors::AuthenticationError if env[:status] == 401
7
- raise Errors::PaymentRequiredError if env[:status] == 402
8
- raise Errors::AuthorizationError if env[:status] == 403
9
- raise Errors::NotFoundError if env[:status] == 404
10
- raise Errors::ServerError if env[:status] == 500
5
+ raise Errors::BadRequestError.new(env) if env[:status] == 400
6
+ raise Errors::AuthenticationError if env[:status] == 401
7
+ raise Errors::PaymentRequiredError if env[:status] == 402
8
+ raise Errors::AuthorizationError if env[:status] == 403
9
+ raise Errors::NotFoundError if env[:status] == 404
10
+ raise Errors::ServerError if env[:status] == 500
11
11
  end
12
12
  end
13
13
  end
@@ -1,7 +1,23 @@
1
1
  module Sqwiggle
2
2
  module Api
3
3
  module Errors
4
- class BadRequestError < StandardError;end;
4
+ class BadRequestError < StandardError;
5
+
6
+ attr_reader :body
7
+
8
+ def initialize(response)
9
+ @body = JSON.parse response.body
10
+ end
11
+
12
+ def message
13
+ {
14
+ type:body['type'],
15
+ param:body['param'],
16
+ message:body['message']
17
+ }.inspect
18
+ end
19
+
20
+ end
5
21
  end
6
22
  end
7
23
  end
@@ -29,12 +29,18 @@ module Sqwiggle
29
29
  self.new attrs
30
30
  end
31
31
 
32
- def create(params, client=Client.new)
32
+ def create!(params, client=Client.new)
33
33
  attrs = JSON.parse(client.post("#{endpoint}", params).body)
34
34
  attrs.merge! client:client
35
35
  self.new attrs
36
36
  end
37
37
 
38
+ def create(params, client=Client.new)
39
+ create! params, client
40
+ rescue Errors::BadRequestError
41
+ false
42
+ end
43
+
38
44
  def endpoint
39
45
  @endpoint || default_endpoint
40
46
  end
@@ -45,25 +51,38 @@ module Sqwiggle
45
51
 
46
52
  end
47
53
 
48
- def update(params)
54
+ def update!(params)
49
55
  res = client.put("#{self.class.endpoint}/#{id}", params)
50
56
  attrs = JSON.parse(res.body, :symbolize_names => true)
51
57
  self.attributes = attrs
52
58
  self
53
59
  end
54
60
 
55
- def delete
56
- res = client.delete("#{self.class.endpoint}/#{id}")
57
- res.status == 204
61
+ def update(params)
62
+ update! params
63
+ rescue Errors::BadRequestError
64
+ false
65
+ end
66
+
67
+ def save!
68
+ return update!(self.attributes) if persisted?
69
+ self.attributes = self.class.create!(attributes, client).attributes
70
+ self
58
71
  end
59
72
 
60
73
  def save
61
- if(id != nil)
62
- update(self.attributes)
63
- else
64
- self.attributes = self.class.create(attributes, client).attributes
65
- end
66
- true
74
+ return update(self.attributes) if persisted?
75
+ self.attributes = self.class.create(attributes, client).attributes
76
+ self
77
+ end
78
+
79
+ def persisted?
80
+ (id != nil)
81
+ end
82
+
83
+ def delete
84
+ res = client.delete("#{self.class.endpoint}/#{id}")
85
+ res.status == 204
67
86
  end
68
87
 
69
88
  end
@@ -16,6 +16,10 @@ module Sqwiggle
16
16
  klass.find id, client
17
17
  end
18
18
 
19
+ def new(params={})
20
+ klass.new ({client:client}.merge(params))
21
+ end
22
+
19
23
  end
20
24
  end
21
25
  end
@@ -9,6 +9,8 @@ module Sqwiggle
9
9
  attribute :mentions, Array
10
10
  attribute :updated_at, DateTime
11
11
  attribute :created_at, DateTime
12
+ attribute :format, String
13
+ attribute :parse, Boolean, default:true
12
14
 
13
15
  def author
14
16
  if @author[:type] == 'user'
@@ -1,3 +1,3 @@
1
1
  module Sqwiggle
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe Sqwiggle::Api::Errors::BadRequestError do
4
+ let(:response) { double('response') }
5
+
6
+ before do
7
+ response.stub(:body) do
8
+ '{"type":"validation","message":"invalid request","param":"name"}'
9
+ end
10
+ end
11
+
12
+ subject { described_class.new response }
13
+ specify { subject.body['type'].should be == "validation" }
14
+ specify { subject.body['message'].should be == "invalid request" }
15
+ specify { subject.body['param'].should be == "name" }
16
+
17
+ end
data/spec/errors_spec.rb CHANGED
@@ -7,7 +7,7 @@ describe "api error handling" do
7
7
  Sqwiggle.token = 'token'
8
8
 
9
9
  stub_request(:get, "https://token:X@api.sqwiggle.com/messages").to_return({
10
- :body => "[]",
10
+ :body => '{"type": "validation","message":"invalid request","param":"name"}',
11
11
  :status => 400,
12
12
  :headers => { 'Content-Length' => 3 }
13
13
  })
data/spec/message_spec.rb CHANGED
@@ -113,7 +113,7 @@ describe Sqwiggle::Message do
113
113
  end
114
114
  subject { Sqwiggle::Message.new(text:'The Name') }
115
115
  it "saves the new record" do
116
- subject.save.should be == true
116
+ subject.save.should be_true
117
117
  subject.id.should be == 1
118
118
  assert_requested :post, "https://token:X@api.sqwiggle.com/messages"
119
119
  end
@@ -127,7 +127,7 @@ describe Sqwiggle::Message do
127
127
  end
128
128
  subject { Sqwiggle::Message.new(id:1, text:'The Name') }
129
129
  it "saves the new record" do
130
- subject.save.should be == true
130
+ subject.save.should be_true
131
131
  assert_requested :put, "https://token:X@api.sqwiggle.com/messages/1"
132
132
  end
133
133
  end
@@ -24,4 +24,7 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency "bundler", "~> 1.3"
25
25
  spec.add_development_dependency "rake"
26
26
  spec.add_development_dependency "pry"
27
+ spec.add_development_dependency 'rspec'
28
+ spec.add_development_dependency 'webmock'
29
+ spec.add_development_dependency 'fuubar'
27
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sqwiggle-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luke Roberts
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-24 00:00:00.000000000 Z
11
+ date: 2014-01-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -80,6 +80,48 @@ dependencies:
80
80
  - - '>='
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: webmock
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: fuubar
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
83
125
  description: Ruby wrapper for the sqwiggle API
84
126
  email:
85
127
  - luke@sqwiggle.com
@@ -117,6 +159,7 @@ files:
117
159
  - lib/sqwiggle/user.rb
118
160
  - lib/sqwiggle/version.rb
119
161
  - spec/api/client_spec.rb
162
+ - spec/api/errors/bad_request_error_spec.rb
120
163
  - spec/api/resource_spec.rb
121
164
  - spec/conversation_spec.rb
122
165
  - spec/errors_spec.rb
@@ -154,6 +197,7 @@ specification_version: 4
154
197
  summary: Ruby wrapper for the sqwiggle API
155
198
  test_files:
156
199
  - spec/api/client_spec.rb
200
+ - spec/api/errors/bad_request_error_spec.rb
157
201
  - spec/api/resource_spec.rb
158
202
  - spec/conversation_spec.rb
159
203
  - spec/errors_spec.rb