vng 1.4.4 → 1.6.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: 83db199a2c7e536117951e992169a587f0244bd142a656d7ff60d37ff95abe11
4
- data.tar.gz: ac5c90d6f258c1a085d2a00fd6c11c817dd69146fc54d59d368a8d40a8530f97
3
+ metadata.gz: dc73ebb5c56c095dd0605b32f41dcb6b75560f84a7b2b8ffcdfed0bc574a54ff
4
+ data.tar.gz: e64616624354c33d07c9bfe8ffb6c4494008d5dfbd3ce10c8f994015cf483fad
5
5
  SHA512:
6
- metadata.gz: f92cfad998340e0e6cf0b8c5e4edf512ffeb0c278c070021faab09d04ff955cab929e7e5b20fb61d0a7b335f59ffd4a3f83a67b9f2813d8b10be203b7cee00ac
7
- data.tar.gz: bd53c04f51eea6496cd2afeff0f294c11b5fdb534fdb5748ed6d3bc8f52888c1f1fba170b1df2aaea3a0c39d82d265cc1a57fde62498a44d254650c46320c589
6
+ metadata.gz: 7d5df6061ebbe9f818cac377456caf130bedb8c9864d3e984c8d32c1339aef9267006d545fc276e624559f489fb36be2c69118d4730a3c384ec9babe915d33b1
7
+ data.tar.gz: 2df311c7ae9c712e71f4c8f950ef3bc085888d9ea74d71b2acc989e324f9c6a467e506c267ff78383f8885d97ec01773e78b7722870062ef8ed33c253c1953d0
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## [1.6.0] - 2024-12-24
2
+
3
+ - Adds Zip.find_by(zip:)
4
+
5
+ ## [1.5.0] - 2024-12-20
6
+
7
+ - Allow Case to be created without client_id
8
+
1
9
  ## [1.4.4] - 2024-12-20
2
10
 
3
11
  - Filter out ZIP codes with status 'Owned – Deactivated'
data/lib/vng/case.rb CHANGED
@@ -11,10 +11,9 @@ module Vng
11
11
  @id = id
12
12
  end
13
13
 
14
- def self.create(client_id:, summary:, comments:, phone:, email:, zip:)
14
+ def self.create(client_id: nil, summary:, comments:, phone:, email:, zip:)
15
15
  body = {
16
16
  method: '3',
17
- clientID: client_id,
18
17
  Fields: [
19
18
  { fieldID: 219, optionID: 239 }, # Status: open
20
19
  { fieldID: 220, fieldValue: summary }, # Summary:
@@ -26,6 +25,7 @@ module Vng
26
25
  { fieldID: 1023, fieldValue: zip }, # Zip Code:
27
26
  ]
28
27
  }
28
+ body[:clientID] = client_id if client_id
29
29
 
30
30
  data = request path: PATH, body: body
31
31
 
@@ -48,7 +48,14 @@ module Vng
48
48
  {}
49
49
  end
50
50
  when '/api/v1/resources/zips/'
51
- { "Zips"=>[{ "zip"=>"21765", "zoneName"=>"Brentwood", "state"=>"MD" }] }
51
+ if @body[:method] == '1'
52
+ # TODO: The response already includes the ServiceTypes so there
53
+ # is no need to ask for those in a separate API request:
54
+ { "Zip"=>{"zipCodeID"=>"1", "zipCode"=>"21765", "zoneName"=>"Brentwood", "defaultCity"=>"Los Angeles", "provinceAbbr"=>"CA", "franchiseID"=>"105"},
55
+ "ServiceTypes"=>[{"serviceTypeID"=>14, "serviceType"=>"Pet Grooming", "duration" => 45}]}
56
+ else
57
+ { "Zips"=>[{ "zip"=>"21765", "zoneName"=>"Brentwood", "state"=>"MD" }] }
58
+ end
52
59
  when '/api/v1/resources/franchises/'
53
60
  if @body.key?(:objectID)
