cassieq-client 0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 44fa66a4e5b3e55e2fa4b3f67bc576d95261b00a
4
+ data.tar.gz: 7df246d7d9387f30687197ea370fa928b6730642
5
+ SHA512:
6
+ metadata.gz: 89940a3442a03d42d06fc737a51ddf083305767d39d26771ac982dea1ccf0d3f2cd88ed6fa9f7b9e1e0ec574481b777621f2f0eabb0973ad92110c723de86e54
7
+ data.tar.gz: 1df1f4a1d76024814d3398bc72f681c5d86c56fb7513327b326c7113c2c5acdc4325e333a802ce1414da473eb0a2830b1dab10579acd07dbbe4a34055287adaf
@@ -0,0 +1,91 @@
1
+ require "faraday"
2
+ require "faraday_middleware"
3
+ require "cassieq/client/messages"
4
+ require "cassieq/client/statistics"
5
+ require "cassieq/client/queues"
6
+ require "cassieq/error"
7
+ require "cassieq/utils"
8
+
9
+ module Cassieq
10
+ class Client
11
+ include Cassieq::Client::Queues
12
+ include Cassieq::Client::Messages
13
+ include Cassieq::Client::Statistics
14
+ include Cassieq::Utils
15
+
16
+ attr_accessor :host, :account, :port, :key, :auth, :sig
17
+
18
+ def initialize(params = {})
19
+ @host = params.fetch(:host, nil)
20
+ @key = params.fetch(:key, nil)
21
+ @auth = params.fetch(:auth, nil)
22
+ @sig = params.fetch(:sig, nil)
23
+ @account = params.fetch(:account, nil)
24
+ @port = params.fetch(:port, 8080)
25
+ yield(self) if block_given?
26
+ end
27
+
28
+ private
29
+
30
+ def path_prefix
31
+ "/api/v1/accounts/#{account}"
32
+ end
33
+
34
+ def connection
35
+ Faraday.new do |conn|
36
+ conn.request(:url_encoded)
37
+ conn.adapter(Faraday.default_adapter)
38
+ conn.host = host
39
+ conn.port = port
40
+ conn.path_prefix = path_prefix
41
+ conn.headers["Authorization"] = "Key #{key}" unless key.nil?
42
+ unless auth.nil? || sig.nil?
43
+ conn.params["auth"] = auth
44
+ conn.params["sig"] = sig
45
+ end
46
+ conn.response :json, :content_type => /\bjson$/
47
+ end
48
+ end
49
+
50
+ def get(path)
51
+ handle_response do
52
+ connection.run_request(:get, path, nil, nil)
53
+ end
54
+ end
55
+
56
+ def post(path, body)
57
+ handle_response do
58
+ connection.run_request(:post, path, body, nil) do |req|
59
+ req.headers.merge!("Content-Type" => "application/json")
60
+ end
61
+ end
62
+ end
63
+
64
+ def put(path, body, params = {})
65
+ handle_response do
66
+ connection.run_request(:put, path, body, nil) do |req|
67
+ req.params.merge!(params)
68
+ req.headers.merge!("Content-Type" => "application/json")
69
+ end
70
+ end
71
+ end
72
+
73
+ def delete(path, params = {})
74
+ handle_response do
75
+ connection.run_request(:delete, path, nil, nil) do |req|
76
+ req.params.merge!(params)
77
+ end
78
+ end
79
+ end
80
+
81
+ def handle_response(&request_block)
82
+ response = request_block.call
83
+ Cassieq::Error.from_status_and_body(response)
84
+ unless response.body.empty?
85
+ underscore_and_symobolize_keys(response.body)
86
+ else
87
+ true
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,22 @@
1
+ module Cassieq
2
+ class Client
3
+ module Messages
4
+ def create_message(queue_name, message)
5
+ post("queues/#{queue_name}/messages", message)
6
+ end
7
+
8
+ def next_message(queue_name)
9
+ get("queues/#{queue_name}/messages/next")
10
+ end
11
+
12
+ def edit_message(queue_name, pop_receipt, options)
13
+ body = camelize_and_stringify_keys(options).to_json
14
+ put("queues/#{queue_name}/messages", body, { popReceipt: pop_receipt })
15
+ end
16
+
17
+ def delete_message(queue_name, pop_receipt)
18
+ delete("queues/#{queue_name}/messages", popReceipt: pop_receipt)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ module Cassieq
2
+ class Client
3
+ module Queues
4
+ def queues
5
+ get("queues")
6
+ end
7
+
8
+ def create_queue(options)
9
+ body = camelize_and_stringify_keys(options).to_json
10
+ post("queues", body)
11
+ end
12
+
13
+ def queue(queue_name)
14
+ get("queues/#{queue_name}")
15
+ end
16
+
17
+ def delete_queue(queue_name)
18
+ delete("queues/#{queue_name}")
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,9 @@
1
+ module Cassieq
2
+ class Client
3
+ module Statistics
4
+ def statistics(queue_name)
5
+ get("queues/#{queue_name}/statistics")
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,35 @@
1
+ module Cassieq
2
+ class Error < StandardError
3
+
4
+ def self.from_status_and_body(response)
5
+ error = case response.status.to_i
6
+ when 401
7
+ Cassieq::Unauthorized
8
+ when 404
9
+ Cassieq::NotFound
10
+ when 409
11
+ Cassieq::Conflict
12
+ when 400..499
13
+ Cassieq::ClientError
14
+ when 500..599
15
+ Cassieq::ServerError
16
+ end
17
+ raise error, response.body["message"] || response.body if error
18
+ end
19
+ end
20
+
21
+ #400-499
22
+ class ClientError < Error; end
23
+
24
+ #404
25
+ class NotFound < ClientError; end
26
+
27
+ #409
28
+ class Conflict < ClientError; end
29
+
30
+ #401
31
+ class Unauthorized < ClientError; end
32
+
33
+ #500-599
34
+ class ServerError < Error; end
35
+ end
@@ -0,0 +1,27 @@
1
+ require "active_support/core_ext/hash/keys"
2
+ require "active_support/inflector"
3
+
4
+ module Cassieq
5
+ module Utils
6
+ def underscore_and_symobolize_keys(data)
7
+ transform_keys_in_structure(data) { |key| key.underscore.to_sym }
8
+ end
9
+
10
+ def camelize_and_stringify_keys(data)
11
+ transform_keys_in_structure(data) { |key| key.to_s.camelize(:lower) }
12
+ end
13
+
14
+ private
15
+
16
+ def transform_keys_in_structure(data)
17
+ case data
18
+ when Hash
19
+ data.transform_keys { |key| yield(key) }
20
+ when Array
21
+ data.map do |hash|
22
+ hash.transform_keys { |key| yield(key) }
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
metadata ADDED
@@ -0,0 +1,91 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cassieq-client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Tom Conroy
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-02-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: faraday
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.9'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.9'
41
+ - !ruby/object:Gem::Dependency
42
+ name: faraday_middleware
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.10'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.10'
55
+ description: A simple wrapper for the CassieQ API
56
+ email: tbconroy@gmail.com
57
+ executables: []
58
+ extensions: []
59
+ extra_rdoc_files: []
60
+ files:
61
+ - lib/cassieq/client.rb
62
+ - lib/cassieq/client/messages.rb
63
+ - lib/cassieq/client/queues.rb
64
+ - lib/cassieq/client/statistics.rb
65
+ - lib/cassieq/error.rb
66
+ - lib/cassieq/utils.rb
67
+ homepage: https://github.com/tronroy/cassieq-client
68
+ licenses:
69
+ - MIT
70
+ metadata: {}
71
+ post_install_message:
72
+ rdoc_options: []
73
+ require_paths:
74
+ - lib
75
+ required_ruby_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ requirements: []
86
+ rubyforge_project:
87
+ rubygems_version: 2.4.5.1
88
+ signing_key:
89
+ specification_version: 4
90
+ summary: CassieQ Client
91
+ test_files: []