analogbridge 0.1.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 +7 -0
- data/.gitignore +9 -0
- data/.hound.yml +3 -0
- data/.rspec +1 -0
- data/.rubocop.yml +629 -0
- data/.sample.pryrc +3 -0
- data/.travis.yml +5 -0
- data/Gemfile +4 -0
- data/LICENSE +21 -0
- data/README.md +227 -0
- data/Rakefile +6 -0
- data/analogbridge.gemspec +29 -0
- data/bin/console +11 -0
- data/bin/rspec +17 -0
- data/bin/setup +8 -0
- data/lib/analogbridge.rb +9 -0
- data/lib/analogbridge/base.rb +11 -0
- data/lib/analogbridge/client.rb +46 -0
- data/lib/analogbridge/configuration.rb +22 -0
- data/lib/analogbridge/customer.rb +31 -0
- data/lib/analogbridge/order.rb +13 -0
- data/lib/analogbridge/product.rb +7 -0
- data/lib/analogbridge/response.rb +19 -0
- data/lib/analogbridge/version.rb +3 -0
- data/spec/client_spec.rb +46 -0
- data/spec/configuration_spec.rb +23 -0
- data/spec/customer_spec.rb +82 -0
- data/spec/fixtures/customer.json +22 -0
- data/spec/fixtures/customer_created.json +26 -0
- data/spec/fixtures/customer_deleted.json +9 -0
- data/spec/fixtures/customers.json +26 -0
- data/spec/fixtures/import_ready_orders.json +15 -0
- data/spec/fixtures/order.json +37 -0
- data/spec/fixtures/orders.json +39 -0
- data/spec/fixtures/products.json +18 -0
- data/spec/order_spec.rb +41 -0
- data/spec/product_spec.rb +13 -0
- data/spec/spec_helper.rb +17 -0
- data/spec/support/fake_analogbridge_api.rb +118 -0
- metadata +169 -0
@@ -0,0 +1,13 @@
|
|
1
|
+
module AnalogBridge
|
2
|
+
class Order < AnalogBridge::Base
|
3
|
+
def import_ready
|
4
|
+
AnalogBridge.get_resource("orders/import-ready")
|
5
|
+
end
|
6
|
+
|
7
|
+
def where(customer_id:, order_id: nil)
|
8
|
+
AnalogBridge.get_resource(
|
9
|
+
["customers", customer_id, "orders", order_id].compact.join("/"),
|
10
|
+
)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "json"
|
2
|
+
|
3
|
+
module AnalogBridge
|
4
|
+
class Response
|
5
|
+
attr_reader :response
|
6
|
+
|
7
|
+
def initialize(response)
|
8
|
+
@response = response
|
9
|
+
end
|
10
|
+
|
11
|
+
def parse
|
12
|
+
JSON.parse(response, object_class: ResponseObject)
|
13
|
+
rescue JSON::ParserError => error
|
14
|
+
ResponseObject.new(error: error, content: "")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class ResponseObject < OpenStruct; end
|
19
|
+
end
|
data/spec/client_spec.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
RSpec.describe AnalogBridge::Client do
|
4
|
+
describe ".get_resource" do
|
5
|
+
it "loads the resource via :get" do
|
6
|
+
stub_get_resource_request("ping")
|
7
|
+
resource = AnalogBridge.get_resource("ping")
|
8
|
+
|
9
|
+
expect(resource.data).to eq("Pong!")
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe ".post_resource" do
|
14
|
+
it "submit the request via :post" do
|
15
|
+
stub_post_ping_request
|
16
|
+
resource = AnalogBridge.post_resource("ping", {})
|
17
|
+
|
18
|
+
expect(resource.data).to eq("Pong!")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe ".delete_resource" do
|
23
|
+
it "submits the request via :delete" do
|
24
|
+
stub_delete_ping_request
|
25
|
+
resource = AnalogBridge.delete_resource("ping")
|
26
|
+
|
27
|
+
expect(resource.data).to eq("Pong!")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def stub_get_resource_request(end_point)
|
32
|
+
stub_request(
|
33
|
+
:get, [AnalogBridge.configuration.api_host, end_point].join("/")
|
34
|
+
).and_return(status: 200, body: JSON.generate(data: "Pong!"))
|
35
|
+
end
|
36
|
+
|
37
|
+
def stub_post_ping_request
|
38
|
+
stub_request(:post, "https://api.analogbridge.io/v1/ping").
|
39
|
+
to_return(status: 200, body: JSON.generate(data: "Pong!"))
|
40
|
+
end
|
41
|
+
|
42
|
+
def stub_delete_ping_request
|
43
|
+
stub_request(:delete, "https://api.analogbridge.io/v1/ping").
|
44
|
+
to_return(status: 200, body: JSON.generate(data: "Pong!"))
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "analogbridge/configuration"
|
3
|
+
|
4
|
+
RSpec.describe AnalogBridge::Configuration do
|
5
|
+
describe ".configuration" do
|
6
|
+
it "returns the client configuration object" do
|
7
|
+
api_host = "https://api.analogbridge.io/v1"
|
8
|
+
configuration = AnalogBridge.configuration
|
9
|
+
|
10
|
+
expect(configuration.api_host).to eq(api_host)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "#secret_key" do
|
15
|
+
it "returns the configured secret key" do
|
16
|
+
AnalogBridge.configure do |config|
|
17
|
+
config.secret_key = "SECURE_SECRET_KEY"
|
18
|
+
end
|
19
|
+
|
20
|
+
expect(AnalogBridge.configuration.secret_key).to eq("SECURE_SECRET_KEY")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
RSpec.describe AnalogBridge::Customer do
|
4
|
+
describe ".create" do
|
5
|
+
it "creates a new customer" do
|
6
|
+
stub_analogbridge_customer_create(customer_attributes)
|
7
|
+
customer = AnalogBridge::Customer.create(customer_attributes)
|
8
|
+
|
9
|
+
expect(customer.cus_id).not_to be_nil
|
10
|
+
expect(customer.metadata.user_id).to eq(123456)
|
11
|
+
expect(customer.email).to eq("demo@analogbridge.io")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe ".find" do
|
16
|
+
it "retrieves the specified customer" do
|
17
|
+
customer_id = "cus_28b70539d2b10be293bdeb3c"
|
18
|
+
stub_analogbridge_customer_find(customer_id)
|
19
|
+
customer = AnalogBridge::Customer.find(customer_id)
|
20
|
+
|
21
|
+
expect(customer.cus_id).to eq(customer_id)
|
22
|
+
expect(customer.metadata.user_id).to eq(123456)
|
23
|
+
expect(customer.email).to eq("demo@analogbridge.io")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe ".update" do
|
28
|
+
it "updates an existing customer details" do
|
29
|
+
customer_id = "cus_28b70539d2b10be293bdeb3c"
|
30
|
+
stub_analogbridge_customer_update(customer_id, customer_attributes)
|
31
|
+
customer = AnalogBridge::Customer.update(customer_id, customer_attributes)
|
32
|
+
|
33
|
+
expect(customer.cus_id).to eq(customer_id)
|
34
|
+
expect(customer.metadata.user_id).to eq(123456)
|
35
|
+
expect(customer.email).to eq("demo@analogbridge.io")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe ".delete" do
|
40
|
+
it "deletes a specified customer" do
|
41
|
+
customer_id = "cus_28b70539d2b10be293bdeb3c"
|
42
|
+
stub_analogbridge_customer_delete(customer_id)
|
43
|
+
customer = AnalogBridge::Customer.delete(customer_id)
|
44
|
+
|
45
|
+
expect(customer.deleted).not_to be_nil
|
46
|
+
expect(customer.cus_id).to eq(customer_id)
|
47
|
+
expect(customer.deleted).not_to be_nil
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe ".list" do
|
52
|
+
it "retrieve all the customers" do
|
53
|
+
filters = { limit: "2", offset: "10" }
|
54
|
+
stub_analogbridge_customer_listting(filters)
|
55
|
+
customers = AnalogBridge::Customer.list(filters)
|
56
|
+
|
57
|
+
expect(customers.offset).to eq(10)
|
58
|
+
expect(customers.list.count).to eq(2)
|
59
|
+
expect(customers.total_count).to eq(102)
|
60
|
+
expect(customers.list.last.email).to eq("demo@analogbridge.io")
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def customer_attributes
|
65
|
+
{
|
66
|
+
email: "demo@analogbridge.io",
|
67
|
+
shipping: {
|
68
|
+
first_name: "John",
|
69
|
+
last_name: "Smith",
|
70
|
+
address1: "3336 Commercial Ave",
|
71
|
+
city: "Northbrook",
|
72
|
+
state: "IL",
|
73
|
+
zip: "60062",
|
74
|
+
phone: "800-557-3508",
|
75
|
+
email: "demo@analogbridge.io",
|
76
|
+
},
|
77
|
+
metadata: {
|
78
|
+
user_id: "123456",
|
79
|
+
},
|
80
|
+
}
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
{
|
2
|
+
"cus_id": "cus_28b70539d2b10be293bdeb3c",
|
3
|
+
"auth": "long_auth_token",
|
4
|
+
"expires": 1481310922,
|
5
|
+
"email": "demo@analogbridge.io",
|
6
|
+
"shipping": {
|
7
|
+
"first_name": "John",
|
8
|
+
"last_name": "Smith",
|
9
|
+
"company": null,
|
10
|
+
"address1": "3336 Commercial Ave",
|
11
|
+
"address2": null,
|
12
|
+
"city": "Northbrook",
|
13
|
+
"state": "IL",
|
14
|
+
"zip": "60062",
|
15
|
+
"country": "US",
|
16
|
+
"phone": "800-557-3508",
|
17
|
+
"email": "demo@analogbridge.io"
|
18
|
+
},
|
19
|
+
"metadata": {
|
20
|
+
"user_id": 123456
|
21
|
+
}
|
22
|
+
}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
{
|
2
|
+
"status": "success",
|
3
|
+
"message": "Customer created successfully",
|
4
|
+
"data": {
|
5
|
+
"cus_id": "cus_28b70539d2b10be293bdeb3c",
|
6
|
+
"auth": "long_auth_token",
|
7
|
+
"expires": 1481310922,
|
8
|
+
"email": "demo@analogbridge.io",
|
9
|
+
"shipping": {
|
10
|
+
"first_name": "John",
|
11
|
+
"last_name": "Smith",
|
12
|
+
"company": null,
|
13
|
+
"address1": "3336 Commercial Ave",
|
14
|
+
"address2": null,
|
15
|
+
"city": "Northbrook",
|
16
|
+
"state": "IL",
|
17
|
+
"zip": "60062",
|
18
|
+
"country": "US",
|
19
|
+
"phone": "800-557-3508",
|
20
|
+
"email": "demo@analogbridge.io"
|
21
|
+
},
|
22
|
+
"metadata": {
|
23
|
+
"user_id": 123456
|
24
|
+
}
|
25
|
+
}
|
26
|
+
}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
{
|
2
|
+
"offset": 10,
|
3
|
+
"limit": 20,
|
4
|
+
"total_count": 102,
|
5
|
+
"list": [
|
6
|
+
{
|
7
|
+
"cus_id": "cus_e6bd1537e138d2c3495cdb57",
|
8
|
+
"email": "test@test.com",
|
9
|
+
"metadata": {
|
10
|
+
"user_id": 123456,
|
11
|
+
"custom": {
|
12
|
+
"a": "2",
|
13
|
+
"b": "3"
|
14
|
+
}
|
15
|
+
}
|
16
|
+
},
|
17
|
+
{
|
18
|
+
"cus_id": "cus_d5026c9fee3c48b7d5809682",
|
19
|
+
"email": "demo@analogbridge.io",
|
20
|
+
"metadata": {
|
21
|
+
"user_id": 1234567
|
22
|
+
}
|
23
|
+
}
|
24
|
+
]
|
25
|
+
}
|
26
|
+
|
@@ -0,0 +1,37 @@
|
|
1
|
+
{
|
2
|
+
"ord_id": "ord_fe310b878dc3313c3c2e",
|
3
|
+
"cus_id": "cus_28b70539d2b10be293bdeb3c",
|
4
|
+
"date": "2016-12-08 19:18:30",
|
5
|
+
"total": 89.47,
|
6
|
+
"subtotal": 89.47,
|
7
|
+
"shipping": 0,
|
8
|
+
"order_status": "Order Received from Client",
|
9
|
+
"approval_status": "Approved",
|
10
|
+
"instructions": "Transfer in numbered order",
|
11
|
+
"tracking": null,
|
12
|
+
"items": [
|
13
|
+
{
|
14
|
+
"id": 856962,
|
15
|
+
"date": "1993-09-17 00:00:00",
|
16
|
+
"title": "VHS #1",
|
17
|
+
"is_image": 0,
|
18
|
+
"is_video": 1,
|
19
|
+
"video_hq_url": "https://eterna.gomemorable.com/users/883/883_1000_Eugene-and-Boris-Concert_HQ.mp4",
|
20
|
+
"video_thumb_url": "https://eterna.gomemorable.com/users/883/883_1000_Eugene-and-Boris-Concert_thumb.jpg",
|
21
|
+
"image_hq_url": null,
|
22
|
+
"image_thumb_url": null
|
23
|
+
},
|
24
|
+
{
|
25
|
+
"id": 856963,
|
26
|
+
"date": "1995-09-23 00:00:00",
|
27
|
+
"title": "VHS #2",
|
28
|
+
"is_image": 0,
|
29
|
+
"is_video": 1,
|
30
|
+
"video_hq_url": "https://eterna.gomemorable.com/users/883/883_1000_1995-Jamaica-Cruise-_HQ.mp4",
|
31
|
+
"video_thumb_url": "https://eterna.gomemorable.com/users/883/883_1000_1995-Jamaica-Cruise-_thumb.jpg",
|
32
|
+
"image_hq_url": null,
|
33
|
+
"image_thumb_url": null
|
34
|
+
}
|
35
|
+
]
|
36
|
+
}
|
37
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"ord_id": "ord_fe310b878dc3313c3c2e",
|
4
|
+
"cus_id": "cus_28b70539d2b10be293bdeb3c",
|
5
|
+
"date": "2016-12-08 19:18:30",
|
6
|
+
"total": 89.47,
|
7
|
+
"subtotal": 89.47,
|
8
|
+
"shipping": 0,
|
9
|
+
"order_status": "Order Received from Client",
|
10
|
+
"approval_status": "Approved",
|
11
|
+
"instructions": "Transfer in numbered order",
|
12
|
+
"tracking": null,
|
13
|
+
"items": [
|
14
|
+
{
|
15
|
+
"id": 856962,
|
16
|
+
"date": "1993-09-17 00:00:00",
|
17
|
+
"title": "VHS #1",
|
18
|
+
"is_image": 0,
|
19
|
+
"is_video": 1,
|
20
|
+
"video_hq_url": "https://eterna.gomemorable.com/users/883/883_1000_Eugene-and-Boris-Concert_HQ.mp4",
|
21
|
+
"video_thumb_url": "https://eterna.gomemorable.com/users/883/883_1000_Eugene-and-Boris-Concert_thumb.jpg",
|
22
|
+
"image_hq_url": null,
|
23
|
+
"image_thumb_url": null
|
24
|
+
},
|
25
|
+
{
|
26
|
+
"id": 856963,
|
27
|
+
"date": "1995-09-23 00:00:00",
|
28
|
+
"title": "VHS #2",
|
29
|
+
"is_image": 0,
|
30
|
+
"is_video": 1,
|
31
|
+
"video_hq_url": "https://eterna.gomemorable.com/users/883/883_1000_1995-Jamaica-Cruise-_HQ.mp4",
|
32
|
+
"video_thumb_url": "https://eterna.gomemorable.com/users/883/883_1000_1995-Jamaica-Cruise-_thumb.jpg",
|
33
|
+
"image_hq_url": null,
|
34
|
+
"image_thumb_url": null
|
35
|
+
}
|
36
|
+
]
|
37
|
+
}
|
38
|
+
]
|
39
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
[
|
2
|
+
{
|
3
|
+
"name": "35mm Slides",
|
4
|
+
"price": 0.69,
|
5
|
+
"url": "https://analogbridge.s3.amazonaws.com/images/format_35mmslides.jpg",
|
6
|
+
"product_id": 13,
|
7
|
+
"unit_name": "slide",
|
8
|
+
"category_name": "image"
|
9
|
+
},
|
10
|
+
{
|
11
|
+
"name": "Super 8mm Film",
|
12
|
+
"price": 14.5,
|
13
|
+
"url": "https://analogbridge.s3.amazonaws.com/images/format_super8.jpg",
|
14
|
+
"product_id": 16,
|
15
|
+
"unit_name": "50ft reel",
|
16
|
+
"category_name": "film"
|
17
|
+
}
|
18
|
+
]
|
data/spec/order_spec.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
RSpec.describe AnalogBridge::Order do
|
4
|
+
describe ".where" do
|
5
|
+
context "only customer_id provided" do
|
6
|
+
it "retrieves all orders for that customer" do
|
7
|
+
customer_id = "cus_28b70539d2b10be293bdeb3c"
|
8
|
+
stub_analogbridge_order_listing(customer_id: customer_id)
|
9
|
+
orders = AnalogBridge::Order.where(customer_id: customer_id)
|
10
|
+
|
11
|
+
expect(orders.first.items.count).to eq(2)
|
12
|
+
expect(orders.first.cus_id).to eq(customer_id)
|
13
|
+
expect(orders.first.items.first.id).not_to be_nil
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context "both with customer_id and order_id" do
|
18
|
+
it "retrieve a specific order details" do
|
19
|
+
customer_id = "cus_28b70539d2b10be293bdeb3c"
|
20
|
+
order_id = "ord_fe310b878dc3313c3c2e"
|
21
|
+
stub_analogbridge_order_details(customer_id, order_id)
|
22
|
+
order = AnalogBridge::Order.where(
|
23
|
+
customer_id: customer_id, order_id: order_id,
|
24
|
+
)
|
25
|
+
|
26
|
+
expect(order.cus_id).to eq(customer_id)
|
27
|
+
expect(order.items.first.id).not_to be_nil
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe ".import_ready" do
|
33
|
+
it "retrieve all the import ready orders" do
|
34
|
+
stub_analogbridge_order_import_ready
|
35
|
+
orders = AnalogBridge::Order.import_ready
|
36
|
+
|
37
|
+
expect(orders.count).to eq(2)
|
38
|
+
expect(orders.first.cus_id).not_to be_nil
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|