pricehubble 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. checksums.yaml +7 -0
  2. data/.editorconfig +30 -0
  3. data/.gitignore +16 -0
  4. data/.rspec +3 -0
  5. data/.rubocop.yml +62 -0
  6. data/.simplecov +3 -0
  7. data/.travis.yml +27 -0
  8. data/.yardopts +6 -0
  9. data/Appraisals +25 -0
  10. data/CHANGELOG.md +9 -0
  11. data/Dockerfile +29 -0
  12. data/Envfile +6 -0
  13. data/Gemfile +8 -0
  14. data/LICENSE +21 -0
  15. data/Makefile +149 -0
  16. data/README.md +385 -0
  17. data/Rakefile +80 -0
  18. data/bin/console +16 -0
  19. data/bin/run +12 -0
  20. data/bin/setup +8 -0
  21. data/config/docker/.bash_profile +3 -0
  22. data/config/docker/.bashrc +48 -0
  23. data/config/docker/.inputrc +17 -0
  24. data/doc/assets/project.svg +68 -0
  25. data/doc/examples/authentication.rb +19 -0
  26. data/doc/examples/complex_property_valuations.rb +91 -0
  27. data/doc/examples/config.rb +30 -0
  28. data/doc/examples/property_valuations_errors.rb +30 -0
  29. data/doc/examples/simple_property_valuations.rb +69 -0
  30. data/docker-compose.yml +9 -0
  31. data/gemfiles/rails_4.2.gemfile +11 -0
  32. data/gemfiles/rails_5.0.gemfile +11 -0
  33. data/gemfiles/rails_5.1.gemfile +11 -0
  34. data/gemfiles/rails_5.2.gemfile +11 -0
  35. data/lib/price_hubble.rb +3 -0
  36. data/lib/pricehubble/client/authentication.rb +29 -0
  37. data/lib/pricehubble/client/base.rb +59 -0
  38. data/lib/pricehubble/client/request/data_sanitization.rb +28 -0
  39. data/lib/pricehubble/client/request/default_headers.rb +33 -0
  40. data/lib/pricehubble/client/response/data_sanitization.rb +29 -0
  41. data/lib/pricehubble/client/response/recursive_open_struct.rb +31 -0
  42. data/lib/pricehubble/client/utils/request.rb +41 -0
  43. data/lib/pricehubble/client/utils/response.rb +60 -0
  44. data/lib/pricehubble/client/valuation.rb +68 -0
  45. data/lib/pricehubble/client.rb +25 -0
  46. data/lib/pricehubble/configuration.rb +26 -0
  47. data/lib/pricehubble/configuration_handling.rb +50 -0
  48. data/lib/pricehubble/core_ext/hash.rb +52 -0
  49. data/lib/pricehubble/entity/address.rb +11 -0
  50. data/lib/pricehubble/entity/authentication.rb +34 -0
  51. data/lib/pricehubble/entity/base_entity.rb +63 -0
  52. data/lib/pricehubble/entity/concern/associations.rb +197 -0
  53. data/lib/pricehubble/entity/concern/attributes/date_array.rb +29 -0
  54. data/lib/pricehubble/entity/concern/attributes/enum.rb +57 -0
  55. data/lib/pricehubble/entity/concern/attributes/range.rb +32 -0
  56. data/lib/pricehubble/entity/concern/attributes/string_inquirer.rb +27 -0
  57. data/lib/pricehubble/entity/concern/attributes.rb +171 -0
  58. data/lib/pricehubble/entity/concern/callbacks.rb +19 -0
  59. data/lib/pricehubble/entity/concern/client.rb +31 -0
  60. data/lib/pricehubble/entity/coordinates.rb +11 -0
  61. data/lib/pricehubble/entity/location.rb +14 -0
  62. data/lib/pricehubble/entity/property.rb +32 -0
  63. data/lib/pricehubble/entity/property_conditions.rb +20 -0
  64. data/lib/pricehubble/entity/property_qualities.rb +20 -0
  65. data/lib/pricehubble/entity/property_type.rb +21 -0
  66. data/lib/pricehubble/entity/valuation.rb +48 -0
  67. data/lib/pricehubble/entity/valuation_request.rb +60 -0
  68. data/lib/pricehubble/entity/valuation_scores.rb +11 -0
  69. data/lib/pricehubble/errors.rb +60 -0
  70. data/lib/pricehubble/faraday.rb +12 -0
  71. data/lib/pricehubble/identity.rb +46 -0
  72. data/lib/pricehubble/railtie.rb +16 -0
  73. data/lib/pricehubble/utils/bangers.rb +44 -0
  74. data/lib/pricehubble/utils/decision.rb +97 -0
  75. data/lib/pricehubble/version.rb +6 -0
  76. data/lib/pricehubble.rb +103 -0
  77. data/pricehubble.gemspec +47 -0
  78. metadata +432 -0
