printavo-ruby 0.7.0 → 0.9.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 (35) hide show
  1. checksums.yaml +4 -4
  2. data/docs/CHANGELOG.md +40 -0
  3. data/docs/TODO.md +54 -54
  4. data/lib/printavo/client.rb +40 -0
  5. data/lib/printavo/models/category.rb +9 -0
  6. data/lib/printavo/models/expense.rb +11 -0
  7. data/lib/printavo/models/fee.rb +12 -0
  8. data/lib/printavo/models/imprint.rb +11 -0
  9. data/lib/printavo/models/line_item.rb +13 -0
  10. data/lib/printavo/models/line_item_group.rb +10 -0
  11. data/lib/printavo/models/merch_order.rb +15 -0
  12. data/lib/printavo/models/merch_store.rb +11 -0
  13. data/lib/printavo/models/pricing_matrix.rb +9 -0
  14. data/lib/printavo/models/product.rb +11 -0
  15. data/lib/printavo/resources/base.rb +8 -0
  16. data/lib/printavo/resources/categories.rb +33 -0
  17. data/lib/printavo/resources/contacts.rb +0 -8
  18. data/lib/printavo/resources/customers.rb +0 -7
  19. data/lib/printavo/resources/expenses.rb +48 -0
  20. data/lib/printavo/resources/fees.rb +72 -0
  21. data/lib/printavo/resources/imprints.rb +84 -0
  22. data/lib/printavo/resources/invoices.rb +0 -6
  23. data/lib/printavo/resources/line_item_groups.rb +72 -0
  24. data/lib/printavo/resources/line_items.rb +84 -0
  25. data/lib/printavo/resources/merch_orders.rb +33 -0
  26. data/lib/printavo/resources/merch_stores.rb +33 -0
  27. data/lib/printavo/resources/orders.rb +0 -6
  28. data/lib/printavo/resources/pricing_matrices.rb +33 -0
  29. data/lib/printavo/resources/products.rb +33 -0
  30. data/lib/printavo/resources/tasks.rb +0 -6
  31. data/lib/printavo/resources/threads.rb +0 -6
  32. data/lib/printavo/resources/transaction_payments.rb +0 -8
  33. data/lib/printavo/version.rb +1 -1
  34. data/lib/printavo.rb +28 -8
  35. metadata +21 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4f1b8022189ac0b62b87b7d9770c08b3f2320c6804705c41afd6e2b03c7239ca
4
- data.tar.gz: 94761c4186f08d33b841eb9d364350f142c5b7b007d0f1fce2c08e7e237156d8
3
+ metadata.gz: 3f841fd166476152c647d7851297e8b07a8291446d5ccbe657b3a5c9bb5faef6
4
+ data.tar.gz: dc74bf793d7c684b4a5aa5f649f3454397a88d684cd8b6f6c7ed3faea0a768a3
5
5
  SHA512:
6
- metadata.gz: 5c22e476b535a7eebe9fba9a51ed5a36016a6da07c3f8f4e5cce478d609ee358316097f06bab770ebcdb3ec2cd43b0b5939bdc109394237691b0a4f8370cd6b4
7
- data.tar.gz: 266b1fd4d0e738ca3928225681367371f6e3dc7ac26a1771e8758ff2ea6cac6adc40130e57bf7553d043a99fb2a464c1c0d609489c6f6ae83fde1568821ba716
6
+ metadata.gz: 536197cc16cb7faa1ebb1a557563df9954488afc795658bcc6f6cf38d2fa0a0a319f8f04c2842e27921ecc8d627bd4ee15643517bac8e31c39c46607a1d07744
7
+ data.tar.gz: d7f1654d4294bfab5cb9341a55860cb2ea763f91ba553a7a8982fe1a1199de61e0618e6d9ad2ce6938ead8887be3efc4d5264075bb3ebc0d29eca979c5187315
data/docs/CHANGELOG.md CHANGED
@@ -6,6 +6,46 @@ All notable changes to this project will be documented in this file.
6
6
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
7
7
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
8
8
 
9
+ ## [0.9.0] - 2026-03-31
10
+
11
+ ### Added
12
+ - `Printavo::MerchStore` model (`id`, `name`, `url`, `summary`)
13
+ - `MerchStores` resource: `all`, `find(id)`
14
+ - `Printavo::MerchOrder` model (`id`, `status`, `delivery`, `contact` — returns `Printavo::Contact`)
15
+ - `MerchOrders` resource: `all`, `find(id)`
16
+ - `Printavo::Product` model (`id`, `name`, `sku`, `description`)
17
+ - `Products` resource: `all`, `find(id)`
18
+ - `Printavo::PricingMatrix` model (`id`, `name`)
19
+ - `PricingMatrices` resource: `all`, `find(id)`
20
+ - `Printavo::Category` model (`id`, `name`)
21
+ - `Categories` resource: `all`, `find(id)`
22
+ - `client.categories`, `client.merch_orders`, `client.merch_stores`, `client.pricing_matrices`,
23
+ `client.products` entry points on `Printavo::Client`
24
+ - 10 new `.graphql` files under `lib/printavo/graphql/`
25
+ - 2 new factory files: `spec/support/factories/merch.rb`, `spec/support/factories/product.rb`
26
+
27
+ ## [0.8.0] - 2026-03-31
28
+
29
+ ### Added
30
+ - `Printavo::LineItem` model (`id`, `name`, `quantity`, `price`, `taxable`, `taxable?`)
31
+ - `LineItems` resource: `all(line_item_group_id:)`, `find`, `create`/`creates`, `update`/`updates`,
32
+ `delete`/`deletes`, `mockup_create`/`mockup_creates`
33
+ - `Printavo::LineItemGroup` model (`id`, `name`, `description`)
34
+ - `LineItemGroups` resource: `all(order_id:)`, `find`, `create`/`creates`, `update`/`updates`, `delete`/`deletes`
35
+ - `Printavo::Imprint` model (`id`, `name`, `position`, `colors`)
36
+ - `Imprints` resource: `all(line_item_group_id:)`, `find`, `create`/`creates`, `update`/`updates`,
37
+ `delete`/`deletes`, `mockup_create`/`mockup_creates`
38
+ - `Printavo::Fee` model (`id`, `name`, `amount`, `taxable`, `taxable?`)
39
+ - `Fees` resource: `all(order_id:)`, `find`, `create`/`creates`, `update`/`updates`, `delete`/`deletes`
40
+ - `Printavo::Expense` model (`id`, `name`, `amount`, `category`)
41
+ - `Expenses` resource: `all(order_id:)`, `find`, `create`, `update`
42
+ - `client.line_items`, `client.line_item_groups`, `client.imprints`, `client.fees`, `client.expenses`
43
+ entry points on `Printavo::Client`
44
+ - 40 new `.graphql` files under `lib/printavo/graphql/`
45
+
46
+ ### Changed
47
+ - `camelize_keys` moved from individual resource classes to `Resources::Base` — eliminates 7 duplicate definitions
48
+
9
49
  ## [0.7.0] - 2026-03-30
10
50
 
11
51
  ### Added
