kooaba 0.0.6 → 0.0.7

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.
@@ -19,12 +19,17 @@ module Kooaba
19
19
  end
20
20
 
21
21
  def self.upload(item, bucket_id)
22
- raise ArgumentError, "You need to specify the Data Key before uploading an item" if Kooaba::data_key == nil
22
+ raise ArgumentError, "You need to specify the Data Key before uploading an item" if !Kooaba.data_key
23
23
  UploadRequest.new(item, bucket_id).start
24
24
  end
25
25
 
26
26
  def self.query(image_path)
27
- raise ArgumentError, "You need to specify the Query Key before making queries" if Kooaba.query_key == nil
27
+ raise ArgumentError, "You need to specify the Query Key before making queries" if !Kooaba.query_key
28
28
  QueryRequest.new(image_path).start
29
29
  end
30
+
31
+ def self.update(item_uuid, params = {})
32
+ raise ArgumentError, "You need to specify the item uuid for the item you want to update" if !item_uuid
33
+ UpdateRequest.new(item_uuid, params).start
34
+ end
30
35
  end
@@ -0,0 +1,102 @@
1
+ require 'rubygems'
2
+ require 'uri'
3
+ require 'net/http'
4
+ require 'net/https'
5
+ require 'time'
6
+ require 'json'
7
+
8
+ module Kooaba
9
+
10
+ class UpdateRequest
11
+
12
+ attr_accessor :item_uuid
13
+ attr_accessor :params
14
+
15
+ CONTENT_TYPE = 'application/json'
16
+
17
+ ALLOWED_PARAMS = ["title", "enabled", "reference_id", "metadata"]
18
+
19
+ def initialize(item_uuid, params)
20
+ @item_uuid = item_uuid
21
+ puts "Warning! The following params are not allowed and will be ignored: #{notAllowedParams(params)}" if notAllowedParams(params) != ""
22
+ @params = cleanedParams(params)
23
+ end
24
+
25
+ #
26
+ # Clean params and only use those allowed.
27
+ #
28
+ def cleanedParams(params)
29
+ params.select {|k, v| ALLOWED_PARAMS.include? k}
30
+ end
31
+
32
+ def notAllowedParams(params)
33
+ params.select {|k, v| !ALLOWED_PARAMS.include? k}.keys.join(", ")
34
+ end
35
+
36
+ #
37
+ # Returns the http response from the Kooaba servers.
38
+ #
39
+ def start
40
+ url = URI.parse(Kooaba::UPLOAD_URL + "items/" + item_uuid)
41
+
42
+ resp = make_request(url)
43
+ parse_request(resp)
44
+
45
+ return resp
46
+ end
47
+
48
+ def make_request(url)
49
+ http = Net::HTTP.new(url.host, url.port)
50
+ http.use_ssl = true
51
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
52
+ http.read_timeout = 500
53
+
54
+ req = Net::HTTP::Put.new(url.path)
55
+
56
+ req.body = params.to_json
57
+ req['date'] = Time.new.httpdate
58
+ req['content-type'] = CONTENT_TYPE
59
+ req['authorization'] = "Token #{Kooaba.data_key}"
60
+
61
+ http.request(req)
62
+ end
63
+
64
+ def parse_request(http_resp)
65
+ case http_resp
66
+ when Net::HTTPSuccess
67
+ parse_2xx(http_resp)
68
+ when Net::HTTPClientError
69
+ parse_4xx(http_resp)
70
+ when Net::HTTPServerError
71
+ parse_5xx(http_resp)
72
+ else
73
+ unknown_response(http_resp)
74
+ end
75
+ end
76
+
77
+ def parse_2xx(http_resp)
78
+ # "Item has been updated.\n"
79
+ end
80
+
81
+ def parse_4xx(http_resp)
82
+ case http_resp.code
83
+ when 404
84
+ raise ArgumentError.new("Kooaba Response: #{http_resp.code} #{http_resp.body}. Perhaps your key is not allowed to access this item?")
85
+ when 422
86
+ raise ArgumentError.new("Kooaba Response: #{http_resp.code} #{http_resp.body}. Please check your params.")
87
+ else
88
+ raise ArgumentError.new("Kooaba Response: #{http_resp.code} #{http_resp.body}.")
89
+ end
90
+ end
91
+
92
+ def parse_5xx(http_resp)
93
+ raise StandardError.new("Internal Server Error: #{http_resp.code} #{http_resp.body}")
94
+ end
95
+
96
+ def unknown_response(http_resp)
97
+ raise StandardError.new("Unknown response: #{http_resp.code} #{http_resp.body} ")
98
+ end
99
+
100
+ end
101
+
102
+ end
@@ -3,10 +3,7 @@ require 'uri'
3
3
  require 'net/http'
