arstotzka 1.0.3 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +19 -8
  3. data/.gitignore +3 -0
  4. data/.rubocop.yml +1 -0
  5. data/.rubocop_todo.yml +6 -3
  6. data/.yardopts +1 -0
  7. data/Dockerfile +8 -0
  8. data/README.md +2 -3
  9. data/Rakefile +2 -0
  10. data/arstotzka.gemspec +11 -8
  11. data/config/yardstick.rb +13 -0
  12. data/config/yardstick.yml +69 -0
  13. data/docker-compose.yml +14 -9
  14. data/lib/arstotzka/builder.rb +72 -0
  15. data/lib/arstotzka/class_methods.rb +9 -2
  16. data/lib/arstotzka/crawler.rb +56 -5
  17. data/lib/arstotzka/fetcher.rb +43 -14
  18. data/lib/arstotzka/reader.rb +44 -1
  19. data/lib/arstotzka/type_cast.rb +114 -1
  20. data/lib/arstotzka/version.rb +1 -1
  21. data/lib/arstotzka/wrapper.rb +47 -2
  22. data/spec/integration/readme/arstotzka_spec.rb +41 -0
  23. data/spec/integration/readme/my_parser_spec.rb +14 -13
  24. data/spec/integration/yard/arstotzka/crawler_spec.rb +9 -9
  25. data/spec/integration/yard/arstotzka/fetcher_spec.rb +4 -4
  26. data/spec/integration/yard/arstotzka/reader_spec.rb +7 -7
  27. data/spec/integration/yard/arstotzka/type_cast_spec.rb +55 -0
  28. data/spec/integration/yard/arstotzka/wrapper_spec.rb +30 -14
  29. data/spec/integration/yard/arstotzka_spec.rb +9 -9
  30. data/spec/lib/arstotzka/builder_spec.rb +18 -16
  31. data/spec/lib/arstotzka/crawler_spec.rb +21 -13
  32. data/spec/lib/arstotzka/fetcher_spec.rb +12 -10
  33. data/spec/lib/arstotzka/reader_spec.rb +16 -16
  34. data/spec/lib/arstotzka/wrapper_spec.rb +8 -2
  35. data/spec/lib/arstotzka_spec.rb +23 -23
  36. data/spec/support/models/car.rb +10 -0
  37. data/spec/support/models/car_collector.rb +20 -0
  38. data/spec/support/models/request.rb +9 -0
  39. data/spec/support/models/type_caster.rb +13 -0
  40. data/spec/support/shared_examples/wrapper.rb +2 -2
  41. metadata +65 -23
  42. data/spec/integration/readme/default_spec.rb +0 -39
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a819ccb4eab671027d924859a3406ed34c119992
4
- data.tar.gz: cb6617c7d4a846b7e7398d0eb68d3cbe9996f24c
3
+ metadata.gz: f6434b65a0dc88484fb45965e6c0700978300f24
4
+ data.tar.gz: e91d322f0ad668991927080809a0ba63430814ac
5
5
  SHA512:
6
- metadata.gz: 999acf4da93d2c838bbf8d557f482db6b6bb001ad70ce55235eac8a486ca1f0c91609c0eb7c95f4afe92e3dc120b0e1d14ceffc6eee2b967b99aca10d59b1597
7
- data.tar.gz: 5008b64f5c6bd7698ba26e61e8932562f4778a8fa3cd95547aa6a286e5af7cfa3b1177ca7907339b62c10fcdc2b1878818bd394c311f91a22744b5534cc14cdd
6
+ metadata.gz: 5bd3079f38a8f38d95ef74521273f02dc9c40add3c81315d5bde04382fd75f02b017663cca973ed99a17681d9bf6bf509f9df9b79977edf9ab62f29fbccd1291
7
+ data.tar.gz: 8929be5f4f9fae35d4ad87f54b3a60d7a361877c975e04dadbeebb553a5d0888fbb0f0167e00d1c72bd9e308eacd54176041e9b4c8848d029ebfd4addb2bda19
data/.circleci/config.yml CHANGED
@@ -2,13 +2,24 @@ version: 2
2
2
  jobs:
3
3
  build:
4
4
  docker:
5
- - image: circleci/ruby:2.4.1
5
+ - image: darthjee/circleci_ruby_240:0.1.0
6
6
  steps:
7
7
  - checkout