data/docs/TODO.md CHANGED
@@ -156,10 +156,10 @@ return values — they are exposed via model field accessors, not separate resou
156
156
  - [ ] `approvalRequestRevoke(id:)` mutation
157
157
  - [ ] `approvalRequestUnapprove(id:)` mutation
158
158
 
159
- ### Categories
159
+ ### Categories
160
160
 
161
- - [ ] `Printavo::Category` model (`id`, `name`)
162
- - [ ] `Categories` resource: `all`, `find(id)` — reference data for products/line items
161
+ - [x] `Printavo::Category` model (`id`, `name`)
162
+ - [x] `Categories` resource: `all`, `find(id)` — reference data for products/line items
163
163
 
164
164
  ### Contractor Profiles
165
165
 
@@ -185,53 +185,53 @@ return values — they are exposed via model field accessors, not separate resou
185
185
  - [ ] `Printavo::EmailTemplate` model (`id`, `name`, `subject`, `body`)
186
186
  - [ ] `EmailTemplates` resource: `all`, `find(id)`
187
187
 
188
- ### Expenses
188
+ ### Expenses
189
189
 
190
- - [ ] `Printavo::Expense` model (`id`, `name`, `amount`, `category`)
191
- - [ ] `Expenses` resource: `all(order_id:)`, `find(id)`, `create`, `update`
192
- - [ ] `expenseCreate`, `expenseUpdate` mutations
190
+ - [x] `Printavo::Expense` model (`id`, `name`, `amount`, `category`)
191
+ - [x] `Expenses` resource: `all(order_id:)`, `find(id)`, `create`, `update`
192
+ - [x] `expenseCreate`, `expenseUpdate` mutations
193
193
 
194
- ### Fees
194
+ ### Fees
195
195
 
196
- - [ ] `Printavo::Fee` model (`id`, `name`, `amount`, `taxable`)
197
- - [ ] `Fees` resource: `all(order_id:)`, `find(id)`, `create`, `update`, `delete`
198
- - [ ] `feeCreate` / `feeCreates` (bulk) mutations
199
- - [ ] `feeUpdate` / `feeUpdates` (bulk) mutations
200
- - [ ] `feeDelete` / `feeDeletes` (bulk) mutations
196
+ - [x] `Printavo::Fee` model (`id`, `name`, `amount`, `taxable`)
197
+ - [x] `Fees` resource: `all(order_id:)`, `find(id)`, `create`, `update`, `delete`
198
+ - [x] `feeCreate` / `feeCreates` (bulk) mutations
199
+ - [x] `feeUpdate` / `feeUpdates` (bulk) mutations
200
+ - [x] `feeDelete` / `feeDeletes` (bulk) mutations
201
201
 
202
- ### Imprints
202
+ ### Imprints
203
203
 
204
- - [ ] `Printavo::Imprint` model (`id`, `name`, `position`, `colors`, `personalization`)
205
- - [ ] `Imprints` resource: `all(line_item_group_id:)`, `find(id)`, `create`, `update`, `delete`
206
- - [ ] `imprintCreate` / `imprintCreates` (bulk) mutations
207
- - [ ] `imprintUpdate` / `imprintUpdates` (bulk) mutations
208
- - [ ] `imprintDelete` / `imprintDeletes` (bulk) mutations
209
- - [ ] `imprintMockupCreate` / `imprintMockupCreates` (bulk) — attach mockup to imprint
204
+ - [x] `Printavo::Imprint` model (`id`, `name`, `position`, `colors`)
205
+ - [x] `Imprints` resource: `all(line_item_group_id:)`, `find(id)`, `create`, `update`, `delete`
206
+ - [x] `imprintCreate` / `imprintCreates` (bulk) mutations
207
+ - [x] `imprintUpdate` / `imprintUpdates` (bulk) mutations
208
+ - [x] `imprintDelete` / `imprintDeletes` (bulk) mutations
209
+ - [x] `imprintMockupCreate` / `imprintMockupCreates` (bulk) — attach mockup to imprint
210
210
 
211
- ### Line Items
211
+ ### Line Items
212
212
 
213
- - [ ] `Printavo::LineItem` model (`id`, `name`, `quantity`, `price`, `taxable`)
214
- - [ ] `LineItems` resource: `all(line_item_group_id:)`, `find(id)`, `create`, `update`, `delete`
215
- - [ ] `lineItemCreate` / `lineItemCreates` (bulk) mutations
216
- - [ ] `lineItemUpdate` / `lineItemUpdates` (bulk) mutations
217
- - [ ] `lineItemDelete` / `lineItemDeletes` (bulk) mutations
218
- - [ ] `lineItemMockupCreate` / `lineItemMockupCreates` (bulk) — attach mockup to line item
213
+ - [x] `Printavo::LineItem` model (`id`, `name`, `quantity`, `price`, `taxable`)
214
+ - [x] `LineItems` resource: `all(line_item_group_id:)`, `find(id)`, `create`, `update`, `delete`
215
+ - [x] `lineItemCreate` / `lineItemCreates` (bulk) mutations
216
+ - [x] `lineItemUpdate` / `lineItemUpdates` (bulk) mutations
217
+ - [x] `lineItemDelete` / `lineItemDeletes` (bulk) mutations
218
+ - [x] `lineItemMockupCreate` / `lineItemMockupCreates` (bulk) — attach mockup to line item
219
219
 
220
- ### Line Item Groups
220
+ ### Line Item Groups
221
221
 
222
- - [ ] `Printavo::LineItemGroup` model (`id`, `name`, `description`, `sizes`, `enabled_columns`)
223
- - [ ] `LineItemGroups` resource: `all(order_id:)`, `find(id)`, `create`, `update`, `delete`
224
- - [ ] `lineItemGroupCreate` / `lineItemGroupCreates` (bulk) mutations
225
- - [ ] `lineItemGroupUpdate` / `lineItemGroupUpdates` (bulk) mutations
226
- - [ ] `lineItemGroupDelete` / `lineItemGroupDeletes` (bulk) mutations
222
+ - [x] `Printavo::LineItemGroup` model (`id`, `name`, `description`)
223
+ - [x] `LineItemGroups` resource: `all(order_id:)`, `find(id)`, `create`, `update`, `delete`
224
+ - [x] `lineItemGroupCreate` / `lineItemGroupCreates` (bulk) mutations
225
+ - [x] `lineItemGroupUpdate` / `lineItemGroupUpdates` (bulk) mutations
226
+ - [x] `lineItemGroupDelete` / `lineItemGroupDeletes` (bulk) mutations
227
227
 
228
- ### Merch
228
+ ### Merch
229
229
 
230
- - [ ] `Printavo::MerchStore` model (`id`, `name`, `url`, `summary`)
231
- - [ ] `Printavo::MerchOrder` model (`id`, `status`, `delivery`, `contact`)
232
- - [ ] `MerchStores` resource: `all`, `find(id)`
233
- - [ ] `MerchOrders` resource: `all`, `find(id)`
234
- - [ ] `client.merch_stores` / `client.merch_orders` entry points
230
+ - [x] `Printavo::MerchStore` model (`id`, `name`, `url`, `summary`)
231
+ - [x] `Printavo::MerchOrder` model (`id`, `status`, `delivery`, `contact`)
232
+ - [x] `MerchStores` resource: `all`, `find(id)`
233
+ - [x] `MerchOrders` resource: `all`, `find(id)`
234
+ - [x] `client.merch_stores` / `client.merch_orders` entry points
235
235
 
