arstotzka 1.3.1 → 1.3.2
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/README.md +1 -1
- data/config/yardstick.yml +6 -0
- data/lib/arstotzka.rb +1 -0
- data/lib/arstotzka/key_reader.rb +90 -0
- data/lib/arstotzka/reader.rb +2 -60
- data/lib/arstotzka/version.rb +1 -1
- data/spec/integration/yard/arstotzka/key_reader_spec.rb +31 -0
- data/spec/lib/arstotzka/key_reader_spec.rb +72 -0
- metadata +6 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: fc52a24a605aeff67f5a310bf8e6bc7dbe300374ba03678ef4abe68f05ae4f4e
|
|
4
|
+
data.tar.gz: 37ec2565487d9b560d1da8571b12dc6d562a888366e8d8ecb368089ddbf2cb33
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 995a859fdd57fc6a32cff22aec0ae542b22148de6ab5a16497e62acec94249e7c56e61e39b8ca336ed2383ebae8ec0efee3e8f8d4fd18366795a66cf88ce6baf
|
|
7
|
+
data.tar.gz: 55376d536beeb947697540cbdd3a8909b17e85d86beb5cde27d0535975ce59380cf49503d3eabbf3e7af7ae51b6eb77d8c1fce6c3dadc3f8c2b2212b65a1ee36
|
data/README.md
CHANGED
data/config/yardstick.yml
CHANGED
|
@@ -25,6 +25,9 @@ rules:
|
|
|
25
25
|
- Arstotzka::Exception::FetcherBuilderNotFound#klass
|
|
26
26
|
- Arstotzka::Fetcher#options
|
|
27
27
|
- Arstotzka::FetcherBuilder#options
|
|
28
|
+
- Arstotzka::KeyReader#base_key
|
|
29
|
+
- Arstotzka::KeyReader#hash
|
|
30
|
+
- Arstotzka::KeyReader#options
|
|
28
31
|
- Arstotzka::HashReader#options
|
|
29
32
|
- Arstotzka::MethodBuilder#attr_names
|
|
30
33
|
- Arstotzka::MethodBuilder#options
|
|
@@ -40,6 +43,9 @@ rules:
|
|
|
40
43
|
- Arstotzka::Exception::FetcherBuilderNotFound#klass
|
|
41
44
|
- Arstotzka::Fetcher#options
|
|
42
45
|
- Arstotzka::FetcherBuilder#options
|
|
46
|
+
- Arstotzka::KeyReader#base_key
|
|
47
|
+
- Arstotzka::KeyReader#hash
|
|
48
|
+
- Arstotzka::KeyReader#options
|
|
43
49
|
- Arstotzka::HashReader#options
|
|
44
50
|
- Arstotzka::MethodBuilder#attr_names
|
|
45
51
|
- Arstotzka::MethodBuilder#options
|
data/lib/arstotzka.rb
CHANGED
|
@@ -172,6 +172,7 @@ module Arstotzka
|
|
|
172
172
|
autoload :Exception, 'arstotzka/exception'
|
|
173
173
|
autoload :Fetcher, 'arstotzka/fetcher'
|
|
174
174
|
autoload :FetcherBuilder, 'arstotzka/fetcher_builder'
|
|
175
|
+
autoload :KeyReader, 'arstotzka/key_reader'
|
|
175
176
|
autoload :HashReader, 'arstotzka/hash_reader'
|
|
176
177
|
autoload :MethodBuilder, 'arstotzka/method_builder'
|
|
177
178
|
autoload :Options, 'arstotzka/options'
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Arstotzka
|
|
4
|
+
# @api private
|
|
5
|
+
#
|
|
6
|
+
# Class responsible for reading values from a hash
|
|
7
|
+
class KeyReader
|
|
8
|
+
include Base
|
|
9
|
+
|
|
10
|
+
# Creates a new instance of Reader
|
|
11
|
+
#
|
|
12
|
+
# @param [Hash] hash Hash where the key will be found
|
|
13
|
+
# @param [String] base_key The key to be checked
|
|
14
|
+
# (before case change)
|
|
15
|
+
def initialize(hash, base_key, options_hash = {})
|
|
16
|
+
self.options = options_hash
|
|
17
|
+
|
|
18
|
+
@hash = hash
|
|
19
|
+
@base_key = base_key
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Reads value from hash key
|
|
23
|
+
#
|
|
24
|
+
# @raise Arstotzka::Exception::KeyNotFound
|
|
25
|
+
#
|
|
26
|
+
# @return [Object]
|
|
27
|
+
#
|
|
28
|
+
# @example Simple usage
|
|
29
|
+
# hash = { theKey: 'value' }
|
|
30
|
+
# key = { 'the_key' }
|
|
31
|
+
# reader = Arstotzka::KeyReader.new(hash, key)
|
|
32
|
+
#
|
|
33
|
+
# reader.read # returns 'value'
|
|
34
|
+
#
|
|
35
|
+
# @example
|
|
36
|
+
# hash = { 'the_key' => 'value' }
|
|
37
|
+
# key = 'TheKey'
|
|
38
|
+
# reader = Arstotzka::KeyReader.new(hash, key)
|
|
39
|
+
#
|
|
40
|
+
# reader.read # returns 'value'
|
|
41
|
+
#
|
|
42
|
+
def read
|
|
43
|
+
raise Exception::KeyNotFound unless key?
|
|
44
|
+
|
|
45
|
+
hash.key?(key) ? hash[key] : hash[key.to_sym]
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
private
|
|
49
|
+
|
|
50
|
+
attr_reader :hash, :base_key, :options
|
|
51
|
+
|
|
52
|
+
# @private
|
|
53
|
+
#
|
|
54
|
+
# Checks if hash contains or not the key
|
|
55
|
+
#
|
|
56
|
+
# The check first happens using String key and,
|
|
57
|
+
# in case of not found, searches as symbol
|
|
58
|
+
#
|
|
59
|
+
# @return [Boolean]
|
|
60
|
+
#
|
|
61
|
+
# @see #check_key!
|
|
62
|
+
def key?
|
|
63
|
+
return unless hash
|
|
64
|
+
hash.key?(key) || hash.key?(key.to_sym)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# @private
|
|
68
|
+
#
|
|
69
|
+
# Transforms the key to have the correct case
|
|
70
|
+
#
|
|
71
|
+
# the possible cases (instance attribute) are
|
|
72
|
+
# - lower_camel: for cammel case with first letter lowercase
|
|
73
|
+
# - upper_camel: for cammel case with first letter uppercase
|
|
74
|
+
# - snake: for snake case
|
|
75
|
+
#
|
|
76
|
+
# @param [String] key the key to be transformed
|
|
77
|
+
#
|
|
78
|
+
# @return [String] the string transformed
|
|
79
|
+
def key
|
|
80
|
+
@key ||= case options.case
|
|
81
|
+
when :lower_camel
|
|
82
|
+
base_key.camelize(:lower)
|
|
83
|
+
when :upper_camel
|
|
84
|
+
base_key.camelize(:upper)
|
|
85
|
+
when :snake
|
|
86
|
+
base_key.underscore
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
data/lib/arstotzka/reader.rb
CHANGED
|
@@ -23,7 +23,7 @@ module Arstotzka
|
|
|
23
23
|
def initialize(options_hash = {})
|
|
24
24
|
self.options = options_hash
|
|
25
25
|
|
|
26
|
-
@keys = options.keys
|
|
26
|
+
@keys = options.keys
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
# Reads the value of one key in the hash
|
|
@@ -63,9 +63,7 @@ module Arstotzka
|
|
|
63
63
|
def read(hash, index)
|
|
64
64
|
key = keys[index]
|
|
65
65
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
hash.key?(key) ? hash[key] : hash[key.to_sym]
|
|
66
|
+
KeyReader.new(hash, key, options).read
|
|
69
67
|
end
|
|
70
68
|
|
|
71
69
|
# @private
|
|
@@ -84,61 +82,5 @@ module Arstotzka
|
|
|
84
82
|
|
|
85
83
|
# @private
|
|
86
84
|
attr_reader :keys, :options
|
|
87
|
-
|
|
88
|
-
# @private
|
|
89
|
-
#
|
|
90
|
-
# Checks if a hash contains or not the key
|
|
91
|
-
#
|
|
92
|
-
# if the key is not found, an execption is raised
|
|
93
|
-
#
|
|
94
|
-
# @raise Arstotzka::Exception::KeyNotFound
|
|
95
|
-
#
|
|
96
|
-
# @return [NilClass]
|
|
97
|
-
#
|
|
98
|
-
# @see #key?
|
|
99
|
-
def check_key!(hash, key)
|
|
100
|
-
return if key?(hash, key)
|
|
101
|
-
raise Exception::KeyNotFound
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
# @private
|
|
105
|
-
#
|
|
106
|
-
# Checks if a hash contains or not the key
|
|
107
|
-
#
|
|
108
|
-
# The check first happens using String key and,
|
|
109
|
-
# in case of not found, searches as symbol
|
|
110
|
-
#
|
|
111
|
-
# @param [Hash] hash Hash where the key will be found
|
|
112
|
-
# @param [String] key The key to be checked
|
|
113
|
-
#
|
|
114
|
-
# @return [Boolean]
|
|
115
|
-
#
|
|
116
|
-
# @see #check_key!
|
|
117
|
-
def key?(hash, key)
|
|
118
|
-
hash&.key?(key) || hash&.key?(key.to_sym)
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
# @private
|
|
122
|
-
#
|
|
123
|
-
# Transforms the key to have the correct case
|
|
124
|
-
#
|
|
125
|
-
# the possible cases (instance attribute) are
|
|
126
|
-
# - lower_camel: for cammel case with first letter lowercase
|
|
127
|
-
# - upper_camel: for cammel case with first letter uppercase
|
|
128
|
-
# - snake: for snake case
|
|
129
|
-
#
|
|
130
|
-
# @param [String] key the key to be transformed
|
|
131
|
-
#
|
|
132
|
-
# @return [String] the string transformed
|
|
133
|
-
def change_case(key)
|
|
134
|
-
case options.case
|
|
135
|
-
when :lower_camel
|
|
136
|
-
key.camelize(:lower)
|
|
137
|
-
when :upper_camel
|
|
138
|
-
key.camelize(:upper)
|
|
139
|
-
when :snake
|
|
140
|
-
key.underscore
|
|
141
|
-
end
|
|
142
|
-
end
|
|
143
85
|
end
|
|
144
86
|
end
|
data/lib/arstotzka/version.rb
CHANGED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Arstotzka::KeyReader do
|
|
6
|
+
describe 'yard' do
|
|
7
|
+
describe '#read' do
|
|
8
|
+
describe 'Simple Usage' do
|
|
9
|
+
subject(:reader) { described_class.new hash, key }
|
|
10
|
+
|
|
11
|
+
let(:key) { 'the_key' }
|
|
12
|
+
let(:hash) { { theKey: 'value' } }
|
|
13
|
+
|
|
14
|
+
it 'reads the value' do
|
|
15
|
+
expect(reader.read).to eq('value')
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
describe 'Specifying snakecase' do
|
|
20
|
+
subject(:reader) { described_class.new hash, key, case: :snake }
|
|
21
|
+
|
|
22
|
+
let(:key) { 'TheKey' }
|
|
23
|
+
let(:hash) { { 'the_key' => 'value' } }
|
|
24
|
+
|
|
25
|
+
it 'reads the value' do
|
|
26
|
+
expect(reader.read).to eq('value')
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Arstotzka::KeyReader do
|
|
6
|
+
subject(:reader) { described_class.new hash, key, options }
|
|
7
|
+
|
|
8
|
+
let(:key) { 'key' }
|
|
9
|
+
|
|
10
|
+
describe '#read' do
|
|
11
|
+
context 'when no options are given' do
|
|
12
|
+
let(:options) { {} }
|
|
13
|
+
|
|
14
|
+
context 'when hash keys are symbols' do
|
|
15
|
+
let(:hash) { { key: 'value' } }
|
|
16
|
+
|
|
17
|
+
it 'reads the value' do
|
|
18
|
+
expect(reader.read).to eq('value')
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
context 'when hash keys are strings' do
|
|
23
|
+
let(:hash) { { 'key' => 'value' } }
|
|
24
|
+
|
|
25
|
+
it 'reads the value' do
|
|
26
|
+
expect(reader.read).to eq('value')
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
context 'when key is snake_case and hash keys are camelcase' do
|
|
31
|
+
let(:key) { 'the_key' }
|
|
32
|
+
let(:hash) { { theKey: 'value' } }
|
|
33
|
+
|
|
34
|
+
it 'reads the value' do
|
|
35
|
+
expect(reader.read).to eq('value')
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
context 'when case options are given' do
|
|
41
|
+
context 'when key is camelcase and hash keys are snake_case and case option is snake' do
|
|
42
|
+
let(:options) { { case: :snake } }
|
|
43
|
+
let(:key) { 'theKey' }
|
|
44
|
+
let(:hash) { { the_key: 'value' } }
|
|
45
|
+
|
|
46
|
+
it 'reads the value' do
|
|
47
|
+
expect(reader.read).to eq('value')
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
context 'when key is snakecase and hash keys are lower camelcase and case option is lower' do
|
|
52
|
+
let(:options) { { case: :lower_camel } }
|
|
53
|
+
let(:key) { 'the_key' }
|
|
54
|
+
let(:hash) { { theKey: 'value' } }
|
|
55
|
+
|
|
56
|
+
it 'reads the value' do
|
|
57
|
+
expect(reader.read).to eq('value')
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
context 'when key is snakecase and hash keys are upper camelcase and case option is upper' do
|
|
62
|
+
let(:options) { { case: :upper_camel } }
|
|
63
|
+
let(:key) { 'the_key' }
|
|
64
|
+
let(:hash) { { TheKey: 'value' } }
|
|
65
|
+
|
|
66
|
+
it 'reads the value' do
|
|
67
|
+
expect(reader.read).to eq('value')
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: arstotzka
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.3.
|
|
4
|
+
version: 1.3.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Darthjee
|
|
@@ -225,6 +225,7 @@ files:
|
|
|
225
225
|
- lib/arstotzka/fetcher.rb
|
|
226
226
|
- lib/arstotzka/fetcher_builder.rb
|
|
227
227
|
- lib/arstotzka/hash_reader.rb
|
|
228
|
+
- lib/arstotzka/key_reader.rb
|
|
228
229
|
- lib/arstotzka/method_builder.rb
|
|
229
230
|
- lib/arstotzka/options.rb
|
|
230
231
|
- lib/arstotzka/reader.rb
|
|
@@ -245,6 +246,7 @@ files:
|
|
|
245
246
|
- spec/integration/yard/arstotzka/fetcher_builder_spec.rb
|
|
246
247
|
- spec/integration/yard/arstotzka/fetcher_spec.rb
|
|
247
248
|
- spec/integration/yard/arstotzka/hash_reader_spec.rb
|
|
249
|
+
- spec/integration/yard/arstotzka/key_reader_spec.rb
|
|
248
250
|
- spec/integration/yard/arstotzka/method_builder_spec.rb
|
|
249
251
|
- spec/integration/yard/arstotzka/options_spec.rb
|
|
250
252
|
- spec/integration/yard/arstotzka/reader_spec.rb
|
|
@@ -255,6 +257,7 @@ files:
|
|
|
255
257
|
- spec/lib/arstotzka/fetcher_builder_spec.rb
|
|
256
258
|
- spec/lib/arstotzka/fetcher_spec.rb
|
|
257
259
|
- spec/lib/arstotzka/hash_reader_spec.rb
|
|
260
|
+
- spec/lib/arstotzka/key_reader_spec.rb
|
|
258
261
|
- spec/lib/arstotzka/method_builder_spec.rb
|
|
259
262
|
- spec/lib/arstotzka/options_spec.rb
|
|
260
263
|
- spec/lib/arstotzka/reader_spec.rb
|
|
@@ -330,6 +333,7 @@ test_files:
|
|
|
330
333
|
- spec/integration/yard/arstotzka/fetcher_builder_spec.rb
|
|
331
334
|
- spec/integration/yard/arstotzka/fetcher_spec.rb
|
|
332
335
|
- spec/integration/yard/arstotzka/hash_reader_spec.rb
|
|
336
|
+
- spec/integration/yard/arstotzka/key_reader_spec.rb
|
|
333
337
|
- spec/integration/yard/arstotzka/method_builder_spec.rb
|
|
334
338
|
- spec/integration/yard/arstotzka/options_spec.rb
|
|
335
339
|
- spec/integration/yard/arstotzka/reader_spec.rb
|
|
@@ -340,6 +344,7 @@ test_files:
|
|
|
340
344
|
- spec/lib/arstotzka/fetcher_builder_spec.rb
|
|
341
345
|
- spec/lib/arstotzka/fetcher_spec.rb
|
|
342
346
|
- spec/lib/arstotzka/hash_reader_spec.rb
|
|
347
|
+
- spec/lib/arstotzka/key_reader_spec.rb
|
|
343
348
|
- spec/lib/arstotzka/method_builder_spec.rb
|
|
344
349
|
- spec/lib/arstotzka/options_spec.rb
|
|
345
350
|
- spec/lib/arstotzka/reader_spec.rb
|