vng 0.1.20 → 1.1.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/.rubocop.yml +17 -0
- data/CHANGELOG.md +10 -0
- data/README.md +1 -1
- data/lib/vng/asset.rb +4 -5
- data/lib/vng/breed.rb +0 -1
- data/lib/vng/case.rb +8 -9
- data/lib/vng/config.rb +1 -1
- data/lib/vng/configuration.rb +1 -1
- data/lib/vng/contact.rb +8 -9
- data/lib/vng/franchise.rb +1 -3
- data/lib/vng/lead.rb +7 -7
- data/lib/vng/location.rb +6 -7
- data/lib/vng/mock_resource.rb +36 -36
- data/lib/vng/resource.rb +18 -2
- data/lib/vng/route.rb +0 -1
- data/lib/vng/security_token.rb +0 -5
- data/lib/vng/service_type.rb +0 -1
- data/lib/vng/version.rb +1 -1
- data/lib/vng/work_order.rb +10 -10
- data/lib/vng/zip.rb +0 -1
- metadata +31 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1356553075599aa2888d10740b02d282d6f6407c69bf49f67e0dbdc46475cebc
|
4
|
+
data.tar.gz: a8d09b9454c4fe51de636f61a880614eca6d12e9fc8455e5fc3888f324eaab9c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 273b479db2901d89fbdd880383cdcf212aaffcfd1637ca973464567b33b98eafeb2036a6e7e46357d6e7aadc87d70876733bc7094c7c727a0e04118f0b8772fe
|
7
|
+
data.tar.gz: '088ea1b5e63a121b23f956b533d34b3adcf5a570851d999e583197134ae5af69b8345e9ff4946d15183723e031c87015dae8b112e1bf30edc2a2d683b3ca8ee1'
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# Omakase Ruby styling for Rails
|
2
|
+
inherit_gem: { rubocop-rails-omakase: rubocop.yml }
|
3
|
+
|
4
|
+
AllCops:
|
5
|
+
TargetRubyVersion: 3.2.2
|
6
|
+
|
7
|
+
Style/StringLiterals:
|
8
|
+
Enabled: false
|
9
|
+
|
10
|
+
Layout/SpaceInsideArrayLiteralBrackets:
|
11
|
+
Enabled: false
|
12
|
+
|
13
|
+
Style/TrailingCommaInHashLiteral:
|
14
|
+
Enabled: false
|
15
|
+
|
16
|
+
Style/TrailingCommaInArrayLiteral:
|
17
|
+
Enabled: false
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
## [1.1] - 2024-11-20
|
4
|
+
|
5
|
+
- Support optional ActiveSupport::Notifications
|
6
|
+
|
7
|
+
## [1.0.0] - 2024-11-20
|
8
|
+
|
9
|
+
- First major release
|
10
|
+
- Includes all the methods added so far
|
11
|
+
- 100% code coverage and Rubocop-happy
|
12
|
+
|
3
13
|
## [0.1.20] - 2024-11-20
|
4
14
|
|
5
15
|
- Adds Franchise.find
|
data/README.md
CHANGED
@@ -38,7 +38,7 @@ To install on your system, run
|
|
38
38
|
|
39
39
|
To use inside a bundled Ruby project, add this line to the Gemfile:
|
40
40
|
|
41
|
-
gem 'vng', '~>
|
41
|
+
gem 'vng', '~> 1.0'
|
42
42
|
|
43
43
|
Since the gem follows [Semantic Versioning](http://semver.org),
|
44
44
|
indicating the full version in your Gemfile (~> *major*.*minor*.*patch*)
|
data/lib/vng/asset.rb
CHANGED
@@ -16,10 +16,10 @@ module Vng
|
|
16
16
|
method: '3',
|
17
17
|
clientID: client_id,
|
18
18
|
Fields: [
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
]
|
19
|
+
{ fieldID: 1013, fieldValue: name },
|
20
|
+
{ fieldID: 1017, fieldValue: weight },
|
21
|
+
{ fieldID: 1014, optionID: breed_option_id },
|
22
|
+
],
|
23
23
|
}
|
24
24
|
|
25
25
|
data = request path: PATH, body: body
|
@@ -45,4 +45,3 @@ module Vng
|
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
48
|
-
|
data/lib/vng/breed.rb
CHANGED
data/lib/vng/case.rb
CHANGED
@@ -16,14 +16,14 @@ module Vng
|
|
16
16
|
method: '3',
|
17
17
|
clientID: client_id,
|
18
18
|
Fields: [
|
19
|
-
{fieldID: 219, optionID: 239}, # Status: open
|
20
|
-
{fieldID: 220, fieldValue: summary}, # Summary:
|
21
|
-
{fieldID: 230, fieldValue: comments}, # Comments:
|
22
|
-
{fieldID: 226, optionID: 227}, # Type: 'General request'
|
23
|
-
{fieldID: 227, optionID: 232}, # Preferred Contact Method: 'Phone'
|
24
|
-
{fieldID: 228, fieldValue: phone}, # Phone Me Back at:
|
25
|
-
{fieldID: 229, fieldValue: email}, # Email:
|
26
|
-
{fieldID: 1023, fieldValue: zip}, # Zip Code:
|
19
|
+
{ fieldID: 219, optionID: 239 }, # Status: open
|
20
|
+
{ fieldID: 220, fieldValue: summary }, # Summary:
|
21
|
+
{ fieldID: 230, fieldValue: comments }, # Comments:
|
22
|
+
{ fieldID: 226, optionID: 227 }, # Type: 'General request'
|
23
|
+
{ fieldID: 227, optionID: 232 }, # Preferred Contact Method: 'Phone'
|
24
|
+
{ fieldID: 228, fieldValue: phone }, # Phone Me Back at:
|
25
|
+
{ fieldID: 229, fieldValue: email }, # Email:
|
26
|
+
{ fieldID: 1023, fieldValue: zip }, # Zip Code:
|
27
27
|
]
|
28
28
|
}
|
29
29
|
|
@@ -42,4 +42,3 @@ module Vng
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
end
|
45
|
-
|
data/lib/vng/config.rb
CHANGED
data/lib/vng/configuration.rb
CHANGED
data/lib/vng/contact.rb
CHANGED
@@ -20,23 +20,22 @@ module Vng
|
|
20
20
|
method: '3',
|
21
21
|
clientID: client_id,
|
22
22
|
Fields: [
|
23
|
-
{fieldID: 127, fieldValue: first_name},
|
24
|
-
{fieldID: 128, fieldValue: last_name},
|
25
|
-
{fieldID: 97, fieldValue: URI.encode_uri_component(email)},
|
26
|
-
{fieldID: 96, fieldValue: phone},
|
23
|
+
{ fieldID: 127, fieldValue: first_name },
|
24
|
+
{ fieldID: 128, fieldValue: last_name },
|
25
|
+
{ fieldID: 97, fieldValue: URI.encode_uri_component(email) },
|
26
|
+
{ fieldID: 96, fieldValue: phone },
|
27
27
|
]
|
28
28
|
}
|
29
29
|
|
30
30
|
data = request path: PATH, body: body
|
31
31
|
|
32
32
|
id = data['Contact']['objectID']
|
33
|
-
first_name = data
|
34
|
-
last_name = data
|
35
|
-
email = data
|
36
|
-
phone = data
|
33
|
+
first_name = value_for_field data, 127
|
34
|
+
last_name = value_for_field data, 128
|
35
|
+
email = value_for_field data, 97
|
36
|
+
phone = value_for_field data, 96
|
37
37
|
|
38
38
|
new id: id, first_name: first_name, last_name: last_name, email: email, phone: phone
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
42
|
-
|
data/lib/vng/franchise.rb
CHANGED
@@ -34,9 +34,7 @@ module Vng
|
|
34
34
|
}
|
35
35
|
|
36
36
|
data = request path: PATH, body: body
|
37
|
-
|
38
|
-
email_field = data['Fields'].find{|field| field['fieldID'] == 9}
|
39
|
-
email = email_field['fieldValue'] if email_field
|
37
|
+
email = value_for_field data, 9
|
40
38
|
new id: franchise_id, email: email
|
41
39
|
end
|
42
40
|
|
data/lib/vng/lead.rb
CHANGED
@@ -18,19 +18,19 @@ module Vng
|
|
18
18
|
body = {
|
19
19
|
method: '3',
|
20
20
|
Fields: [
|
21
|
-
{fieldID: 121, optionID: '59'},
|
22
|
-
{fieldID: 126, fieldValue: name},
|
23
|
-
{fieldID: 238, fieldValue: URI.encode_uri_component(email)},
|
24
|
-
{fieldID: 1024, fieldValue: phone},
|
21
|
+
{ fieldID: 121, optionID: '59' },
|
22
|
+
{ fieldID: 126, fieldValue: name },
|
23
|
+
{ fieldID: 238, fieldValue: URI.encode_uri_component(email) },
|
24
|
+
{ fieldID: 1024, fieldValue: phone },
|
25
25
|
]
|
26
26
|
}
|
27
27
|
|
28
28
|
data = request path: PATH, body: body
|
29
29
|
|
30
30
|
id = data['Client']['objectID']
|
31
|
-
name = data
|
32
|
-
email = data
|
33
|
-
phone = data
|
31
|
+
name = value_for_field data, 127
|
32
|
+
email = value_for_field data, 238
|
33
|
+
phone = value_for_field data, 1024
|
34
34
|
|
35
35
|
new id: id, name: name, email: email, phone: phone
|
36
36
|
end
|
data/lib/vng/location.rb
CHANGED
@@ -5,7 +5,7 @@ module Vng
|
|
5
5
|
class Location < Resource
|
6
6
|
PATH = '/api/v1/data/Locations/'
|
7
7
|
|
8
|
-
#
|
8
|
+
# These could be fetched from /system/objects/ method: 1, objectID: 20
|
9
9
|
STATES_OPTION_ID = {
|
10
10
|
AK: 9879, AL: 9878, AR: 9877, AZ: 9880, CA: 9883, CO: 9876, CT: 9875,
|
11
11
|
DC: 9874, DE: 9873, FL: 9872, GA: 9871, HI: 9870, IA: 9869, ID: 9868,
|
@@ -28,11 +28,11 @@ module Vng
|
|
28
28
|
method: '3',
|
29
29
|
clientID: client_id,
|
30
30
|
Fields: [
|
31
|
-
{fieldID: 779, optionID: 9906}, # 'USA'
|
32
|
-
{fieldID: 778, optionID: STATES_OPTION_ID[state.to_sym]},
|
33
|
-
{fieldID: 776, fieldValue: city},
|
34
|
-
{fieldID: 773, fieldValue: address},
|
35
|
-
{fieldID: 775, fieldValue: zip},
|
31
|
+
{ fieldID: 779, optionID: 9906 }, # 'USA'
|
32
|
+
{ fieldID: 778, optionID: STATES_OPTION_ID[state.to_sym] },
|
33
|
+
{ fieldID: 776, fieldValue: city },
|
34
|
+
{ fieldID: 773, fieldValue: address },
|
35
|
+
{ fieldID: 775, fieldValue: zip },
|
36
36
|
]
|
37
37
|
}
|
38
38
|
|
@@ -42,4 +42,3 @@ module Vng
|
|
42
42
|
end
|
43
43
|
end
|
44
44
|
end
|
45
|
-
|
data/lib/vng/mock_resource.rb
CHANGED
@@ -7,7 +7,7 @@ module Vng
|
|
7
7
|
private
|
8
8
|
def self.request(path:, body: {}, query: {}, include_security_token: true)
|
9
9
|
if Vng.configuration.mock
|
10
|
-
mock_request
|
10
|
+
mock_request(path:, body:, query:)
|
11
11
|
else
|
12
12
|
http_request(path:, body:, query:, include_security_token:)
|
13
13
|
end
|
@@ -16,57 +16,57 @@ module Vng
|
|
16
16
|
def self.mock_request(path:, body:, query:)
|
17
17
|
case path
|
18
18
|
when '/api/v1/security/login/'
|
19
|
-
{"securityToken"=>"1234567"}
|
19
|
+
{ "securityToken"=>"1234567" }
|
20
20
|
when '/api/v1/resources/zips/'
|
21
|
-
{"Zips"=>[{"zip"=>"21765", "zoneName"=>"Brentwood", "state"=>"MD"}]}
|
21
|
+
{ "Zips"=>[{ "zip"=>"21765", "zoneName"=>"Brentwood", "state"=>"MD" }] }
|
22
22
|
when '/api/v1/resources/franchises/'
|
23
|
-
{"Franchises"=>[
|
24
|
-
{"franchiseID"=>106, "franchiseName"=>"Mississauga", "gmtOffsetFranchise"=>-300, "isActive"=>false},
|
25
|
-
{"franchiseID"=>107, "franchiseName"=>"Boise", "gmtOffsetFranchise"=>-420, "isActive"=>true},
|
26
|
-
]}
|
23
|
+
{ "Franchises"=>[
|
24
|
+
{ "franchiseID"=>106, "franchiseName"=>"Mississauga", "gmtOffsetFranchise"=>-300, "isActive"=>false },
|
25
|
+
{ "franchiseID"=>107, "franchiseName"=>"Boise", "gmtOffsetFranchise"=>-420, "isActive"=>true },
|
26
|
+
] }
|
27
27
|
when '/api/v1/resources/availability/'
|
28
28
|
if body.key?(:zip)
|
29
|
-
{"Ids"=>{"franchiseID"=>"172"}}
|
29
|
+
{ "Ids"=>{ "franchiseID"=>"172" } }
|
30
30
|
elsif body[:method] == '2'
|
31
|
-
{"Ids"=>{"lockID"=>"1406328"}}
|
31
|
+
{ "Ids"=>{ "lockID"=>"1406328" } }
|
32
32
|
else
|
33
|
-
{"Availability"=> [
|
34
|
-
{"dayID"=>"20241119", "routeID"=>"8949", "startTime"=>"1080"},
|
35
|
-
{"dayID"=>"20241119", "routeID"=>"8949", "startTime"=>"1110"},
|
36
|
-
]}
|
33
|
+
{ "Availability"=> [
|
34
|
+
{ "dayID"=>"20241119", "routeID"=>"8949", "startTime"=>"1080" },
|
35
|
+
{ "dayID"=>"20241119", "routeID"=>"8949", "startTime"=>"1110" },
|
36
|
+
] }
|
37
37
|
end
|
38
38
|
when '/api/v1/resources/breeds/'
|
39
|
-
{"Breeds"=>[{"breedID"=>2, "breed"=>"Bulldog", "species"=>"Dog", "optionID"=>303, "breedLowWeight"=>30, "breedHighWeight"=>50}]}
|
39
|
+
{ "Breeds"=>[{ "breedID"=>2, "breed"=>"Bulldog", "species"=>"Dog", "optionID"=>303, "breedLowWeight"=>30, "breedHighWeight"=>50 }] }
|
40
40
|
when '/api/v1/data/Leads/'
|
41
|
-
{"Client"=>{"objectID"=>"916347"}, "Fields"=>[
|
42
|
-
{"fieldID"=>126, "fieldValue"=>"Vng Example"},
|
43
|
-
{"fieldID"=>238, "fieldValue"=>"vng@example.com"},
|
44
|
-
{"fieldID"=>1024, "fieldValue"=>"8648648640"},
|
45
|
-
]}
|
41
|
+
{ "Client"=>{ "objectID"=>"916347" }, "Fields"=> [
|
42
|
+
{ "fieldID"=>126, "fieldValue"=>"Vng Example" },
|
43
|
+
{ "fieldID"=>238, "fieldValue"=>"vng@example.com" },
|
44
|
+
{ "fieldID"=>1024, "fieldValue"=>"8648648640" },
|
45
|
+
] }
|
46
46
|
when '/api/v1/data/Contacts/'
|
47
|
-
{"Contact"=>{"objectID"=>"2201007"}, "Fields"=>[
|
48
|
-
{"fieldID"=>127, "fieldValue"=>"Vng"},
|
49
|
-
{"fieldID"=>128, "fieldValue"=>"Example"},
|
50
|
-
{"fieldID"=>97, "fieldValue"=>"vng@example.com"},
|
51
|
-
{"fieldID"=>96, "fieldValue"=>"8648648640"},
|
52
|
-
]}
|
47
|
+
{ "Contact"=>{ "objectID"=>"2201007" }, "Fields"=>[
|
48
|
+
{ "fieldID"=>127, "fieldValue"=>"Vng" },
|
49
|
+
{ "fieldID"=>128, "fieldValue"=>"Example" },
|
50
|
+
{ "fieldID"=>97, "fieldValue"=>"vng@example.com" },
|
51
|
+
{ "fieldID"=>96, "fieldValue"=>"8648648640" },
|
52
|
+
] }
|
53
53
|
when '/api/v1/data/Locations/'
|
54
|
-
{"Location"=>{"objectID"=>"995681"}}
|
54
|
+
{ "Location"=>{ "objectID"=>"995681" } }
|
55
55
|
when '/api/v1/data/Assets/'
|
56
|
-
{"Asset"=>{"objectID"=>"2201008"}}
|
56
|
+
{ "Asset"=>{ "objectID"=>"2201008" } }
|
57
57
|
when '/api/v1/data/priceLists/'
|
58
|
-
{"PriceItems"=>[
|
59
|
-
{"priceItemID"=>275111, "priceItem"=>"15 Step SPA Grooming", "value"=>85.0, "taxID"=>256, "durationPerUnit"=>45.0, "serviceBadge"=>"Required", "serviceCategory"=>"15 Step Spa", "isOnline"=>true, "isActive"=>true},
|
60
|
-
{"priceItemID"=>275300, "priceItem"=>"De-Shedding Treatment", "value"=>20.0, "taxID"=>256, "durationPerUnit"=>15.0, "serviceBadge"=>nil, "serviceCategory"=>"De-Shed", "isOnline"=>true, "isActive"=>false},
|
61
|
-
]}
|
58
|
+
{ "PriceItems"=>[
|
59
|
+
{ "priceItemID"=>275111, "priceItem"=>"15 Step SPA Grooming", "value"=>85.0, "taxID"=>256, "durationPerUnit"=>45.0, "serviceBadge"=>"Required", "serviceCategory"=>"15 Step Spa", "isOnline"=>true, "isActive"=>true },
|
60
|
+
{ "priceItemID"=>275300, "priceItem"=>"De-Shedding Treatment", "value"=>20.0, "taxID"=>256, "durationPerUnit"=>15.0, "serviceBadge"=>nil, "serviceCategory"=>"De-Shed", "isOnline"=>true, "isActive"=>false },
|
61
|
+
] }
|
62
62
|
when '/api/v1/resources/serviceTypes/'
|
63
|
-
{"ServiceTypes"=>[
|
64
|
-
{"serviceTypeID"=>14, "serviceType"=>"Pet Grooming", "duration"=>90, "isActive"=>true},
|
65
|
-
]}
|
63
|
+
{ "ServiceTypes"=>[
|
64
|
+
{ "serviceTypeID"=>14, "serviceType"=>"Pet Grooming", "duration"=>90, "isActive"=>true },
|
65
|
+
] }
|
66
66
|
when '/api/v1/data/WorkOrders/'
|
67
|
-
{"WorkOrder"=>{"objectID"=>"4138030"}}
|
67
|
+
{ "WorkOrder"=>{ "objectID"=>"4138030" } }
|
68
68
|
when '/api/v1/data/Cases/'
|
69
|
-
{"Case"=>{"objectID"=>"28460"}}
|
69
|
+
{ "Case"=>{ "objectID"=>"28460" } }
|
70
70
|
else
|
71
71
|
{}
|
72
72
|
end
|
data/lib/vng/resource.rb
CHANGED
@@ -18,8 +18,10 @@ module Vng
|
|
18
18
|
request.body = body.to_json
|
19
19
|
end
|
20
20
|
|
21
|
-
response =
|
22
|
-
|
21
|
+
response = instrument do |data|
|
22
|
+
data[:response] = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
|
23
|
+
http.request request
|
24
|
+
end
|
23
25
|
end
|
24
26
|
|
25
27
|
JSON(response.body).tap do |data|
|
@@ -36,5 +38,19 @@ module Vng
|
|
36
38
|
def self.security_token
|
37
39
|
Vng.configuration.security_token
|
38
40
|
end
|
41
|
+
|
42
|
+
def self.value_for_field(data, field_id)
|
43
|
+
field = data['Fields'].find { |field| field['fieldID'] == field_id }
|
44
|
+
field['fieldValue'] if field
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.instrument(&block)
|
48
|
+
data = {class_name: name} # TODO: Add path, query, ...
|
49
|
+
if defined?(ActiveSupport::Notifications)
|
50
|
+
ActiveSupport::Notifications.instrument 'Vng.request', data, &block
|
51
|
+
else
|
52
|
+
block.call(data)
|
53
|
+
end
|
54
|
+
end
|
39
55
|
end
|
40
56
|
end
|
data/lib/vng/route.rb
CHANGED
data/lib/vng/security_token.rb
CHANGED
@@ -24,8 +24,6 @@ module Vng
|
|
24
24
|
new token: data['securityToken']
|
25
25
|
end
|
26
26
|
|
27
|
-
# TODO: Check if it's not the correct one already or catch
|
28
|
-
# Data validation failed. [{"fieldID"=>0, "fieldName"=>nil, "errNo"=>-5213, "errMsg"=>"Same franchise ID supplied."}]
|
29
27
|
def assign_to(franchise_id:)
|
30
28
|
body = {
|
31
29
|
securityToken: @token,
|
@@ -35,7 +33,6 @@ module Vng
|
|
35
33
|
|
36
34
|
self.class.request path: '/api/v1/security/session/', body: body, include_security_token: false
|
37
35
|
rescue Vng::Error => e
|
38
|
-
# TODO: improve: ignore if the token was already assigned to the franchise
|
39
36
|
raise unless e.message.include? 'Same franchise ID supplied'
|
40
37
|
end
|
41
38
|
|
@@ -43,8 +40,6 @@ module Vng
|
|
43
40
|
query = { securityToken: @token }
|
44
41
|
self.class.request path: '/api/v1/security/logout/', query: query
|
45
42
|
rescue Vng::Error => e
|
46
|
-
p "Vng:Error! #{e}"
|
47
|
-
# TODO: improve: ignore if the token was already destroyed
|
48
43
|
raise unless e.message.include?('Session expired') || e.message.include?('Session does not exist')
|
49
44
|
end
|
50
45
|
end
|
data/lib/vng/service_type.rb
CHANGED
data/lib/vng/version.rb
CHANGED
data/lib/vng/work_order.rb
CHANGED
@@ -20,9 +20,9 @@ module Vng
|
|
20
20
|
contactID: contact_id,
|
21
21
|
locationID: location_id,
|
22
22
|
Fields: [
|
23
|
-
{fieldID: 200, fieldValue: summary},
|
24
|
-
{fieldID: 186, fieldValue: duration.to_i},
|
25
|
-
{fieldID: 201, optionID: '9537'} # label: Online Tentative
|
23
|
+
{ fieldID: 200, fieldValue: summary },
|
24
|
+
{ fieldID: 186, fieldValue: duration.to_i },
|
25
|
+
{ fieldID: 201, optionID: '9537' } # label: Online Tentative
|
26
26
|
],
|
27
27
|
Charges: charges_for(line_items)
|
28
28
|
}
|
@@ -47,13 +47,13 @@ module Vng
|
|
47
47
|
|
48
48
|
def self.charge_fields_for(line_item)
|
49
49
|
[
|
50
|
-
{fieldID: 9289, fieldValue: line_item[:description]},
|
51
|
-
{fieldID: 9287, fieldValue: line_item[:price]}, # Unit price
|
52
|
-
{fieldID: 8673, fieldValue: line_item[:price]}, # Price item
|
53
|
-
{fieldID: 813, fieldValue: line_item[:price]}, # Price
|
54
|
-
{fieldID: 9286, fieldValue: line_item[:price]}, # Subtotal
|
55
|
-
{fieldID: 9283, fieldValue: line_item[:price]}, # Total
|
56
|
-
{fieldID: 9288, fieldValue: 1}, # Qty
|
50
|
+
{ fieldID: 9289, fieldValue: line_item[:description] },
|
51
|
+
{ fieldID: 9287, fieldValue: line_item[:price] }, # Unit price
|
52
|
+
{ fieldID: 8673, fieldValue: line_item[:price] }, # Price item
|
53
|
+
{ fieldID: 813, fieldValue: line_item[:price] }, # Price
|
54
|
+
{ fieldID: 9286, fieldValue: line_item[:price] }, # Subtotal
|
55
|
+
{ fieldID: 9283, fieldValue: line_item[:price] }, # Total
|
56
|
+
{ fieldID: 9288, fieldValue: 1 }, # Qty
|
57
57
|
]
|
58
58
|
end
|
59
59
|
end
|
data/lib/vng/zip.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vng
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- claudiob
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-11-
|
11
|
+
date: 2024-11-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: simplecov
|
@@ -24,6 +24,34 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rubocop
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: activesupport
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
27
55
|
description: A Ruby client for the Vonigo API.
|
28
56
|
email:
|
29
57
|
- claudiob@users.noreply.github.com
|
@@ -32,6 +60,7 @@ extensions: []
|
|
32
60
|
extra_rdoc_files: []
|
33
61
|
files:
|
34
62
|
- ".rspec"
|
63
|
+
- ".rubocop.yml"
|
35
64
|
- CHANGELOG.md
|
36
65
|
- LICENSE.txt
|
37
66
|
- README.md
|