queenbee 0.0.4 → 1.2.0
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 +5 -5
- data/README.md +17 -1
- data/lib/queenbee.rb +23 -25
- data/lib/queenbee/api_operations/create.rb +2 -2
- data/lib/queenbee/api_operations/delete.rb +3 -3
- data/lib/queenbee/api_operations/get.rb +10 -0
- data/lib/queenbee/api_resource.rb +2 -2
- data/lib/queenbee/event.rb +10 -0
- data/lib/queenbee/metrics.rb +13 -0
- data/lib/queenbee/queenbee_object.rb +1 -2
- data/lib/queenbee/version.rb +1 -1
- data/test/queenbee/event_test.rb +43 -0
- data/test/queenbee/metrics_test.rb +15 -0
- data/test/queenbee/order_test.rb +17 -11
- data/test/test_helper.rb +1 -1
- metadata +29 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 60ece24ddacceb784702c9312a8cd56275adc0e421245451900fdd2f197fb67f
|
4
|
+
data.tar.gz: 239bbaffd30734f33568b1a0da6807d79745c8f0f597204715ec7fc666c7ede0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5070b0bbd74c6a39a9cdcb8cc6af8140e5a5c26b6c94c7c440eaa35789a27013c55343f287625fc8072d9cb467db1c8df75157c557184d023f5a5544e4f4437c
|
7
|
+
data.tar.gz: b27cb2fa91db43d6a97461a1b1e0f201d6f22ac6281708c462cb5ba6e8c7f35db30ce0a640b4f5d46f8a358e152c370c5decab12667c37c55209dd8528cfbe03
|
data/README.md
CHANGED
@@ -28,7 +28,7 @@ In your app
|
|
28
28
|
Queenbee.token = ENV['QUEENBEE_TOKEN']
|
29
29
|
```
|
30
30
|
|
31
|
-
2. Send order
|
31
|
+
2. Send order/event
|
32
32
|
|
33
33
|
```ruby
|
34
34
|
Queenbee::Order.create(
|
@@ -45,6 +45,13 @@ Queenbee::Order.create(
|
|
45
45
|
)
|
46
46
|
```
|
47
47
|
|
48
|
+
Optional attributes are avaiable for subscription-type application such as:
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
subscribed_at: '2015-05-05 20:13:45',
|
52
|
+
unsubscribed_at: '2016-05-05 20:13:45'
|
53
|
+
```
|
54
|
+
|
48
55
|
**For Sinatra app** you may need to add `require 'bundler/setup'`
|
49
56
|
|
50
57
|
3. Update order
|
@@ -71,6 +78,8 @@ rake test
|
|
71
78
|
|
72
79
|
## Complete list of parameters
|
73
80
|
|
81
|
+
### Order
|
82
|
+
|
74
83
|
- uid (string, must be unique per application)
|
75
84
|
- date (datetime. default to record creation timestamp. Should be used to send historic data)
|
76
85
|
- currency (string. i.e. 'CAD')
|
@@ -89,3 +98,10 @@ rake test
|
|
89
98
|
- subscribed_at (datetime. For recurring order)
|
90
99
|
- unsubscribed_at (datetime. For recurring order)
|
91
100
|
- fees (decimal)
|
101
|
+
|
102
|
+
### Event
|
103
|
+
|
104
|
+
- date (datetime. required. i.e. 2014-07-01 14:50:28)
|
105
|
+
- status: (string. required)
|
106
|
+
- message: (text. required)
|
107
|
+
- metadata: (hash. optional)
|
data/lib/queenbee.rb
CHANGED
@@ -11,13 +11,16 @@ require "queenbee/version"
|
|
11
11
|
|
12
12
|
# API operations
|
13
13
|
require "queenbee/api_operations/create"
|
14
|
+
require "queenbee/api_operations/get"
|
14
15
|
require "queenbee/api_operations/update"
|
15
16
|
require "queenbee/api_operations/delete"
|
16
17
|
|
17
18
|
# Resources
|
18
19
|
require "queenbee/queenbee_object"
|
19
20
|
require "queenbee/api_resource"
|
21
|
+
require "queenbee/event"
|
20
22
|
require "queenbee/order"
|
23
|
+
require "queenbee/metrics"
|
21
24
|
|
22
25
|
# Errors
|
23
26
|
require "queenbee/errors/queenbee_error"
|
@@ -46,8 +49,10 @@ module Queenbee
|
|
46
49
|
|
47
50
|
begin
|
48
51
|
uri = URI(url)
|
52
|
+
request = Net::HTTP::Get.new(uri) if method == :get
|
49
53
|
request = Net::HTTP::Post.new(uri) if method == :post
|
50
54
|
request = Net::HTTP::Put.new(uri) if method == :put
|
55
|
+
request = Net::HTTP::Delete.new(uri) if method == :delete
|
51
56
|
request["User-Agent"] = "Queenbee gem"
|
52
57
|
request["Authorization"] = "Token token=\"#{token}\""
|
53
58
|
request["Content-Type"] = "application/json"
|
@@ -61,12 +66,9 @@ module Queenbee
|
|
61
66
|
http.use_ssl = true if uri.scheme == "https"
|
62
67
|
http.verify_mode = OpenSSL::SSL::VERIFY_NONE if uri.scheme == "https"
|
63
68
|
|
64
|
-
response = http.start {|h|
|
65
|
-
h.request(request)
|
66
|
-
}
|
69
|
+
response = http.start { |h| h.request(request) }
|
67
70
|
|
68
|
-
|
69
|
-
handle_api_error(response.code, response.body)
|
71
|
+
handle_api_error(response.code, response.body) unless (200..299).include?(response.code.to_i)
|
70
72
|
|
71
73
|
rescue SocketError => e
|
72
74
|
handle_connection_error(e)
|
@@ -77,7 +79,7 @@ module Queenbee
|
|
77
79
|
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH => e
|
78
80
|
handle_connection_error(e)
|
79
81
|
rescue Timeout::Error, Errno::EINVAL, Errno::ECONNRESET, EOFError,
|
80
|
-
Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError
|
82
|
+
Net::HTTPBadResponse, Net::HTTPHeaderSyntaxError, Net::ProtocolError => e
|
81
83
|
handle_connection_error(e)
|
82
84
|
end
|
83
85
|
|
@@ -91,14 +93,12 @@ module Queenbee
|
|
91
93
|
|
92
94
|
def self.handle_connection_error(e)
|
93
95
|
case e
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
else
|
101
|
-
message = "Unexpected error communicating with Queenbee."
|
96
|
+
when SocketError
|
97
|
+
message = "Unexpected error when trying to connect to Queenbee."
|
98
|
+
when NoMethodError
|
99
|
+
message = "Unexpected HTTP response code"
|
100
|
+
else
|
101
|
+
message = "Unexpected error communicating with Queenbee."
|
102
102
|
end
|
103
103
|
|
104
104
|
raise APIConnectionError.new(message + "\n\n(Network error: #{e.message})")
|
@@ -112,21 +112,19 @@ module Queenbee
|
|
112
112
|
end
|
113
113
|
|
114
114
|
case rcode
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
115
|
+
when 400, 404, 422
|
116
|
+
raise invalid_request_error error, rcode, rbody, error_obj
|
117
|
+
when 401
|
118
|
+
raise authentication_error error, rcode, rbody, error_obj
|
119
|
+
when 500
|
120
|
+
raise api_error error, rcode, rbody, error_obj
|
121
|
+
else
|
122
|
+
raise api_error error, rcode, rbody, error_obj
|
123
123
|
end
|
124
|
-
|
125
124
|
end
|
126
125
|
|
127
126
|
def self.invalid_request_error(error, rcode, rbody, error_obj)
|
128
|
-
InvalidRequestError.new(error[:message], error[:param], rcode,
|
129
|
-
rbody, error_obj)
|
127
|
+
InvalidRequestError.new(error[:message], error[:param], rcode, rbody, error_obj)
|
130
128
|
end
|
131
129
|
|
132
130
|
def self.authentication_error(error, rcode, rbody, error_obj)
|
@@ -2,7 +2,7 @@ module Queenbee
|
|
2
2
|
module APIOperations
|
3
3
|
module Create
|
4
4
|
module ClassMethods
|
5
|
-
def create(params={}, token=nil)
|
5
|
+
def create(params = {}, token = nil)
|
6
6
|
response, token = Queenbee.request(:post, self.url, token, params)
|
7
7
|
response
|
8
8
|
end
|
@@ -13,4 +13,4 @@ module Queenbee
|
|
13
13
|
end
|
14
14
|
end
|
15
15
|
end
|
16
|
-
end
|
16
|
+
end
|
@@ -2,9 +2,9 @@ module Queenbee
|
|
2
2
|
module APIOperations
|
3
3
|
module Delete
|
4
4
|
module ClassMethods
|
5
|
-
def delete(
|
6
|
-
url = self.url +
|
7
|
-
response, token = Queenbee.request(:delete, url, token
|
5
|
+
def delete(id, token = nil)
|
6
|
+
url = self.url + "/" + id
|
7
|
+
response, token = Queenbee.request(:delete, url, token)
|
8
8
|
response
|
9
9
|
end
|
10
10
|
end
|
@@ -6,7 +6,7 @@ module Queenbee
|
|
6
6
|
|
7
7
|
def self.url()
|
8
8
|
if self == APIResource
|
9
|
-
raise NotImplementedError.new('APIResource is an abstract class.
|
9
|
+
raise NotImplementedError.new('APIResource is an abstract class. You should perform actions on its subclasses)')
|
10
10
|
end
|
11
11
|
"/#{CGI.escape(class_name.downcase)}s"
|
12
12
|
end
|
@@ -18,4 +18,4 @@ module Queenbee
|
|
18
18
|
"#{self.class.url}/#{CGI.escape(id)}"
|
19
19
|
end
|
20
20
|
end
|
21
|
-
end
|
21
|
+
end
|
data/lib/queenbee/version.rb
CHANGED
@@ -0,0 +1,43 @@
|
|
1
|
+
require File.expand_path("../../test_helper", __FILE__)
|
2
|
+
|
3
|
+
module Queenbee
|
4
|
+
class EventTest < Test::Unit::TestCase
|
5
|
+
setup do
|
6
|
+
@valid_params = {
|
7
|
+
date: "2014-07-01 14:50:28",
|
8
|
+
status: "confirmed",
|
9
|
+
message: "From the API",
|
10
|
+
metadata: { color: "pink", "sport": "basket-ball", "age": 25, "fruit": "banana" }
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
should "index should return status 200" do
|
15
|
+
response = Queenbee::Event.all
|
16
|
+
assert_equal "200", response.code
|
17
|
+
assert_equal Array, JSON.parse(response.body).class
|
18
|
+
end
|
19
|
+
|
20
|
+
should "index should paginate" do
|
21
|
+
response = Queenbee::Event.all(page: 10)
|
22
|
+
assert_equal "200", response.code
|
23
|
+
assert_equal Array, JSON.parse(response.body).class
|
24
|
+
end
|
25
|
+
|
26
|
+
should "create should return status 201" do
|
27
|
+
response = Queenbee::Event.create(@valid_params)
|
28
|
+
assert_equal "201", response.code
|
29
|
+
end
|
30
|
+
|
31
|
+
should "raise Queenbee::AuthenticationError if no token provided" do
|
32
|
+
Queenbee.token = nil
|
33
|
+
assert_raises(Queenbee::AuthenticationError) { Queenbee::Event.create }
|
34
|
+
end
|
35
|
+
|
36
|
+
should "raise Queenbee::InvalidRequestError if not enough parameters" do
|
37
|
+
begin
|
38
|
+
rescue JSON::ParserError
|
39
|
+
assert_raises(Queenbee::InvalidRequestError) { Queenbee::Event.create }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require File.expand_path("../../test_helper", __FILE__)
|
2
|
+
|
3
|
+
module Queenbee
|
4
|
+
class MetricsTest < Test::Unit::TestCase
|
5
|
+
should "summary should return status 200" do
|
6
|
+
response = Queenbee::Metrics.summary(start_date: "2014-07-01", end_date: "2014-07-02")
|
7
|
+
assert_equal "200", response.code
|
8
|
+
end
|
9
|
+
|
10
|
+
should "all should return status 200" do
|
11
|
+
response = Queenbee::Metrics.all
|
12
|
+
assert_equal "200", response.code
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/test/queenbee/order_test.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require File.expand_path("../../test_helper", __FILE__)
|
2
|
+
require 'securerandom'
|
2
3
|
|
3
4
|
module Queenbee
|
4
5
|
class OrderTest < Test::Unit::TestCase
|
@@ -37,12 +38,18 @@ module Queenbee
|
|
37
38
|
assert_equal "200", response.code
|
38
39
|
end
|
39
40
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
41
|
+
# Queenbee API raises error if record not found `find_by!`
|
42
|
+
# preventing tests from passing
|
43
|
+
# TODO
|
44
|
+
# - Review API response
|
45
|
+
# - Separate tests from real response from the API
|
46
|
+
#
|
47
|
+
# should "Update should return 404 if UID incorrect" do
|
48
|
+
# response1 = Queenbee::Order.create(@valid_params)
|
49
|
+
# invalid_params = @valid_params.merge!(uid: "fakeuid")
|
50
|
+
# response = Queenbee::Order.save(invalid_params)
|
51
|
+
# assert_equal "404", response.code
|
52
|
+
# end
|
46
53
|
|
47
54
|
should "Delete should return 204" do
|
48
55
|
response1 = Queenbee::Order.create(@valid_params)
|
@@ -50,10 +57,9 @@ module Queenbee
|
|
50
57
|
assert_equal "204", response.code
|
51
58
|
end
|
52
59
|
|
53
|
-
should "Delete should return 404 if UID incorrect" do
|
54
|
-
|
55
|
-
|
56
|
-
end
|
57
|
-
|
60
|
+
# should "Delete should return 404 if UID incorrect" do
|
61
|
+
# response = Queenbee::Order.delete("fakeuid")
|
62
|
+
# assert_equal "404", response.code
|
63
|
+
# end
|
58
64
|
end
|
59
65
|
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,85 +1,85 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: queenbee
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Olivier
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: json
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 1.8
|
47
|
+
version: '1.8'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 1.8
|
54
|
+
version: '1.8'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: shoulda
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 3.4
|
61
|
+
version: '3.4'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 3.4
|
68
|
+
version: '3.4'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: test-unit
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '3'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '3'
|
83
83
|
description: E-commerce analytics platform
|
84
84
|
email:
|
85
85
|
- olivier@yafoy.com
|
@@ -91,6 +91,7 @@ files:
|
|
91
91
|
- lib/queenbee.rb
|
92
92
|
- lib/queenbee/api_operations/create.rb
|
93
93
|
- lib/queenbee/api_operations/delete.rb
|
94
|
+
- lib/queenbee/api_operations/get.rb
|
94
95
|
- lib/queenbee/api_operations/update.rb
|
95
96
|
- lib/queenbee/api_resource.rb
|
96
97
|
- lib/queenbee/errors/api_connection_error.rb
|
@@ -98,16 +99,20 @@ files:
|
|
98
99
|
- lib/queenbee/errors/authentication_error.rb
|
99
100
|
- lib/queenbee/errors/invalid_request_error.rb
|
100
101
|
- lib/queenbee/errors/queenbee_error.rb
|
102
|
+
- lib/queenbee/event.rb
|
103
|
+
- lib/queenbee/metrics.rb
|
101
104
|
- lib/queenbee/order.rb
|
102
105
|
- lib/queenbee/queenbee_object.rb
|
103
106
|
- lib/queenbee/version.rb
|
107
|
+
- test/queenbee/event_test.rb
|
108
|
+
- test/queenbee/metrics_test.rb
|
104
109
|
- test/queenbee/order_test.rb
|
105
110
|
- test/test_helper.rb
|
106
111
|
homepage: https://github.com/olimart/queenbee-ruby
|
107
112
|
licenses:
|
108
113
|
- MIT
|
109
114
|
metadata: {}
|
110
|
-
post_install_message:
|
115
|
+
post_install_message:
|
111
116
|
rdoc_options: []
|
112
117
|
require_paths:
|
113
118
|
- lib
|
@@ -122,11 +127,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
122
127
|
- !ruby/object:Gem::Version
|
123
128
|
version: '0'
|
124
129
|
requirements: []
|
125
|
-
|
126
|
-
|
127
|
-
signing_key:
|
130
|
+
rubygems_version: 3.0.6
|
131
|
+
signing_key:
|
128
132
|
specification_version: 4
|
129
133
|
summary: Gem to send e-commerce orders to the Queenbee central app.
|
130
134
|
test_files:
|
135
|
+
- test/queenbee/metrics_test.rb
|
131
136
|
- test/queenbee/order_test.rb
|
137
|
+
- test/queenbee/event_test.rb
|
132
138
|
- test/test_helper.rb
|