printavo-ruby 0.8.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b15234d01d31d249e662a33ee862660d1ce0f6ae20894c5ebb5f0ed28b048413
4
- data.tar.gz: d00bbeb852bc3ababce742381586ff0dfa0577e936c1ee7ec608de63e2cc0cd1
3
+ metadata.gz: 3f841fd166476152c647d7851297e8b07a8291446d5ccbe657b3a5c9bb5faef6
4
+ data.tar.gz: dc74bf793d7c684b4a5aa5f649f3454397a88d684cd8b6f6c7ed3faea0a768a3
5
5
  SHA512:
6
- metadata.gz: fda95aafcc1ac46908d13a46bac277d39798dcef3999c49286d29ee334ff47c425477baf13be3a6a9bd2a5d70b30ad2f714ec4819938f46b8e54da2489de4df2
7
- data.tar.gz: 211f5bddd9598a3254496c2bc82282634ac3208db5784d3e35f2408344864585aebeffd746e2be5f443012b0431e9bd64e7da0fbdf8941397138d55fdaf166e4
6
+ metadata.gz: 536197cc16cb7faa1ebb1a557563df9954488afc795658bcc6f6cf38d2fa0a0a319f8f04c2842e27921ecc8d627bd4ee15643517bac8e31c39c46607a1d07744
7
+ data.tar.gz: d7f1654d4294bfab5cb9341a55860cb2ea763f91ba553a7a8982fe1a1199de61e0618e6d9ad2ce6938ead8887be3efc4d5264075bb3ebc0d29eca979c5187315
data/docs/CHANGELOG.md CHANGED
@@ -6,6 +6,24 @@ 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
+
9
27
  ## [0.8.0] - 2026-03-31
10
28
 
11
29
  ### 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
 
@@ -225,13 +225,13 @@ return values — they are exposed via model field accessors, not separate resou
225
225
  - [x] `lineItemGroupUpdate` / `lineItemGroupUpdates` (bulk) mutations
226
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
 
@@ -331,11 +331,11 @@ return values — they are exposed via model field accessors, not separate resou
331
331
  - [x] `Fees` resource (`all`, `find`, `create`/`creates`, `update`/`updates`, `delete`/`deletes`)
332
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
@@ -81,10 +85,26 @@ module Printavo
81
85
  'Simply discard the client instance when done.'
82
86
  end
83
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
+
84
96
  def orders
85
97
  Resources::Orders.new(@graphql)
86
98
  end
87
99
 
100
+ def pricing_matrices
101
+ Resources::PricingMatrices.new(@graphql)
102
+ end
103
+
104
+ def products
105
+ Resources::Products.new(@graphql)
106
+ end
107
+
88
108
  def statuses
89
109
  Resources::Statuses.new(@graphql)
90
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,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
@@ -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
@@ -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
@@ -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
@@ -2,5 +2,5 @@
2
2
  # frozen_string_literal: true
3
3
 
4
4
  module Printavo
5
- VERSION = '0.8.0'
5
+ VERSION = '0.9.0'
6
6
  end
data/lib/printavo.rb CHANGED
@@ -6,47 +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'
18
- require_relative 'printavo/models/invoice'
19
- require_relative 'printavo/models/status'
20
- require_relative 'printavo/models/order'
21
- require_relative 'printavo/models/job'
22
19
  require_relative 'printavo/models/expense'
23
20
  require_relative 'printavo/models/fee'
24
21
  require_relative 'printavo/models/imprint'
25
22
  require_relative 'printavo/models/inquiry'
23
+ require_relative 'printavo/models/invoice'
24
+ require_relative 'printavo/models/job'
26
25
  require_relative 'printavo/models/line_item'
27
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'
28
33
  require_relative 'printavo/models/task'
29
34
  require_relative 'printavo/models/thread'
30
35
  require_relative 'printavo/models/transaction'
31
36
  require_relative 'printavo/models/transaction_payment'
32
37
  require_relative 'printavo/resources/base'
33
38
  require_relative 'printavo/resources/account'
39
+ require_relative 'printavo/resources/categories'
34
40
  require_relative 'printavo/resources/contacts'
35
41
  require_relative 'printavo/resources/customers'
36
- require_relative 'printavo/resources/invoices'
37
- require_relative 'printavo/resources/statuses'
38
- require_relative 'printavo/resources/orders'
39
- require_relative 'printavo/resources/jobs'
40
42
  require_relative 'printavo/resources/expenses'
41
43
  require_relative 'printavo/resources/fees'
42
44
  require_relative 'printavo/resources/imprints'
43
45
  require_relative 'printavo/resources/inquiries'
46
+ require_relative 'printavo/resources/invoices'
47
+ require_relative 'printavo/resources/jobs'
44
48
  require_relative 'printavo/resources/line_item_groups'
45
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'
46
56
  require_relative 'printavo/resources/tasks'
47
57
  require_relative 'printavo/resources/threads'
48
- require_relative 'printavo/resources/transactions'
49
58
  require_relative 'printavo/resources/transaction_payments'
59
+ require_relative 'printavo/resources/transactions'
50
60
  require_relative 'printavo/webhooks'
51
61
  require_relative 'printavo/client'
52
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.8.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stan Carver II
@@ -274,6 +274,7 @@ 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
279
280
  - lib/printavo/models/expense.rb
@@ -284,7 +285,11 @@ files:
284
285
  - lib/printavo/models/job.rb
285
286
  - lib/printavo/models/line_item.rb
286
287
  - lib/printavo/models/line_item_group.rb
288
+ - lib/printavo/models/merch_order.rb
289
+ - lib/printavo/models/merch_store.rb
287
290
  - lib/printavo/models/order.rb
291
+ - lib/printavo/models/pricing_matrix.rb
292
+ - lib/printavo/models/product.rb
288
293
  - lib/printavo/models/status.rb
289
294
  - lib/printavo/models/task.rb
290
295
  - lib/printavo/models/thread.rb
@@ -293,6 +298,7 @@ files:
293
298
  - lib/printavo/page.rb
294
299
  - lib/printavo/resources/account.rb
295
300
  - lib/printavo/resources/base.rb
301
+ - lib/printavo/resources/categories.rb
296
302
  - lib/printavo/resources/contacts.rb
297
303
  - lib/printavo/resources/customers.rb
298
304
  - lib/printavo/resources/expenses.rb
@@ -303,7 +309,11 @@ files:
303
309
  - lib/printavo/resources/jobs.rb
304
310
  - lib/printavo/resources/line_item_groups.rb
305
311
  - lib/printavo/resources/line_items.rb
312
+ - lib/printavo/resources/merch_orders.rb
313
+ - lib/printavo/resources/merch_stores.rb
306
314
  - lib/printavo/resources/orders.rb
315
+ - lib/printavo/resources/pricing_matrices.rb
316
+ - lib/printavo/resources/products.rb
307
317
  - lib/printavo/resources/statuses.rb
308
318
  - lib/printavo/resources/tasks.rb
309
319
  - lib/printavo/resources/threads.rb