8
- - run: curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
9
- - run: chmod +x ./cc-test-reporter
10
- - run: ./cc-test-reporter before-build
11
- - run: bundle install
12
- - run: bundle exec rspec
13
- - run: rubocop
14
- - run: ./cc-test-reporter after-build --exit-code $?
8
+ - run:
9
+ name: Prepare Coverage Test Report
10
+ command: cc-test-reporter before-build
11
+ - run:
12
+ name: Bundle Install
13
+ command: bundle install
14
+ - run:
15
+ name: RSpec
16
+ command: bundle exec rspec
17
+ - run:
18
+ name: Rubocop
19
+ command: rubocop
20
+ - run:
21
+ name: Coverage Test Report
22
+ command: cc-test-reporter after-build --exit-code $?
23
+ - run:
24
+ name: Yardstick coverage check
25
+ command: bundle exec rake verify_measurements
data/.gitignore CHANGED
@@ -2,3 +2,6 @@ coverage
2
2
  Gemfile.lock
3
3
  .yardoc
4
4
  doc
5
+ pkg
6
+ measurement
7
+ **/*.swp
data/.rubocop.yml CHANGED
@@ -1,3 +1,4 @@
1
+ require: rubocop-rspec
1
2
  inherit_from: .rubocop_todo.yml
2
3
 
3
4
  AllCops:
data/.rubocop_todo.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2018-07-25 18:12:13 +0000 using RuboCop version 0.58.0.
3
+ # on 2019-03-07 08:37:15 +0000 using RuboCop version 0.58.1.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
@@ -9,5 +9,8 @@
9
9
  # Offense count: 1
10
10
  # Configuration parameters: CountKeywordArgs.
11
11
  Metrics/ParameterLists:
12
- Exclude:
13
- - 'lib/arstotzka/builder.rb'
12
+ Max: 7
13
+
14
+ # Offense count: 46
15
+ RSpec/NestedGroups:
16
+ Max: 5
data/.yardopts ADDED
@@ -0,0 +1 @@
1
+ --private --no-private
data/Dockerfile ADDED
@@ -0,0 +1,8 @@
1
+ FROM darthjee/ruby_240:0.2.2
2
+
3
+ USER app
4
+ COPY ./ /home/app/app/
5
+
6
+ RUN gem uninstall bundler
7
+ RUN gem install bundler -v '1.17.3'
8
+ RUN bundle install
data/README.md CHANGED
@@ -37,7 +37,7 @@ Instalation
37
37
 
38
38
  Yard Documentation
39
39
  -------------------
40
- https://www.rubydoc.info/gems/arstotzka/
40
+ https://www.rubydoc.info/gems/arstotzka/1.0.4
41
41
 
42
42
  Getting Started
43
43
  ---------------
@@ -156,8 +156,7 @@ end
156
156
  ]
157
157
  )
158
158
 
159
- object.balance
160
- #returns 1050.36
159
+ object.total_money # returns 1050.36
161
160
  ```
162
161
 
163
162
  ## Default
data/Rakefile CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  require 'bundler/gem_tasks'
4
4
  require 'rspec/core/rake_task'
5
+ require 'yardstick/rake/measurement'
6
+ require './config/yardstick'
5
7
 
6
8
  RSpec::Core::RakeTask.new
7
9
 
data/arstotzka.gemspec CHANGED
@@ -19,14 +19,17 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ['lib']
20
20
 
21
21
  spec.add_runtime_dependency 'activesupport', '~> 5.x'
22
- spec.add_runtime_dependency 'sinclair', '>= 1.1.1'
22
+ spec.add_runtime_dependency 'sinclair', '>= 1.1.1'
23
+
24
+ spec.add_development_dependency 'bundler', '~> 1.17.x'
25
+ spec.add_development_dependency 'pry-nav', '~> 0.2.4'
26
+ spec.add_development_dependency 'rake', '>= 12.3.1'
27
+ spec.add_development_dependency 'rspec', '>= 3.8'
28
+ spec.add_development_dependency 'rubocop', '0.58.1'
29
+ spec.add_development_dependency 'rubocop-rspec', '1.30.0'
30
+ spec.add_development_dependency 'simplecov', '~> 0.16.x'
31
+ spec.add_development_dependency 'yard', '>= 0.9.18'
32
+ spec.add_development_dependency 'yardstick', '>= 0.9.9'
23
33
 
24
- spec.add_development_dependency 'bundler', '~> 1.6'
25
- spec.add_development_dependency 'pry-nav'
26
- spec.add_development_dependency 'rake', '>= 12.3.1'
27
- spec.add_development_dependency 'rspec', '>= 3.7'
28
- spec.add_development_dependency 'rubocop'
29
34
  spec.add_development_dependency 'safe_attribute_assignment'
30
- spec.add_development_dependency 'simplecov'
31
- spec.add_development_dependency 'yard'
32
35
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yardstick/rake/measurement'
4
+ require 'yardstick/rake/verify'
5
+ require 'yaml'
6
+
7
+ options = YAML.load_file('config/yardstick.yml')
8
+
9
+ Yardstick::Rake::Measurement.new(:yardstick_measure, options) do |measurement|
10
+ measurement.output = 'measurement/report.txt'
11
+ end
12
+
13
+ Yardstick::Rake::Verify.new(:verify_measurements, options)
@@ -0,0 +1,69 @@
1
+ threshold: 100
2
+ require_exact_threshold: false
3
+ rules:
4
+ ApiTag::Presence:
5
+ enabled: true
6
+ exclude: []
7
+ ApiTag::Inclusion:
8
+ enabled: true
9
+ exclude: []
10
+ ApiTag::ProtectedMethod:
11
+ enabled: true
12
+ exclude: []
13
+ ApiTag::PrivateMethod:
14
+ enabled: true
15
+ exclude: []
16
+ ExampleTag:
17
+ enabled: true
18
+ exclude: []
19
+ ReturnTag:
20
+ enabled: true
21
+ exclude:
22
+ - Arstotzka::Builder#attr_names
23
+ - Arstotzka::Builder#json_name
24
+ - Arstotzka::Builder#path
25
+ - Arstotzka::Builder#full_path
26
+ - Arstotzka::Builder#cached
27
+ - Arstotzka::Crawler#post_process
28
+ - Arstotzka::Crawler#path
29
+ - Arstotzka::Crawler#case_type
30
+ - Arstotzka::Crawler#compact
31
+ - Arstotzka::Crawler#default
32
+ - Arstotzka::Fetcher#path
33
+ - Arstotzka::Fetcher#hash
34
+ - Arstotzka::Fetcher#instance
35
+ - Arstotzka::Reader#path
36
+ - Arstotzka::Reader#case_type
37
+ - Arstotzka::Reader#change_case
38
+ - Arstotzka::Wrapper#clazz
39
+ - Arstotzka::Wrapper#type
40
+ Summary::Presence:
41
+ enabled: true
42
+ exclude:
43
+ - Arstotzka::Builder#attr_names
44
+ - Arstotzka::Builder#json_name
45
+ - Arstotzka::Builder#path
46
+ - Arstotzka::Builder#full_path
47
+ - Arstotzka::Builder#cached
48
+ - Arstotzka::Crawler#post_process
49
+ - Arstotzka::Crawler#path
50
+ - Arstotzka::Crawler#case_type
51
+ - Arstotzka::Crawler#compact
52
+ - Arstotzka::Crawler#default
53
+ - Arstotzka::Fetcher#path
54
+ - Arstotzka::Fetcher#hash
55
+ - Arstotzka::Fetcher#instance
56
+ - Arstotzka::Reader#path
57
+ - Arstotzka::Reader#case_type
58
+ - Arstotzka::Reader#change_case
59
+ - Arstotzka::Wrapper#clazz
60
+ - Arstotzka::Wrapper#type
61
+ Summary::Length:
62
+ enabled: true
63
+ exclude: []
64
+ Summary::Delimiter:
65
+ enabled: true
66
+ exclude: []
67
+ Summary::SingleLine:
68
+ enabled: true
69
+ exclude: []
data/docker-compose.yml CHANGED
@@ -1,18 +1,23 @@
1
- version: '2'
1
+ version: '3'
2
2
  services:
3
3
  base: &base
4
- image: ruby:2.4.0
5
- working_dir: /home/app/arstotzka
4
+ image: arstotzka
5
+ working_dir: /home/app/app
6
6
  volumes:
7
- - .:/home/app/arstotzka
8
- - arstotzka_gems_2_4_0:/usr/local/bundle
7
+ - .:/home/app/app
9
8
 
10
- #################### CONTAINERS ####################
9
+ base_build:
10
+ <<: *base
11
+ build: .
12
+ command: echo done
11
13
 
12
14
  arstotzka:
13
15
  <<: *base
14
16
  container_name: arstotzka
15
- command: /bin/bash -c 'bundle install && bundle exec rspec'
17
+ depends_on: [base_build]
18
+ command: /bin/bash -c 'rspec'
16
19
 
17
- volumes:
18
- arstotzka_gems_2_4_0:
20
+ test_all:
21
+ <<: *base
22
+ depends_on: [base_build]
23
+ command: /bin/bash -c 'rspec && yard && rake yardstick_measure && rake verify_measurements'
@@ -4,6 +4,8 @@ module Arstotzka
4
4
  # Class responsible to orchestrate the addtion of method that will
5
5
  # crawl the hash for value
6
6
  #
7
+ # @api private
8
+ #
7
9
  # @example
8
10
  # class MyModel
9
11
  # attr_reader :json
@@ -48,6 +50,7 @@ module Arstotzka
48
50
  type: :none
49
51
  }.freeze
50
52
 
53
+ # Returns new instance of Arstotzka::Builder
51
54
  # @param attr_names [Array] list of attributes to be fetched from the hash/json
52
55
  # @param clazz [Class] class to receive the methods
53
56
  # @param path [String/Symbol] path of hash attributes to find the root
@@ -89,26 +92,71 @@ module Arstotzka
89
92
 
90
93
  private
91
94
 
95
+ # @private
92
96
  attr_reader :attr_names, :json_name, :path, :full_path, :cached
93
97
 
98
+ # @private
99
+ #
100
+ # Initialize methods list
101
+ #
102
+ # @return nil
94
103
  def init
95
104
  attr_names.each do |attr|
96
105
  add_attr(attr)
97
106
  end
98
107
  end
99
108
 
109
+ # @private
110
+ #
111
+ # builds the complete key path to fetch value
112
+ #
113
+ # @param [String/Symbol] attribute name of the method / attribute
114
+ #
115
+ # @return [String] the keys path
100
116
  def real_path(attribute)
101
117
  full_path || [path, attribute].compact.join('.')
102
118
  end
103
119
 
120
+ # @private
121
+ #
122
+ # Fetch class to wrap resulting value
123
+ #
124
+ # after fetching the value, when wrapper_clazz returns
125
+ # a Class object, the value will be wrapped with
126
+ # +wrapper_clazz.new(value)+
127
+ #
128
+ # @return [Class] the class to wrap the resulting value
129
+ #
130
+ # @see Arstotzka::Wrapper
104
131
  def wrapper_clazz
105
132
  options[:class]
106
133
  end
107
134
 
135
+ # @private
136
+ #
137
+ # Fetches the case of the keys
138
+ #
139
+ # case types can be
140
+ # - lower_camel: keys in the hash are lowerCamelCase
141
+ # - upper_camel: keys in the hash are UpperCamelCase
142
+ # - snake: keys in the hash are snake_case
143
+ #
144
+ # @return [Symbol/String] defined case_type
145
+ #
146
+ # @see Arstotzka::Reader
108
147
  def case_type
109
148
  options[:case]
110
149
  end
111
150
 
151
+ # @private
152
+ #
153
+ # Options needed by fetcher
154
+ #
155
+ # @param [String/Symbol] attribute name of the method / attribute
156
+ #
157
+ # @return [Hash] options
158
+ #
159
+ # @see Arstotzka::Fetcher
112
160
  def fetcher_options(attribute)
113
161
  options.slice(:compact, :after, :type, :flatten, :default).merge(
114
162
  clazz: wrapper_clazz,
@@ -117,10 +165,27 @@ module Arstotzka
117
165
  )
118
166
  end
119
167
 
168
+ # @private
169
+ #
170
+ # Add method to the list of methods to be built
171
+ #
172
+ # @param [String/Symbol] attribute name of method / attribute
173
+ #
174
+ # @return nil
175
+ #
176
+ # @see Sinclair
120
177
  def add_attr(attribute)
121
178
  add_method attribute, (cached ? cached_fetcher(attribute) : attr_fetcher(attribute)).to_s
122
179
  end
123
180
 
181
+ # Returns the code needed to initialize fetcher
182
+ #
183
+ # @param [String/Symbol] attribute name of method / attribute
184
+ #
185
+ # @return [String] code
186
+ #
187
+ # @see Sinclair
188
+ # @see Artotzka::Fetcher
124
189
  def attr_fetcher(attribute)
125
190
  <<-CODE
126
191
  ::Arstotzka::Fetcher.new(
@@ -129,6 +194,13 @@ module Arstotzka
129
194
  CODE
130
195
  end
131
196
 
197
+ # Returns the code needed to initialize a fetche and cache it
198
+ #
199
+ # @param [String/Symbol] attribute name of method / attribute
200
+ #
201
+ # @return [String] code
202
+ #
203
+ # @see #attr_fetcher
132
204
  def cached_fetcher(attribute)
133
205
  <<-CODE
134
206
  @#{attribute} ||= #{attr_fetcher(attribute)}
@@ -4,7 +4,12 @@ module Arstotzka
4
4
  # As Arstotzka extends ActiveSupport::Concern, Arstotzka::ClassMethods define
5
5
  # methods that will be available when defining a class that includes Arstotka
6
6
  module ClassMethods
7
- # expose a field from the json/hash as a method
7
+ private
8
+
9
+ # @api public
10
+ # @!visibility public
11
+ #
12
+ # Expose a field from the json/hash as a method
8
13
  #
9
14
  # @example
10
15
  # class MyModel
@@ -30,9 +35,11 @@ module Arstotzka
30
35
  # instance.age # returns 20
31
36
  # instance.cars # returns 2
32
37
  #
38
+ # @return nil
39
+ #
33
40
  # @see Builder Arstotzka::Builder
34
41
  # @see
35
- # https://www.rubydoc.info/gems/activesupport/5.0.0.1/ActiveSupport/Concern
42
+ # https://www.rubydoc.info/gems/activesupport/5.2.2/ActiveSupport/Concern
36
43
  # ActiveSupport::Concern
37
44
  def expose(*attr_names, **options)
38
45
  options = Builder::DEFAULT_OPTIONS.merge(options.symbolize_keys)
@@ -2,6 +2,9 @@
2
2
 
3
3
  module Arstotzka
4
4
  # Crawl a hash through the path of keys
5
+ #
6
+ # @api private
7
+ #
5
8
  # @example
6
9
  # crawler = Arstotzka::Crawler.new(%w(person information first_name))
7
10
  # hash = {
@@ -13,6 +16,8 @@ module Arstotzka
13
16
  # }
14
17
  # crawler.value(hash) # returns 'John'
15
18
  class Crawler
19
+ # Creates a new instance of Crawler
20
+ #
16
21
  # @param path [Array] path of keys to be crawled
17
22
  # @param case_type [Symbol] case type of the keys
18
23
  # - snake: snake_cased keys
@@ -29,9 +34,7 @@ module Arstotzka
29
34
  @post_process = block || proc { |value| value }
30
35
  end
31
36
 
32
- # crawls into the hash looking for all keys in the given path
33
- # returning the final value
34
- #
37
+ # Crawls into the hash looking for all keys in the given path
35
38
  # @overload value(hash)
36
39
  # @return [Object] value fetched from the last Hash#fetch call using the last part
37
40
  # of path
@@ -91,8 +94,33 @@ module Arstotzka
91
94
 
92
95
  private
93
96
 
97
+ # @private
94
98
  attr_reader :post_process, :path, :case_type, :compact, :default
95
99
 
100
+ # Fetch the value from hash by crawling the keys
101
+ #
102
+ # The crawling is similar to fetching values in a chain
103
+ # <code>
104
+ # { a: { b: 10 } }.fetch(:a).fetch(:b)
105
+ # </code>
106
+ # with added features like accessing string and
107
+ # symbol keys alike, wrapping the values in new objects,
108
+ # post processing the values, treating arrays as collection
109
+ # of hashes, etc...
110
+ #
111
+ # Once the value is found (with final key), it is wrapped
112
+ #
113
+ # If value found in any step (except finel step) and this
114
+ # is an Array, then next interations will happen with it
115
+ # element of the array, returning an array of results
116
+ #
117
+ # @param [Hash] hash the hash to be crawled
118
+ # @param [Integer] index the index of the key to be used in the current iteration
119
+ #
120
+ # @return [Object] value found at the lest key after transformation
121
+ #
122
+ # @see #wrap
123
+ # @see #crawl_array
96
124
  def crawl(hash, index = 0)
97
125
  return wrap(hash) if reader.ended?(index)
98
126
  return crawl_array(hash, index) if hash.is_a?(Array)
@@ -100,6 +128,11 @@ module Arstotzka
100
128
  crawl(reader.read(hash, index), index + 1)
101
129
  end
102
130
 
131
+ # @private
132
+ #
133
+ # Builds a hash reader
134
+ #
135
+ # @return [Arstotzka::Reader] Object responsible for extracting values out of the hash
103
136
  def reader
104
137
  @reader ||= Arstotzka::Reader.new(
105
138
  path: path,
@@ -107,10 +140,28 @@ module Arstotzka
107
140
  )
108
141
  end
109
142
 
110
- def wrap(hash)
111
- post_process.call(hash)
143
+ # @private
144
+ #
145
+ # Wrap value with final calls
146
+ #
147
+ # The final value can be wrapped in a class, or processed
148
+ # via instance method call
149
+ #
150
+ # @param [Object] value the value to be wrapped
151
+ # @return [Object] the post-processed / wraped value
152
+ def wrap(value)
153
+ post_process.call(value)
112
154
  end
113
155
 
156
+ # @private
157
+ #
158
+ # Iterate over array applying #crawl over each element
159
+ #
160
+ # @param [Array] array the array of hashes be crawled
161
+ # @param [Integer] index the index of the key to be used in the current iteration
162
+ #
163
+ # @return [Array] the new array with the individual values returned
164
+ # @see #crawl
114
165
  def crawl_array(array, index)
115
166
  array.map { |j| value(j, index) }.tap do |a|
116
167
  a.compact! if compact
@@ -1,11 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Arstotzka
4
+ # @api private
5
+ #
4
6
  # Class responsible for orquestrating the fetch value from the hash
5
7
  # and post-processing it
6
8
  class Fetcher
7
9
  include Sinclair::OptionsParser
8
10
 
11
+ # Creates an instance of Artotzka::Fetcher
12
+ #
9
13
  # @param hash [Hash] Hash to be crawled for value
10
14
  # @param instance [Object] object whose methods will be called after for processing
11
15
  # @param path [String/Symbol] complete path for fetching the value from hash
@@ -17,8 +21,12 @@ module Arstotzka
17
21
  @options = options
18
22
  end
19
23
 
20
- # Crawls the hash for the value, applying then the final transformations on the final
21
- # result (collection not value)
24
+ # Crawls the hash for the value
25
+ #
26
+ # After the crawling, final transformation is applied on
27
+ # the final result (collection not value)
28
+ #
29
+ # @return [Object] The final value found and transformed
22
30
  #
23
31
  # @example
24
32
  # class Transaction
@@ -73,33 +81,54 @@ module Arstotzka
73
81
 
74
82
  private
75
83
 
84
+ # @private
76
85
  attr_reader :path, :hash, :instance
77
86
 
78
87
  delegate :after, :flatten, to: :options_object
79
88
  delegate :wrap, to: :wrapper
80
89
 
90
+ # @private
91
+ #
92
+ # Returns an instance of Aristotzka::Craler
93
+ #
94
+ # craler will be responsible to crawl the hash for
95
+ # the final return
96
+ #
97
+ # @return [Arstotzka::Crawler] the crawler object
81
98
  def crawler
82
- @crawler ||= buidl_crawler
83
- end
84
-
85
- def buidl_crawler
86
- Arstotzka::Crawler.new(crawler_options) do |value|
87
- wrap(value)
88
- end
99
+ @crawler ||=
100
+ Arstotzka::Crawler.new(crawler_options) do |value|
101
+ wrap(value)
102
+ end
89
103
  end
90
104
 
105
+ # @private
106
+ #
107
+ # Hash for crawler initialization
108
+ #
109
+ # @return [Hash]
110
+ #
111
+ # @see #crawler
91
112
  def crawler_options
92
113
  options.slice(:case_type, :compact, :default).merge(path: path)
93
114
  end
94
115
 
116
+ # @private
117
+ #
118
+ # Wrapper responsible for wrapping the value found
119
+ #
120
+ # @return [Arstotzka::Wrapper] the wrapper
95
121
  def wrapper
96
- @wrapper ||= build_wrapper
97
- end
98
-
99
- def build_wrapper
100
- Arstotzka::Wrapper.new(wrapper_options)
122
+ @wrapper ||= Arstotzka::Wrapper.new(wrapper_options)
101
123
  end
102
124
 
125
+ # @private
126
+ #
127
+ # Hash for wrapper initialization
128
+ #
129
+ # @return [Hash]
130
+ #
131
+ # @see #wrapper
103
132
  def wrapper_options
104
133
  options.slice(:clazz, :type)
105
134
  end