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,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
|