236
236
  ### Mockups & Production Files
237
237
 
@@ -264,12 +264,12 @@ return values — they are exposed via model field accessors, not separate resou
264
264
  - [ ] `presetTaskGroupCreate`, `presetTaskGroupUpdate`, `presetTaskGroupDelete` mutations
265
265
  - [ ] `presetTaskGroupApply(id:, order_id:)` mutation — applies a group to an order
266
266
 
267
- ### Product Catalog & Pricing
267
+ ### Product Catalog & Pricing
268
268
 
269
- - [ ] `Printavo::Product` model (`id`, `name`, `sku`, `description`)
270
- - [ ] `Printavo::PricingMatrix` model (`id`, `name`, `cells`, `columns`)
271
- - [ ] `Products` resource: `all`, `find(id)`
272
- - [ ] `PricingMatrices` resource: `all`, `find(id)`
269
+ - [x] `Printavo::Product` model (`id`, `name`, `sku`, `description`)
270
+ - [x] `Printavo::PricingMatrix` model (`id`, `name`)
271
+ - [x] `Products` resource: `all`, `find(id)`
272
+ - [x] `PricingMatrices` resource: `all`, `find(id)`
273
273
 
274
274
  ### Tasks ✅
275
275
 
@@ -323,19 +323,19 @@ return values — they are exposed via model field accessors, not separate resou
323
323
  - [x] `Tasks` resource (`all`, `find`, `create`, `update`, `complete`, `delete`)
324
324
  - [x] `Threads` resource (`all`, `find`, `update`) + `emailMessageCreate`
325
325
 
326
- ### v0.8.0 — Order Structure: Line Items, Line Item Groups, Imprints & Fees
326
+ ### v0.8.0 — Order Structure: Line Items, Line Item Groups, Imprints & Fees
327
327
 
328
- - [ ] `LineItems` resource (`all`, `find`, `create`/`creates`, `update`/`updates`, `delete`/`deletes`)
329
- - [ ] `LineItemGroups` resource (`all`, `find`, `create`/`creates`, `update`/`updates`, `delete`/`deletes`)
330
- - [ ] `Imprints` resource (`all`, `find`, `create`/`creates`, `update`/`updates`, `delete`/`deletes`, mockup attach)
331
- - [ ] `Fees` resource (`all`, `find`, `create`/`creates`, `update`/`updates`, `delete`/`deletes`)
332
- - [ ] `Expenses` resource (`all`, `find`, `create`, `update`)
328
+ - [x] `LineItems` resource (`all`, `find`, `create`/`creates`, `update`/`updates`, `delete`/`deletes`)
329
+ - [x] `LineItemGroups` resource (`all`, `find`, `create`/`creates`, `update`/`updates`, `delete`/`deletes`)
330
+ - [x] `Imprints` resource (`all`, `find`, `create`/`creates`, `update`/`updates`, `delete`/`deletes`, mockup attach)
331
+ - [x] `Fees` resource (`all`, `find`, `create`/`creates`, `update`/`updates`, `delete`/`deletes`)
332
+ - [x] `Expenses` resource (`all`, `find`, `create`, `update`)
333
333
 
334
- ### v0.9.0 — Merch, Products & Pricing
334
+ ### v0.9.0 — Merch, Products & Pricing
335
335
 
336
- - [ ] `MerchStores` + `MerchOrders` resources
337
- - [ ] `Products` resource + `PricingMatrices` resource
338
- - [ ] `Categories` resource (reference data)
336
+ - [x] `MerchStores` + `MerchOrders` resources
337
+ - [x] `Products` resource + `PricingMatrices` resource
338
+ - [x] `Categories` resource (reference data)
339
339
 
340
340
  ### v0.10.0 — Financial: Payments, Payment Terms & Requests
341
341
 
@@ -29,6 +29,10 @@ module Printavo
29
29
  Resources::Account.new(@graphql)
30
30
  end
31
31
 
32
+ def categories
33
+ Resources::Categories.new(@graphql)
34
+ end
35
+
32
36
  def contacts
33
37
  Resources::Contacts.new(@graphql)
34
38
  end
@@ -37,6 +41,18 @@ module Printavo
37
41
  Resources::Customers.new(@graphql)
38
42
  end
39
43
 
44
+ def expenses
45
+ Resources::Expenses.new(@graphql)
46
+ end
47
+
48
+ def fees
49
+ Resources::Fees.new(@graphql)
50
+ end
51
+
52
+ def imprints
53
+ Resources::Imprints.new(@graphql)
54
+ end
55
+
40
56
  def inquiries
41
57
  Resources::Inquiries.new(@graphql)
42
58
  end
@@ -49,6 +65,14 @@ module Printavo
49
65
  Resources::Jobs.new(@graphql)
50
66
  end
51
67
 
68
+ def line_item_groups
69
+ Resources::LineItemGroups.new(@graphql)
70
+ end
71
+
72
+ def line_items
73
+ Resources::LineItems.new(@graphql)
74
+ end
75
+
52
76
  def login(*)
53
77
  raise NotImplementedError,
54
78
  'login is not supported — this gem authenticates via email + token headers. ' \
@@ -61,10 +85,26 @@ module Printavo
61
85
  'Simply discard the client instance when done.'
62
86
  end
63
87
 
88
+ def merch_orders
89
+ Resources::MerchOrders.new(@graphql)
90
+ end
91
+
92
+ def merch_stores
93
+ Resources::MerchStores.new(@graphql)
94
+ end
95
+
64
96
  def orders
65
97
  Resources::Orders.new(@graphql)
66
98
  end
67
99
 
100
+ def pricing_matrices
101
+ Resources::PricingMatrices.new(@graphql)
102
+ end
103
+
104
+ def products
105
+ Resources::Products.new(@graphql)
106
+ end
107
+
68
108
  def statuses
69
109
  Resources::Statuses.new(@graphql)
70
110
  end
