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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0b49dda09b2542875760b7b2cdd3c4ab50d548458400e7dda9586edafd5c18b2
4
- data.tar.gz: 0e86208199aebd2f79914bfd5e6c5ec330682bcebbe4d154bd808bb3bb4a64f7
3
+ metadata.gz: 1356553075599aa2888d10740b02d282d6f6407c69bf49f67e0dbdc46475cebc
4
+ data.tar.gz: a8d09b9454c4fe51de636f61a880614eca6d12e9fc8455e5fc3888f324eaab9c
5
5
  SHA512:
6
- metadata.gz: 751d1a4eb1774f508106113b6cdc21988b6515ae8d965be322b205670b716214668ae72c67828e2a05fcb127a6c525fa741704c72244e8d9c52ad5e33fc55e43
7
- data.tar.gz: 552dcc79f28b148d54559849f04052b5348e552c7fbecc2dbba81dc46a07744db9b83b90b4ff740e48893b1aedede0e3db31d05fcccb043bf6620a3c8af276ee
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', '~> 0.1.13'
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
- {fieldID: 1013, fieldValue: name},
20
- {fieldID: 1017, fieldValue: weight},
21
- {fieldID: 1014, optionID: breed_option_id},
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
@@ -16,7 +16,6 @@ module Vng
16
16
  @high_weight = high_weight
17
17
  end
18
18
 
19
- # TODO: Needs pagination
20
19
  def self.all
21
20
  data = request path: PATH
22
21
 
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
@@ -42,4 +42,4 @@ module Vng
42
42
  # @note Config is the only module auto-loaded in the Vng module,
43
43
  # in order to have a syntax as easy as Vng.configure
44
44
  extend Config
45
- end
45
+ end
@@ -52,4 +52,4 @@ module Vng
52
52
  @mock = ENV['VNG_MOCK'] == '1'
53
53
  end
54
54
  end
55
- end
55
+ end
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['Fields'].find{|field| field['fieldID'] == 127}['fieldValue']
34
- last_name = data['Fields'].find{|field| field['fieldID'] == 128}['fieldValue']
35
- email = data['Fields'].find{|field| field['fieldID'] == 97}['fieldValue']
36
- phone = data['Fields'].find{|field| field['fieldID'] == 96}['fieldValue']
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['Fields'].find{|field| field['fieldID'] == 126}['fieldValue']
32
- email = data['Fields'].find{|field| field['fieldID'] == 238}['fieldValue']
33
- phone = data['Fields'].find{|field| field['fieldID'] == 1024}['fieldValue']
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
- # TODO: fetch from /system/objects/ method: 1, objectID: 20
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
-
@@ -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 path:, body:, query:
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 = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
22
- http.request request
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
@@ -12,7 +12,6 @@ module Vng
12
12
  @name = name
13
13
  end
14
14
 
15
- # TODO: Needs pagination
16
15
  def self.all
17
16
  data = request path: PATH
18
17
 
@@ -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
@@ -13,7 +13,6 @@ module Vng
13
13
  @duration = duration
14
14
  end
15
15
 
16
- # TODO: Needs pagination
17
16
  def self.all
18
17
  data = request path: PATH
19
18
 
data/lib/vng/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Vng
2
- VERSION = '0.1.20'
2
+ VERSION = '1.1.0'
3
3
  end
@@ -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
@@ -13,7 +13,6 @@ module Vng
13
13
  @zone_name = zone_name
14
14
  end
15
15
 
16
- # TODO: Needs pagination
17
16
  def self.all
18
17
  data = request path: PATH
19
18
 
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: 0.1.20
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-20 00:00:00.000000000 Z
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