rdstation-ruby-client 2.2.0 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6ade7306767c00b8d39afdeb149d4aaebe84dfd35b389e2bf1435e623dfabfb7
4
- data.tar.gz: 3bdc3dc84ff1395fa65dc86e172b5ca967696e88b60bf9774723fcd33c785fbe
3
+ metadata.gz: 93cdc7036300cb21cf4609bb92042f47e280a864f84cfaba3b5a9e6181274aad
4
+ data.tar.gz: 349d48fb5a969953c3e637b0cf73aef037328aafff3aeb779c7f217c0ac1e537
5
5
  SHA512:
6
- metadata.gz: fddd4b51c76c965cbd44bda5e36712f26f694fbabd59a7c0b008174cfcacd4225b73ce7640b32e9aeaed2495950ff0c19b70a555b5d8bf0dab79eaf2ce060136
7
- data.tar.gz: 90d96ef3c8d917deb7adbfe0aff6e2625b7f4f1d925d6b54e806df9aa3fd3de6378358521bbfce024eb32af06695f0974ca0f0dd8b9684ed1c537f2d228c97de
6
+ metadata.gz: 8cfa5e1cd4d75f9a30536b99055075e92a7bdb3630ed8b71cfc66f4032983677079d78663d9eaadc4fcfb88875665281e271b270c6a584e93a81b5065bd7f005
7
+ data.tar.gz: 7e64c0b2983ce2d081d4236c42d432a7c994f2927f17e766020067b512a2ed47b1988acdc5c1a8d81edaf3cd0acc43f96209e1a0192abb11d0f52074758a1989
@@ -1,3 +1,54 @@
1
+ ## 2.3.0
2
+
3
+ ### Additions
4
+
5
+ #### 1. New Field methods
6
+
7
+ The following methods were added to "Fields" client:
8
+
9
+ - create
10
+ - update
11
+ - delete
12
+
13
+ Besides reading, this client is now capable of create, update or delete a field.
14
+
15
+ Usage example:
16
+
17
+ ```ruby
18
+ client = RDStation::Client.new(access_token: 'ACCESS_TOKEN', refresh_token: 'REFRESH_TOKEN')
19
+ client.fields.delete('FIELD_UUID')
20
+ ```
21
+
22
+ #### 2. New format of errors supported
23
+
24
+ Two new formats of errors are now supported by the error handler:
25
+
26
+ ##### `HASH_OF_HASHES`
27
+
28
+ When the error message is a hash containing other hashes as values, for example:
29
+
30
+ ```ruby
31
+ {
32
+ 'error' => {
33
+ 'field1' => {...},
34
+ 'field2' => {...}
35
+ }
36
+ }
37
+ ```
38
+
39
+ ##### `HASH_OF_MULTIPLE_TYPES`
40
+
41
+ When the error message is a hash that could contain multiple data types as values, for example:
42
+
43
+ ```ruby
44
+ {
45
+ 'error' => {
46
+ 'field1' => [...] # Array,
47
+ 'field2' => {...} # Hash
48
+ }
49
+ }
50
+ ```
51
+
1
52
  ## 2.2.0
2
53
 
3
54
  ### Additions
@@ -37,7 +88,7 @@ end
37
88
 
38
89
  Providing `client_id` and `client_secret` directly to `RDStation::Authentication.new` is deprecated and will be removed in future versions. Use `RDStation.configure` instead.
39
90
 
40
- Specifying refresh_token in `RDStation::Client.new(access_token: 'at', refresh_token: 'rt')` is optional right now, but will be mandatory in future versions.
91
+ Specifying refresh_token in `RDStation::Client.new(access_token: 'at', refresh_token: 'rt')` is optional right now, but will be mandatory in future versions.
41
92
 
42
93
  ## 2.1.1
43
94
 
