desertcart 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.github/workflows/main.yml +18 -0
- data/.gitignore +11 -0
- data/.rspec +3 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile +10 -0
- data/Gemfile.lock +138 -0
- data/LICENSE.txt +21 -0
- data/README.md +107 -0
- data/Rakefile +8 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/desertcart.gemspec +34 -0
- data/lib/desertcart/authentication_token/deserializer.rb +21 -0
- data/lib/desertcart/authentication_token/operations/find.rb +20 -0
- data/lib/desertcart/authentication_token/serializer.rb +21 -0
- data/lib/desertcart/client.rb +65 -0
- data/lib/desertcart/config.rb +14 -0
- data/lib/desertcart/deserializer.rb +9 -0
- data/lib/desertcart/marketplace/authorizations/operations/create.rb +30 -0
- data/lib/desertcart/marketplace/authorizations/serializer.rb +14 -0
- data/lib/desertcart/marketplace/movement/deserializer.rb +15 -0
- data/lib/desertcart/marketplace/movement/operations/create.rb +26 -0
- data/lib/desertcart/marketplace/movement/serializer.rb +20 -0
- data/lib/desertcart/marketplace/order_item/deserializer.rb +38 -0
- data/lib/desertcart/marketplace/order_item/operations/find.rb +44 -0
- data/lib/desertcart/marketplace/order_item/operations/update.rb +44 -0
- data/lib/desertcart/marketplace/order_item/searcher.rb +21 -0
- data/lib/desertcart/marketplace/order_item/serializer.rb +34 -0
- data/lib/desertcart/marketplace/order_item_acceptance/operations/create.rb +31 -0
- data/lib/desertcart/marketplace/order_item_acceptance/serializer.rb +15 -0
- data/lib/desertcart/marketplace/order_item_rejection/operations/create.rb +31 -0
- data/lib/desertcart/marketplace/order_item_rejection/serializer.rb +15 -0
- data/lib/desertcart/marketplace/pending_order_items/searcher.rb +25 -0
- data/lib/desertcart/marketplace/registration/operations/create.rb +34 -0
- data/lib/desertcart/marketplace/registration/serializer.rb +13 -0
- data/lib/desertcart/marketplace/shipping_address/deserializer.rb +18 -0
- data/lib/desertcart/marketplace/store/deserializer.rb +12 -0
- data/lib/desertcart/marketplace/store/operations/find.rb +22 -0
- data/lib/desertcart/marketplace/store/serializer.rb +12 -0
- data/lib/desertcart/operation/create.rb +49 -0
- data/lib/desertcart/operation/find.rb +63 -0
- data/lib/desertcart/operation/update.rb +49 -0
- data/lib/desertcart/operation.rb +39 -0
- data/lib/desertcart/resource.rb +6 -0
- data/lib/desertcart/resources/authentication_token.rb +14 -0
- data/lib/desertcart/resources/marketplace/authorization.rb +9 -0
- data/lib/desertcart/resources/marketplace/movement.rb +16 -0
- data/lib/desertcart/resources/marketplace/order_item.rb +34 -0
- data/lib/desertcart/resources/marketplace/order_item_acceptance.rb +10 -0
- data/lib/desertcart/resources/marketplace/order_item_rejection.rb +10 -0
- data/lib/desertcart/resources/marketplace/registration.rb +11 -0
- data/lib/desertcart/resources/marketplace/shipping_address.rb +15 -0
- data/lib/desertcart/resources/marketplace/store.rb +10 -0
- data/lib/desertcart/resources/session.rb +8 -0
- data/lib/desertcart/resources/user.rb +7 -0
- data/lib/desertcart/searcher.rb +70 -0
- data/lib/desertcart/serializer.rb +9 -0
- data/lib/desertcart/session/operations/create.rb +27 -0
- data/lib/desertcart/session/operations/find.rb +27 -0
- data/lib/desertcart/session/serializer.rb +10 -0
- data/lib/desertcart/user/deserializer.rb +10 -0
- data/lib/desertcart/user/serializer.rb +10 -0
- data/lib/desertcart/version.rb +5 -0
- data/lib/desertcart.rb +7 -0
- metadata +125 -0
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../user/serializer'
|
4
|
+
require_relative '../marketplace/store/serializer'
|
5
|
+
|
6
|
+
module Desertcart
|
7
|
+
class AuthenticationToken
|
8
|
+
class Serializer < Desertcart::Serializer
|
9
|
+
id
|
10
|
+
attribute :token
|
11
|
+
attribute :expires_at
|
12
|
+
|
13
|
+
references_one 'user',
|
14
|
+
resource_attribute: :user,
|
15
|
+
serializer: Desertcart::User::Serializer
|
16
|
+
references_one 'store',
|
17
|
+
resource_attribute: :store,
|
18
|
+
serializer: Desertcart::Marketplace::Store::Serializer
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Desertcart
|
4
|
+
class Client
|
5
|
+
include LedgerSync::Ledgers::Client::Mixin
|
6
|
+
|
7
|
+
ROOT_URI = 'https://api.desertcart.com/api'
|
8
|
+
|
9
|
+
REQUEST_HEADERS = { 'Accept' => 'application/vnd.api+json; version:3.0',
|
10
|
+
'Content-Type' => 'application/json' }.freeze
|
11
|
+
|
12
|
+
attr_reader :user_id,
|
13
|
+
:user_token,
|
14
|
+
:store_id,
|
15
|
+
:store_token
|
16
|
+
|
17
|
+
def initialize(args = {})
|
18
|
+
@user_id = args[:user_id]
|
19
|
+
@user_token = args[:user_token]
|
20
|
+
@store_id = args[:store_id]
|
21
|
+
@store_token = args[:store_token]
|
22
|
+
end
|
23
|
+
|
24
|
+
def read(**keywords)
|
25
|
+
request(keywords.merge(method: :get))
|
26
|
+
end
|
27
|
+
|
28
|
+
def create(**keywords)
|
29
|
+
request(keywords.merge(method: :post))
|
30
|
+
end
|
31
|
+
|
32
|
+
def update(**keywords)
|
33
|
+
request(keywords.merge(method: :put))
|
34
|
+
end
|
35
|
+
|
36
|
+
def auth_headers
|
37
|
+
{
|
38
|
+
'X-User-Id' => @user_id,
|
39
|
+
'X-User-Token' => @user_token,
|
40
|
+
'X-Store-Id' => @store_id,
|
41
|
+
'X-Store-Token' => @store_token
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
def request(args = {})
|
46
|
+
request = LedgerSync::Ledgers::Request.new(
|
47
|
+
body: args.fetch(:body, nil),
|
48
|
+
headers: args.fetch(:headers, {})
|
49
|
+
.merge(REQUEST_HEADERS)
|
50
|
+
.merge(auth_headers),
|
51
|
+
method: args.fetch(:method),
|
52
|
+
url: url_from_path(path: args.fetch(:path)),
|
53
|
+
params: args.fetch(:params, {})
|
54
|
+
)
|
55
|
+
|
56
|
+
request.perform
|
57
|
+
end
|
58
|
+
|
59
|
+
def url_from_path(path:)
|
60
|
+
request_url = ROOT_URI
|
61
|
+
request_url += '/' unless path.to_s.start_with?('/')
|
62
|
+
request_url + path.to_s
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../../resources/authentication_token'
|
4
|
+
|
5
|
+
module Desertcart
|
6
|
+
module Marketplace
|
7
|
+
class Authorization
|
8
|
+
module Operations
|
9
|
+
class Create < Desertcart::Operation::Create
|
10
|
+
class Contract < LedgerSync::Ledgers::Contract
|
11
|
+
params do
|
12
|
+
optional(:store).maybe(:hash, Types::Reference)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def ledger_namespace_path
|
17
|
+
'marketplace'
|
18
|
+
end
|
19
|
+
|
20
|
+
def deserialized_resource
|
21
|
+
Desertcart::AuthenticationToken::Deserializer.new.deserialize(
|
22
|
+
hash: response.body['authentication_token'],
|
23
|
+
resource: Desertcart::AuthenticationToken.new
|
24
|
+
)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Desertcart
|
4
|
+
module Marketplace
|
5
|
+
class Authorization
|
6
|
+
class Serializer < Desertcart::Serializer
|
7
|
+
attribute :store_id do |args = {}|
|
8
|
+
resource = args.fetch(:resource)
|
9
|
+
resource.store.ledger_id
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Desertcart
|
4
|
+
module Marketplace
|
5
|
+
class Movement
|
6
|
+
class Deserializer < Desertcart::Deserializer
|
7
|
+
id
|
8
|
+
attribute :carrier
|
9
|
+
attribute :tracking_number
|
10
|
+
attribute :departed_at
|
11
|
+
attribute :estimated_arrival_at
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Desertcart
|
4
|
+
module Marketplace
|
5
|
+
class Movement
|
6
|
+
module Operations
|
7
|
+
class Create < Desertcart::Operation::Create
|
8
|
+
class Contract < LedgerSync::Ledgers::Contract
|
9
|
+
params do
|
10
|
+
required(:carrier).filled(:string)
|
11
|
+
required(:tracking_number).filled(:string)
|
12
|
+
required(:shipping_address_id).filled(:integer)
|
13
|
+
required(:departed_at).filled(:integer)
|
14
|
+
required(:estimated_arrival_at).filled(:integer)
|
15
|
+
required(:order_items).filled(:hash, Types::Reference)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def ledger_namespace_path
|
20
|
+
'marketplace'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Desertcart
|
4
|
+
module Marketplace
|
5
|
+
class Movement
|
6
|
+
class Serializer < Desertcart::Serializer
|
7
|
+
id
|
8
|
+
attribute :carrier
|
9
|
+
attribute :tracking_number
|
10
|
+
attribute :shipping_address_id
|
11
|
+
attribute :departed_at
|
12
|
+
attribute :estimated_arrival_at
|
13
|
+
attribute :order_item_ids do |args = {}|
|
14
|
+
resource = args.fetch(:resource)
|
15
|
+
resource.order_items.map(&:ledger_id)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../shipping_address/deserializer'
|
4
|
+
|
5
|
+
module Desertcart
|
6
|
+
module Marketplace
|
7
|
+
class OrderItem
|
8
|
+
class Deserializer < Desertcart::Deserializer
|
9
|
+
id
|
10
|
+
attribute :name
|
11
|
+
attribute :store_uid
|
12
|
+
attribute :store_id
|
13
|
+
attribute :order_reference
|
14
|
+
attribute :offer_reference
|
15
|
+
attribute :merchant_id
|
16
|
+
attribute :currency_code
|
17
|
+
attribute :price
|
18
|
+
attribute :title
|
19
|
+
attribute :state
|
20
|
+
attribute :marketplace_shipping_state
|
21
|
+
attribute :reason_for_rejection
|
22
|
+
attribute :checkin_condition
|
23
|
+
attribute :shipment_movement_id
|
24
|
+
attribute :seller_reference_number
|
25
|
+
attribute :seller_notes
|
26
|
+
attribute :order_placed_at
|
27
|
+
attribute :acceptance_expiration_at
|
28
|
+
attribute :estimated_delivery_date
|
29
|
+
attribute :accepted_at
|
30
|
+
attribute :purchase_order
|
31
|
+
attribute :note
|
32
|
+
references_one :shipping_address,
|
33
|
+
hash_attribute: 'shipping_address',
|
34
|
+
deserializer: ShippingAddress::Deserializer
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Desertcart
|
4
|
+
module Marketplace
|
5
|
+
class OrderItem
|
6
|
+
module Operations
|
7
|
+
class Find < Desertcart::Operation::Find
|
8
|
+
class Contract < LedgerSync::Ledgers::Contract
|
9
|
+
params do
|
10
|
+
required(:ledger_id).filled(:string)
|
11
|
+
optional(:name).maybe(:string)
|
12
|
+
optional(:store_uid).maybe(:string)
|
13
|
+
optional(:store_id).maybe(:integer)
|
14
|
+
optional(:order_reference).maybe(:string)
|
15
|
+
optional(:offer_reference).maybe(:string)
|
16
|
+
optional(:merchant_id).maybe(:string)
|
17
|
+
optional(:currency_code).maybe(:string)
|
18
|
+
optional(:price).maybe(:integer)
|
19
|
+
optional(:title).maybe(:string)
|
20
|
+
optional(:state).maybe(:string)
|
21
|
+
optional(:marketplace_shipping_state).maybe(:string)
|
22
|
+
optional(:reason_for_rejection).maybe(:string)
|
23
|
+
optional(:checkin_condition).maybe(:string)
|
24
|
+
optional(:shipment_movement_id).maybe(:integer)
|
25
|
+
optional(:seller_reference_number).maybe(:string)
|
26
|
+
optional(:seller_notes).maybe(:string)
|
27
|
+
optional(:order_placed_at).maybe(:integer)
|
28
|
+
optional(:acceptance_expiration_at).maybe(:integer)
|
29
|
+
optional(:estimated_delivery_date).maybe(:string)
|
30
|
+
optional(:accepted_at).maybe(:integer)
|
31
|
+
optional(:purchase_order).maybe(:integer)
|
32
|
+
optional(:shipping_address).maybe(:hash)
|
33
|
+
optional(:note).maybe(:string)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def ledger_namespace_path
|
38
|
+
'marketplace'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Desertcart
|
4
|
+
module Marketplace
|
5
|
+
class OrderItem
|
6
|
+
module Operations
|
7
|
+
class Update < Desertcart::Operation::Update
|
8
|
+
class Contract < LedgerSync::Ledgers::Contract
|
9
|
+
params do
|
10
|
+
required(:ledger_id).filled(:string)
|
11
|
+
optional(:name).maybe(:string)
|
12
|
+
optional(:store_uid).maybe(:string)
|
13
|
+
optional(:store_id).maybe(:integer)
|
14
|
+
optional(:order_reference).maybe(:string)
|
15
|
+
optional(:offer_reference).maybe(:string)
|
16
|
+
optional(:merchant_id).maybe(:string)
|
17
|
+
optional(:currency_code).maybe(:string)
|
18
|
+
optional(:price).maybe(:integer)
|
19
|
+
optional(:title).maybe(:string)
|
20
|
+
optional(:state).maybe(:string)
|
21
|
+
optional(:marketplace_shipping_state).maybe(:string)
|
22
|
+
optional(:reason_for_rejection).maybe(:string)
|
23
|
+
optional(:checkin_condition).maybe(:string)
|
24
|
+
optional(:shipment_movement_id).maybe(:integer)
|
25
|
+
optional(:seller_reference_number).maybe(:string)
|
26
|
+
optional(:seller_notes).maybe(:string)
|
27
|
+
optional(:order_placed_at).maybe(:integer)
|
28
|
+
optional(:acceptance_expiration_at).maybe(:integer)
|
29
|
+
optional(:estimated_delivery_date).maybe(:string)
|
30
|
+
optional(:accepted_at).maybe(:integer)
|
31
|
+
optional(:purchase_order).maybe(:integer)
|
32
|
+
optional(:shipping_address).maybe(:hash)
|
33
|
+
optional(:note).maybe(:string)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def ledger_namespace_path
|
38
|
+
'marketplace'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Desertcart
|
4
|
+
module Marketplace
|
5
|
+
class OrderItem
|
6
|
+
class Searcher < Searcher
|
7
|
+
def resource_class
|
8
|
+
@resource_class ||= Desertcart::Marketplace::OrderItem
|
9
|
+
end
|
10
|
+
|
11
|
+
def searcher_deserializer_class
|
12
|
+
@searcher_deserializer_class ||= resource_class::Deserializer
|
13
|
+
end
|
14
|
+
|
15
|
+
def ledger_namespace_path
|
16
|
+
'marketplace'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Desertcart
|
4
|
+
module Marketplace
|
5
|
+
class OrderItem
|
6
|
+
class Serializer < Desertcart::Serializer
|
7
|
+
id
|
8
|
+
attribute :name
|
9
|
+
attribute :store_uid
|
10
|
+
attribute :store_id
|
11
|
+
attribute :order_reference
|
12
|
+
attribute :offer_reference
|
13
|
+
attribute :merchant_id
|
14
|
+
attribute :currency_code
|
15
|
+
attribute :price
|
16
|
+
attribute :title
|
17
|
+
attribute :state
|
18
|
+
attribute :marketplace_shipping_state
|
19
|
+
attribute :reason_for_rejection
|
20
|
+
attribute :checkin_condition
|
21
|
+
attribute :shipment_movement_id
|
22
|
+
attribute :seller_reference_number
|
23
|
+
attribute :seller_notes
|
24
|
+
attribute :order_placed_at
|
25
|
+
attribute :acceptance_expiration_at
|
26
|
+
attribute :estimated_delivery_date
|
27
|
+
attribute :accepted_at
|
28
|
+
attribute :purchase_order
|
29
|
+
attribute :shipping_address
|
30
|
+
attribute :note
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../../resources/marketplace/order_item'
|
4
|
+
|
5
|
+
module Desertcart
|
6
|
+
module Marketplace
|
7
|
+
class OrderItemAcceptance
|
8
|
+
module Operations
|
9
|
+
class Create < Desertcart::Operation::Create
|
10
|
+
class Contract < LedgerSync::Ledgers::Contract
|
11
|
+
params do
|
12
|
+
required(:order_item).maybe(:hash, Types::Reference)
|
13
|
+
optional(:seller_reference_number).maybe(:string)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def ledger_namespace_path
|
18
|
+
'marketplace'
|
19
|
+
end
|
20
|
+
|
21
|
+
def deserialized_resource
|
22
|
+
Desertcart::Marketplace::OrderItem::Deserializer.new.deserialize(
|
23
|
+
hash: response.body['order_item'],
|
24
|
+
resource: Desertcart::Marketplace::OrderItem.new
|
25
|
+
)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|