passety 0.0.7 → 0.0.8

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: aae122cdfdcc920d76baa7b5f6abd977b8603c8d
4
- data.tar.gz: 1339a7700efc6d23d6bc18d8d990333578d97a2c
3
+ metadata.gz: 133b4abe3e0bff51650678790c3df2c545dc4983
4
+ data.tar.gz: 5b03dce74c6ed7ca46092edb900b169a1a058eec
5
5
  SHA512:
6
- metadata.gz: 032fe5217e94bdb7b4c10cc987a662bef1a20cca6234fcf4a5b1baac4bce89f45c296c85d8a932d82bdac049f209b44c4bcd044b6fc83974203ab5100f8b05cb
7
- data.tar.gz: b40eed51a451ffd12a31b42ee2035299bb8dec6c01942ee77c471494f08784f170f3c6ff4dad9a3c36ac15d58a3728671f7432cecdf7382d0694ad7617cae202
6
+ metadata.gz: 26e9498d470b726519e5102578888ee53e06fafd15b61a90f0d1b41ea4d8c48d8f2ea27e5e53564482614b7e6d6850a6db446840eb86b57c0968d55aaaa1a954
7
+ data.tar.gz: 2b6529739271c288b94b579c20573dbb887bcce37b3edc2f9c69790265247bd5f73a916cba5984069e33d28029d01b84b1d0ff65552f9b490dfcd10ca2ac618e
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- passety (0.0.7)
4
+ passety (0.0.8)
5
5
  faraday
6
6
  json
7
7
 
@@ -0,0 +1,4 @@
1
+ module Passety
2
+ class NotAuthorizedError < StandardError
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Passety
2
+ class NotFoundError < StandardError
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Passety
2
+ class ReadOnlyError < StandardError
3
+ end
4
+ end
data/lib/passety/item.rb CHANGED
@@ -14,11 +14,11 @@ module Passety
14
14
  end
15
15
 
16
16
  def update(id, params)
17
- @wrapper.perform_request { |c| c.put(url(id), JSON.generate(params)) }
17
+ @wrapper.perform_request { |c| c.put(url(id), encode_params(params)) }
18
18
  end
19
19
 
20
20
  def create(params)
21
- @wrapper.perform_request { |c| c.post(@uri, JSON.generate(params)) }
21
+ @wrapper.perform_request { |c| c.post(@uri, encode_params(params)) }
22
22
  end
23
23
 
24
24
  def destroy(id)
@@ -29,5 +29,18 @@ module Passety
29
29
  def url(id)
30
30
  '/' + [ @uri, id ].join('/')
31
31
  end
32
+
33
+ def encode_params(params)
34
+ has_multipart?(params) ? params : JSON.generate(params)
35
+ end
36
+
37
+ def has_multipart?(obj)
38
+ if obj.respond_to?(:each) && !obj.is_a?(String)
39
+ (obj.respond_to?(:values) ? obj.values : obj).each do |val|
40
+ return true if (val.respond_to?(:content_type) || has_multipart?(val))
41
+ end
42
+ end
43
+ false
44
+ end
32
45
  end
33
46
  end
@@ -1,5 +1,5 @@
1
1
  module Passety
2
- class NestedItem
2
+ class NestedItem < Item
3
3
  def initialize(wrapper, parent, uri)
4
4
  @wrapper = wrapper
5
5
  @parent = parent
@@ -15,11 +15,11 @@ module Passety
15
15
  end
16
16
 
17
17
  def update(pid, id, params)
18
- @wrapper.perform_request { |c| c.put(url(pid, id), JSON.generate(params)) }
18
+ @wrapper.perform_request { |c| c.put(url(pid, id), encode_params(params)) }
19
19
  end
20
20
 
21
21
  def create(pid, params)
22
- @wrapper.perform_request { |c| c.post(url(pid), JSON.generate(params)) }
22
+ @wrapper.perform_request { |c| c.post(url(pid), encode_params(params)) }
23
23
  end
24
24
 
25
25
  def destroy(pid, id)
@@ -0,0 +1,11 @@
1
+ module Passety
2
+ class Photo < NestedItem
3
+ def initialize(wrapper, parent)
4
+ super(wrapper, parent, 'photos')
5
+ end
6
+
7
+ def create(pid, params = {})
8
+ Item.new(@wrapper, 'uploads').create(params.merge(tid: pid))
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,37 @@
1
+ module Passety
2
+ class Response
3
+ attr_reader :response
4
+
5
+ def initialize(response)
6
+ @response = response
7
+ end
8
+
9
+ def content_type
10
+ ((response.headers.values_at('content-type', 'Content-Type').compact.first || '').split(';').first || '').strip
11
+ end
12
+
13
+ def parsed
14
+ parse_body(response)
15
+ end
16
+
17
+ def headers
18
+ response.headers
19
+ end
20
+
21
+ def status
22
+ response.status
23
+ end
24
+
25
+ def body
26
+ response.body || ''
27
+ end
28
+
29
+ private
30
+ def parse_body(response)
31
+ body = response.env[:body].strip
32
+ JSON[body]
33
+ rescue
34
+ nil
35
+ end
36
+ end
37
+ end
data/lib/passety/thing.rb CHANGED
@@ -7,5 +7,9 @@ module Passety
7
7
  def properties
