printavo-ruby 0.11.0 → 0.13.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: 61a636be4f585024b3fab02968db29676052b9228c952c936ebcf67249349258
4
- data.tar.gz: d12592575eaf1d5b9a88babc9dfc4bc86474222c54a9cc5c394e6e8c8b91143e
3
+ metadata.gz: d38801721464e49c62cf1f1c691c157e8ef2f1e7fd09c9a7490520191a760a4f
4
+ data.tar.gz: 452da693c947df1df1535500644ceed9263275c3e1afa856bdaba85fabbccba9
5
5
  SHA512:
6
- metadata.gz: 6aa7d1e5b343728409ca0b3082c9ec9480865b69ecb5db3713cade7c9db897bf2d3bc02571eca4e1a31e4e7f98763955482726c426923f1692d380d972f0e511
7
- data.tar.gz: 5a14a8ec04f1e8bff553540135077564d9c0e21c58c5e39a93454d70ef36a14512b2b2e75eacd0b068876ad5ca4491c70653b82c45ed205c9e59cd5c94ee49f8
6
+ metadata.gz: e8e46f1df1bf4aaa1ebc4b4addf6b70e924e330fd29610a3f175f7e0d6ae222a082962d45facf65d7fb7b708155f718b35a86c58a1ac23629a522095ad391535
7
+ data.tar.gz: 23ca5c52505288f5f6fcdf138af7f0441ee2c9c7702e0ffd972b40e8f8702a4ea072c65e96a070ebf0845c2bf79130f4ea70c93b7df28299cc5a2790fc6c37d8
data/docs/CHANGELOG.md CHANGED
@@ -6,6 +6,44 @@ 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.13.0] - 2026-03-31
10
+
11
+ ### Added
12
+ - `Printavo::User` model (`id`, `first_name`, `last_name`, `email`, `full_name`)
13
+ - `Users` resource: `all`, `find(id)` — shop staff members
14
+ - `Printavo::Vendor` model (`id`, `name`, `email`, `phone`)
15
+ - `Vendors` resource: `all`, `find(id)` — read-only
16
+ - `Printavo::ContractorProfile` model (`id`, `name`, `email`)
17
+ - `ContractorProfiles` resource: `all`, `find(id)`
18
+ - `Printavo::DeliveryMethod` model (`id`, `name`)
19
+ - `DeliveryMethods` resource: `all`, `find(id)`, `create(**input)`, `update(id, **input)`, `archive(id)`
20
+ - `deliveryMethodCreate`, `deliveryMethodUpdate`, `deliveryMethodArchive` mutations
21
+ - `Printavo::TypeOfWork` model (`id`, `name`)
22
+ - `TypesOfWork` resource: `all` — reference data for order categorization
23
+ - `client.contractor_profiles`, `client.delivery_methods`, `client.types_of_work`,
24
+ `client.users`, `client.vendors` entry points on `Printavo::Client`
25
+ - 11 new `.graphql` files under `lib/printavo/graphql/`
26
+ - 1 new factory file: `spec/support/factories/people.rb`
27
+
28
+ ## [0.12.0] - 2026-03-31
29
+
30
+ ### Added
31
+ - `Printavo::ProductionFile` model (`id`, `url`, `filename`, `created_at`)
32
+ - `ProductionFiles` resource: `all(order_id:)`, `find(id)`, `create(**input)` / `creates(inputs)`,
33
+ `delete(id)` / `deletes(ids)`
34
+ - `Printavo::Mockup` model (`id`, `url`, `position`, `created_at`)
35
+ - `Mockups` resource: `all(order_id:)`, `find(id)`, `delete(id)` / `deletes(ids)` — no create (mockups are
36
+ attached via `LineItems#mockup_create` and `Imprints#mockup_create`)
37
+ - `Printavo::EmailTemplate` model (`id`, `name`, `subject`, `body`)
38
+ - `EmailTemplates` resource: `all`, `find(id)` — read-only
39
+ - `Printavo::CustomAddress` model (`id`, `name`, `address`, `city`, `state`, `zip`)
40
+ - `CustomAddresses` resource: `all(order_id:)`, `find(id)`, `create(**input)` / `creates(inputs)`,
41
+ `update(id, **input)` / `updates(inputs)`, `delete(id)` / `deletes(ids)`
42
+ - `client.custom_addresses`, `client.email_templates`, `client.mockups`, `client.production_files`
43
+ entry points on `Printavo::Client`
44
+ - 20 new `.graphql` files under `lib/printavo/graphql/`
45
+ - 1 new factory file: `spec/support/factories/media.rb`
46
+
9
47
  ## [0.11.0] - 2026-03-31
10
48
 
11
49
  ### Added
