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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4f1b8022189ac0b62b87b7d9770c08b3f2320c6804705c41afd6e2b03c7239ca
4
- data.tar.gz: 94761c4186f08d33b841eb9d364350f142c5b7b007d0f1fce2c08e7e237156d8
3
+ metadata.gz: b15234d01d31d249e662a33ee862660d1ce0f6ae20894c5ebb5f0ed28b048413
4
+ data.tar.gz: d00bbeb852bc3ababce742381586ff0dfa0577e936c1ee7ec608de63e2cc0cd1
5
5
  SHA512:
6
- metadata.gz: 5c22e476b535a7eebe9fba9a51ed5a36016a6da07c3f8f4e5cce478d609ee358316097f06bab770ebcdb3ec2cd43b0b5939bdc109394237691b0a4f8370cd6b4
7
- data.tar.gz: 266b1fd4d0e738ca3928225681367371f6e3dc7ac26a1771e8758ff2ea6cac6adc40130e57bf7553d043a99fb2a464c1c0d609489c6f6ae83fde1568821ba716
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
- - [ ] `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
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
- - [ ] `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
334
  ### v0.9.0 — Merch, Products & Pricing
335
335
 
@@ -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,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
@@ -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
@@ -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
@@ -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
@@ -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.8.0'
6
6
  end
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.7.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