8
8
  @properties ||= Property.new(@wrapper, 'things')
9
9
  end
10
+
11
+ def photos
12
+ @photos ||= Photo.new(@wrapper, 'things')
13
+ end
10
14
  end
11
15
  end
@@ -1,3 +1,3 @@
1
1
  module Passety
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  end
@@ -1,7 +1,8 @@
1
1
  module Passety
2
2
  class Wrapper
3
- def initialize(app_id, secret)
4
- @token = authenticate(app_id, secret)
3
+ def initialize(token, options = {})
4
+ @token = token
5
+ @raise_errors = options.fetch(:raise_errors, true)
5
6
  end
6
7
 
7
8
  def authorized?
@@ -24,28 +25,24 @@ module Passety
24
25
  perform_request { |c| c.get('/') }
25
26
  end
26
27
 
27
- def perform_request(need_auth = true)
28
- raise 'Not Authorized' if need_auth and not authorized?
29
- response = yield(connection)
30
- parse_body(response)
31
- end
28
+ def perform_request
29
+ response = Response.new(yield(connection))
32
30
 
33
- private
34
- def parse_body(response)
35
- body = response.env[:body].strip
36
- JSON[body]
37
- rescue
38
- nil
39
- end
31
+ if @raise_errors
32
+ raise NotAuthorizedError.new if response.status == 401
33
+ raise ReadOnlyError.new if response.status == 403
34
+ raise NotFoundError.new if response.status == 404
35
+ end
40
36
 
41
- def connection
42
- @connection ||= Faraday.new(url: API_URL, headers: { 'Accept' => 'application/json; version=1', 'Authorization' => "Bearer #{@token}" })
37
+ response
43
38
  end
44
39
 
45
- def authenticate(app_id, secret)
46
- response = Faraday.new(url: OAUTH_URL).post('/oauth/token', application_id: app_id, secret: secret)
47
- auth = parse_body(response)
48
- auth['token'] unless auth.nil?
40
+ private
41
+ def connection
42
+ @connection ||= Faraday.new(url: API_URL, headers: { 'Accept' => 'application/json; version=1', 'Authorization' => "Bearer #{@token}" }) do |f|
43
+ f.request :multipart
44
+ f.adapter Faraday.default_adapter
45
+ end
49
46
  end
50
47
  end
51
48
  end
data/lib/passety.rb CHANGED
@@ -3,6 +3,7 @@ require 'json'
3
3
 
4
4
  require 'passety/version'
5
5
  require 'passety/wrapper'
6
+ require 'passety/response'
6
7
 
7
8
  require 'passety/item'
8
9
  require 'passety/nested_item'
@@ -11,8 +12,12 @@ require 'passety/collections/thing'
11
12
  require 'passety/collection'
12
13
  require 'passety/property'
13
14
  require 'passety/thing'
15
+ require 'passety/photo'
16
+
17
+ require 'passety/exceptions/not_found_error'
18
+ require 'passety/exceptions/read_only_error'
19
+ require 'passety/exceptions/not_authorized_error'
14
20
 
15
21
  module Passety
16
- OAUTH_URL = ENV['PASSETY_OAUTH_URL'] || 'https://passety.com'
17
22
  API_URL = ENV['PASSETY_API_URL'] || 'https://api.passety.com/'
18
23
  end
data/spec/wrapper_spec.rb CHANGED
@@ -4,14 +4,11 @@ describe Passety::Wrapper do
4
4
  let(:app_id) { 'app_id' }
5
5
  let(:secret) { 'secret' }
6
6
  let(:token) { 'w32vd234231rr' }
7
- let(:response) { "{\"token\": \"#{token}\"}" }
8
7
 
9
- let(:wrapper) { Passety::Wrapper.new(app_id, secret) }
8
+ let(:wrapper) { Passety::Wrapper.new(token) }
10
9
  let(:tid) { 'AABAJ' }
11
10
 
12
11
  before do
13
- stub_request(:post, "#{Passety::OAUTH_URL}/oauth/token").
14
- to_return(:status => 200, :body => response, :headers => {})
15
12
  stub_request(:post, "#{Passety::API_URL}/things/")
16
13
  stub_request(:post, "#{Passety::API_URL}/things/#{tid}")
17
14
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: passety
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Passety Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-12 00:00:00.000000000 Z
11
+ date: 2014-05-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -154,9 +154,14 @@ files:
154
154
  - lib/passety.rb
155
155
  - lib/passety/collection.rb
156
156
  - lib/passety/collections/thing.rb
157
+ - lib/passety/exceptions/not_authorized_error.rb
158
+ - lib/passety/exceptions/not_found_error.rb
159
+ - lib/passety/exceptions/read_only_error.rb
157
160
  - lib/passety/item.rb
158
161
  - lib/passety/nested_item.rb
162
+ - lib/passety/photo.rb
159
163
  - lib/passety/property.rb
164
+ - lib/passety/response.rb
160
165
  - lib/passety/thing.rb
161
166
  - lib/passety/version.rb
162
167
  - lib/passety/wrapper.rb