@@ -0,0 +1,9 @@
1
+ # lib/printavo/models/category.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ class Category < Models::Base
6
+ def id = self['id']
7
+ def name = self['name']
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ # lib/printavo/models/expense.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ class Expense < Models::Base
6
+ def id = self['id']
7
+ def name = self['name']
8
+ def amount = self['amount']
9
+ def category = self['category']
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ # lib/printavo/models/fee.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ class Fee < Models::Base
6
+ def id = self['id']
7
+ def name = self['name']
8
+ def amount = self['amount']
9
+ def taxable = self['taxable']
10
+ def taxable? = !!self['taxable']
11
+ end
12
+ end
@@ -0,0 +1,11 @@
1
+ # lib/printavo/models/imprint.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ class Imprint < Models::Base
6
+ def id = self['id']
7
+ def name = self['name']
8
+ def position = self['position']
9
+ def colors = self['colors']
10
+ end
11
+ end
@@ -0,0 +1,13 @@
1
+ # lib/printavo/models/line_item.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ class LineItem < Models::Base
6
+ def id = self['id']
7
+ def name = self['name']
8
+ def quantity = self['quantity']
9
+ def price = self['price']
10
+ def taxable = self['taxable']
11
+ def taxable? = !!self['taxable']
12
+ end
13
+ end
@@ -0,0 +1,10 @@
1
+ # lib/printavo/models/line_item_group.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ class LineItemGroup < Models::Base
6
+ def id = self['id']
7
+ def name = self['name']
8
+ def description = self['description']
9
+ end
10
+ end
@@ -0,0 +1,15 @@
1
+ # lib/printavo/models/merch_order.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ class MerchOrder < Models::Base
6
+ def id = self['id']
7
+ def status = self['status']
8
+ def delivery = self['delivery']
9
+
10
+ def contact
11
+ attrs = self['contact']
12
+ Contact.new(attrs) if attrs
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,11 @@
1
+ # lib/printavo/models/merch_store.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ class MerchStore < Models::Base
6
+ def id = self['id']
7
+ def name = self['name']
8
+ def url = self['url']
9
+ def summary = self['summary']
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ # lib/printavo/models/pricing_matrix.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ class PricingMatrix < Models::Base
6
+ def id = self['id']
7
+ def name = self['name']
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ # lib/printavo/models/product.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ class Product < Models::Base
6
+ def id = self['id']
7
+ def name = self['name']
8
+ def sku = self['sku']
9
+ def description = self['description']
10
+ end
11
+ end
@@ -48,6 +48,14 @@ module Printavo
48
48
  def fetch_page(**)
49
49
  raise NotImplementedError, "#{self.class}#fetch_page is not implemented"
50
50
  end
51
+
52
+ # Converts snake_case Symbol/String keys to camelCase String keys.
53
+ # Used when building GraphQL mutation input objects.
54
+ def camelize_keys(hash)
55
+ hash.transform_keys do |key|
56
+ key.to_s.gsub(/_([a-z])/) { ::Regexp.last_match(1).upcase }
57
+ end
58
+ end
51
59
  end
52
60
  end
53
61
  end
@@ -0,0 +1,33 @@
1
+ # lib/printavo/resources/categories.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ module Resources
6
+ class Categories < Base
7
+ ALL_QUERY = File.read(File.join(__dir__, '../graphql/categories/all.graphql')).freeze
8
+ FIND_QUERY = File.read(File.join(__dir__, '../graphql/categories/find.graphql')).freeze
9
+
10
+ def all(first: 25, after: nil)
11
+ fetch_page(first: first, after: after).records
12
+ end
13
+
14
+ def find(id)
15
+ data = @graphql.query(FIND_QUERY, variables: { id: id.to_s })
16
+ Printavo::Category.new(data['category'])
17
+ end
18
+
19
+ private
20
+
21
+ def fetch_page(first: 25, after: nil, **)
22
+ data = @graphql.query(ALL_QUERY, variables: { first: first, after: after })
23
+ nodes = data['categories']['nodes'].map { |attrs| Printavo::Category.new(attrs) }
24
+ page_info = data['categories']['pageInfo']
25
+ Printavo::Page.new(
26
+ records: nodes,
27
+ has_next_page: page_info['hasNextPage'],
28
+ end_cursor: page_info['endCursor']
29
+ )
30
+ end
31
+ end
32
+ end
33
+ end
@@ -44,14 +44,6 @@ module Printavo
44
44
  variables: { id: id.to_s, input: camelize_keys(input) })
45
45
  Printavo::Contact.new(data['contactUpdate'])
46
46
  end
47
-
48
- private
49
-
50
- def camelize_keys(hash)
51
- hash.transform_keys do |key|
52
- key.to_s.gsub(/_([a-z])/) { ::Regexp.last_match(1).upcase }
53
- end
54
- end
55
47
  end
56
48
  end
57
49
  end
@@ -76,13 +76,6 @@ module Printavo
76
76
  end
77
77
  Printavo::Customer.new(normalized)
78
78
  end
79
-
80
- # Converts snake_case Ruby keyword args to camelCase for GraphQL input.
81
- def camelize_keys(hash)
82
- hash.transform_keys do |key|
83
- key.to_s.gsub(/_([a-z])/) { ::Regexp.last_match(1).upcase }
84
- end
85
- end
86
79
  end
87
80
  end
88
81
  end
