printavo-ruby 0.7.0 → 0.8.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 +4 -4
- data/docs/CHANGELOG.md +22 -0
- data/docs/TODO.md +36 -36
- data/lib/printavo/client.rb +20 -0
- data/lib/printavo/models/expense.rb +11 -0
- data/lib/printavo/models/fee.rb +12 -0
- data/lib/printavo/models/imprint.rb +11 -0
- data/lib/printavo/models/line_item.rb +13 -0
- data/lib/printavo/models/line_item_group.rb +10 -0
- data/lib/printavo/resources/base.rb +8 -0
- data/lib/printavo/resources/contacts.rb +0 -8
- data/lib/printavo/resources/customers.rb +0 -7
- data/lib/printavo/resources/expenses.rb +48 -0
- data/lib/printavo/resources/fees.rb +72 -0
- data/lib/printavo/resources/imprints.rb +84 -0
- data/lib/printavo/resources/invoices.rb +0 -6
- data/lib/printavo/resources/line_item_groups.rb +72 -0
- data/lib/printavo/resources/line_items.rb +84 -0
- data/lib/printavo/resources/orders.rb +0 -6
- data/lib/printavo/resources/tasks.rb +0 -6
- data/lib/printavo/resources/threads.rb +0 -6
- data/lib/printavo/resources/transaction_payments.rb +0 -8
- data/lib/printavo/version.rb +1 -1
- data/lib/printavo.rb +10 -0
- metadata +11 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b15234d01d31d249e662a33ee862660d1ce0f6ae20894c5ebb5f0ed28b048413
|
|
4
|
+
data.tar.gz: d00bbeb852bc3ababce742381586ff0dfa0577e936c1ee7ec608de63e2cc0cd1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fda95aafcc1ac46908d13a46bac277d39798dcef3999c49286d29ee334ff47c425477baf13be3a6a9bd2a5d70b30ad2f714ec4819938f46b8e54da2489de4df2
|
|
7
|
+
data.tar.gz: 211f5bddd9598a3254496c2bc82282634ac3208db5784d3e35f2408344864585aebeffd746e2be5f443012b0431e9bd64e7da0fbdf8941397138d55fdaf166e4
|
data/docs/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,28 @@ 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.8.0] - 2026-03-31
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- `Printavo::LineItem` model (`id`, `name`, `quantity`, `price`, `taxable`, `taxable?`)
|
|
13
|
+
- `LineItems` resource: `all(line_item_group_id:)`, `find`, `create`/`creates`, `update`/`updates`,
|
|
14
|
+
`delete`/`deletes`, `mockup_create`/`mockup_creates`
|
|
15
|
+
- `Printavo::LineItemGroup` model (`id`, `name`, `description`)
|
|
16
|
+
- `LineItemGroups` resource: `all(order_id:)`, `find`, `create`/`creates`, `update`/`updates`, `delete`/`deletes`
|
|
17
|
+
- `Printavo::Imprint` model (`id`, `name`, `position`, `colors`)
|
|
18
|
+
- `Imprints` resource: `all(line_item_group_id:)`, `find`, `create`/`creates`, `update`/`updates`,
|
|
19
|
+
`delete`/`deletes`, `mockup_create`/`mockup_creates`
|
|
20
|
+
- `Printavo::Fee` model (`id`, `name`, `amount`, `taxable`, `taxable?`)
|
|
21
|
+
- `Fees` resource: `all(order_id:)`, `find`, `create`/`creates`, `update`/`updates`, `delete`/`deletes`
|
|
22
|
+
- `Printavo::Expense` model (`id`, `name`, `amount`, `category`)
|
|
23
|
+
- `Expenses` resource: `all(order_id:)`, `find`, `create`, `update`
|
|
24
|
+
- `client.line_items`, `client.line_item_groups`, `client.imprints`, `client.fees`, `client.expenses`
|
|
25
|
+
entry points on `Printavo::Client`
|
|
26
|
+
- 40 new `.graphql` files under `lib/printavo/graphql/`
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
- `camelize_keys` moved from individual resource classes to `Resources::Base` — eliminates 7 duplicate definitions
|
|
30
|
+
|
|
9
31
|
## [0.7.0] - 2026-03-30
|
|
10
32
|
|
|
11
33
|
### Added
|
data/docs/TODO.md
CHANGED
|
@@ -185,45 +185,45 @@ 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
|
-
- [
|
|
191
|
-
- [
|
|
192
|
-
- [
|
|
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
|
-
- [
|
|
197
|
-
- [
|
|
198
|
-
- [
|
|
199
|
-
- [
|
|
200
|
-
- [
|
|
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
|
-
- [
|
|
205
|
-
- [
|
|
206
|
-
- [
|
|
207
|
-
- [
|
|
208
|
-
- [
|
|
209
|
-
- [
|
|
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
|
-
- [
|
|
214
|
-
- [
|
|
215
|
-
- [
|
|
216
|
-
- [
|
|
217
|
-
- [
|
|
218
|
-
- [
|
|
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
|
-
- [
|
|
223
|
-
- [
|
|
224
|
-
- [
|
|
225
|
-
- [
|
|
226
|
-
- [
|
|
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
228
|
### Merch
|
|
229
229
|
|
|
@@ -323,13 +323,13 @@ 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
|
-
- [
|
|
329
|
-
- [
|
|
330
|
-
- [
|
|
331
|
-
- [
|
|
332
|
-
- [
|
|
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
334
|
### v0.9.0 — Merch, Products & Pricing
|
|
335
335
|
|
data/lib/printavo/client.rb
CHANGED
|
@@ -37,6 +37,18 @@ module Printavo
|
|
|
37
37
|
Resources::Customers.new(@graphql)
|
|
38
38
|
end
|
|
39
39
|
|
|
40
|
+
def expenses
|
|
41
|
+
Resources::Expenses.new(@graphql)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def fees
|
|
45
|
+
Resources::Fees.new(@graphql)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def imprints
|
|
49
|
+
Resources::Imprints.new(@graphql)
|
|
50
|
+
end
|
|
51
|
+
|
|
40
52
|
def inquiries
|
|
41
53
|
Resources::Inquiries.new(@graphql)
|
|
42
54
|
end
|
|
@@ -49,6 +61,14 @@ module Printavo
|
|
|
49
61
|
Resources::Jobs.new(@graphql)
|
|
50
62
|
end
|
|
51
63
|
|
|
64
|
+
def line_item_groups
|
|
65
|
+
Resources::LineItemGroups.new(@graphql)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def line_items
|
|
69
|
+
Resources::LineItems.new(@graphql)
|
|
70
|
+
end
|
|
71
|
+
|
|
52
72
|
def login(*)
|
|
53
73
|
raise NotImplementedError,
|
|
54
74
|
'login is not supported — this gem authenticates via email + token headers. ' \
|
|
@@ -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,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
|
|
@@ -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
|
|
@@ -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
|
|
@@ -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
|
|
@@ -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
|
|
@@ -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
|
data/lib/printavo/version.rb
CHANGED
data/lib/printavo.rb
CHANGED
|
@@ -19,7 +19,12 @@ require_relative 'printavo/models/invoice'
|
|
|
19
19
|
require_relative 'printavo/models/status'
|
|
20
20
|
require_relative 'printavo/models/order'
|
|
21
21
|
require_relative 'printavo/models/job'
|
|
22
|
+
require_relative 'printavo/models/expense'
|
|
23
|
+
require_relative 'printavo/models/fee'
|
|
24
|
+
require_relative 'printavo/models/imprint'
|
|
22
25
|
require_relative 'printavo/models/inquiry'
|
|
26
|
+
require_relative 'printavo/models/line_item'
|
|
27
|
+
require_relative 'printavo/models/line_item_group'
|
|
23
28
|
require_relative 'printavo/models/task'
|
|
24
29
|
require_relative 'printavo/models/thread'
|
|
25
30
|
require_relative 'printavo/models/transaction'
|
|
@@ -32,7 +37,12 @@ require_relative 'printavo/resources/invoices'
|
|
|
32
37
|
require_relative 'printavo/resources/statuses'
|
|
33
38
|
require_relative 'printavo/resources/orders'
|
|
34
39
|
require_relative 'printavo/resources/jobs'
|
|
40
|
+
require_relative 'printavo/resources/expenses'
|
|
41
|
+
require_relative 'printavo/resources/fees'
|
|
42
|
+
require_relative 'printavo/resources/imprints'
|
|
35
43
|
require_relative 'printavo/resources/inquiries'
|
|
44
|
+
require_relative 'printavo/resources/line_item_groups'
|
|
45
|
+
require_relative 'printavo/resources/line_items'
|
|
36
46
|
require_relative 'printavo/resources/tasks'
|
|
37
47
|
require_relative 'printavo/resources/threads'
|
|
38
48
|
require_relative 'printavo/resources/transactions'
|
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.
|
|
4
|
+
version: 0.8.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Stan Carver II
|
|
@@ -276,9 +276,14 @@ files:
|
|
|
276
276
|
- lib/printavo/models/base.rb
|
|
277
277
|
- lib/printavo/models/contact.rb
|
|
278
278
|
- lib/printavo/models/customer.rb
|
|
279
|
+
- lib/printavo/models/expense.rb
|
|
280
|
+
- lib/printavo/models/fee.rb
|
|
281
|
+
- lib/printavo/models/imprint.rb
|
|
279
282
|
- lib/printavo/models/inquiry.rb
|
|
280
283
|
- lib/printavo/models/invoice.rb
|
|
281
284
|
- lib/printavo/models/job.rb
|
|
285
|
+
- lib/printavo/models/line_item.rb
|
|
286
|
+
- lib/printavo/models/line_item_group.rb
|
|
282
287
|
- lib/printavo/models/order.rb
|
|
283
288
|
- lib/printavo/models/status.rb
|
|
284
289
|
- lib/printavo/models/task.rb
|
|
@@ -290,9 +295,14 @@ files:
|
|
|
290
295
|
- lib/printavo/resources/base.rb
|
|
291
296
|
- lib/printavo/resources/contacts.rb
|
|
292
297
|
- lib/printavo/resources/customers.rb
|
|
298
|
+
- lib/printavo/resources/expenses.rb
|
|
299
|
+
- lib/printavo/resources/fees.rb
|
|
300
|
+
- lib/printavo/resources/imprints.rb
|
|
293
301
|
- lib/printavo/resources/inquiries.rb
|
|
294
302
|
- lib/printavo/resources/invoices.rb
|
|
295
303
|
- lib/printavo/resources/jobs.rb
|
|
304
|
+
- lib/printavo/resources/line_item_groups.rb
|
|
305
|
+
- lib/printavo/resources/line_items.rb
|
|
296
306
|
- lib/printavo/resources/orders.rb
|
|
297
307
|
- lib/printavo/resources/statuses.rb
|
|
298
308
|
- lib/printavo/resources/tasks.rb
|