desertcart 1.0.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/.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,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Desertcart
|
4
|
+
module Marketplace
|
5
|
+
class OrderItemAcceptance
|
6
|
+
class Serializer < Desertcart::Serializer
|
7
|
+
attribute :order_item_id do |args = {}|
|
8
|
+
resource = args.fetch(:resource)
|
9
|
+
resource.order_item.ledger_id
|
10
|
+
end
|
11
|
+
attribute :seller_reference_number
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
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 OrderItemRejection
|
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(:reason).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
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Desertcart
|
4
|
+
module Marketplace
|
5
|
+
class OrderItemRejection
|
6
|
+
class Serializer < Desertcart::Serializer
|
7
|
+
attribute :order_item_id do |args = {}|
|
8
|
+
resource = args.fetch(:resource)
|
9
|
+
resource.order_item.ledger_id
|
10
|
+
end
|
11
|
+
attribute :reason
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Desertcart
|
4
|
+
module Marketplace
|
5
|
+
class PendingOrderItem
|
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_resource_type
|
16
|
+
@ledger_resource_type ||= 'pending_order_items'
|
17
|
+
end
|
18
|
+
|
19
|
+
def ledger_namespace_path
|
20
|
+
'marketplace'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../../resources/authentication_token'
|
4
|
+
|
5
|
+
module Desertcart
|
6
|
+
module Marketplace
|
7
|
+
class Registration
|
8
|
+
module Operations
|
9
|
+
class Create < Desertcart::Operation::Create
|
10
|
+
class Contract < LedgerSync::Ledgers::Contract
|
11
|
+
params do
|
12
|
+
required(:external_id).maybe(:string)
|
13
|
+
required(:ledger_id).filled(:string)
|
14
|
+
required(:name).filled(:string)
|
15
|
+
required(:url).filled(:string)
|
16
|
+
required(:country_code).filled(:string)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def ledger_namespace_path
|
21
|
+
'marketplace'
|
22
|
+
end
|
23
|
+
|
24
|
+
def deserialized_resource
|
25
|
+
Desertcart::AuthenticationToken::Deserializer.new.deserialize(
|
26
|
+
hash: response.body['authentication_token'],
|
27
|
+
resource: Desertcart::AuthenticationToken.new
|
28
|
+
)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Desertcart
|
4
|
+
module Marketplace
|
5
|
+
class ShippingAddress
|
6
|
+
class Deserializer < Desertcart::Deserializer
|
7
|
+
attribute :ledger_id, hash_attribute: 'shipping_address_id'
|
8
|
+
attribute :name
|
9
|
+
attribute 'address_line_1'
|
10
|
+
attribute 'address_line_2'
|
11
|
+
attribute :city
|
12
|
+
attribute :state
|
13
|
+
attribute :zip_code
|
14
|
+
attribute :country
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Desertcart
|
4
|
+
module Marketplace
|
5
|
+
class Store
|
6
|
+
module Operations
|
7
|
+
class Find < Desertcart::Operation::Find
|
8
|
+
class Contract < LedgerSync::Ledgers::Contract
|
9
|
+
params do
|
10
|
+
required(:external_id).maybe(:string)
|
11
|
+
required(:ledger_id).filled(:string)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def ledger_namespace_path
|
16
|
+
'marketplace'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../operation'
|
4
|
+
|
5
|
+
module Desertcart
|
6
|
+
class Operation
|
7
|
+
class Create
|
8
|
+
include Desertcart::Operation::Mixin
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def create_in_ledger
|
13
|
+
return LedgerSync::Result.Success(response) if response.success?
|
14
|
+
|
15
|
+
fail(response.status)
|
16
|
+
end
|
17
|
+
|
18
|
+
def operate
|
19
|
+
create_in_ledger
|
20
|
+
.and_then { success }
|
21
|
+
end
|
22
|
+
|
23
|
+
def response
|
24
|
+
@response ||= client.create(
|
25
|
+
body: serializer.serialize(resource: resource),
|
26
|
+
path: ledger_resource_path
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
def success
|
31
|
+
super(
|
32
|
+
resource: deserialized_resource,
|
33
|
+
response: response
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
def fail(status)
|
38
|
+
failure(
|
39
|
+
LedgerSync::Error::OperationError.new(
|
40
|
+
operation: self,
|
41
|
+
response: response,
|
42
|
+
message: "Status code: #{status}"
|
43
|
+
),
|
44
|
+
resource: @resource
|
45
|
+
)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../operation'
|
4
|
+
|
5
|
+
module Desertcart
|
6
|
+
class Operation
|
7
|
+
class Find
|
8
|
+
include Desertcart::Operation::Mixin
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def find_in_ledger
|
13
|
+
case response.status
|
14
|
+
when 200
|
15
|
+
LedgerSync::Result.Success(response)
|
16
|
+
when 404
|
17
|
+
not_found
|
18
|
+
else
|
19
|
+
fail(response.status)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def operate
|
24
|
+
find_in_ledger
|
25
|
+
.and_then { success }
|
26
|
+
end
|
27
|
+
|
28
|
+
def response
|
29
|
+
@response ||= client.read(
|
30
|
+
path: ledger_resource_path
|
31
|
+
)
|
32
|
+
end
|
33
|
+
|
34
|
+
def success
|
35
|
+
super(
|
36
|
+
resource: deserialized_resource,
|
37
|
+
response: response
|
38
|
+
)
|
39
|
+
end
|
40
|
+
|
41
|
+
def fail(status)
|
42
|
+
failure(
|
43
|
+
LedgerSync::Error::OperationError.new(
|
44
|
+
operation: self,
|
45
|
+
response: response,
|
46
|
+
message: "Status code: #{status}"
|
47
|
+
),
|
48
|
+
resource: @resource
|
49
|
+
)
|
50
|
+
end
|
51
|
+
|
52
|
+
def not_found
|
53
|
+
failure(
|
54
|
+
LedgerSync::Error::OperationError::NotFoundError.new(
|
55
|
+
operation: self,
|
56
|
+
response: response
|
57
|
+
),
|
58
|
+
resource: @resource
|
59
|
+
)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../operation'
|
4
|
+
|
5
|
+
module Desertcart
|
6
|
+
class Operation
|
7
|
+
class Update
|
8
|
+
include Desertcart::Operation::Mixin
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def update_in_ledger
|
13
|
+
return LedgerSync::Result.Success(response) if response.success?
|
14
|
+
|
15
|
+
fail(response.status)
|
16
|
+
end
|
17
|
+
|
18
|
+
def operate
|
19
|
+
update_in_ledger
|
20
|
+
.and_then { success }
|
21
|
+
end
|
22
|
+
|
23
|
+
def response
|
24
|
+
@response ||= client.update(
|
25
|
+
body: serializer.serialize(resource: resource),
|
26
|
+
path: ledger_resource_path
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
def success
|
31
|
+
super(
|
32
|
+
resource: deserialized_resource,
|
33
|
+
response: response
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
def fail(status)
|
38
|
+
failure(
|
39
|
+
LedgerSync::Error::OperationError.new(
|
40
|
+
operation: self,
|
41
|
+
response: response,
|
42
|
+
message: "Status code: #{status}"
|
43
|
+
),
|
44
|
+
resource: @resource
|
45
|
+
)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Desertcart
|
4
|
+
class Operation
|
5
|
+
module Mixin
|
6
|
+
def self.included(base)
|
7
|
+
base.include LedgerSync::Ledgers::Operation::Mixin
|
8
|
+
base.include InstanceMethods # To ensure these override parent methods
|
9
|
+
end
|
10
|
+
|
11
|
+
module InstanceMethods
|
12
|
+
def ledger_resource_path
|
13
|
+
@ledger_resource_path ||= [
|
14
|
+
ledger_namespace_path,
|
15
|
+
ledger_resource_type.pluralize,
|
16
|
+
resource.ledger_id
|
17
|
+
].compact.join('/')
|
18
|
+
end
|
19
|
+
|
20
|
+
def ledger_namespace_path
|
21
|
+
@ledger_namespace_path ||= nil
|
22
|
+
end
|
23
|
+
|
24
|
+
def deserialized_resource
|
25
|
+
deserializer.deserialize(
|
26
|
+
hash: response.body[ledger_resource_type],
|
27
|
+
resource: resource
|
28
|
+
)
|
29
|
+
end
|
30
|
+
|
31
|
+
def ledger_resource_type
|
32
|
+
@ledger_resource_type ||= client.class.ledger_resource_type_for(
|
33
|
+
resource_class: resource.class
|
34
|
+
)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'user'
|
4
|
+
require_relative 'marketplace/store'
|
5
|
+
|
6
|
+
module Desertcart
|
7
|
+
class AuthenticationToken < Desertcart::Resource
|
8
|
+
attribute :token, type: LedgerSync::Type::String
|
9
|
+
attribute :expires_at, type: LedgerSync::Type::String
|
10
|
+
|
11
|
+
references_one :user, to: Desertcart::User
|
12
|
+
references_one :store, to: Desertcart::Marketplace::Store
|
13
|
+
end
|
14
|
+
end
|