music_today_api_wrapper 22.12.15.02 → 22.12.15.03
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 +4 -4
- data/lib/music_today_api_wrapper.rb +6 -0
- data/lib/resources/address.rb +12 -3
- data/lib/resources/checkout/session.rb +27 -0
- data/lib/resources/hash.rb +8 -0
- data/lib/resources/purchase/item.rb +16 -2
- data/lib/resources/purchase/shipping_option.rb +9 -1
- data/lib/resources/string.rb +10 -7
- data/lib/resources/variant.rb +12 -8
- data/lib/rest_clients/music_today_rest_client.rb +8 -0
- data/lib/services/checkout_services.rb +39 -0
- data/lib/services/shipping_services.rb +2 -3
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b3f1708963b1fd2219c16e832691bcc7f5752acf
|
4
|
+
data.tar.gz: 36d4ba12c95ca99ea151af4d091fceb3b4b31c04
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f7a788e3fcfa0a0717f8fab2a913dfd16059db6cafdef1b783ddbc05f34883c80b5fbca7df8ee6edffd77162b7c353dad4a757ba71c22c8b5f5952097f77f112
|
7
|
+
data.tar.gz: c7799a3b7a4a9d4d3fef8e1c17a834c584eb6ab9c9023400e74b6782554b9dc24a31da4755265941fbb352aa6b11be3df16cfc6e1ca28c134f7d29fddcb67adc
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'support/configuration'
|
2
2
|
require 'services/product_services'
|
3
3
|
require 'services/shipping_services'
|
4
|
+
require 'services/checkout_services'
|
4
5
|
|
5
6
|
module MusicTodayApiWrapper
|
6
7
|
class << self
|
@@ -26,4 +27,9 @@ module MusicTodayApiWrapper
|
|
26
27
|
shipping_services = Services::ShippingServices.new
|
27
28
|
shipping_services.options(address, items)
|
28
29
|
end
|
30
|
+
|
31
|
+
def self.checkout(address, items)
|
32
|
+
checkout_services = Services::CheckoutServices.new
|
33
|
+
checkout_services.checkout(address, items)
|
34
|
+
end
|
29
35
|
end
|
data/lib/resources/address.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'resources/purchase/shipping_option'
|
2
|
+
require 'resources/hash'
|
3
|
+
|
1
4
|
module MusicTodayApiWrapper
|
2
5
|
module Resources
|
3
6
|
class Address
|
@@ -5,17 +8,22 @@ module MusicTodayApiWrapper
|
|
5
8
|
:street_second_line,
|
6
9
|
:city,
|
7
10
|
:postal_code,
|
8
|
-
:country
|
11
|
+
:country,
|
12
|
+
:shipping_options,
|
13
|
+
:selected_shipping
|
9
14
|
|
10
15
|
# rubocop:disable ParameterLists
|
11
16
|
def initialize(street, state, city, postal_code, country = 'US',
|
12
|
-
street_second_line =
|
17
|
+
street_second_line = '', shipping_options = [],
|
18
|
+
selected_shipping = nil)
|
13
19
|
@street = street
|
14
20
|
@state = state
|
15
21
|
@street_second_line = street_second_line
|
16
22
|
@city = city
|
17
23
|
@postal_code = postal_code
|
18
24
|
@country = country
|
25
|
+
@shipping_options = shipping_options
|
26
|
+
@selected_shipping = selected_shipping
|
19
27
|
end
|
20
28
|
|
21
29
|
def self.from_hash(address_hash)
|
@@ -32,7 +40,8 @@ module MusicTodayApiWrapper
|
|
32
40
|
state: @state,
|
33
41
|
city: @city,
|
34
42
|
postalCode: @postal_code,
|
35
|
-
country: @country
|
43
|
+
country: @country,
|
44
|
+
shippingOptionType: @selected_shipping }.compact
|
36
45
|
end
|
37
46
|
end
|
38
47
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'resources/address'
|
2
|
+
require 'resources/purchase/item'
|
3
|
+
|
4
|
+
module MusicTodayApiWrapper
|
5
|
+
module Resources
|
6
|
+
module Checkout
|
7
|
+
class Session
|
8
|
+
attr_accessor :id, :address, :items
|
9
|
+
|
10
|
+
def initialize(id, address, items = [])
|
11
|
+
@id = id
|
12
|
+
@address = address
|
13
|
+
@items = items
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.from_hash(session_hash)
|
17
|
+
address = Address.from_hash(session_hash)
|
18
|
+
session = Session.new(session_hash['sessionId'], address)
|
19
|
+
session_hash['items'].each do |item|
|
20
|
+
session.items << Resources::Purchase::Item.from_hash(item)
|
21
|
+
end
|
22
|
+
session
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -1,19 +1,33 @@
|
|
1
1
|
require 'resources/variant'
|
2
|
+
require 'resources/hash'
|
3
|
+
|
2
4
|
module MusicTodayApiWrapper
|
3
5
|
module Resources
|
4
6
|
module Purchase
|
5
7
|
class Item
|
6
8
|
attr_accessor :variant, :quantity
|
7
9
|
|
8
|
-
def initialize(variant = Variant.new, quantity = 1
|
10
|
+
def initialize(variant = Variant.new, quantity = 1, tax = nil,
|
11
|
+
total = nil)
|
9
12
|
@variant = variant
|
10
13
|
@quantity = quantity
|
14
|
+
@tax = tax
|
15
|
+
@total = total
|
11
16
|
end
|
12
17
|
|
13
18
|
def as_hash
|
14
19
|
{ sku: @variant.sku,
|
15
20
|
qty: @quantity,
|
16
|
-
|
21
|
+
quantity: @quantity,
|
22
|
+
price: @variant.price,
|
23
|
+
tax: @tax,
|
24
|
+
total: @total }.compact
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.from_hash(item_hash)
|
28
|
+
variant = Variant.from_hash(item_hash)
|
29
|
+
Item.new(variant, item_hash['quantity'], item_hash['tax'],
|
30
|
+
item_hash['total'])
|
17
31
|
end
|
18
32
|
end
|
19
33
|
end
|
@@ -1,10 +1,13 @@
|
|
1
|
+
require 'resources/hash'
|
2
|
+
|
1
3
|
module MusicTodayApiWrapper
|
2
4
|
module Resources
|
3
5
|
module Purchase
|
4
6
|
class ShippingOption
|
5
7
|
attr_accessor :type, :delivery_date, :rate, :description
|
6
8
|
|
7
|
-
def initialize(type, delivery_date, rate,
|
9
|
+
def initialize(type, delivery_date = nil, rate = nil,
|
10
|
+
description = nil)
|
8
11
|
@type = type
|
9
12
|
@delivery_date = delivery_date ? Date.parse(delivery_date) : nil
|
10
13
|
@rate = rate
|
@@ -17,6 +20,11 @@ module MusicTodayApiWrapper
|
|
17
20
|
option['totalRate'],
|
18
21
|
option['shippingOptionName'])
|
19
22
|
end
|
23
|
+
|
24
|
+
def as_hash
|
25
|
+
{ shippingOptionType: @type, deliveryDate: @delivery_date,
|
26
|
+
totalRate: @rate, shippingOptionName: @description }.compact
|
27
|
+
end
|
20
28
|
end
|
21
29
|
end
|
22
30
|
end
|
data/lib/resources/string.rb
CHANGED
@@ -1,10 +1,13 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
module MusicTodayApiWrapper
|
2
|
+
# rubocop:disable ClassAndModuleChildren
|
3
|
+
class ::String
|
4
|
+
def to_underscore!
|
5
|
+
gsub!(/(.)([A-Z])/, '\1_\2')
|
6
|
+
downcase!
|
7
|
+
end
|
6
8
|
|
7
|
-
|
8
|
-
|
9
|
+
def to_underscore
|
10
|
+
dup.tap(&:to_underscore!)
|
11
|
+
end
|
9
12
|
end
|
10
13
|
end
|
data/lib/resources/variant.rb
CHANGED
@@ -15,20 +15,24 @@ module MusicTodayApiWrapper
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def self.from_hash(variant_hash)
|
18
|
-
|
18
|
+
Variant.new(variant_hash['sku'],
|
19
|
+
variant_hash['listPrice'],
|
20
|
+
variant_hash['qtyAvailable'],
|
21
|
+
variant_names(variant_hash['variantNames']))
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.variant_names(names)
|
25
|
+
return [] unless names
|
26
|
+
symbolized_names = []
|
19
27
|
|
20
|
-
|
28
|
+
names.each do |variant|
|
21
29
|
variant_name = {}
|
22
30
|
variant_name[variant.keys[0]
|
23
31
|
.to_underscore
|
24
32
|
.to_sym] = variant.values[0]
|
25
|
-
|
33
|
+
symbolized_names << variant_name
|
26
34
|
end
|
27
|
-
|
28
|
-
Variant.new(variant_hash['sku'],
|
29
|
-
variant_hash['listPrice'],
|
30
|
-
variant_hash['qtyAvailable'],
|
31
|
-
variant_names)
|
35
|
+
symbolized_names
|
32
36
|
end
|
33
37
|
end
|
34
38
|
end
|
@@ -42,6 +42,14 @@ module MusicTodayApiWrapper
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
|
45
|
+
def checkout(params)
|
46
|
+
@common_response.work do
|
47
|
+
url = "#{@url}/cart/pricing"
|
48
|
+
@common_response.data[:session] =
|
49
|
+
post(url, {}, params)['addresses'].first
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
45
53
|
private
|
46
54
|
|
47
55
|
def get(url, options = {})
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'rest_clients/music_today_rest_client'
|
2
|
+
require 'rest_clients/common_response'
|
3
|
+
require 'resources/purchase/item'
|
4
|
+
require 'resources/checkout/session'
|
5
|
+
|
6
|
+
module MusicTodayApiWrapper
|
7
|
+
module Services
|
8
|
+
class CheckoutServices
|
9
|
+
def initialize
|
10
|
+
@common_response = RestClients::CommonResponse.new
|
11
|
+
@rest_client = RestClient.new
|
12
|
+
end
|
13
|
+
|
14
|
+
# rubocop:disable MethodLength
|
15
|
+
def checkout(address, items)
|
16
|
+
items_hash = []
|
17
|
+
items.each { |item| items_hash << item.as_hash }
|
18
|
+
address_hash =
|
19
|
+
address
|
20
|
+
.as_hash
|
21
|
+
.merge(id: 1, items: items_hash)
|
22
|
+
|
23
|
+
@common_response.work do
|
24
|
+
params = { storeId: @rest_client.catalog_number,
|
25
|
+
currency: 'USD',
|
26
|
+
priceLevel: '',
|
27
|
+
addresses: [address_hash],
|
28
|
+
promotions: [] }
|
29
|
+
|
30
|
+
response = @rest_client.checkout(params)
|
31
|
+
|
32
|
+
return response unless response.success?
|
33
|
+
@common_response.data[:session] =
|
34
|
+
Resources::Checkout::Session.from_hash(response.data[:session])
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -5,10 +5,9 @@ module MusicTodayApiWrapper
|
|
5
5
|
module Services
|
6
6
|
class ShippingServices
|
7
7
|
def initialize
|
8
|
-
@common_response =
|
9
|
-
MusicTodayApiWrapper::RestClients::CommonResponse.new
|
8
|
+
@common_response = RestClients::CommonResponse.new
|
10
9
|
@common_response.data[:shipping_options] = []
|
11
|
-
@rest_client =
|
10
|
+
@rest_client = RestClient.new
|
12
11
|
end
|
13
12
|
|
14
13
|
def options(address, items)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: music_today_api_wrapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 22.12.15.
|
4
|
+
version: 22.12.15.03
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pablo Gonzaga
|
@@ -191,6 +191,8 @@ extra_rdoc_files: []
|
|
191
191
|
files:
|
192
192
|
- lib/music_today_api_wrapper.rb
|
193
193
|
- lib/resources/address.rb
|
194
|
+
- lib/resources/checkout/session.rb
|
195
|
+
- lib/resources/hash.rb
|
194
196
|
- lib/resources/image.rb
|
195
197
|
- lib/resources/product.rb
|
196
198
|
- lib/resources/purchase/item.rb
|
@@ -199,6 +201,7 @@ files:
|
|
199
201
|
- lib/resources/variant.rb
|
200
202
|
- lib/rest_clients/common_response.rb
|
201
203
|
- lib/rest_clients/music_today_rest_client.rb
|
204
|
+
- lib/services/checkout_services.rb
|
202
205
|
- lib/services/product_services.rb
|
203
206
|
- lib/services/shipping_services.rb
|
204
207
|
- lib/support/configuration.rb
|