@@ -0,0 +1,97 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PriceHubble
4
+ module Utils
5
+ # Provides an easy to use decision DSL which works like a flow control.
6
+ # (eg. if conditions, or a switch statement) It should DRY out the
7
+ # processing logic on clients, while make decisions about the status of the
8
+ # response. The decision helper evaluates the answers to: Should we raise
9
+ # an error or return a default value? Was the response any good?
10
+ #
11
+ # Example:
12
+ #
13
+ # decision(bang: true) do |result|
14
+ # result.fail { nil }
15
+ # result.bang { Hausgold::AuthenticationError.new(nil, res, res.body) }
16
+ # result.good { Hausgold::Jwt.new(res.body).clear_changes }
17
+ # successful?(res)
18
+ # end
19
+ module Decision
20
+ extend ActiveSupport::Concern
21
+
22
+ included do
23
+ # Allow users to build decision paths and run them according to the
24
+ # result. This is a kind of flow control like an if condition, or a
25
+ # switch statement. It contains three decision result paths, the happy
26
+ # case (good), an error case for regular issues (fail) and a error case
27
+ # for fatal issues (bang). You can configure the decision which error
28
+ # behaiviour you prefer by setting the +bang+ argument to true or
29
+ # false.
30
+ #
31
+ # @param bang [Boolean] whenever to bang or not
32
+ # @yield Runtime to collect the settings and the result
33
+ # @return [Mixed] the result of the decision (good|fail|bang) block
34
+ def decision(bang: false, &block)
35
+ runtime = Runtime.new(on_error: bang ? :bang : :fail)
36
+ runtime.evaluate(&block)
37
+ end
38
+ end
39
+
40
+ # An inline runtime class to abstract the decision making.
41
+ class Runtime
42
+ # Generate getters for the runtime settings
43
+ attr_reader :on_error, :bang_proc, :fail_proc, :good_proc
44
+
45
+ # Create a new decision runtime object which collect all the result
46
+ # paths, and then evaluates the decision.
47
+ #
48
+ # @param on_error [Symbol] the error way
49
+ def initialize(on_error: :fail)
50
+ @on_error = on_error
51
+ @bang_proc = -> { StandardError.new }
52
+ @fail_proc = @good_proc = -> { nil }
53
+ end
54
+
55
+ # Register a new error (bang) way. Requires a block.
56
+ #
57
+ # @param block [Proc] the block to run in case of errors
58
+ def bang(&block)
59
+ @bang_proc = block
60
+ end
61
+
62
+ # Register a new error (fail) way. Requires a block.
63
+ #
64
+ # @param block [Proc] the block to run in case of errors
65
+ def fail(&block)
66
+ @fail_proc = block
67
+ end
68
+
69
+ # Register a new success (good) way. Requires a block.
70
+ #
71
+ # @param block [Proc] the block to run in case of success
72
+ def good(&block)
73
+ @good_proc = block
74
+ end
75
+
76
+ # Returns the prefered error method block, based on the +on_error+
77
+ # setting.
78
+ #
79
+ # @return [Proc] the error block we should use
80
+ def error_proc
81
+ return fail_proc if on_error == :fail
82
+
83
+ -> { raise bang_proc.call }
84
+ end
85
+
86
+ # Evaluate the decision.
87
+ #
88
+ # @yield Runtime to collect the settings and the result
89
+ # @return [Mixed] the result of the decision (good|fail|bang) block
90
+ def evaluate
91
+ result = yield(self)
92
+ result ? good_proc.call : error_proc.call
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PriceHubble
4
+ # The version of the +price-hubble+ gem
5
+ VERSION = '0.1.0'
6
+ end
@@ -0,0 +1,103 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support'
4
+ require 'active_support/concern'
5
+ require 'active_support/configurable'
6
+ require 'active_support/time'
7
+ require 'active_support/time_with_zone'
8
+ require 'active_support/core_ext/object'
9
+ require 'active_support/core_ext/module'
10
+ require 'active_support/core_ext/hash'
11
+ require 'active_support/core_ext/string'
12
+ require 'active_model'
13
+ require 'recursive-open-struct'
14
+ require 'faraday'
15
+ require 'faraday_middleware'
16
+ require 'pp'
17
+
18
+ # Load polyfills if needed
19
+ require 'pricehubble/core_ext/hash'
20
+
21
+ # The top level namespace for the PriceHubble gem.
22
+ module PriceHubble
23
+ # Top level elements
24
+ autoload :Configuration, 'pricehubble/configuration'
25
+ autoload :ConfigurationHandling, 'pricehubble/configuration_handling'
26
+ autoload :Client, 'pricehubble/client'
27
+ autoload :Identity, 'pricehubble/identity'
28
+
29
+ # Entities
30
+ autoload :BaseEntity, 'pricehubble/entity/base_entity'
31
+ autoload :Authentication, 'pricehubble/entity/authentication'
32
+ autoload :Valuation, 'pricehubble/entity/valuation'
33
+ autoload :ValuationScores, 'pricehubble/entity/valuation_scores'
34
+ autoload :ValuationRequest, 'pricehubble/entity/valuation_request'
35
+ autoload :Property, 'pricehubble/entity/property'
36
+ autoload :PropertyConditions, 'pricehubble/entity/property_conditions'
37
+ autoload :PropertyQualities, 'pricehubble/entity/property_qualities'
38
+ autoload :PropertyType, 'pricehubble/entity/property_type'
39
+ autoload :Location, 'pricehubble/entity/location'
40
+ autoload :Address, 'pricehubble/entity/address'
41
+ autoload :Coordinates, 'pricehubble/entity/coordinates'
42
+
43
+ # Some general purpose utilities
44
+ module Utils
45
+ autoload :Decision, 'pricehubble/utils/decision'
46
+ autoload :Bangers, 'pricehubble/utils/bangers'
47
+ end
48
+
49
+ # Dedicated application HTTP (low level) client
50
+ module Client
51
+ # All our utilities used for the low level client
52
+ module Utils
53
+ autoload :Request, 'pricehubble/client/utils/request'
54
+ autoload :Response, 'pricehubble/client/utils/response'
55
+ end
56
+
57
+ # Faraday request middlewares
58
+ module Request
59
+ autoload :DataSanitization, 'pricehubble/client/request/data_sanitization'
60
+ autoload :DefaultHeaders, 'pricehubble/client/request/default_headers'
61
+ end
62
+
63
+ # Faraday response middlewares
64
+ module Response
65
+ autoload :DataSanitization,
66
+ 'pricehubble/client/response/data_sanitization'
67
+ autoload :RecursiveOpenStruct,
68
+ 'pricehubble/client/response/recursive_open_struct'
69
+ end
70
+
71
+ autoload :Base, 'pricehubble/client/base'
72
+ autoload :Authentication, 'pricehubble/client/authentication'
73
+ autoload :Valuation, 'pricehubble/client/valuation'
74
+ end
75
+
76
+ # Separated features of an entity instance
77
+ module EntityConcern
78
+ autoload :Callbacks, 'pricehubble/entity/concern/callbacks'
79
+ autoload :Attributes, 'pricehubble/entity/concern/attributes'
80
+ autoload :Associations, 'pricehubble/entity/concern/associations'
81
+ autoload :Client, 'pricehubble/entity/concern/client'
82
+
83
+ # Some custom typed attribute helpers
84
+ module Attributes
85
+ base = 'pricehubble/entity/concern/attributes'
86
+ autoload :DateArray, "#{base}/date_array"
87
+ autoload :Enum, "#{base}/enum"
88
+ autoload :Range, "#{base}/range"
89
+ autoload :StringInquirer, "#{base}/string_inquirer"
90
+ end
91
+ end
92
+
93
+ # Load standalone code
94
+ require 'pricehubble/version'
95
+ require 'pricehubble/errors'
96
+ require 'pricehubble/faraday'
97
+ require 'pricehubble/railtie' if defined? Rails
98
+
99
+ # Include top-level features
100
+ include PriceHubble::ConfigurationHandling
101
+ include PriceHubble::Client
102
+ include PriceHubble::Identity
103
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'pricehubble/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = 'pricehubble'
9
+ spec.version = PriceHubble::VERSION
10
+ spec.authors = ['Hermann Mayer']
11
+ spec.email = ['hermann.mayer92@gmail.com']
12
+
13
+ spec.summary = 'Ruby client for the PriceHubble REST API'
14
+ spec.description = 'Ruby client for the PriceHubble REST API'
15
+ spec.homepage = 'https://github.com/hausgold/pricehubble'
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
+ f.match(%r{^(test|spec|features)/})
19
+ end
20
+ spec.bindir = 'exe'
21
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
+ spec.require_paths = ['lib']
23
+
24
+ spec.add_runtime_dependency 'activemodel', '>= 4.2.0'
25
+ spec.add_runtime_dependency 'activesupport', '>= 4.2.0'
26
+ spec.add_runtime_dependency 'faraday', '~> 0.15'
27
+ spec.add_runtime_dependency 'faraday_middleware', '~> 0.12'
28
+ spec.add_runtime_dependency 'recursive-open-struct', '~> 1.1'
29
+
30
+ spec.add_development_dependency 'appraisal'
31
+ spec.add_development_dependency 'bundler', '>= 1.16', '< 3'
32
+ spec.add_development_dependency 'factory_bot', '~> 4.11'
33
+ spec.add_development_dependency 'railties', '>= 4.2.0'
34
+ spec.add_development_dependency 'rake', '~> 10.0'
35
+ spec.add_development_dependency 'rdoc', '~> 6.1'
36
+ spec.add_development_dependency 'redcarpet', '~> 3.4'
37
+ spec.add_development_dependency 'rspec', '~> 3.0'
38
+ spec.add_development_dependency 'rubocop', '~> 0.63.1'
39
+ spec.add_development_dependency 'rubocop-rspec', '~> 1.31'
40
+ spec.add_development_dependency 'simplecov', '~> 0.15'
41
+ spec.add_development_dependency 'terminal-table', '~> 1.8'
42
+ spec.add_development_dependency 'timecop', '~> 0.9.1'
43
+ spec.add_development_dependency 'vcr', '~> 3.0'
44
+ spec.add_development_dependency 'webmock', '~> 3.5'
45
+ spec.add_development_dependency 'yard', '~> 0.9.18'
46
+ spec.add_development_dependency 'yard-activesupport-concern', '~> 0.0.1'
47
+ end
metadata ADDED
@@ -0,0 +1,432 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pricehubble
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Hermann Mayer
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2019-10-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activemodel
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 4.2.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 4.2.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 4.2.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 4.2.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: faraday
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.15'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.15'
55
+ - !ruby/object:Gem::Dependency
56
+ name: faraday_middleware
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.12'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.12'
69
+ - !ruby/object:Gem::Dependency
70
+ name: recursive-open-struct
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.1'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.1'
83
+ - !ruby/object:Gem::Dependency
84
+ name: appraisal
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: bundler
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '1.16'
104
+ - - "<"
105
+ - !ruby/object:Gem::Version
106
+ version: '3'
107
+ type: :development
108
+ prerelease: false
109
+ version_requirements: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: '1.16'
114
+ - - "<"
115
+ - !ruby/object:Gem::Version
116
+ version: '3'
117
+ - !ruby/object:Gem::Dependency
118
+ name: factory_bot
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '4.11'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '4.11'
131
+ - !ruby/object:Gem::Dependency
132
+ name: railties
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: 4.2.0
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: 4.2.0
145
+ - !ruby/object:Gem::Dependency
146
+ name: rake
147
+ requirement: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '10.0'
152
+ type: :development
153
+ prerelease: false
154
+ version_requirements: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - "~>"
157
+ - !ruby/object:Gem::Version
158
+ version: '10.0'
159
+ - !ruby/object:Gem::Dependency
160
+ name: rdoc
161
+ requirement: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - "~>"
164
+ - !ruby/object:Gem::Version
165
+ version: '6.1'
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - "~>"
171
+ - !ruby/object:Gem::Version
172
+ version: '6.1'
173
+ - !ruby/object:Gem::Dependency
174
+ name: redcarpet
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - "~>"
178
+ - !ruby/object:Gem::Version
179
+ version: '3.4'
180
+ type: :development
181
+ prerelease: false
182
+ version_requirements: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - "~>"
185
+ - !ruby/object:Gem::Version
186
+ version: '3.4'
187
+ - !ruby/object:Gem::Dependency
188
+ name: rspec
189
+ requirement: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - "~>"
192
+ - !ruby/object:Gem::Version
193
+ version: '3.0'
194
+ type: :development
195
+ prerelease: false
196
+ version_requirements: !ruby/object:Gem::Requirement
197
+ requirements:
198
+ - - "~>"
199
+ - !ruby/object:Gem::Version
200
+ version: '3.0'
201
+ - !ruby/object:Gem::Dependency
202
+ name: rubocop
203
+ requirement: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - "~>"
206
+ - !ruby/object:Gem::Version
207
+ version: 0.63.1
208
+ type: :development
209
+ prerelease: false
210
+ version_requirements: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - "~>"
213
+ - !ruby/object:Gem::Version
214
+ version: 0.63.1
215
+ - !ruby/object:Gem::Dependency
216
+ name: rubocop-rspec
217
+ requirement: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - "~>"
220
+ - !ruby/object:Gem::Version
221
+ version: '1.31'
222
+ type: :development
223
+ prerelease: false
224
+ version_requirements: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - "~>"
227
+ - !ruby/object:Gem::Version
228
+ version: '1.31'
229
+ - !ruby/object:Gem::Dependency
230
+ name: simplecov
231
+ requirement: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - "~>"
234
+ - !ruby/object:Gem::Version
235
+ version: '0.15'
236
+ type: :development
237
+ prerelease: false
238
+ version_requirements: !ruby/object:Gem::Requirement
239
+ requirements:
240
+ - - "~>"
241
+ - !ruby/object:Gem::Version
242
+ version: '0.15'
243
+ - !ruby/object:Gem::Dependency
244
+ name: terminal-table
245
+ requirement: !ruby/object:Gem::Requirement
246
+ requirements:
247
+ - - "~>"
248
+ - !ruby/object:Gem::Version
249
+ version: '1.8'
250
+ type: :development
251
+ prerelease: false
252
+ version_requirements: !ruby/object:Gem::Requirement
253
+ requirements:
254
+ - - "~>"
255
+ - !ruby/object:Gem::Version
256
+ version: '1.8'
257
+ - !ruby/object:Gem::Dependency
258
+ name: timecop
259
+ requirement: !ruby/object:Gem::Requirement
260
+ requirements:
261
+ - - "~>"
262
+ - !ruby/object:Gem::Version
263
+ version: 0.9.1
264
+ type: :development
265
+ prerelease: false
266
+ version_requirements: !ruby/object:Gem::Requirement
267
+ requirements:
268
+ - - "~>"
269
+ - !ruby/object:Gem::Version
270
+ version: 0.9.1
271
+ - !ruby/object:Gem::Dependency
272
+ name: vcr
273
+ requirement: !ruby/object:Gem::Requirement
274
+ requirements:
275
+ - - "~>"
276
+ - !ruby/object:Gem::Version
277
+ version: '3.0'
278
+ type: :development
279
+ prerelease: false
280
+ version_requirements: !ruby/object:Gem::Requirement
281
+ requirements:
282
+ - - "~>"
283
+ - !ruby/object:Gem::Version
284
+ version: '3.0'
285
+ - !ruby/object:Gem::Dependency
286
+ name: webmock
287
+ requirement: !ruby/object:Gem::Requirement
288
+ requirements:
289
+ - - "~>"
290
+ - !ruby/object:Gem::Version
291
+ version: '3.5'
292
+ type: :development
293
+ prerelease: false
294
+ version_requirements: !ruby/object:Gem::Requirement
295
+ requirements:
296
+ - - "~>"
297
+ - !ruby/object:Gem::Version
298
+ version: '3.5'
299
+ - !ruby/object:Gem::Dependency
300
+ name: yard
301
+ requirement: !ruby/object:Gem::Requirement
302
+ requirements:
303
+ - - "~>"
304
+ - !ruby/object:Gem::Version
305
+ version: 0.9.18
306
+ type: :development
307
+ prerelease: false
308
+ version_requirements: !ruby/object:Gem::Requirement
309
+ requirements:
310
+ - - "~>"
311
+ - !ruby/object:Gem::Version
312
+ version: 0.9.18
313
+ - !ruby/object:Gem::Dependency
314
+ name: yard-activesupport-concern
315
+ requirement: !ruby/object:Gem::Requirement
316
+ requirements:
317
+ - - "~>"
318
+ - !ruby/object:Gem::Version
319
+ version: 0.0.1
320
+ type: :development
321
+ prerelease: false
322
+ version_requirements: !ruby/object:Gem::Requirement
323
+ requirements:
324
+ - - "~>"
325
+ - !ruby/object:Gem::Version
326
+ version: 0.0.1
327
+ description: Ruby client for the PriceHubble REST API
328
+ email:
329
+ - hermann.mayer92@gmail.com
330
+ executables: []
331
+ extensions: []
332
+ extra_rdoc_files: []
333
+ files:
334
+ - ".editorconfig"
335
+ - ".gitignore"
336
+ - ".rspec"
337
+ - ".rubocop.yml"
338
+ - ".simplecov"
339
+ - ".travis.yml"
340
+ - ".yardopts"
341
+ - Appraisals
342
+ - CHANGELOG.md
343
+ - Dockerfile
344
+ - Envfile
345
+ - Gemfile
346
+ - LICENSE
347
+ - Makefile
348
+ - README.md
349
+ - Rakefile
350
+ - bin/console
351
+ - bin/run
352
+ - bin/setup
353
+ - config/docker/.bash_profile
354
+ - config/docker/.bashrc
355
+ - config/docker/.inputrc
356
+ - doc/assets/project.svg
357
+ - doc/examples/authentication.rb
358
+ - doc/examples/complex_property_valuations.rb
359
+ - doc/examples/config.rb
360
+ - doc/examples/property_valuations_errors.rb
361
+ - doc/examples/simple_property_valuations.rb
362
+ - docker-compose.yml
363
+ - gemfiles/rails_4.2.gemfile
364
+ - gemfiles/rails_5.0.gemfile
365
+ - gemfiles/rails_5.1.gemfile
366
+ - gemfiles/rails_5.2.gemfile
367
+ - lib/price_hubble.rb
368
+ - lib/pricehubble.rb
369
+ - lib/pricehubble/client.rb
370
+ - lib/pricehubble/client/authentication.rb
371
+ - lib/pricehubble/client/base.rb
372
+ - lib/pricehubble/client/request/data_sanitization.rb
373
+ - lib/pricehubble/client/request/default_headers.rb
374
+ - lib/pricehubble/client/response/data_sanitization.rb
375
+ - lib/pricehubble/client/response/recursive_open_struct.rb
376
+ - lib/pricehubble/client/utils/request.rb
377
+ - lib/pricehubble/client/utils/response.rb
378
+ - lib/pricehubble/client/valuation.rb
379
+ - lib/pricehubble/configuration.rb
380
+ - lib/pricehubble/configuration_handling.rb
381
+ - lib/pricehubble/core_ext/hash.rb
382
+ - lib/pricehubble/entity/address.rb
383
+ - lib/pricehubble/entity/authentication.rb
384
+ - lib/pricehubble/entity/base_entity.rb
385
+ - lib/pricehubble/entity/concern/associations.rb
386
+ - lib/pricehubble/entity/concern/attributes.rb
387
+ - lib/pricehubble/entity/concern/attributes/date_array.rb
388
+ - lib/pricehubble/entity/concern/attributes/enum.rb
389
+ - lib/pricehubble/entity/concern/attributes/range.rb
390
+ - lib/pricehubble/entity/concern/attributes/string_inquirer.rb
391
+ - lib/pricehubble/entity/concern/callbacks.rb
392
+ - lib/pricehubble/entity/concern/client.rb
393
+ - lib/pricehubble/entity/coordinates.rb
394
+ - lib/pricehubble/entity/location.rb
395
+ - lib/pricehubble/entity/property.rb
396
+ - lib/pricehubble/entity/property_conditions.rb
397
+ - lib/pricehubble/entity/property_qualities.rb
398
+ - lib/pricehubble/entity/property_type.rb
399
+ - lib/pricehubble/entity/valuation.rb
400
+ - lib/pricehubble/entity/valuation_request.rb
401
+ - lib/pricehubble/entity/valuation_scores.rb
402
+ - lib/pricehubble/errors.rb
403
+ - lib/pricehubble/faraday.rb
404
+ - lib/pricehubble/identity.rb
405
+ - lib/pricehubble/railtie.rb
406
+ - lib/pricehubble/utils/bangers.rb
407
+ - lib/pricehubble/utils/decision.rb
408
+ - lib/pricehubble/version.rb
409
+ - pricehubble.gemspec
410
+ homepage: https://github.com/hausgold/pricehubble
411
+ licenses: []
412
+ metadata: {}
413
+ post_install_message:
414
+ rdoc_options: []
415
+ require_paths:
416
+ - lib
417
+ required_ruby_version: !ruby/object:Gem::Requirement
418
+ requirements:
419
+ - - ">="
420
+ - !ruby/object:Gem::Version
421
+ version: '0'
422
+ required_rubygems_version: !ruby/object:Gem::Requirement
423
+ requirements:
424
+ - - ">="
425
+ - !ruby/object:Gem::Version
426
+ version: '0'
427
+ requirements: []
428
+ rubygems_version: 3.0.6
429
+ signing_key:
430
+ specification_version: 4
431
+ summary: Ruby client for the PriceHubble REST API
432
+ test_files: []