@@ -0,0 +1,48 @@
1
+ # lib/printavo/resources/expenses.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ module Resources
6
+ class Expenses < Base
7
+ ALL_QUERY = File.read(File.join(__dir__, '../graphql/expenses/all.graphql')).freeze
8
+ FIND_QUERY = File.read(File.join(__dir__, '../graphql/expenses/find.graphql')).freeze
9
+ CREATE_MUTATION = File.read(File.join(__dir__, '../graphql/expenses/create.graphql')).freeze
10
+ UPDATE_MUTATION = File.read(File.join(__dir__, '../graphql/expenses/update.graphql')).freeze
11
+
12
+ def all(order_id:, first: 25, after: nil)
13
+ fetch_page(order_id: order_id, first: first, after: after).records
14
+ end
15
+
16
+ def find(id)
17
+ data = @graphql.query(FIND_QUERY, variables: { id: id.to_s })
18
+ Printavo::Expense.new(data['expense'])
19
+ end
20
+
21
+ def create(**input)
22
+ data = @graphql.mutate(CREATE_MUTATION, variables: { input: camelize_keys(input) })
23
+ Printavo::Expense.new(data['expenseCreate'])
24
+ end
25
+
26
+ def update(id, **input)
27
+ data = @graphql.mutate(UPDATE_MUTATION, variables: { id: id.to_s, input: camelize_keys(input) })
28
+ Printavo::Expense.new(data['expenseUpdate'])
29
+ end
30
+
31
+ private
32
+
33
+ def fetch_page(order_id:, first: 25, after: nil, **)
34
+ data = @graphql.query(
35
+ ALL_QUERY,
36
+ variables: { orderId: order_id.to_s, first: first, after: after }
37
+ )
38
+ nodes = data['order']['expenses']['nodes'].map { |attrs| Printavo::Expense.new(attrs) }
39
+ page_info = data['order']['expenses']['pageInfo']
40
+ Printavo::Page.new(
41
+ records: nodes,
42
+ has_next_page: page_info['hasNextPage'],
43
+ end_cursor: page_info['endCursor']
44
+ )
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,72 @@
1
+ # lib/printavo/resources/fees.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ module Resources
6
+ class Fees < Base
7
+ ALL_QUERY = File.read(File.join(__dir__, '../graphql/fees/all.graphql')).freeze
8
+ FIND_QUERY = File.read(File.join(__dir__, '../graphql/fees/find.graphql')).freeze
9
+ CREATE_MUTATION = File.read(File.join(__dir__, '../graphql/fees/create.graphql')).freeze
10
+ CREATES_MUTATION = File.read(File.join(__dir__, '../graphql/fees/creates.graphql')).freeze
11
+ UPDATE_MUTATION = File.read(File.join(__dir__, '../graphql/fees/update.graphql')).freeze
12
+ UPDATES_MUTATION = File.read(File.join(__dir__, '../graphql/fees/updates.graphql')).freeze
13
+ DELETE_MUTATION = File.read(File.join(__dir__, '../graphql/fees/delete.graphql')).freeze
14
+ DELETES_MUTATION = File.read(File.join(__dir__, '../graphql/fees/deletes.graphql')).freeze
15
+
16
+ def all(order_id:, first: 25, after: nil)
17
+ fetch_page(order_id: order_id, first: first, after: after).records
18
+ end
19
+
20
+ def find(id)
21
+ data = @graphql.query(FIND_QUERY, variables: { id: id.to_s })
22
+ Printavo::Fee.new(data['fee'])
23
+ end
24
+
25
+ def create(**input)
26
+ data = @graphql.mutate(CREATE_MUTATION, variables: { input: camelize_keys(input) })
27
+ Printavo::Fee.new(data['feeCreate'])
28
+ end
29
+
30
+ def creates(inputs)
31
+ data = @graphql.mutate(CREATES_MUTATION, variables: { inputs: inputs.map { |i| camelize_keys(i) } })
32
+ data['feeCreates'].map { |attrs| Printavo::Fee.new(attrs) }
33
+ end
34
+
35
+ def update(id, **input)
36
+ data = @graphql.mutate(UPDATE_MUTATION, variables: { id: id.to_s, input: camelize_keys(input) })
37
+ Printavo::Fee.new(data['feeUpdate'])
38
+ end
39
+
40
+ def updates(inputs)
41
+ data = @graphql.mutate(UPDATES_MUTATION, variables: { inputs: inputs.map { |i| camelize_keys(i) } })
42
+ data['feeUpdates'].map { |attrs| Printavo::Fee.new(attrs) }
43
+ end
44
+
45
+ def delete(id)
46
+ @graphql.mutate(DELETE_MUTATION, variables: { id: id.to_s })
47
+ nil
48
+ end
49
+
50
+ def deletes(ids)
51
+ @graphql.mutate(DELETES_MUTATION, variables: { ids: ids.map(&:to_s) })
52
+ nil
53
+ end
54
+
55
+ private
56
+
57
+ def fetch_page(order_id:, first: 25, after: nil, **)
58
+ data = @graphql.query(
59
+ ALL_QUERY,
60
+ variables: { orderId: order_id.to_s, first: first, after: after }
61
+ )
62
+ nodes = data['order']['fees']['nodes'].map { |attrs| Printavo::Fee.new(attrs) }
63
+ page_info = data['order']['fees']['pageInfo']
64
+ Printavo::Page.new(
65
+ records: nodes,
66
+ has_next_page: page_info['hasNextPage'],
67
+ end_cursor: page_info['endCursor']
68
+ )
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,84 @@
1
+ # lib/printavo/resources/imprints.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ module Resources
6
+ class Imprints < Base
7
+ ALL_QUERY = File.read(File.join(__dir__, '../graphql/imprints/all.graphql')).freeze
8
+ FIND_QUERY = File.read(File.join(__dir__, '../graphql/imprints/find.graphql')).freeze
9
+ CREATE_MUTATION = File.read(File.join(__dir__, '../graphql/imprints/create.graphql')).freeze
10
+ CREATES_MUTATION = File.read(File.join(__dir__, '../graphql/imprints/creates.graphql')).freeze
11
+ UPDATE_MUTATION = File.read(File.join(__dir__, '../graphql/imprints/update.graphql')).freeze
12
+ UPDATES_MUTATION = File.read(File.join(__dir__, '../graphql/imprints/updates.graphql')).freeze
13
+ DELETE_MUTATION = File.read(File.join(__dir__, '../graphql/imprints/delete.graphql')).freeze
14
+ DELETES_MUTATION = File.read(File.join(__dir__, '../graphql/imprints/deletes.graphql')).freeze
15
+ MOCKUP_CREATE_MUTATION = File.read(File.join(__dir__, '../graphql/imprints/mockup_create.graphql')).freeze
16
+ MOCKUP_CREATES_MUTATION = File.read(File.join(__dir__, '../graphql/imprints/mockup_creates.graphql')).freeze
17
+
18
+ def all(line_item_group_id:, first: 25, after: nil)
19
+ fetch_page(line_item_group_id: line_item_group_id, first: first, after: after).records
20
+ end
21
+
22
+ def find(id)
23
+ data = @graphql.query(FIND_QUERY, variables: { id: id.to_s })
24
+ Printavo::Imprint.new(data['imprint'])
25
+ end
26
+
27
+ def create(**input)
28
+ data = @graphql.mutate(CREATE_MUTATION, variables: { input: camelize_keys(input) })
29
+ Printavo::Imprint.new(data['imprintCreate'])
30
+ end
31
+
32
+ def creates(inputs)
33
+ data = @graphql.mutate(CREATES_MUTATION, variables: { inputs: inputs.map { |i| camelize_keys(i) } })
34
+ data['imprintCreates'].map { |attrs| Printavo::Imprint.new(attrs) }
35
+ end
36
+
37
+ def update(id, **input)
38
+ data = @graphql.mutate(UPDATE_MUTATION, variables: { id: id.to_s, input: camelize_keys(input) })
39
+ Printavo::Imprint.new(data['imprintUpdate'])
40
+ end
41
+
42
+ def updates(inputs)
43
+ data = @graphql.mutate(UPDATES_MUTATION, variables: { inputs: inputs.map { |i| camelize_keys(i) } })
44
+ data['imprintUpdates'].map { |attrs| Printavo::Imprint.new(attrs) }
45
+ end
46
+
47
+ def delete(id)
48
+ @graphql.mutate(DELETE_MUTATION, variables: { id: id.to_s })
49
+ nil
50
+ end
51
+
52
+ def deletes(ids)
53
+ @graphql.mutate(DELETES_MUTATION, variables: { ids: ids.map(&:to_s) })
54
+ nil
55
+ end
56
+
57
+ def mockup_create(**input)
58
+ data = @graphql.mutate(MOCKUP_CREATE_MUTATION, variables: { input: camelize_keys(input) })
59
+ data['imprintMockupCreate']
60
+ end
61
+
62
+ def mockup_creates(inputs)
63
+ data = @graphql.mutate(MOCKUP_CREATES_MUTATION, variables: { inputs: inputs.map { |i| camelize_keys(i) } })
64
+ data['imprintMockupCreates']
65
+ end
66
+
67
+ private
68
+
69
+ def fetch_page(line_item_group_id:, first: 25, after: nil, **)
70
+ data = @graphql.query(
71
+ ALL_QUERY,
72
+ variables: { lineItemGroupId: line_item_group_id.to_s, first: first, after: after }
73
+ )
74
+ nodes = data['lineItemGroup']['imprints']['nodes'].map { |attrs| Printavo::Imprint.new(attrs) }
75
+ page_info = data['lineItemGroup']['imprints']['pageInfo']
76
+ Printavo::Page.new(
77
+ records: nodes,
78
+ has_next_page: page_info['hasNextPage'],
79
+ end_cursor: page_info['endCursor']
80
+ )
81
+ end
82
+ end
83
+ end
84
+ end
@@ -50,12 +50,6 @@ module Printavo
50
50
  end_cursor: page_info['endCursor']
