kooaba 0.0.6 → 0.0.7

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