@@ -94,7 +145,7 @@ In case of a Bad Request (400), the following specific errors may be raised (tho
94
145
  - `RDStation::Error::ConflictingField`
95
146
  - `RDStation::Error::InvalidEventType`
96
147
 
97
- In cause of Unahtorized (401), the following specific errors may be raised (those are subclasses of `RDStation::Error::Unauthorized`):
148
+ In cause of Unauthorized (401), the following specific errors may be raised (those are subclasses of `RDStation::Error::Unauthorized`):
98
149
  - `RDStation::Error::ExpiredAccessToken`
99
150
  - `RDStation::Error::ExpiredCodeGrant`
100
151
  - `RDStation::Error::InvalidCredentials`
data/README.md CHANGED
@@ -206,6 +206,55 @@ client = RDStation::Client.new(access_token: 'access_token', refresh_token: 'ref
206
206
  client.fields.all
207
207
  ```
208
208
 
209
+ #### Create a field
210
+
211
+ ```ruby
212
+ payload = {} # hash representing the payload
213
+ client = RDStation::Client.new(access_token: 'access_token', refresh_token: 'refresh_token')
214
+ client.fields.create payload
215
+ ```
216
+ Or you can use the new `RDStation::Builder::Field`
217
+
218
+ ```ruby
219
+ payload = {} # hash representing the payload
220
+ builder = RDStation::Builder::Field.new payload['api_identifier']
221
+ builder.data_type(payload['data_type'])
222
+ builder.presentation_type(payload['presentation_type'])
223
+ builder.name('pt-BR', payload['name'])
224
+ builder.label('pt-BR', payload['label'])
225
+
226
+ client = RDStation::Client.new(access_token: 'access_token', refresh_token: 'refresh_token')
227
+ client.fields.create builder.build
228
+ ```
229
+
230
+ #### Update a field
231
+
232
+ ```ruby
233
+ payload = {} # hash representing the payload
234
+ client = RDStation::Client.new(access_token: 'access_token', refresh_token: 'refresh_token')
235
+ client.fields.update('FIELD_UUID', payload)
236
+ ```
237
+ Or you can use the new `RDStation::Builder::Field`
238
+
239
+ ```ruby
240
+ payload = {} # hash representing the payload
241
+ builder = RDStation::Builder::Field.new payload['api_identifier']
242
+ builder.data_type(payload['data_type'])
243
+ builder.presentation_type(payload['presentation_type'])
244
+ builder.name('pt-BR', payload['name'])
245
+ builder.label('pt-BR', payload['label'])
246
+
247
+ client = RDStation::Client.new(access_token: 'access_token', refresh_token: 'refresh_token')
248
+ client.fields.update('FIELD_UUID', builder.build)
249
+ ```
250
+ #### Deleting a field
251
+
252
+ ```ruby
253
+ client = RDStation::Client.new(access_token: 'access_token', refresh_token: 'refresh_token')
254
+ client.fields.delete('FIELD_UUID')
255
+ ```
256
+
257
+
209
258
  ### Webhooks
210
259
 
211
260
  Webhooks provide the ability to receive real-time data updates about your contact activity.
@@ -17,3 +17,6 @@ require 'rdstation/webhooks'
17
17
  # Error handling
18
18
  require 'rdstation/error'
19
19
  require 'rdstation/error_handler'
20
+
21
+ # Builders
22
+ require 'rdstation/builder/field'
@@ -0,0 +1,70 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RDStation
4
+ class Builder
5
+ # More info: https://developers.rdstation.com/pt-BR/reference/fields#methodPostDetails
6
+ class Field
7
+ DATA_TYPES = %w(STRING INTEGER BOOLEAN STRING[]).freeze
8
+ PRESENTATION_TYPES = %w[TEXT_INPUT TEXT_AREA URL_INPUT PHONE_INPUT
9
+ EMAIL_INPUT CHECK_BOX NUMBER_INPUT COMBO_BOX
10
+ RADIO_BUTTON MULTIPLE_CHOICE].freeze
11
+
12
+ REQUIRED_FIELDS = %w[api_identifier data_type presentation_type label name].freeze
13
+
14
+ def initialize(api_identifier)
15
+ raise 'api_identifier required' unless api_identifier
16
+ unless valid_identifier(api_identifier)
17
+ raise 'api_identifier is not in a valid format, need start with "cf_"'
18
+ end
19
+
20
+ @values = {}
21
+ @values['api_identifier'] = api_identifier
22
+ end
23
+
24
+ def data_type(data_type)
25
+ raise "Not valid data_type - #{DATA_TYPES}" unless DATA_TYPES.include? data_type
26
+
27
+ @values['data_type'] = data_type
28
+ end
29
+
30
+ def presentation_type(presentation_type)
31
+ unless PRESENTATION_TYPES.include? presentation_type
32
+ raise "Not valid presentation_type - #{PRESENTATION_TYPES}"
33
+ end
34
+
35
+ @values['presentation_type'] = presentation_type
36
+ end
37
+
38
+ def label(language, label)
39
+ @values['label'] = { language.to_s => label }
40
+ end
41
+
42
+ def name(language, name)
43
+ @values['name'] = { language.to_s => name }
44
+ end
45
+
46
+ def validation_rules(validation_rules)
47
+ @values['validation_rules'] = validation_rules
48
+ end
49
+
50
+ def valid_options(valid_options)
51
+ @values['valid_options'] = valid_options
52
+ end
53
+
54
+ def build
55
+ empty_fields = REQUIRED_FIELDS.select { |field| @values[field].nil? }
56
+ unless empty_fields.empty?
57
+ raise "Required fields are missing - #{empty_fields}"
58
+ end
59
+
60
+ @values
61
+ end
62
+
63
+ private
64
+
65
+ def valid_identifier(api_identifier)
66
+ api_identifier.start_with? 'cf_'
67
+ end
68
+ end
69
+ end
70
+ end
@@ -1,9 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RDStation
2
4
  class Error
3
5
  class Format
4
- FLAT_HASH = 'FLAT_HASH'.freeze
5
- HASH_OF_ARRAYS = 'HASH_OF_ARRAYS'.freeze
6
- ARRAY_OF_HASHES = 'ARRAY_OF_HASHES'.freeze
6
+ FLAT_HASH = 'FLAT_HASH'
7
+ HASH_OF_ARRAYS = 'HASH_OF_ARRAYS'
8
+ ARRAY_OF_HASHES = 'ARRAY_OF_HASHES'
9
+ HASH_OF_MULTIPLE_TYPES = 'HASH_OF_MULTIPLE_TYPES'
10
+ HASH_OF_HASHES = 'HASH_OF_HASHES'
7
11
 
8
12
  def initialize(errors)
9
13
  @errors = errors
@@ -12,6 +16,9 @@ module RDStation
12
16
  def format
13
17
  return FLAT_HASH if flat_hash?
14
18
  return HASH_OF_ARRAYS if hash_of_arrays?
19
+ return HASH_OF_HASHES if hash_of_hashes?
20
+ return HASH_OF_MULTIPLE_TYPES if hash_of_multiple_types?
21
+
15
22
  ARRAY_OF_HASHES
16
23
  end
17
24
 
@@ -19,12 +26,23 @@ module RDStation
19
26
 
20
27
  def flat_hash?
21
28
  return unless @errors.is_a?(Hash)
29
+
22
30
  @errors.key?('error_type')
23
31
  end
24
32
 
25
33
  def hash_of_arrays?
26
34
  @errors.is_a?(Hash) && @errors.values.all? { |error| error.is_a? Array }
27
35
  end
36
+
37
+ def hash_of_hashes?
38
+ @errors.is_a?(Hash) && @errors.values.all? { |error| error.is_a? Hash }
39
+ end
40
+
41
+ def hash_of_multiple_types?
42
+ @errors.is_a?(Hash) &&
43
+ @errors.values.any? { |error| error.is_a? Hash } &&
44
+ @errors.values.any? { |error| error.is_a? Array }
45
+ end
28
46
  end
29
47
  end
30
48
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative './format'
2
4
 
3
5
  module RDStation
@@ -15,6 +17,10 @@ module RDStation
15
17
  return from_flat_hash
16
18
  when RDStation::Error::Format::HASH_OF_ARRAYS
17
19
  return from_hash_of_arrays
20
+ when RDStation::Error::Format::HASH_OF_HASHES
21
+ return from_hash_of_hashes
22
+ when RDStation::Error::Format::HASH_OF_MULTIPLE_TYPES
23
+ return from_hash_of_multiple_types
18
24
  end
19
25
 
20
26
  errors
@@ -24,14 +30,29 @@ module RDStation
24
30
  [errors]
25
31
  end
26
32
 
27
- def from_hash_of_arrays
28
- errors.each_with_object([]) do |errors, array_of_errors|
29
- attribute_name = errors.first
30
- attribute_errors = errors.last
31
- path = { 'path' => "body.#{attribute_name}" }
32
- errors = attribute_errors.map { |error| error.merge(path) }
33
- array_of_errors.push(*errors)
33
+ def from_hash_of_multiple_types
34
+ array_of_errors = []
35
+ errors.each do |attribute_name, errors|
36
+ if errors.is_a? Array
37
+ result = build_error_from_array(attribute_name, errors)
38
+ end
39
+ if errors.is_a? Hash
40
+ result = build_error_from_multilingual_hash(attribute_name, errors)
41
+ end
42
+ array_of_errors.push(*result)
34
43
  end
44
+
45
+ array_of_errors
46
+ end
47
+
48
+ def from_hash_of_hashes
49
+ array_of_errors = []
50
+ errors.each do |attribute_name, errors|
51
+ result = build_error_from_multilingual_hash(attribute_name, errors)
52
+ array_of_errors.push(*result)
53
+ end
54
+
55
+ array_of_errors
35
56
  end
36
57
 
37
58
  def error_format
@@ -41,6 +62,31 @@ module RDStation
41
62
  def errors
42
63
  @errors ||= @error_response['errors']
43
64
  end
65
+
66
+ private
67
+
68
+ def build_error_from_array(attribute_name, attribute_errors)
69
+ path = { 'path' => "body.#{attribute_name}" }
70
+ attribute_errors.map { |error| error.merge(path) }
71
+ end
72
+
73
+ def build_error_from_multilingual_hash(attribute_name, errors_by_language)
74
+ array_of_errors = []
75
+ errors_by_language.each do |language, errors|
76
+ result = build_error_from_array("#{attribute_name}.#{language}", errors)
77
+ array_of_errors.push(*result)
78
+ end
79
+ array_of_errors
80
+ end
81
+
82
+ def from_hash_of_arrays
83
+ errors.each_with_object([]) do |errors, array_of_errors|
84
+ attribute_name = errors.first
85
+ attribute_errors = errors.last
86
+ errors = build_error_from_array(attribute_name, attribute_errors)
87
+ array_of_errors.push(*errors)
88
+ end
89
+ end
44
90
  end
45
91
  end
46
92
  end
@@ -12,16 +12,8 @@ module RDStation
12
12
  def create(payload)
13
13
  retryable_request(@authorization) do |authorization|
14
14
  response = self.class.post(EVENTS_ENDPOINT, headers: authorization.headers, body: payload.to_json)
15
- response_body = JSON.parse(response.body)
16
- return response_body unless errors?(response_body)
17
- RDStation::ErrorHandler.new(response).raise_error
15
+ ApiResponse.build(response)
18
16
  end
19
17
  end
20
-
21
- private
22
-
23
- def errors?(response_body)
24
- response_body.is_a?(Array) || response_body['errors']
25
- end
26
18
  end
27
19
  end
@@ -1,12 +1,12 @@
1
1
  # encoding: utf-8
2
2
  module RDStation
3
- # More info: https://developers.rdstation.com/pt-BR/reference/contacts
3
+ # More info: https://developers.rdstation.com/pt-BR/reference/fields
4
4
  class Fields
5
5
  include HTTParty
6
6
  include ::RDStation::RetryableRequest
7
7
 
8
8
  BASE_URL = 'https://api.rd.services/platform/contacts/fields'.freeze
9
-
9
+
10
10
  def initialize(authorization:)
11
11
  @authorization = authorization
12
12
  end
@@ -18,5 +18,31 @@ module RDStation
18
18
  end
19
19
  end
20
20
 
21
+ def create(payload)
22
+ retryable_request(@authorization) do |authorization|
23
+ response = self.class.post(BASE_URL, headers: authorization.headers, body: payload.to_json)
24
+ ApiResponse.build(response)
25
+ end
26
+ end
27
+
28
+ def update(uuid, payload)
29
+ retryable_request(@authorization) do |authorization|
30
+ response = self.class.patch(base_url(uuid), headers: authorization.headers, body: payload.to_json)
31
+ ApiResponse.build(response)
32
+ end
33
+ end
34
+
35
+ def delete(uuid)
36
+ retryable_request(@authorization) do |authorization|
37
+ response = self.class.delete(base_url(uuid), headers: authorization.headers)
38
+ ApiResponse.build(response)
39
+ end
40
+ end
41
+
42
+ private
43
+
44
+ def base_url(path = '')
45
+ "#{BASE_URL}/#{path}"
46
+ end
21
47
  end
22
48
  end
@@ -1,3 +1,3 @@
1
1
  module RDStation
2
- VERSION = '2.2.0'.freeze
2
+ VERSION = '2.3.0'.freeze
3
3
  end
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ RSpec.describe RDStation::Builder::Field do
6
+ def valid_builder
7
+ described_class.new('cf_identifier')
8
+ end
9
+
10
+ describe 'when create a builder' do
11
+ context 'valid' do
12
+ let(:initial_parameters) do
13
+ 'cf_api_identifier'
14
+ end
15
+
16
+ let(:builder) { described_class.new(initial_parameters) }
17
+
18
+ let(:expected_result) do
19
+ {
20
+ 'api_identifier' => 'cf_api_identifier',
21
+ 'data_type' => 'STRING',
22
+ 'presentation_type' => 'TEXT_INPUT',
23
+ 'label' => { 'pt-BR' => 'My label' },
24
+ 'name' => { 'pt-BR' => 'My name' }
25
+ }
26
+ end
27
+
28
+ it 'returns an hash of required values' do
29
+ builder.label 'pt-BR', 'My label'
30
+ builder.name 'pt-BR', 'My name'
31
+ builder.data_type 'STRING'
32
+ builder.presentation_type 'TEXT_INPUT'
33
+
34
+ result = builder.build
35
+ expect(result).to eq(expected_result)
36
+ end
37
+ end
38
+
39
+ context 'invalid' do
40
+ it 'using invalid api_identifier ' do
41
+ expect { described_class.new('invald_identifier') }.to raise_error(
42
+ 'api_identifier is not in a valid format, need start with "cf_"'
43
+ )
44
+ end
45
+
46
+ it 'using invalid data_type ' do
47
+ expect { valid_builder.data_type('invalid_data_type') }.to raise_error(
48
+ 'Not valid data_type - ["STRING", "INTEGER", "BOOLEAN", "STRING[]"]'
49
+ )
50
+ end
51
+
52
+ it 'using invalid presentation_type ' do
53
+ expect { valid_builder.presentation_type('invalid presentation_type') }.to raise_error(
54
+ 'Not valid presentation_type - ["TEXT_INPUT", "TEXT_AREA", "URL_INPUT", "PHONE_INPUT", "EMAIL_INPUT", "CHECK_BOX", "NUMBER_INPUT", "COMBO_BOX", "RADIO_BUTTON", "MULTIPLE_CHOICE"]'
55
+ )
56
+ end
57
+
58
+ it 'without api_identifier' do
59
+ expect { described_class.new(nil) }.to raise_error('api_identifier required')
60
+ end
61
+
62
+ it 'without required fields' do
63
+ expect { valid_builder.build }.to raise_error(
64
+ 'Required fields are missing - ["data_type", "presentation_type", "label", "name"]'
65
+ )
66
+ end
67
+ end
68
+ end
69
+ end
@@ -52,5 +52,51 @@ RSpec.describe RDStation::Error::Format do
52
52
  expect(result).to eq(RDStation::Error::Format::ARRAY_OF_HASHES)
53
53
  end
54
54
  end
55
+
56
+ context 'when receives a mixed type of errors' do
57
+ let(:errors) do
58
+ {
59
+ 'label': {
60
+ 'pt-BR': [
61
+ {
62
+ 'error_type': 'CANNOT_BE_BLANK',
63
+ 'error_message': 'cannot be blank'
64
+ }
65
+ ]
66
+ },
67
+ 'api_identifier': [
68
+ {
69
+ 'error_type': 'CANNOT_BE_BLANK',
70
+ 'error_message': 'cannot be blank'
71
+ }
72
+ ]
73
+ }
74
+ end
75
+
76
+ it 'returns the HASH_OF_MULTIPLE_TYPES format' do
77
+ result = error_format.format
78
+ expect(result).to eq(RDStation::Error::Format::HASH_OF_MULTIPLE_TYPES)
79
+ end
80
+ end
81
+
82
+ context 'when receives a hash of hashes errors' do
83
+ let(:errors) do
84
+ {
85
+ label: {
86
+ 'pt-BR': [
87
+ {
88
+ 'error_type': 'CANNOT_BE_BLANK',
89
+ 'error_message': 'cannot be blank'
90
+ }
91
+ ]
92
+ }
93
+ }
94
+ end
95
+
96
+ it 'returns the HASH_OF_MULTILINGUAL format' do
97
+ result = error_format.format
98
+ expect(result).to eq(RDStation::Error::Format::HASH_OF_HASHES)
99
+ end
100
+ end
55
101
  end
56
102
  end
@@ -132,5 +132,88 @@ RSpec.describe RDStation::Error::Formatter do
132
132
  expect(result).to eq(expected_result)
133
133
  end
134
134
  end
135
+
136
+ context 'when receives a hash of multiple type errors' do
137
+ let(:error_format) { instance_double(RDStation::Error::Format, format: RDStation::Error::Format::HASH_OF_MULTIPLE_TYPES) }
138
+
139
+ let(:error_response) do
140
+ {
141
+ 'errors' => {
142
+ 'label' => {
143
+ 'pt-BR' => [
144
+ {
145
+ 'error_type' => 'CANNOT_BE_BLANK',
146
+ 'error_message' => 'cannot be blank'
147
+ }
148
+ ]
149
+ },
150
+ 'api_identifier' => [
151
+ {
152
+ 'error_type' => 'CANNOT_BE_BLANK',
153
+ 'error_message' => 'cannot be blank'
154
+ }
155
+ ]
156
+ }
157
+ }
158
+ end
159
+
160
+ let(:error_formatter) { described_class.new(error_response) }
161
+
162
+ let(:expected_result) do
163
+ [
164
+ {
165
+ 'error_type' => 'CANNOT_BE_BLANK',
166
+ 'error_message' => 'cannot be blank',
167
+ 'path' => 'body.label.pt-BR'
168
+ },
169
+ {
170
+ 'error_type' => 'CANNOT_BE_BLANK',
171
+ 'error_message' => 'cannot be blank',
172
+ 'path' => 'body.api_identifier'
173
+ }
174
+ ]
175
+ end
176
+
177
+ it 'returns an array of errors' do
178
+ result = error_formatter.to_array
179
+ expect(result).to eq(expected_result)
180
+ end
181
+ end
182
+
183
+ context 'when receives a hash of hashes type errors' do
184
+ let(:error_format) { instance_double(RDStation::Error::Format, format: RDStation::Error::Format::HASH_OF_HASHES) }
185
+
186
+ let(:error_response) do
187
+ {
188
+ 'errors' => {
189
+ 'label' => {
190
+ 'pt-BR' => [
191
+ {
192
+ 'error_type' => 'CANNOT_BE_BLANK',
193
+ 'error_message' => 'cannot be blank'
194
+ }
195
+ ]
196
+ }
197
+ }
198
+ }
199
+ end
200
+
201
+ let(:error_formatter) { described_class.new(error_response) }
202
+
203
+ let(:expected_result) do
204
+ [
205
+ {
206
+ 'error_type' => 'CANNOT_BE_BLANK',
207
+ 'error_message' => 'cannot be blank',
208
+ 'path' => 'body.label.pt-BR'
209
+ }
210
+ ]
211
+ end
212
+
213
+ it 'returns an array of errors' do
214
+ result = error_formatter.to_array
215
+ expect(result).to eq(expected_result)
216
+ end
217
+ end
135
218
  end
136
219
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rdstation-ruby-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.0
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paulo L F Casaretto
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-12-13 00:00:00.000000000 Z
11
+ date: 2020-08-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -143,6 +143,7 @@ files:
143
143
  - lib/rdstation/api_response.rb
144
144
  - lib/rdstation/authentication.rb
145
145
  - lib/rdstation/authorization.rb
146
+ - lib/rdstation/builder/field.rb
146
147
  - lib/rdstation/client.rb
147
148
  - lib/rdstation/contacts.rb
148
149
  - lib/rdstation/error.rb
@@ -166,6 +167,7 @@ files:
166
167
  - spec/lib/rdstation/api_response_spec.rb
167
168
  - spec/lib/rdstation/authentication_spec.rb
168
169
  - spec/lib/rdstation/authorization_spec.rb
170
+ - spec/lib/rdstation/builder/field_spec.rb
169
171
  - spec/lib/rdstation/client_spec.rb
170
172
  - spec/lib/rdstation/contacts_spec.rb
171
173
  - spec/lib/rdstation/error/format_spec.rb
@@ -203,7 +205,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
203
205
  - !ruby/object:Gem::Version
204
206
  version: '0'
205
207
  requirements: []
206
- rubygems_version: 3.0.6
208
+ rubyforge_project:
209
+ rubygems_version: 2.7.6.2
207
210
  signing_key:
208
211
  specification_version: 4
209
212
  summary: Ruby API wrapper for RD Station
@@ -212,6 +215,7 @@ test_files:
212
215
  - spec/lib/rdstation/api_response_spec.rb
213
216
  - spec/lib/rdstation/authentication_spec.rb
214
217
  - spec/lib/rdstation/authorization_spec.rb
218
+ - spec/lib/rdstation/builder/field_spec.rb
215
219
  - spec/lib/rdstation/client_spec.rb
216
220
  - spec/lib/rdstation/contacts_spec.rb
217
221
  - spec/lib/rdstation/error/format_spec.rb