51
51
  )
52
52
  end
53
-
54
- def camelize_keys(hash)
55
- hash.transform_keys do |key|
56
- key.to_s.gsub(/_([a-z])/) { ::Regexp.last_match(1).upcase }
57
- end
58
- end
59
53
  end
60
54
  end
61
55
  end
@@ -0,0 +1,72 @@
1
+ # lib/printavo/resources/line_item_groups.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ module Resources
6
+ class LineItemGroups < Base
7
+ ALL_QUERY = File.read(File.join(__dir__, '../graphql/line_item_groups/all.graphql')).freeze
8
+ FIND_QUERY = File.read(File.join(__dir__, '../graphql/line_item_groups/find.graphql')).freeze
9
+ CREATE_MUTATION = File.read(File.join(__dir__, '../graphql/line_item_groups/create.graphql')).freeze
10
+ CREATES_MUTATION = File.read(File.join(__dir__, '../graphql/line_item_groups/creates.graphql')).freeze
11
+ UPDATE_MUTATION = File.read(File.join(__dir__, '../graphql/line_item_groups/update.graphql')).freeze
12
+ UPDATES_MUTATION = File.read(File.join(__dir__, '../graphql/line_item_groups/updates.graphql')).freeze
13
+ DELETE_MUTATION = File.read(File.join(__dir__, '../graphql/line_item_groups/delete.graphql')).freeze
14
+ DELETES_MUTATION = File.read(File.join(__dir__, '../graphql/line_item_groups/deletes.graphql')).freeze
15
+
16
+ def all(order_id:, first: 25, after: nil)
17
+ fetch_page(order_id: order_id, first: first, after: after).records
18
+ end
19
+
20
+ def find(id)
21
+ data = @graphql.query(FIND_QUERY, variables: { id: id.to_s })
22
+ Printavo::LineItemGroup.new(data['lineItemGroup'])
23
+ end
24
+
25
+ def create(**input)
26
+ data = @graphql.mutate(CREATE_MUTATION, variables: { input: camelize_keys(input) })
27
+ Printavo::LineItemGroup.new(data['lineItemGroupCreate'])
28
+ end
29
+
30
+ def creates(inputs)
31
+ data = @graphql.mutate(CREATES_MUTATION, variables: { inputs: inputs.map { |i| camelize_keys(i) } })
32
+ data['lineItemGroupCreates'].map { |attrs| Printavo::LineItemGroup.new(attrs) }
33
+ end
34
+
35
+ def update(id, **input)
36
+ data = @graphql.mutate(UPDATE_MUTATION, variables: { id: id.to_s, input: camelize_keys(input) })
37
+ Printavo::LineItemGroup.new(data['lineItemGroupUpdate'])
38
+ end
39
+
40
+ def updates(inputs)
41
+ data = @graphql.mutate(UPDATES_MUTATION, variables: { inputs: inputs.map { |i| camelize_keys(i) } })
42
+ data['lineItemGroupUpdates'].map { |attrs| Printavo::LineItemGroup.new(attrs) }
43
+ end
44
+
45
+ def delete(id)
46
+ @graphql.mutate(DELETE_MUTATION, variables: { id: id.to_s })
47
+ nil
48
+ end
49
+
50
+ def deletes(ids)
51
+ @graphql.mutate(DELETES_MUTATION, variables: { ids: ids.map(&:to_s) })
52
+ nil
53
+ end
54
+
55
+ private
56
+
57
+ def fetch_page(order_id:, first: 25, after: nil, **)
58
+ data = @graphql.query(
59
+ ALL_QUERY,
60
+ variables: { orderId: order_id.to_s, first: first, after: after }
61
+ )
62
+ nodes = data['order']['lineItemGroups']['nodes'].map { |attrs| Printavo::LineItemGroup.new(attrs) }
63
+ page_info = data['order']['lineItemGroups']['pageInfo']
64
+ Printavo::Page.new(
65
+ records: nodes,
66
+ has_next_page: page_info['hasNextPage'],
67
+ end_cursor: page_info['endCursor']
68
+ )
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,84 @@
1
+ # lib/printavo/resources/line_items.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ module Resources
6
+ class LineItems < Base
7
+ ALL_QUERY = File.read(File.join(__dir__, '../graphql/line_items/all.graphql')).freeze
8
+ FIND_QUERY = File.read(File.join(__dir__, '../graphql/line_items/find.graphql')).freeze
9
+ CREATE_MUTATION = File.read(File.join(__dir__, '../graphql/line_items/create.graphql')).freeze
10
+ CREATES_MUTATION = File.read(File.join(__dir__, '../graphql/line_items/creates.graphql')).freeze
11
+ UPDATE_MUTATION = File.read(File.join(__dir__, '../graphql/line_items/update.graphql')).freeze
12
+ UPDATES_MUTATION = File.read(File.join(__dir__, '../graphql/line_items/updates.graphql')).freeze
13
+ DELETE_MUTATION = File.read(File.join(__dir__, '../graphql/line_items/delete.graphql')).freeze
14
+ DELETES_MUTATION = File.read(File.join(__dir__, '../graphql/line_items/deletes.graphql')).freeze
15
+ MOCKUP_CREATE_MUTATION = File.read(File.join(__dir__, '../graphql/line_items/mockup_create.graphql')).freeze
16
+ MOCKUP_CREATES_MUTATION = File.read(File.join(__dir__, '../graphql/line_items/mockup_creates.graphql')).freeze
17
+
18
+ def all(line_item_group_id:, first: 25, after: nil)
19
+ fetch_page(line_item_group_id: line_item_group_id, first: first, after: after).records
20
+ end
21
+
22
+ def find(id)
23
+ data = @graphql.query(FIND_QUERY, variables: { id: id.to_s })
24
+ Printavo::LineItem.new(data['lineItem'])
25
+ end
26
+
27
+ def create(**input)
28
+ data = @graphql.mutate(CREATE_MUTATION, variables: { input: camelize_keys(input) })
29
+ Printavo::LineItem.new(data['lineItemCreate'])
30
+ end
31
+
32
+ def creates(inputs)
33
+ data = @graphql.mutate(CREATES_MUTATION, variables: { inputs: inputs.map { |i| camelize_keys(i) } })
34
+ data['lineItemCreates'].map { |attrs| Printavo::LineItem.new(attrs) }
35
+ end
36
+
37
+ def update(id, **input)
38
+ data = @graphql.mutate(UPDATE_MUTATION, variables: { id: id.to_s, input: camelize_keys(input) })
39
+ Printavo::LineItem.new(data['lineItemUpdate'])
40
+ end
41
+
42
+ def updates(inputs)
43
+ data = @graphql.mutate(UPDATES_MUTATION, variables: { inputs: inputs.map { |i| camelize_keys(i) } })
44
+ data['lineItemUpdates'].map { |attrs| Printavo::LineItem.new(attrs) }
45
+ end
46
+
47
+ def delete(id)
48
+ @graphql.mutate(DELETE_MUTATION, variables: { id: id.to_s })
49
+ nil
50
+ end
51
+
52
+ def deletes(ids)
53
+ @graphql.mutate(DELETES_MUTATION, variables: { ids: ids.map(&:to_s) })
54
+ nil
55
+ end
56
+
57
+ def mockup_create(**input)
58
+ data = @graphql.mutate(MOCKUP_CREATE_MUTATION, variables: { input: camelize_keys(input) })
59
+ data['lineItemMockupCreate']
60
+ end
61
+
62
+ def mockup_creates(inputs)
63
+ data = @graphql.mutate(MOCKUP_CREATES_MUTATION, variables: { inputs: inputs.map { |i| camelize_keys(i) } })
64
+ data['lineItemMockupCreates']
65
+ end
66
+
67
+ private
68
+
69
+ def fetch_page(line_item_group_id:, first: 25, after: nil, **)
70
+ data = @graphql.query(
71
+ ALL_QUERY,
72
+ variables: { lineItemGroupId: line_item_group_id.to_s, first: first, after: after }
73
+ )
74
+ nodes = data['lineItemGroup']['lineItems']['nodes'].map { |attrs| Printavo::LineItem.new(attrs) }
75
+ page_info = data['lineItemGroup']['lineItems']['pageInfo']
76
+ Printavo::Page.new(
77
+ records: nodes,
78
+ has_next_page: page_info['hasNextPage'],
79
+ end_cursor: page_info['endCursor']
80
+ )
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,33 @@
1
+ # lib/printavo/resources/merch_orders.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ module Resources
6
+ class MerchOrders < Base
7
+ ALL_QUERY = File.read(File.join(__dir__, '../graphql/merch_orders/all.graphql')).freeze
8
+ FIND_QUERY = File.read(File.join(__dir__, '../graphql/merch_orders/find.graphql')).freeze
9
+
10
+ def all(first: 25, after: nil)
11
+ fetch_page(first: first, after: after).records
12
+ end
13
+
14
+ def find(id)
15
+ data = @graphql.query(FIND_QUERY, variables: { id: id.to_s })
16
+ Printavo::MerchOrder.new(data['merchOrder'])
17
+ end
18
+
19
+ private
20
+
21
+ def fetch_page(first: 25, after: nil, **)
22
+ data = @graphql.query(ALL_QUERY, variables: { first: first, after: after })
23
+ nodes = data['merchOrders']['nodes'].map { |attrs| Printavo::MerchOrder.new(attrs) }
24
+ page_info = data['merchOrders']['pageInfo']
25
+ Printavo::Page.new(
26
+ records: nodes,
27
+ has_next_page: page_info['hasNextPage'],
28
+ end_cursor: page_info['endCursor']
29
+ )
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,33 @@
1
+ # lib/printavo/resources/merch_stores.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ module Resources
6
+ class MerchStores < Base
7
+ ALL_QUERY = File.read(File.join(__dir__, '../graphql/merch_stores/all.graphql')).freeze
8
+ FIND_QUERY = File.read(File.join(__dir__, '../graphql/merch_stores/find.graphql')).freeze
9
+
10
+ def all(first: 25, after: nil)
11
+ fetch_page(first: first, after: after).records
12
+ end
13
+
14
+ def find(id)
15
+ data = @graphql.query(FIND_QUERY, variables: { id: id.to_s })
16
+ Printavo::MerchStore.new(data['merchStore'])
17
+ end
18
+
19
+ private
20
+
21
+ def fetch_page(first: 25, after: nil, **)
22
+ data = @graphql.query(ALL_QUERY, variables: { first: first, after: after })
23
+ nodes = data['merchStores']['nodes'].map { |attrs| Printavo::MerchStore.new(attrs) }
24
+ page_info = data['merchStores']['pageInfo']
25
+ Printavo::Page.new(
26
+ records: nodes,
27
+ has_next_page: page_info['hasNextPage'],
28
+ end_cursor: page_info['endCursor']
29
+ )
30
+ end
31
+ end
32
+ end
33
+ end
@@ -87,12 +87,6 @@ module Printavo
87
87
  normalized['totalPrice'] ||= attrs['total']