data/docs/TODO.md CHANGED
@@ -161,29 +161,29 @@ return values — they are exposed via model field accessors, not separate resou
161
161
  - [x] `Printavo::Category` model (`id`, `name`)
162
162
  - [x] `Categories` resource: `all`, `find(id)` — reference data for products/line items
163
163
 
164
- ### Contractor Profiles
164
+ ### Contractor Profiles
165
165
 
166
- - [ ] `Printavo::ContractorProfile` model (`id`, `name`, `email`)
167
- - [ ] `ContractorProfiles` resource: `all`, `find(id)` — contractors assignable to invoices
166
+ - [x] `Printavo::ContractorProfile` model (`id`, `name`, `email`)
167
+ - [x] `ContractorProfiles` resource: `all`, `find(id)` — contractors assignable to invoices
168
168
 
169
- ### Custom Addresses
169
+ ### Custom Addresses
170
170
 
171
- - [ ] `Printavo::CustomAddress` model (`id`, `name`, `address`, `city`, `state`, `zip`)
172
- - [ ] `CustomAddresses` resource: `all(order_id:)`, `find(id)`, `create`, `update`, `delete`
173
- - [ ] `customAddressCreate` / `customAddressCreates` (bulk) mutations
174
- - [ ] `customAddressUpdate` / `customAddressUpdates` (bulk) mutations
175
- - [ ] `customAddressDelete` / `customAddressDeletes` (bulk) mutations
171
+ - [x] `Printavo::CustomAddress` model (`id`, `name`, `address`, `city`, `state`, `zip`)
172
+ - [x] `CustomAddresses` resource: `all(order_id:)`, `find(id)`, `create`, `update`, `delete`
173
+ - [x] `customAddressCreate` / `customAddressCreates` (bulk) mutations
174
+ - [x] `customAddressUpdate` / `customAddressUpdates` (bulk) mutations
175
+ - [x] `customAddressDelete` / `customAddressDeletes` (bulk) mutations
176
176
 
177
- ### Delivery Methods
177
+ ### Delivery Methods
178
178
 
179
- - [ ] `Printavo::DeliveryMethod` model (`id`, `name`)
180
- - [ ] `DeliveryMethods` resource: `all`, `find(id)`, `create`, `update`, `archive`
181
- - [ ] `deliveryMethodCreate`, `deliveryMethodUpdate`, `deliveryMethodArchive` mutations
179
+ - [x] `Printavo::DeliveryMethod` model (`id`, `name`)
180
+ - [x] `DeliveryMethods` resource: `all`, `find(id)`, `create`, `update`, `archive`
181
+ - [x] `deliveryMethodCreate`, `deliveryMethodUpdate`, `deliveryMethodArchive` mutations
182
182
 
183
- ### Email Templates
183
+ ### Email Templates
184
184
 
185
- - [ ] `Printavo::EmailTemplate` model (`id`, `name`, `subject`, `body`)
186
- - [ ] `EmailTemplates` resource: `all`, `find(id)`
185
+ - [x] `Printavo::EmailTemplate` model (`id`, `name`, `subject`, `body`)
186
+ - [x] `EmailTemplates` resource: `all`, `find(id)`
187
187
 
188
188
  ### Expenses ✅
189
189
 
@@ -233,15 +233,15 @@ return values — they are exposed via model field accessors, not separate resou
233
233
  - [x] `MerchOrders` resource: `all`, `find(id)`
234
234
  - [x] `client.merch_stores` / `client.merch_orders` entry points
235
235
 
236
- ### Mockups & Production Files
236
+ ### Mockups & Production Files
237
237
 
238
- - [ ] `Printavo::Mockup` model (`id`, `url`, `position`, `createdAt`)
239
- - [ ] `Printavo::ProductionFile` model (`id`, `url`, `filename`, `createdAt`)
240
- - [ ] `Mockups` resource: `all(order_id:)`, `find(id)`, `delete`
241
- - [ ] `mockupDelete` / `mockupDeletes` (bulk) mutations
242
- - [ ] `ProductionFiles` resource: `all(order_id:)`, `find(id)`, `create`, `delete`
243
- - [ ] `productionFileCreate` / `productionFileCreates` (bulk) mutations
244
- - [ ] `productionFileDelete` / `productionFileDeletes` (bulk) mutations
238
+ - [x] `Printavo::Mockup` model (`id`, `url`, `position`, `created_at`)
239
+ - [x] `Printavo::ProductionFile` model (`id`, `url`, `filename`, `created_at`)
240
+ - [x] `Mockups` resource: `all(order_id:)`, `find(id)`, `delete`, `deletes`
241
+ - [x] `mockupDelete` / `mockupDeletes` (bulk) mutations
242
+ - [x] `ProductionFiles` resource: `all(order_id:)`, `find(id)`, `create`, `creates`, `delete`, `deletes`
243
+ - [x] `productionFileCreate` / `productionFileCreates` (bulk) mutations
244
+ - [x] `productionFileDelete` / `productionFileDeletes` (bulk) mutations
245
245
 
