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.
Files changed (66) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/main.yml +18 -0
  3. data/.gitignore +11 -0
  4. data/.rspec +3 -0
  5. data/CHANGELOG.md +5 -0
  6. data/Gemfile +10 -0
  7. data/Gemfile.lock +138 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +107 -0
  10. data/Rakefile +8 -0
  11. data/bin/console +15 -0
  12. data/bin/setup +8 -0
  13. data/desertcart.gemspec +34 -0
  14. data/lib/desertcart/authentication_token/deserializer.rb +21 -0
  15. data/lib/desertcart/authentication_token/operations/find.rb +20 -0
  16. data/lib/desertcart/authentication_token/serializer.rb +21 -0
  17. data/lib/desertcart/client.rb +65 -0
  18. data/lib/desertcart/config.rb +14 -0
  19. data/lib/desertcart/deserializer.rb +9 -0
  20. data/lib/desertcart/marketplace/authorizations/operations/create.rb +30 -0
  21. data/lib/desertcart/marketplace/authorizations/serializer.rb +14 -0
  22. data/lib/desertcart/marketplace/movement/deserializer.rb +15 -0
  23. data/lib/desertcart/marketplace/movement/operations/create.rb +26 -0
  24. data/lib/desertcart/marketplace/movement/serializer.rb +20 -0
  25. data/lib/desertcart/marketplace/order_item/deserializer.rb +38 -0
  26. data/lib/desertcart/marketplace/order_item/operations/find.rb +44 -0
  27. data/lib/desertcart/marketplace/order_item/operations/update.rb +44 -0
  28. data/lib/desertcart/marketplace/order_item/searcher.rb +21 -0
  29. data/lib/desertcart/marketplace/order_item/serializer.rb +34 -0
  30. data/lib/desertcart/marketplace/order_item_acceptance/operations/create.rb +31 -0
  31. data/lib/desertcart/marketplace/order_item_acceptance/serializer.rb +15 -0
  32. data/lib/desertcart/marketplace/order_item_rejection/operations/create.rb +31 -0
  33. data/lib/desertcart/marketplace/order_item_rejection/serializer.rb +15 -0
  34. data/lib/desertcart/marketplace/pending_order_items/searcher.rb +25 -0
  35. data/lib/desertcart/marketplace/registration/operations/create.rb +34 -0
  36. data/lib/desertcart/marketplace/registration/serializer.rb +13 -0
  37. data/lib/desertcart/marketplace/shipping_address/deserializer.rb +18 -0
  38. data/lib/desertcart/marketplace/store/deserializer.rb +12 -0
  39. data/lib/desertcart/marketplace/store/operations/find.rb +22 -0
  40. data/lib/desertcart/marketplace/store/serializer.rb +12 -0
  41. data/lib/desertcart/operation/create.rb +49 -0
  42. data/lib/desertcart/operation/find.rb +63 -0
  43. data/lib/desertcart/operation/update.rb +49 -0
  44. data/lib/desertcart/operation.rb +39 -0
  45. data/lib/desertcart/resource.rb +6 -0
  46. data/lib/desertcart/resources/authentication_token.rb +14 -0
  47. data/lib/desertcart/resources/marketplace/authorization.rb +9 -0
  48. data/lib/desertcart/resources/marketplace/movement.rb +16 -0
  49. data/lib/desertcart/resources/marketplace/order_item.rb +34 -0
  50. data/lib/desertcart/resources/marketplace/order_item_acceptance.rb +10 -0
  51. data/lib/desertcart/resources/marketplace/order_item_rejection.rb +10 -0
  52. data/lib/desertcart/resources/marketplace/registration.rb +11 -0
  53. data/lib/desertcart/resources/marketplace/shipping_address.rb +15 -0
  54. data/lib/desertcart/resources/marketplace/store.rb +10 -0
  55. data/lib/desertcart/resources/session.rb +8 -0
  56. data/lib/desertcart/resources/user.rb +7 -0
  57. data/lib/desertcart/searcher.rb +70 -0
  58. data/lib/desertcart/serializer.rb +9 -0
  59. data/lib/desertcart/session/operations/create.rb +27 -0
  60. data/lib/desertcart/session/operations/find.rb +27 -0
  61. data/lib/desertcart/session/serializer.rb +10 -0
  62. data/lib/desertcart/user/deserializer.rb +10 -0
  63. data/lib/desertcart/user/serializer.rb +10 -0
  64. data/lib/desertcart/version.rb +5 -0
  65. data/lib/desertcart.rb +7 -0
  66. 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,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Desertcart
4
+ end
5
+
6
+ LedgerSync.register_ledger(
7
+ :desertcart,
8
+ {
9
+ root_path: 'desertcart',
10
+ base_module: Desertcart
11
+ }
12
+ ) do |config|
13
+ config.name = 'Desertcart'
14
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Desertcart
4
+ class Deserializer < LedgerSync::Deserializer
5
+ def self.id
6
+ attribute(:ledger_id, hash_attribute: 'id')
7
+ end
8
+ end
9
+ 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