88
88
  Printavo::Order.new(normalized)
89
89
  end
90
-
91
- def camelize_keys(hash)
92
- hash.transform_keys do |key|
93
- key.to_s.gsub(/_([a-z])/) { ::Regexp.last_match(1).upcase }
94
- end
95
- end
96
90
  end
97
91
  end
98
92
  end
@@ -0,0 +1,33 @@
1
+ # lib/printavo/resources/pricing_matrices.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ module Resources
6
+ class PricingMatrices < Base
7
+ ALL_QUERY = File.read(File.join(__dir__, '../graphql/pricing_matrices/all.graphql')).freeze
8
+ FIND_QUERY = File.read(File.join(__dir__, '../graphql/pricing_matrices/find.graphql')).freeze
9
+
10
+ def all(first: 25, after: nil)
11
+ fetch_page(first: first, after: after).records
12
+ end
13
+
14
+ def find(id)
15
+ data = @graphql.query(FIND_QUERY, variables: { id: id.to_s })
16
+ Printavo::PricingMatrix.new(data['pricingMatrix'])
17
+ end
18
+
19
+ private
20
+
21
+ def fetch_page(first: 25, after: nil, **)
22
+ data = @graphql.query(ALL_QUERY, variables: { first: first, after: after })
23
+ nodes = data['pricingMatrices']['nodes'].map { |attrs| Printavo::PricingMatrix.new(attrs) }
24
+ page_info = data['pricingMatrices']['pageInfo']
25
+ Printavo::Page.new(
26
+ records: nodes,
27
+ has_next_page: page_info['hasNextPage'],
28
+ end_cursor: page_info['endCursor']
29
+ )
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,33 @@
1
+ # lib/printavo/resources/products.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ module Resources
6
+ class Products < Base
7
+ ALL_QUERY = File.read(File.join(__dir__, '../graphql/products/all.graphql')).freeze
8
+ FIND_QUERY = File.read(File.join(__dir__, '../graphql/products/find.graphql')).freeze
9
+
10
+ def all(first: 25, after: nil)
11
+ fetch_page(first: first, after: after).records
12
+ end
13
+
14
+ def find(id)
15
+ data = @graphql.query(FIND_QUERY, variables: { id: id.to_s })
16
+ Printavo::Product.new(data['product'])
17
+ end
18
+
19
+ private
20
+
21
+ def fetch_page(first: 25, after: nil, **)
22
+ data = @graphql.query(ALL_QUERY, variables: { first: first, after: after })
23
+ nodes = data['products']['nodes'].map { |attrs| Printavo::Product.new(attrs) }
24
+ page_info = data['products']['pageInfo']
25
+ Printavo::Page.new(
26
+ records: nodes,
27
+ has_next_page: page_info['hasNextPage'],
28
+ end_cursor: page_info['endCursor']
29
+ )
30
+ end
31
+ end
32
+ end
33
+ end
@@ -54,12 +54,6 @@ module Printavo
54
54
  end_cursor: page_info['endCursor']
55
55
  )
56
56
  end