246
246
  ### Payments ✅
247
247
 
@@ -292,20 +292,20 @@ return values — they are exposed via model field accessors, not separate resou
292
292
  - [x] `TransactionPayments` resource: `create`, `update`, `delete`
293
293
  - [x] `transactionPaymentCreate`, `transactionPaymentUpdate`, `transactionPaymentDelete` mutations
294
294
 
295
- ### Types of Work
295
+ ### Types of Work
296
296
 
297
- - [ ] `Printavo::TypeOfWork` model (`id`, `name`)
298
- - [ ] `TypesOfWork` resource: `all` — reference data for order categorization
297
+ - [x] `Printavo::TypeOfWork` model (`id`, `name`)
298
+ - [x] `TypesOfWork` resource: `all` — reference data for order categorization
299
299
 
300
- ### Users
300
+ ### Users
301
301
 
302
- - [ ] `Printavo::User` model (`id`, `firstName`, `lastName`, `email`, `avatar`, `permissions`)
303
- - [ ] `Users` resource: `all`, `find(id)` — shop staff members
302
+ - [x] `Printavo::User` model (`id`, `first_name`, `last_name`, `email`, `full_name`)
303
+ - [x] `Users` resource: `all`, `find(id)` — shop staff members
304
304
 
305
- ### Vendors
305
+ ### Vendors
306
306
 
307
- - [ ] `Printavo::Vendor` model (`id`, `name`, `email`, `phone`)
308
- - [ ] `Vendors` resource: `all`, `find(id)` — read-only; no create/update/delete in V2 API
307
+ - [x] `Printavo::Vendor` model (`id`, `name`, `email`, `phone`)
308
+ - [x] `Vendors` resource: `all`, `find(id)` — read-only; no create/update/delete in V2 API
309
309
 
310
310
  ---
311
311
 
@@ -349,20 +349,20 @@ return values — they are exposed via model field accessors, not separate resou
349
349
  - [x] `PresetTasks` resource (`find`, `create`, `update`, `delete`)
350
350
  - [x] `PresetTaskGroups` resource (`all`, `find`, `create`, `update`, `delete`, `apply`)
351
351
 
352
- ### v0.12.0 — Files, Media & Communication
352
+ ### v0.12.0 — Files, Media & Communication
353
353
 
354
- - [ ] `ProductionFiles` resource (`all`, `find`, `create`/`creates`, `delete`/`deletes`)
355
- - [ ] `Mockups` resource (`all`, `find`, `delete`/`deletes`)
356
- - [ ] `EmailTemplates` resource (`all`, `find`)
357
- - [ ] `CustomAddresses` resource (`all`, `find`, `create`/`creates`, `update`/`updates`, `delete`/`deletes`)
354
+ - [x] `ProductionFiles` resource (`all`, `find`, `create`/`creates`, `delete`/`deletes`)
355
+ - [x] `Mockups` resource (`all`, `find`, `delete`/`deletes`)
356
+ - [x] `EmailTemplates` resource (`all`, `find`)
357
+ - [x] `CustomAddresses` resource (`all`, `find`, `create`/`creates`, `update`/`updates`, `delete`/`deletes`)
358
358
 
359
- ### v0.13.0 — People, Orgs & Reference Data
359
+ ### v0.13.0 — People, Orgs & Reference Data
360
360
 
361
- - [ ] `Users` resource (`all`, `find`)
362
- - [ ] `Vendors` resource (`all`, `find`) — read-only
363
- - [ ] `ContractorProfiles` resource (`all`, `find`)
364
- - [ ] `DeliveryMethods` resource (`all`, `find`, `create`, `update`, `archive`)
365
- - [ ] `TypesOfWork` resource (`all`)
361
+ - [x] `Users` resource (`all`, `find`)
362
+ - [x] `Vendors` resource (`all`, `find`) — read-only
363
+ - [x] `ContractorProfiles` resource (`all`, `find`)
364
+ - [x] `DeliveryMethods` resource (`all`, `find`, `create`, `update`, `archive`)
365
+ - [x] `TypesOfWork` resource (`all`)
366
366
 
367
367
  ### v0.14.0 — Delete & Duplicate Mutations for Shipped Resources
368
368
 
@@ -41,10 +41,26 @@ module Printavo
41
41
  Resources::Contacts.new(@graphql)
42
42
  end
43
43
 
44
+ def contractor_profiles
45
+ Resources::ContractorProfiles.new(@graphql)
46
+ end
47
+
48
+ def custom_addresses
49
+ Resources::CustomAddresses.new(@graphql)
50
+ end
51
+
44
52
  def customers