54
61
  { "Franchise"=>{ "objectID"=>"2201007" }, "Fields"=>[
@@ -75,7 +82,7 @@ module Vng
75
82
  end
76
83
  when '/api/v1/resources/breeds/'
77
84
  { "Breeds"=>[
78
- { "breedID"=>2, "breed"=>"Bulldog", "species"=>"Dog", "optionID"=>303, "breedLowWeight"=>30, "breedHighWeight"=>50 },
85
+ { "breedID"=>2, "breed"=>"Bulldog", "species"=>"Dog", "optionID"=>304, "breedLowWeight"=>30, "breedHighWeight"=>50 },
79
86
  { "breedID"=>3, "breed"=>"Affenpinscher", "species"=>"Dog", "optionID"=>304, "breedLowWeight"=>30, "breedHighWeight"=>50 },
80
87
  { "breedID"=>4, "breed"=>"Afghan", "species"=>"Dog", "optionID"=>304, "breedLowWeight"=>30, "breedHighWeight"=>50 },
81
88
  { "breedID"=>5, "breed"=>"Airedale Terrier", "species"=>"Dog", "optionID"=>304, "breedLowWeight"=>30, "breedHighWeight"=>50 },
@@ -94,8 +101,8 @@ module Vng
94
101
  { "breedID"=>18, "breed"=>"Bengal", "species"=>"Cat", "optionID"=>305, "breedLowWeight"=>30, "breedHighWeight"=>50 },
95
102
  { "breedID"=>19, "breed"=>"Birman", "species"=>"Cat", "optionID"=>305, "breedLowWeight"=>30, "breedHighWeight"=>50 },
96
103
  { "breedID"=>20, "breed"=>"Bombay", "species"=>"Cat", "optionID"=>305, "breedLowWeight"=>30, "breedHighWeight"=>50 },
97
- { "breedID"=>21, "breed"=>"Burmese", "species"=>"Cat", "optionID"=>306, "breedLowWeight"=>30, "breedHighWeight"=>50 },
98
- { "breedID"=>22, "breed"=>"Chartreux", "species"=>"Cat", "optionID"=>306, "breedLowWeight"=>30, "breedHighWeight"=>50 },
104
+ { "breedID"=>21, "breed"=>"Burmese", "species"=>"Cat", "optionID"=>305, "breedLowWeight"=>30, "breedHighWeight"=>50 },
105
+ { "breedID"=>22, "breed"=>"Chartreux", "species"=>"Cat", "optionID"=>305, "breedLowWeight"=>30, "breedHighWeight"=>50 },
99
106
  ] }
100
107
  when '/api/v1/data/Leads/'
101
108
  if @body[:Fields].find{|field| field[:fieldID] == 1024}[:fieldValue] == 'invalid-phone'
@@ -118,16 +125,43 @@ module Vng
118
125
  { "Location"=>{ "objectID"=>"995681" } }
119
126
  when '/api/v1/data/Assets/'
120
127
  if @body[:method].eql? '3'
121
- { "Asset"=>{ "objectID"=>"2201008" } }
128
+ if @body[:Fields].find{|field| field[:fieldID] == 1014}[:optionID].eql? 304
129
+ { "Asset"=>{ "objectID"=>"2201008" } } # dog
130
+ elsif @body[:Fields].find{|field| field[:fieldID] == 1014}[:optionID].eql? 305
131
+ { "Asset"=>{ "objectID"=>"2201009" } } # cat
132
+ end
122
133
  elsif @body[:method].eql? '4'
123
134
  {}
124
135
  end
125
136
  when '/api/v1/data/priceLists/'
126
- { "PriceItems"=>[
127
- { "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 },
128
- { "priceItemID"=>275300, "priceItem"=>"De-Matting - Light", "value"=>10.0, "taxID"=>256, "durationPerUnit"=>15.0, "serviceBadge"=>nil, "serviceCategory"=>"De-Shed", "isOnline"=>true, "isActive"=>true },
129
- { "priceItemID"=>275301, "priceItem"=>"De-Shedding Treatment", "value"=>20.0, "taxID"=>256, "durationPerUnit"=>15.0, "serviceBadge"=>nil, "serviceCategory"=>"De-Shed", "isOnline"=>true, "isActive"=>false },
130
- ] }
137
+ if @body[:assetID].eql? "2201008"
138
+ { "PriceItems"=>[
139
+ { "priceItemID"=>275111, "priceItem"=>"Bulldog American - 15 Step SPA Grooming Service", "value"=>85.0, "taxID"=>256, "durationPerUnit"=>45.0, "serviceBadge"=>"Required", "serviceCategory"=>"15 Step Spa", "isOnline"=>true, "isActive"=>true },
140
+ { "priceItemID"=>275112, "priceItem"=>"Bulldog American - 15 Step SPA Super Grooming Service", "value"=>105.0, "taxID"=>256, "durationPerUnit"=>75.0, "serviceBadge"=>nil, "serviceCategory"=>"15 Step Spa", "isOnline"=>true, "isActive"=>true },
141
+
142
+ { "priceItemID"=>275300, "priceItem"=>"Bulldog American - Shave Down", "value"=>40.0, "taxID"=>256, "durationPerUnit"=>30.0, "serviceBadge"=>"Not Recommended", "serviceCategory"=>"Cut", "isOnline"=>true, "isActive"=>true },
143
+ { "priceItemID"=>275301, "priceItem"=>"Bulldog American - Puppy Cut", "value"=>40.0, "taxID"=>256, "durationPerUnit"=>30.0, "serviceBadge"=>"Recommended", "serviceCategory"=>"Cut", "isOnline"=>true, "isActive"=>true },
144
+
145
+ { "priceItemID"=>275302, "priceItem"=>"De-Shedding Treatment inactive", "value"=>20.0, "taxID"=>256, "durationPerUnit"=>15.0, "serviceBadge"=>nil, "serviceCategory"=>"De-Shed", "isOnline"=>true, "isActive"=>false },
146
+ { "priceItemID"=>275303, "priceItem"=>"De-Shedding Treatment 0-30 lbs", "value"=>20.0, "taxID"=>256, "durationPerUnit"=>15.0, "serviceBadge"=>nil, "serviceCategory"=>"De-Shed", "isOnline"=>true, "isActive"=>true },
147
+ { "priceItemID"=>275304, "priceItem"=>"De-Shedding Treatment 60 - 100 lbs", "value"=>30.0, "taxID"=>256, "durationPerUnit"=>15.0, "serviceBadge"=>nil, "serviceCategory"=>"De-Shed", "isOnline"=>true, "isActive"=>true },
148
+ { "priceItemID"=>275305, "priceItem"=>"De-shedding Treatment - 101 lbs and over", "value"=>40.0, "taxID"=>256, "durationPerUnit"=>20.0, "serviceBadge"=>nil, "serviceCategory"=>"De-Shed", "isOnline"=>true, "isActive"=>true },
149
+
150
+ { "priceItemID"=>275306, "priceItem"=>"Hot Aloe SPA Re- Moisturizing Treatment 0-30 lbs", "value"=>20.0, "taxID"=>256, "durationPerUnit"=>20.0, "serviceBadge"=>nil, "serviceCategory"=>"Add Ons", "isOnline"=>true, "isActive"=>true },
151
+ { "priceItemID"=>275307, "priceItem"=>"Aches & Pains Package", "value"=>0.0, "taxID"=>256, "durationPerUnit"=>60.0, "serviceBadge"=>"Offered", "serviceCategory"=>"Add Ons", "isOnline"=>true, "isActive"=>true },
152
+ { "priceItemID"=>275308, "priceItem"=>"Old Add On", "value"=>0.0, "taxID"=>256, "durationPerUnit"=>60.0, "serviceBadge"=>"Not Offered", "serviceCategory"=>"Add Ons", "isOnline"=>true, "isActive"=>true },
153
+ ] }
154
+ elsif @body[:assetID].eql? "2201009"
155
+ { "PriceItems"=>[
156
+ { "priceItemID"=>276111, "priceItem"=>"Cat Short Hair - 15 Step SPA Grooming Service", "value"=>65.0, "taxID"=>256, "durationPerUnit"=>60.0, "serviceBadge"=>"Recommended", "serviceCategory"=>"15 Step Spa", "isOnline"=>true, "isActive"=>true },
157
+
158
+ { "priceItemID"=>276111, "priceItem"=>"Cat Short Hair - Lion Cut", "value"=>20.0, "taxID"=>256, "durationPerUnit"=>15.0, "serviceBadge"=>"Offered", "serviceCategory"=>"Cut", "isOnline"=>true, "isActive"=>true },
159
+ { "priceItemID"=>276111, "priceItem"=>"Cat Short Hair - Shave Down", "value"=>20.0, "taxID"=>256, "durationPerUnit"=>30.0, "serviceBadge"=>"Offered", "serviceCategory"=>"Cut", "isOnline"=>true, "isActive"=>true },
160
+
161
+ { "priceItemID"=>276111, "priceItem"=>"De-Matting - Light", "value"=>15.0, "taxID"=>256, "durationPerUnit"=>15.0, "serviceBadge"=>"Offered", "serviceCategory"=>"Add Ons", "isOnline"=>true, "isActive"=>true },
162
+ { "priceItemID"=>276111, "priceItem"=>"De-Matting - Moderate", "value"=>20.0, "taxID"=>256, "durationPerUnit"=>15.0, "serviceBadge"=>"Offered", "serviceCategory"=>"Add Ons", "isOnline"=>true, "isActive"=>true },
163
+ ] }
164
+ end
131
165
  when '/api/v1/resources/serviceTypes/'
132
166
  if @body.key?(:zip)
133
167
  {"ServiceTypes" => [
data/lib/vng/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Vng
2
- VERSION = '1.4.4'
2
+ VERSION = '1.6.0'
3
3
  end
data/lib/vng/zip.rb CHANGED
@@ -1,16 +1,19 @@
1
1
  require 'vng/resource'
2
+ require 'vng/service_type'
2
3
 
3
4
  module Vng
4
5
  # Provides methods to interact with Vonigo ZIP codes.
5
6
  class Zip < Resource
6
7
  PATH = '/api/v1/resources/zips/'
7
8
 
8
- attr_reader :zip, :state, :zone_name
9
+ attr_reader :zip, :state, :zone_name, :city, :service_types
9
10
 
10
- def initialize(zip:, state:, zone_name:)
11
+ def initialize(zip:, state:, zone_name:, city: nil, service_types: [])
11
12
  @zip = zip
12
13
  @state = state
13
14
  @zone_name = zone_name
15
+ @city = city
16
+ @service_types = service_types
14
17
  end
15
18
 
16
19
  def self.all
@@ -26,5 +29,26 @@ module Vng
26
29
  new zip: zip, state: state, zone_name: zone_name
27
30
  end
28
31
  end
32
+
33
+ def self.find_by(zip:)
34
+ body = {
35
+ method: '1',
36
+ zip: zip,
37
+ }
38
+
39
+ data = request path: PATH, body: body
40
+ zip_data = data['Zip']
41
+
42
+ unless zip_data['zipCodeID'] == '0'
43
+ service_types = data['ServiceTypes'].map do |body|
44
+ id = body['serviceTypeID']
45
+ type = body['serviceType']
46
+ duration = body['duration']
47
+ ServiceType.new id: id, type: type, duration: duration
48
+ end
49
+
50
+ new zip: zip_data['zipCode'], state: zip_data['provinceAbbr'], zone_name: zip_data['zoneName'], city: zip_data['defaultCity'], service_types: service_types
51
+ end
52
+ end
29
53
  end
30
54
  end
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: 1.4.4
4
+ version: 1.6.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-12-20 00:00:00.000000000 Z
11
+ date: 2024-12-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: simplecov