desertcart 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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