45
53
  Resources::Customers.new(@graphql)
46
54
  end
47
55
 
56
+ def delivery_methods
57
+ Resources::DeliveryMethods.new(@graphql)
58
+ end
59
+
60
+ def email_templates
61
+ Resources::EmailTemplates.new(@graphql)
62
+ end
63
+
48
64
  def expenses
49
65
  Resources::Expenses.new(@graphql)
50
66
  end
@@ -97,6 +113,10 @@ module Printavo
97
113
  Resources::MerchStores.new(@graphql)
98
114
  end
99
115
 
116
+ def mockups
117
+ Resources::Mockups.new(@graphql)
118
+ end
119
+
100
120
  def orders
101
121
  Resources::Orders.new(@graphql)
102
122
  end
@@ -125,6 +145,10 @@ module Printavo
125
145
  Resources::PricingMatrices.new(@graphql)
126
146
  end
127
147
 
148
+ def production_files
149
+ Resources::ProductionFiles.new(@graphql)
150
+ end
151
+
128
152
  def products
129
153
  Resources::Products.new(@graphql)
130
154
  end
@@ -148,5 +172,17 @@ module Printavo
148
172
  def transactions
149
173
  Resources::Transactions.new(@graphql)
150
174
  end
175
+
176
+ def types_of_work
177
+ Resources::TypesOfWork.new(@graphql)
178
+ end
179
+
180
+ def users
181
+ Resources::Users.new(@graphql)
182
+ end
183
+
184
+ def vendors
185
+ Resources::Vendors.new(@graphql)
186
+ end
151
187
  end
152
188
  end