4
4
  require 'net/https'
5
5
  require 'time'
6
-
7
6
  require 'json'
8
- require 'net/http'
9
-
10
7
 
11
8
  module Kooaba
12
9
 
@@ -82,11 +79,11 @@ module Kooaba
82
79
  end
83
80
 
84
81
  def parse_4xx(http_resp)
85
- # do nothing for now
82
+ raise ArgumentError.new("Kooaba Response: #{http_resp.code} #{http_resp.body}.")
86
83
  end
87
84
 
88
85
  def parse_5xx(http_resp)
89
- # do nothing for now
86
+ raise StandardError.new("Internal Server Error: #{http_resp.code} #{http_resp.body}")
90
87
  end
91
88
 
92
89
  def unknown_response(http_resp)
@@ -1,3 +1,3 @@
1
1
  module Kooaba
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
@@ -0,0 +1,23 @@
1
+ require 'test/unit'
2
+ require 'kooaba'
3
+ require 'mocha/setup'
4
+
5
+ class UpdateRequestTest < Test::Unit::TestCase
6
+
7
+ include Kooaba
8
+
9
+ def test_disable_item
10
+ req = UpdateRequest.new("123", "enabled" => false)
11
+
12
+ http_resp = Net::HTTPSuccess.new(1.0, 200, "hi")
13
+ http_resp.stubs(:code).returns(204)
14
+ http_resp.stubs(:kind_of?).returns('Net::HTTPSuccess')
15
+ http_resp.stubs(:body).returns('')
16
+
17
+ req.stubs(:make_request).returns(http_resp)
18
+
19
+ req.expects(:parse_2xx).with(http_resp).returns("")
20
+ assert req.start
21
+ end
22
+
23
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kooaba
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
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: 2013-05-06 00:00:00.000000000 Z
12
+ date: 2013-05-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
16
- requirement: &10556720 !ruby/object:Gem::Requirement
16
+ requirement: &8688880 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *10556720
24
+ version_requirements: *8688880
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: mocha
27
- requirement: &10556040 !ruby/object:Gem::Requirement
27
+ requirement: &8688460 !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: :development
34
34
  prerelease: false
35
- version_requirements: *10556040
35
+ version_requirements: *8688460
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: json
38
- requirement: &10555440 !ruby/object:Gem::Requirement
38
+ requirement: &8688020 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *10555440
46
+ version_requirements: *8688020
47
47
  description: A lightweight gem for accessing the kooaba APIs. For more information
48
48
  on the APIs check out http://kooaba.github.com
49
49
  email:
@@ -66,11 +66,13 @@ files:
66
66
  - lib/kooaba/multipart_message.rb
67
67
  - lib/kooaba/query.rb
68
68
  - lib/kooaba/query_request.rb
69
+ - lib/kooaba/update_request.rb
69
70
  - lib/kooaba/upload_request.rb
70
71
  - lib/kooaba/version.rb
71
72
  - test/test_base.rb
72
73
  - test/test_item.rb
73
74
  - test/test_query.rb
75
+ - test/test_update_request.rb
74
76
  - test/test_upload_request.rb
75
77
  homepage: https://github.com/kooaba/kooaba-api-v4-rubygem
76
78
  licenses: []
@@ -100,4 +102,5 @@ test_files:
100
102
  - test/test_base.rb
101
103
  - test/test_item.rb
102
104
  - test/test_query.rb
105
+ - test/test_update_request.rb
103
106
  - test/test_upload_request.rb