57
-
58
- def camelize_keys(hash)
59
- hash.transform_keys do |key|
60
- key.to_s.gsub(/_([a-z])/) { ::Regexp.last_match(1).upcase }
61
- end
62
- end
63
57
  end
64
58
  end
65
59
  end
@@ -48,12 +48,6 @@ module Printavo
48
48
  end_cursor: page_info['endCursor']
49
49
  )
50
50
  end
51
-
52
- def camelize_keys(hash)
53
- hash.transform_keys do |key|
54
- key.to_s.gsub(/_([a-z])/) { ::Regexp.last_match(1).upcase }
55
- end
56
- end
57
51
  end
58
52
  end
59
53
  end
@@ -24,14 +24,6 @@ module Printavo
24
24
  @graphql.mutate(DELETE_MUTATION, variables: { id: id.to_s })
25
25
  nil
26
26
  end
27
-
28
- private
29
-
30
- def camelize_keys(hash)
31
- hash.transform_keys do |key|
32
- key.to_s.gsub(/_([a-z])/) { ::Regexp.last_match(1).upcase }
33
- end
34
- end
35
27
  end
36
28
  end
37
29
  end
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Printavo
5
- VERSION = '0.7.0'
5
+ VERSION = '0.9.0'
6
6
  end
data/lib/printavo.rb CHANGED
@@ -6,37 +6,57 @@ require 'faraday/retry'
6
6
  require 'json'
7
7
 
8
8
  require_relative 'printavo/version'
9
- require_relative 'printavo/errors'
10
9
  require_relative 'printavo/config'
11
10
  require_relative 'printavo/connection'
11
+ require_relative 'printavo/errors'
12
12
  require_relative 'printavo/graphql_client'
13
13
  require_relative 'printavo/page'
14
14
  require_relative 'printavo/models/base'
15
15
  require_relative 'printavo/models/account'
16
+ require_relative 'printavo/models/category'
16
17
  require_relative 'printavo/models/contact'
17
18
  require_relative 'printavo/models/customer'
19
+ require_relative 'printavo/models/expense'
20
+ require_relative 'printavo/models/fee'
21
+ require_relative 'printavo/models/imprint'
22
+ require_relative 'printavo/models/inquiry'
18
23
  require_relative 'printavo/models/invoice'
19
- require_relative 'printavo/models/status'
20
- require_relative 'printavo/models/order'
21
24
  require_relative 'printavo/models/job'
22
- require_relative 'printavo/models/inquiry'
25
+ require_relative 'printavo/models/line_item'
26
+ require_relative 'printavo/models/line_item_group'
27
+ require_relative 'printavo/models/merch_order'
28
+ require_relative 'printavo/models/merch_store'
29
+ require_relative 'printavo/models/order'
30
+ require_relative 'printavo/models/pricing_matrix'
31
+ require_relative 'printavo/models/product'
32
+ require_relative 'printavo/models/status'
23
33
  require_relative 'printavo/models/task'
24
34
  require_relative 'printavo/models/thread'
25
35
  require_relative 'printavo/models/transaction'
26
36
  require_relative 'printavo/models/transaction_payment'
27
37
  require_relative 'printavo/resources/base'
28
38
  require_relative 'printavo/resources/account'
39
+ require_relative 'printavo/resources/categories'
29
40
  require_relative 'printavo/resources/contacts'
30
41
  require_relative 'printavo/resources/customers'
42
+ require_relative 'printavo/resources/expenses'
43
+ require_relative 'printavo/resources/fees'
44
+ require_relative 'printavo/resources/imprints'
45
+ require_relative 'printavo/resources/inquiries'
31
46
  require_relative 'printavo/resources/invoices'
32
- require_relative 'printavo/resources/statuses'
33
- require_relative 'printavo/resources/orders'
34
47
  require_relative 'printavo/resources/jobs'
35
- require_relative 'printavo/resources/inquiries'
48
+ require_relative 'printavo/resources/line_item_groups'
49
+ require_relative 'printavo/resources/line_items'
50
+ require_relative 'printavo/resources/merch_orders'
51
+ require_relative 'printavo/resources/merch_stores'
52
+ require_relative 'printavo/resources/orders'
53
+ require_relative 'printavo/resources/pricing_matrices'
54
+ require_relative 'printavo/resources/products'
55
+ require_relative 'printavo/resources/statuses'
36
56
  require_relative 'printavo/resources/tasks'
37
57
  require_relative 'printavo/resources/threads'
38
- require_relative 'printavo/resources/transactions'
39
58
  require_relative 'printavo/resources/transaction_payments'
59
+ require_relative 'printavo/resources/transactions'
40
60
  require_relative 'printavo/webhooks'
41
61
  require_relative 'printavo/client'
42
62
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: printavo-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stan Carver II
@@ -274,12 +274,22 @@ files:
274
274
  - lib/printavo/graphql_client.rb
275
275
  - lib/printavo/models/account.rb
276
276
  - lib/printavo/models/base.rb
277
+ - lib/printavo/models/category.rb
277
278
  - lib/printavo/models/contact.rb
278
279
  - lib/printavo/models/customer.rb
280
+ - lib/printavo/models/expense.rb
281
+ - lib/printavo/models/fee.rb
282
+ - lib/printavo/models/imprint.rb
279
283
  - lib/printavo/models/inquiry.rb
280
284
  - lib/printavo/models/invoice.rb
281
285
  - lib/printavo/models/job.rb
286
+ - lib/printavo/models/line_item.rb
287
+ - lib/printavo/models/line_item_group.rb
288
+ - lib/printavo/models/merch_order.rb
289
+ - lib/printavo/models/merch_store.rb
282
290
  - lib/printavo/models/order.rb
291
+ - lib/printavo/models/pricing_matrix.rb
292
+ - lib/printavo/models/product.rb
283
293
  - lib/printavo/models/status.rb
284
294
  - lib/printavo/models/task.rb
285
295
  - lib/printavo/models/thread.rb
@@ -288,12 +298,22 @@ files:
288
298
  - lib/printavo/page.rb
289
299
  - lib/printavo/resources/account.rb
290
300
  - lib/printavo/resources/base.rb
301
+ - lib/printavo/resources/categories.rb
291
302
  - lib/printavo/resources/contacts.rb
292
303
  - lib/printavo/resources/customers.rb
304
+ - lib/printavo/resources/expenses.rb
305
+ - lib/printavo/resources/fees.rb
306
+ - lib/printavo/resources/imprints.rb
293
307
  - lib/printavo/resources/inquiries.rb
294
308
  - lib/printavo/resources/invoices.rb
295
309
  - lib/printavo/resources/jobs.rb
310
+ - lib/printavo/resources/line_item_groups.rb
311
+ - lib/printavo/resources/line_items.rb
312
+ - lib/printavo/resources/merch_orders.rb
313
+ - lib/printavo/resources/merch_stores.rb
296
314
  - lib/printavo/resources/orders.rb
315
+ - lib/printavo/resources/pricing_matrices.rb
316
+ - lib/printavo/resources/products.rb
297
317
  - lib/printavo/resources/statuses.rb
298
318
  - lib/printavo/resources/tasks.rb
299
319
  - lib/printavo/resources/threads.rb