@@ -0,0 +1,10 @@
1
+ # lib/printavo/models/contractor_profile.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ class ContractorProfile < Models::Base
6
+ def id = self['id']
7
+ def name = self['name']
8
+ def email = self['email']
9
+ end
10
+ end
@@ -0,0 +1,13 @@
1
+ # lib/printavo/models/custom_address.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ class CustomAddress < Models::Base
6
+ def id = self['id']
7
+ def name = self['name']
8
+ def address = self['address']
9
+ def city = self['city']
10
+ def state = self['state']
11
+ def zip = self['zip']
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ # lib/printavo/models/delivery_method.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ class DeliveryMethod < Models::Base
6
+ def id = self['id']
7
+ def name = self['name']
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ # lib/printavo/models/email_template.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ class EmailTemplate < Models::Base
6
+ def id = self['id']
7
+ def name = self['name']
8
+ def subject = self['subject']
9
+ def body = self['body']
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # lib/printavo/models/mockup.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ class Mockup < Models::Base
6
+ def id = self['id']
7
+ def url = self['url']
8
+ def position = self['position']
9
+ def created_at = self['createdAt']
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # lib/printavo/models/production_file.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ class ProductionFile < Models::Base
6
+ def id = self['id']
7
+ def url = self['url']
8
+ def filename = self['filename']
9
+ def created_at = self['createdAt']
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ # lib/printavo/models/type_of_work.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ class TypeOfWork < Models::Base
6
+ def id = self['id']
7
+ def name = self['name']
8
+ end
9
+ end
@@ -0,0 +1,12 @@
1
+ # lib/printavo/models/user.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ class User < Models::Base
6
+ def id = self['id']
7
+ def first_name = self['firstName']
8
+ def last_name = self['lastName']
9
+ def email = self['email']
10
+ def full_name = "#{first_name} #{last_name}".strip
11
+ end
12
+ end
@@ -0,0 +1,11 @@
1
+ # lib/printavo/models/vendor.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ class Vendor < Models::Base
6
+ def id = self['id']
7
+ def name = self['name']
8
+ def email = self['email']
9
+ def phone = self['phone']
10
+ end
11
+ end
@@ -0,0 +1,33 @@
1
+ # lib/printavo/resources/contractor_profiles.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ module Resources
6
+ class ContractorProfiles < Base
7
+ ALL_QUERY = File.read(File.join(__dir__, '../graphql/contractor_profiles/all.graphql')).freeze
8
+ FIND_QUERY = File.read(File.join(__dir__, '../graphql/contractor_profiles/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::ContractorProfile.new(data['contractorProfile'])
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['contractorProfiles']['nodes'].map { |attrs| Printavo::ContractorProfile.new(attrs) }
24
+ page_info = data['contractorProfiles']['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,72 @@
1
+ # lib/printavo/resources/custom_addresses.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ module Resources
6
+ class CustomAddresses < Base
7
+ ALL_QUERY = File.read(File.join(__dir__, '../graphql/custom_addresses/all.graphql')).freeze
8
+ FIND_QUERY = File.read(File.join(__dir__, '../graphql/custom_addresses/find.graphql')).freeze
9
+ CREATE_MUTATION = File.read(File.join(__dir__, '../graphql/custom_addresses/create.graphql')).freeze
10
+ CREATES_MUTATION = File.read(File.join(__dir__, '../graphql/custom_addresses/creates.graphql')).freeze
11
+ UPDATE_MUTATION = File.read(File.join(__dir__, '../graphql/custom_addresses/update.graphql')).freeze
12
+ UPDATES_MUTATION = File.read(File.join(__dir__, '../graphql/custom_addresses/updates.graphql')).freeze
13
+ DELETE_MUTATION = File.read(File.join(__dir__, '../graphql/custom_addresses/delete.graphql')).freeze
14
+ DELETES_MUTATION = File.read(File.join(__dir__, '../graphql/custom_addresses/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::CustomAddress.new(data['customAddress'])
23
+ end
24
+
25
+ def create(**input)
26
+ data = @graphql.mutate(CREATE_MUTATION, variables: { input: camelize_keys(input) })
27
+ Printavo::CustomAddress.new(data['customAddressCreate'])
28
+ end
29
+
30
+ def creates(inputs)
31
+ data = @graphql.mutate(CREATES_MUTATION, variables: { inputs: inputs.map { |i| camelize_keys(i) } })
32
+ data['customAddressCreates'].map { |attrs| Printavo::CustomAddress.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::CustomAddress.new(data['customAddressUpdate'])
38
+ end
39
+
40
+ def updates(inputs)
41
+ data = @graphql.mutate(UPDATES_MUTATION, variables: { inputs: inputs.map { |i| camelize_keys(i) } })
42
+ data['customAddressUpdates'].map { |attrs| Printavo::CustomAddress.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']['customAddresses']['nodes'].map { |attrs| Printavo::CustomAddress.new(attrs) }
63
+ page_info = data['order']['customAddresses']['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,51 @@
1
+ # lib/printavo/resources/delivery_methods.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ module Resources
6
+ class DeliveryMethods < Base
7
+ ALL_QUERY = File.read(File.join(__dir__, '../graphql/delivery_methods/all.graphql')).freeze
8
+ FIND_QUERY = File.read(File.join(__dir__, '../graphql/delivery_methods/find.graphql')).freeze
9
+ CREATE_MUTATION = File.read(File.join(__dir__, '../graphql/delivery_methods/create.graphql')).freeze
10
+ UPDATE_MUTATION = File.read(File.join(__dir__, '../graphql/delivery_methods/update.graphql')).freeze
11
+ ARCHIVE_MUTATION = File.read(File.join(__dir__, '../graphql/delivery_methods/archive.graphql')).freeze
12
+
13
+ def all(first: 25, after: nil)
14
+ fetch_page(first: first, after: after).records
15
+ end
16
+
17
+ def find(id)
18
+ data = @graphql.query(FIND_QUERY, variables: { id: id.to_s })
19
+ Printavo::DeliveryMethod.new(data['deliveryMethod'])
20
+ end
21
+
22
+ def create(**input)
23
+ data = @graphql.mutate(CREATE_MUTATION, variables: { input: camelize_keys(input) })
24
+ Printavo::DeliveryMethod.new(data['deliveryMethodCreate'])
25
+ end
26
+
27
+ def update(id, **input)
28
+ data = @graphql.mutate(UPDATE_MUTATION, variables: { id: id.to_s, input: camelize_keys(input) })
29
+ Printavo::DeliveryMethod.new(data['deliveryMethodUpdate'])
30
+ end
31
+
32
+ def archive(id)
33
+ @graphql.mutate(ARCHIVE_MUTATION, variables: { id: id.to_s })
34
+ nil
35
+ end
36
+
37
+ private
38
+
39
+ def fetch_page(first: 25, after: nil, **)
40
+ data = @graphql.query(ALL_QUERY, variables: { first: first, after: after })
41
+ nodes = data['deliveryMethods']['nodes'].map { |attrs| Printavo::DeliveryMethod.new(attrs) }
42
+ page_info = data['deliveryMethods']['pageInfo']
43
+ Printavo::Page.new(
44
+ records: nodes,
45
+ has_next_page: page_info['hasNextPage'],
46
+ end_cursor: page_info['endCursor']
47
+ )
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,33 @@
1
+ # lib/printavo/resources/email_templates.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ module Resources
6
+ class EmailTemplates < Base
7
+ ALL_QUERY = File.read(File.join(__dir__, '../graphql/email_templates/all.graphql')).freeze
8
+ FIND_QUERY = File.read(File.join(__dir__, '../graphql/email_templates/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::EmailTemplate.new(data['emailTemplate'])
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['emailTemplates']['nodes'].map { |attrs| Printavo::EmailTemplate.new(attrs) }
24
+ page_info = data['emailTemplates']['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,48 @@
1
+ # lib/printavo/resources/mockups.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ module Resources
6
+ class Mockups < Base
7
+ ALL_QUERY = File.read(File.join(__dir__, '../graphql/mockups/all.graphql')).freeze
8
+ FIND_QUERY = File.read(File.join(__dir__, '../graphql/mockups/find.graphql')).freeze
9
+ DELETE_MUTATION = File.read(File.join(__dir__, '../graphql/mockups/delete.graphql')).freeze
10
+ DELETES_MUTATION = File.read(File.join(__dir__, '../graphql/mockups/deletes.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::Mockup.new(data['mockup'])
19
+ end
20
+
21
+ def delete(id)
22
+ @graphql.mutate(DELETE_MUTATION, variables: { id: id.to_s })
23
+ nil
24
+ end
25
+
26
+ def deletes(ids)
27
+ @graphql.mutate(DELETES_MUTATION, variables: { ids: ids.map(&:to_s) })
28
+ nil
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']['mockups']['nodes'].map { |attrs| Printavo::Mockup.new(attrs) }
39
+ page_info = data['order']['mockups']['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,60 @@
1
+ # lib/printavo/resources/production_files.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ module Resources
6
+ class ProductionFiles < Base
7
+ ALL_QUERY = File.read(File.join(__dir__, '../graphql/production_files/all.graphql')).freeze
8
+ FIND_QUERY = File.read(File.join(__dir__, '../graphql/production_files/find.graphql')).freeze
9
+ CREATE_MUTATION = File.read(File.join(__dir__, '../graphql/production_files/create.graphql')).freeze
10
+ CREATES_MUTATION = File.read(File.join(__dir__, '../graphql/production_files/creates.graphql')).freeze
11
+ DELETE_MUTATION = File.read(File.join(__dir__, '../graphql/production_files/delete.graphql')).freeze
12
+ DELETES_MUTATION = File.read(File.join(__dir__, '../graphql/production_files/deletes.graphql')).freeze
13
+
14
+ def all(order_id:, first: 25, after: nil)
15
+ fetch_page(order_id: order_id, first: first, after: after).records
16
+ end
17
+
18
+ def find(id)
19
+ data = @graphql.query(FIND_QUERY, variables: { id: id.to_s })
20
+ Printavo::ProductionFile.new(data['productionFile'])
21
+ end
22
+
23
+ def create(**input)
24
+ data = @graphql.mutate(CREATE_MUTATION, variables: { input: camelize_keys(input) })
25
+ Printavo::ProductionFile.new(data['productionFileCreate'])
26
+ end
27
+
28
+ def creates(inputs)
29
+ data = @graphql.mutate(CREATES_MUTATION, variables: { inputs: inputs.map { |i| camelize_keys(i) } })
30
+ data['productionFileCreates'].map { |attrs| Printavo::ProductionFile.new(attrs) }
31
+ end
32
+
33
+ def delete(id)
34
+ @graphql.mutate(DELETE_MUTATION, variables: { id: id.to_s })
35
+ nil
36
+ end
37
+
38
+ def deletes(ids)
39
+ @graphql.mutate(DELETES_MUTATION, variables: { ids: ids.map(&:to_s) })
40
+ nil
41
+ end
42
+
43
+ private
44
+
45
+ def fetch_page(order_id:, first: 25, after: nil, **)
46
+ data = @graphql.query(
47
+ ALL_QUERY,
48
+ variables: { orderId: order_id.to_s, first: first, after: after }
49
+ )
50
+ nodes = data['order']['productionFiles']['nodes'].map { |attrs| Printavo::ProductionFile.new(attrs) }
51
+ page_info = data['order']['productionFiles']['pageInfo']
52
+ Printavo::Page.new(
53
+ records: nodes,
54
+ has_next_page: page_info['hasNextPage'],
55
+ end_cursor: page_info['endCursor']
56
+ )
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,27 @@
1
+ # lib/printavo/resources/types_of_work.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ module Resources
6
+ class TypesOfWork < Base
7
+ ALL_QUERY = File.read(File.join(__dir__, '../graphql/types_of_work/all.graphql')).freeze
8
+
9
+ def all(first: 25, after: nil)
10
+ fetch_page(first: first, after: after).records
11
+ end
12
+
13
+ private
14
+
15
+ def fetch_page(first: 25, after: nil, **)
16
+ data = @graphql.query(ALL_QUERY, variables: { first: first, after: after })
17
+ nodes = data['typesOfWork']['nodes'].map { |attrs| Printavo::TypeOfWork.new(attrs) }
18
+ page_info = data['typesOfWork']['pageInfo']
19
+ Printavo::Page.new(
20
+ records: nodes,
21
+ has_next_page: page_info['hasNextPage'],
22
+ end_cursor: page_info['endCursor']
23
+ )
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,33 @@
1
+ # lib/printavo/resources/users.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ module Resources
6
+ class Users < Base
7
+ ALL_QUERY = File.read(File.join(__dir__, '../graphql/users/all.graphql')).freeze
8
+ FIND_QUERY = File.read(File.join(__dir__, '../graphql/users/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::User.new(data['user'])
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['users']['nodes'].map { |attrs| Printavo::User.new(attrs) }
24
+ page_info = data['users']['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/vendors.rb
2
+ # frozen_string_literal: true
3
+
4
+ module Printavo
5
+ module Resources
6
+ class Vendors < Base
7
+ ALL_QUERY = File.read(File.join(__dir__, '../graphql/vendors/all.graphql')).freeze
8
+ FIND_QUERY = File.read(File.join(__dir__, '../graphql/vendors/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::Vendor.new(data['vendor'])
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['vendors']['nodes'].map { |attrs| Printavo::Vendor.new(attrs) }
24
+ page_info = data['vendors']['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.11.0'
5
+ VERSION = '0.13.0'
6
6
  end
data/lib/printavo.rb CHANGED
@@ -16,7 +16,11 @@ require_relative 'printavo/models/account'
16
16
  require_relative 'printavo/models/approval_request'
17
17
  require_relative 'printavo/models/category'
18
18
  require_relative 'printavo/models/contact'
19
+ require_relative 'printavo/models/contractor_profile'
20
+ require_relative 'printavo/models/custom_address'
19
21
  require_relative 'printavo/models/customer'
22
+ require_relative 'printavo/models/delivery_method'
23
+ require_relative 'printavo/models/email_template'
20
24
  require_relative 'printavo/models/expense'
21
25
  require_relative 'printavo/models/fee'
22
26
  require_relative 'printavo/models/imprint'
@@ -27,6 +31,7 @@ require_relative 'printavo/models/line_item'
27
31
  require_relative 'printavo/models/line_item_group'
28
32
  require_relative 'printavo/models/merch_order'
29
33
  require_relative 'printavo/models/merch_store'
34
+ require_relative 'printavo/models/mockup'
30
35
  require_relative 'printavo/models/order'
31
36
  require_relative 'printavo/models/payment'
32
37
  require_relative 'printavo/models/payment_request'
@@ -35,17 +40,25 @@ require_relative 'printavo/models/preset_task'
35
40
  require_relative 'printavo/models/preset_task_group'
36
41
  require_relative 'printavo/models/pricing_matrix'
37
42
  require_relative 'printavo/models/product'
43
+ require_relative 'printavo/models/production_file'
38
44
  require_relative 'printavo/models/status'
39
45
  require_relative 'printavo/models/task'
40
46
  require_relative 'printavo/models/thread'
41
47
  require_relative 'printavo/models/transaction'
42
48
  require_relative 'printavo/models/transaction_payment'
49
+ require_relative 'printavo/models/type_of_work'
50
+ require_relative 'printavo/models/user'
51
+ require_relative 'printavo/models/vendor'
43
52
  require_relative 'printavo/resources/base'
44
53
  require_relative 'printavo/resources/account'
45
54
  require_relative 'printavo/resources/approval_requests'
46
55
  require_relative 'printavo/resources/categories'
47
56
  require_relative 'printavo/resources/contacts'
57
+ require_relative 'printavo/resources/contractor_profiles'
58
+ require_relative 'printavo/resources/custom_addresses'
48
59
  require_relative 'printavo/resources/customers'
60
+ require_relative 'printavo/resources/delivery_methods'
61
+ require_relative 'printavo/resources/email_templates'
49
62
  require_relative 'printavo/resources/expenses'
50
63
  require_relative 'printavo/resources/fees'
51
64
  require_relative 'printavo/resources/imprints'
@@ -56,6 +69,7 @@ require_relative 'printavo/resources/line_item_groups'
56
69
  require_relative 'printavo/resources/line_items'
57
70
  require_relative 'printavo/resources/merch_orders'
58
71
  require_relative 'printavo/resources/merch_stores'
72
+ require_relative 'printavo/resources/mockups'
59
73
  require_relative 'printavo/resources/orders'
60
74
  require_relative 'printavo/resources/payment_requests'
61
75
  require_relative 'printavo/resources/payment_terms'
@@ -63,12 +77,16 @@ require_relative 'printavo/resources/payments'
63
77
  require_relative 'printavo/resources/preset_task_groups'
64
78
  require_relative 'printavo/resources/preset_tasks'
65
79
  require_relative 'printavo/resources/pricing_matrices'
80
+ require_relative 'printavo/resources/production_files'
66
81
  require_relative 'printavo/resources/products'
67
82
  require_relative 'printavo/resources/statuses'
68
83
  require_relative 'printavo/resources/tasks'
69
84
  require_relative 'printavo/resources/threads'
70
85
  require_relative 'printavo/resources/transaction_payments'
71
86
  require_relative 'printavo/resources/transactions'
87
+ require_relative 'printavo/resources/types_of_work'
88
+ require_relative 'printavo/resources/users'
89
+ require_relative 'printavo/resources/vendors'
72
90
  require_relative 'printavo/webhooks'
73
91
  require_relative 'printavo/client'
74
92
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: printavo-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stan Carver II
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-03-31 00:00:00.000000000 Z
11
+ date: 2026-04-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -277,7 +277,11 @@ files:
277
277
  - lib/printavo/models/base.rb
278
278
  - lib/printavo/models/category.rb
279
279
  - lib/printavo/models/contact.rb
280
+ - lib/printavo/models/contractor_profile.rb
281
+ - lib/printavo/models/custom_address.rb
280
282
  - lib/printavo/models/customer.rb
283
+ - lib/printavo/models/delivery_method.rb
284
+ - lib/printavo/models/email_template.rb
281
285
  - lib/printavo/models/expense.rb
282
286
  - lib/printavo/models/fee.rb
283
287
  - lib/printavo/models/imprint.rb
@@ -288,6 +292,7 @@ files:
288
292
  - lib/printavo/models/line_item_group.rb
289
293
  - lib/printavo/models/merch_order.rb
290
294
  - lib/printavo/models/merch_store.rb
295
+ - lib/printavo/models/mockup.rb
291
296
  - lib/printavo/models/order.rb
292
297
  - lib/printavo/models/payment.rb
293
298
  - lib/printavo/models/payment_request.rb
@@ -296,18 +301,26 @@ files:
296
301
  - lib/printavo/models/preset_task_group.rb
297
302
  - lib/printavo/models/pricing_matrix.rb
298
303
  - lib/printavo/models/product.rb
304
+ - lib/printavo/models/production_file.rb
299
305
  - lib/printavo/models/status.rb
300
306
  - lib/printavo/models/task.rb
301
307
  - lib/printavo/models/thread.rb
302
308
  - lib/printavo/models/transaction.rb
303
309
  - lib/printavo/models/transaction_payment.rb
310
+ - lib/printavo/models/type_of_work.rb
311
+ - lib/printavo/models/user.rb
312
+ - lib/printavo/models/vendor.rb
304
313
  - lib/printavo/page.rb
305
314
  - lib/printavo/resources/account.rb
306
315
  - lib/printavo/resources/approval_requests.rb
307
316
  - lib/printavo/resources/base.rb
308
317
  - lib/printavo/resources/categories.rb
309
318
  - lib/printavo/resources/contacts.rb
319
+ - lib/printavo/resources/contractor_profiles.rb
320
+ - lib/printavo/resources/custom_addresses.rb
310
321
  - lib/printavo/resources/customers.rb
322
+ - lib/printavo/resources/delivery_methods.rb
323
+ - lib/printavo/resources/email_templates.rb
311
324
  - lib/printavo/resources/expenses.rb
312
325
  - lib/printavo/resources/fees.rb
313
326
  - lib/printavo/resources/imprints.rb
@@ -318,6 +331,7 @@ files:
318
331
  - lib/printavo/resources/line_items.rb
319
332
  - lib/printavo/resources/merch_orders.rb
320
333
  - lib/printavo/resources/merch_stores.rb
334
+ - lib/printavo/resources/mockups.rb
321
335
  - lib/printavo/resources/orders.rb
322
336
  - lib/printavo/resources/payment_requests.rb
323
337
  - lib/printavo/resources/payment_terms.rb
@@ -325,12 +339,16 @@ files:
325
339
  - lib/printavo/resources/preset_task_groups.rb
326
340
  - lib/printavo/resources/preset_tasks.rb
327
341
  - lib/printavo/resources/pricing_matrices.rb
342
+ - lib/printavo/resources/production_files.rb
328
343
  - lib/printavo/resources/products.rb
329
344
  - lib/printavo/resources/statuses.rb
330
345
  - lib/printavo/resources/tasks.rb
331
346
  - lib/printavo/resources/threads.rb
332
347
  - lib/printavo/resources/transaction_payments.rb
333
348
  - lib/printavo/resources/transactions.rb
349
+ - lib/printavo/resources/types_of_work.rb
350
+ - lib/printavo/resources/users.rb
351
+ - lib/printavo/resources/vendors.rb
334
352
  - lib/printavo/version.rb
335
353
  - lib/printavo/webhooks.rb
336
354
  homepage: https://github.com/scarver2/printavo-ruby