pricefinder 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.byebug_history +12 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/Guardfile +70 -0
- data/LICENSE.txt +21 -0
- data/README.md +59 -0
- data/Rakefile +11 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/pricefinder.rb +13 -0
- data/lib/pricefinder/client.rb +124 -0
- data/lib/pricefinder/configuration.rb +37 -0
- data/lib/pricefinder/error.rb +41 -0
- data/lib/pricefinder/utilities.rb +5 -0
- data/lib/pricefinder/version.rb +3 -0
- data/pricefinder.gemspec +34 -0
- metadata +217 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 173e1729c9eeb40ff894c42a0f616b09f9d92d22
|
4
|
+
data.tar.gz: 3759e34aaf4c27554d017d90e84b3615390948ee
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a0978fa203c386958076ed64487b1deab99f6b7558d512635dcf1c88b75b0231c445549aee13bcea0906367b53819d781e10715975e5a99da8f2c046f1ec8462
|
7
|
+
data.tar.gz: c35cf6a005b51fbc3fcbc64c55c43311112809963cd4eb474002157f5a72395c91e6e11d9fd4a8999fc8e2db11fcb19bb427e0b5611fd6923c1c1540421c6641
|
data/.byebug_history
ADDED
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
## Uncomment and set this to only include directories you want to watch
|
5
|
+
# directories %w(app lib config test spec features) \
|
6
|
+
# .select{|d| Dir.exists?(d) ? d : UI.warning("Directory #{d} does not exist")}
|
7
|
+
|
8
|
+
## Note: if you are using the `directories` clause above and you are not
|
9
|
+
## watching the project directory ('.'), then you will want to move
|
10
|
+
## the Guardfile to a watched dir and symlink it back, e.g.
|
11
|
+
#
|
12
|
+
# $ mkdir config
|
13
|
+
# $ mv Guardfile config/
|
14
|
+
# $ ln -s config/Guardfile .
|
15
|
+
#
|
16
|
+
# and, you'll have to watch "config/Guardfile" instead of "Guardfile"
|
17
|
+
|
18
|
+
# Note: The cmd option is now required due to the increasing number of ways
|
19
|
+
# rspec may be run, below are examples of the most common uses.
|
20
|
+
# * bundler: 'bundle exec rspec'
|
21
|
+
# * bundler binstubs: 'bin/rspec'
|
22
|
+
# * spring: 'bin/rspec' (This will use spring if running and you have
|
23
|
+
# installed the spring binstubs per the docs)
|
24
|
+
# * zeus: 'zeus rspec' (requires the server to be started separately)
|
25
|
+
# * 'just' rspec: 'rspec'
|
26
|
+
|
27
|
+
guard :rspec, cmd: "bundle exec rspec" do
|
28
|
+
require "guard/rspec/dsl"
|
29
|
+
dsl = Guard::RSpec::Dsl.new(self)
|
30
|
+
|
31
|
+
# Feel free to open issues for suggestions and improvements
|
32
|
+
|
33
|
+
# RSpec files
|
34
|
+
rspec = dsl.rspec
|
35
|
+
watch(rspec.spec_helper) { rspec.spec_dir }
|
36
|
+
watch(rspec.spec_support) { rspec.spec_dir }
|
37
|
+
watch(rspec.spec_files)
|
38
|
+
|
39
|
+
# Ruby files
|
40
|
+
ruby = dsl.ruby
|
41
|
+
dsl.watch_spec_files_for(ruby.lib_files)
|
42
|
+
|
43
|
+
# Rails files
|
44
|
+
rails = dsl.rails(view_extensions: %w(erb haml slim))
|
45
|
+
dsl.watch_spec_files_for(rails.app_files)
|
46
|
+
dsl.watch_spec_files_for(rails.views)
|
47
|
+
|
48
|
+
watch(rails.controllers) do |m|
|
49
|
+
[
|
50
|
+
rspec.spec.call("routing/#{m[1]}_routing"),
|
51
|
+
rspec.spec.call("controllers/#{m[1]}_controller"),
|
52
|
+
rspec.spec.call("acceptance/#{m[1]}")
|
53
|
+
]
|
54
|
+
end
|
55
|
+
|
56
|
+
# Rails config changes
|
57
|
+
watch(rails.spec_helper) { rspec.spec_dir }
|
58
|
+
watch(rails.routes) { "#{rspec.spec_dir}/routing" }
|
59
|
+
watch(rails.app_controller) { "#{rspec.spec_dir}/controllers" }
|
60
|
+
|
61
|
+
# Capybara features specs
|
62
|
+
watch(rails.view_dirs) { |m| rspec.spec.call("features/#{m[1]}") }
|
63
|
+
watch(rails.layouts) { |m| rspec.spec.call("features/#{m[1]}") }
|
64
|
+
|
65
|
+
# Turnip features and steps
|
66
|
+
watch(%r{^spec/acceptance/(.+)\.feature$})
|
67
|
+
watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) do |m|
|
68
|
+
Dir[File.join("**/#{m[1]}.feature")][0] || "spec/acceptance"
|
69
|
+
end
|
70
|
+
end
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2017 Realhub Systems
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
# APM Pricefinder Ruby Library
|
2
|
+
|
3
|
+
This library providers a thin layer for the APM Pricefinder API from applications written in the Ruby language.
|
4
|
+
|
5
|
+
Find out more about Pricefinder at [https://www.pricefinder.com.au](https://www.pricefinder.com.au)
|
6
|
+
|
7
|
+
API Documentation is available here [https://api.pricefinder.com.au/v1/swagger](https://api.pricefinder.com.au/v1/swagger)
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
Add this line to your application's Gemfile:
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
gem 'pricefinder'
|
15
|
+
```
|
16
|
+
|
17
|
+
And then execute:
|
18
|
+
|
19
|
+
$ bundle install
|
20
|
+
|
21
|
+
Or install it yourself as:
|
22
|
+
|
23
|
+
$ gem install pricefinder
|
24
|
+
|
25
|
+
## Usage
|
26
|
+
#### Initialize Client
|
27
|
+
```ruby
|
28
|
+
pricefinder = Pricefinder::Client.new({ client_id: 'USERNAME', client_secret: 'PASSWORD' })
|
29
|
+
```
|
30
|
+
|
31
|
+
#### Making a Query
|
32
|
+
Currently only GET requests are supported.
|
33
|
+
|
34
|
+
```ruby
|
35
|
+
result = pricefinder.get(path, params)
|
36
|
+
```
|
37
|
+
|
38
|
+
#### Example Query
|
39
|
+
```ruby
|
40
|
+
result = pricefinder.get('suggest/properties', { q: '4/16 Clarke St' })
|
41
|
+
|
42
|
+
# => {"matches"=>[{"property"=>{"id"=>6578963, "location"=>{"lat"=>-33.7236573573369, "lon"=>151.297135301613}, "parent"=>false, "_self"=>"https://api.pricefinder.com.au/v1/properties/6578963"}, "street"=>{"id"=>"NSW2834900"}, "suburb"=>{"id"=>"NSW2927", "_self"=>"https://api.pricefinder.com.au/v1/suburbs/NSW2927"}, "type"=>"property", "display"=>"4/16 CLARKE ST, NARRABEEN, NSW 2101", "legalDescription"=>"4//SP6548", "address"=>{"street"=>"CLARKE STREET", "unit"=>"4", "streetNumber"=>"16", "streetAddress"=>"4/16 CLARKE STREET", "locality"=>"NARRABEEN", "streetLocation"=>"4/16", "state"=>"NSW", "postcode"=>"2101", "countryCode"=>"AU", "lga"=>"NORTHERN BEACHES COUNCIL"}, "alternativeAddresses"=>[{"street"=>"CLARKE STREET", "unit"=>"4", "streetNumber"=>"16", "streetAddress"=>"4/16 CLARKE STREET", "locality"=>"NARRABEEN", "streetLocation"=>"4/16", "state"=>"NSW", "postcode"=>"2101", "countryCode"=>"AU", "lga"=>"NORTHERN BEACHES COUNCIL"}]}], "disclaimer"=>"© Property Data Solutions Pty Ltd 2017. The materials presented on this site are distributed as an information source only. The information recorded in this document is provided on the basis that readers will be responsible for making their own assessment of the information and are advised to verify all relevant representations, statements and information. Note: Pricefinder estimates provided via this site have been generated by use of proprietary computer software. Pricefinder estimates are NOT valuations and should not be used in lieu of a professional valuation. Users are advised to engage the services of a registered valuer in order to receive a comprehensive valuation. All data and information relating to local schools is provided by domain.com.au as a courtesy only. Users should check directly with the local schools to verify this data and/or information.No liability (in contract, tort or otherwise) will be accepted for any loss or damage incurred as a result of reliance upon any material contained in this publication, or for any information or advice provided in this publication or incorporated into it."}
|
43
|
+
```
|
44
|
+
|
45
|
+
## Development
|
46
|
+
|
47
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
48
|
+
|
49
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
50
|
+
|
51
|
+
## Contributing
|
52
|
+
|
53
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/pricefinder.
|
54
|
+
|
55
|
+
|
56
|
+
## License
|
57
|
+
|
58
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
59
|
+
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "pricefinder"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
data/lib/pricefinder.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# Pricefinder Ruby
|
2
|
+
# API Spec at https://api.pricefinder.com.au/v1/swagger/index.html
|
3
|
+
|
4
|
+
require 'pricefinder/client'
|
5
|
+
require 'pricefinder/utilities'
|
6
|
+
require 'pricefinder/version'
|
7
|
+
|
8
|
+
module Pricefinder
|
9
|
+
|
10
|
+
def self.client
|
11
|
+
@client ||= Pricefinder::Client.new
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'faraday_middleware'
|
3
|
+
|
4
|
+
require 'pricefinder/configuration'
|
5
|
+
require 'pricefinder/error'
|
6
|
+
|
7
|
+
module Pricefinder
|
8
|
+
class Client
|
9
|
+
|
10
|
+
API_HOST = 'https://api.pricefinder.com.au/v1'
|
11
|
+
USER_AGENT = "Pricefinder Ruby Wrapper #{Pricefinder::VERSION}"
|
12
|
+
|
13
|
+
attr_reader :configuration
|
14
|
+
|
15
|
+
def initialize(options = nil)
|
16
|
+
@config = nil
|
17
|
+
@retry_count = 0
|
18
|
+
|
19
|
+
unless options.nil?
|
20
|
+
@configuration = Configuration.new(options)
|
21
|
+
check_valid_config
|
22
|
+
end
|
23
|
+
|
24
|
+
# Create Connection
|
25
|
+
connection
|
26
|
+
|
27
|
+
# Get Access Token
|
28
|
+
get_access_token
|
29
|
+
end
|
30
|
+
|
31
|
+
def check_valid_config
|
32
|
+
if configuration.nil? || !configuration.valid?
|
33
|
+
@configuration = nil
|
34
|
+
raise Error::MissingClientRequiredConfig
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def connection
|
39
|
+
return @connection if instance_variable_defined?(:@connection)
|
40
|
+
check_valid_config
|
41
|
+
|
42
|
+
@connection = Faraday.new(API_HOST) do |faraday|
|
43
|
+
faraday.request :url_encoded
|
44
|
+
faraday.headers[:user_agent] = USER_AGENT
|
45
|
+
faraday.response :json
|
46
|
+
faraday.adapter Faraday.default_adapter
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def access_token
|
51
|
+
@configuration.access_token
|
52
|
+
end
|
53
|
+
|
54
|
+
def get(path, params = {}, options = {})
|
55
|
+
response = @connection.get do |request|
|
56
|
+
request.headers['Authorization'] = "Bearer #{access_token}"
|
57
|
+
request.url path
|
58
|
+
request.params = params
|
59
|
+
end
|
60
|
+
|
61
|
+
handle_response(response)
|
62
|
+
end
|
63
|
+
|
64
|
+
def handle_response(response)
|
65
|
+
return response.body if response.body
|
66
|
+
return { errors: build_errors(response) }
|
67
|
+
end
|
68
|
+
|
69
|
+
def build_errors(response)
|
70
|
+
errors = []
|
71
|
+
errors << "Unauthorized Token: #{access_token}" if response.status == 401
|
72
|
+
errors << "Could not handle response" if response.status == 500
|
73
|
+
|
74
|
+
return errors
|
75
|
+
end
|
76
|
+
|
77
|
+
def handle_unauthorized
|
78
|
+
if @retry_count == 0
|
79
|
+
# Get a new access token
|
80
|
+
get_access_token(true)
|
81
|
+
|
82
|
+
# Retry
|
83
|
+
@retry_count += 1
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
private
|
88
|
+
|
89
|
+
def get_access_token(force_auth = false)
|
90
|
+
config_params = @configuration.config_params
|
91
|
+
|
92
|
+
# If we were passed an access token use it
|
93
|
+
if !force_auth && token = config_params[:access_token]
|
94
|
+
@configuration.access_token = token
|
95
|
+
return
|
96
|
+
end
|
97
|
+
|
98
|
+
# We need to generate a new token but we are missing the required params
|
99
|
+
if force_auth && (config_params[:client_id].nil? || config_params[:client_id].nil?)
|
100
|
+
raise Error::MissingClientRequiredConfig
|
101
|
+
end
|
102
|
+
|
103
|
+
# Otherwise get a new token using credentials
|
104
|
+
if (client_id = config_params[:client_id]) && (client_secret = config_params[:client_secret])
|
105
|
+
authenticate_client_credentials(client_id, client_secret)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def authenticate_client_credentials(client_id, client_secret)
|
110
|
+
response = @connection.post('oauth/token', {
|
111
|
+
:grant_type => 'client_credentials',
|
112
|
+
:client_id => client_id,
|
113
|
+
:client_secret => client_secret
|
114
|
+
})
|
115
|
+
|
116
|
+
if response.status == 200 && token = response.body["tokenKey"]
|
117
|
+
@configuration.access_token = token
|
118
|
+
else
|
119
|
+
raise Error::InvalidCredentials
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
124
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Pricefinder
|
2
|
+
class Configuration
|
3
|
+
|
4
|
+
TOKEN_PARAMS = [:access_token]
|
5
|
+
AUTH_PARAMS = [:client_id, :client_secret]
|
6
|
+
|
7
|
+
CONFIG_PARAMS = TOKEN_PARAMS + AUTH_PARAMS
|
8
|
+
|
9
|
+
attr_accessor *CONFIG_PARAMS
|
10
|
+
|
11
|
+
# Creates the configuration
|
12
|
+
# @param [Hash] hash containing configuration params and their values
|
13
|
+
# @return [Configuration] a new configuration with the values from the
|
14
|
+
# config_params set
|
15
|
+
def initialize(config_hash = nil)
|
16
|
+
if config_hash.is_a?(Hash)
|
17
|
+
config_hash.each do |config_name, config_value|
|
18
|
+
self.send("#{config_name}=", config_value)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# Returns a hash of config params and their values
|
24
|
+
def config_params
|
25
|
+
CONFIG_PARAMS.inject({}) do |keys_hash, key|
|
26
|
+
keys_hash[key] = send(key)
|
27
|
+
keys_hash
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# Check that we have all the required params
|
32
|
+
def valid?
|
33
|
+
TOKEN_PARAMS.none? { |key| send(key).nil? || send(key).empty? } ||
|
34
|
+
AUTH_PARAMS.none? { |key| send(key).nil? || send(key).empty? }
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Pricefinder
|
2
|
+
module Error
|
3
|
+
class ResponseValidator
|
4
|
+
|
5
|
+
def validate(response)
|
6
|
+
return if successful_response?(response)
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def successful_response?(response)
|
12
|
+
(200..399).include?(response.status)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Base < StandardError
|
17
|
+
def initialize(msg,error=nil)
|
18
|
+
super(msg)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class AlreadyConfigured < Base
|
23
|
+
def initialize(msg = 'Gem cannot be reconfigured. Initialize a new ' +
|
24
|
+
'instance of Pricefinder::Client.', error=nil)
|
25
|
+
super
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
class InvalidCredentials < Base
|
30
|
+
def initialize(msg = "Invalid client_id or client_secret.", error=nil)
|
31
|
+
super
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
class MissingClientRequiredConfig < Base
|
36
|
+
def initialize(msg = "Missing required client config", error=nil)
|
37
|
+
super
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/pricefinder.gemspec
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'pricefinder/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "pricefinder"
|
8
|
+
spec.version = Pricefinder::VERSION
|
9
|
+
spec.authors = ["Realhub Systems"]
|
10
|
+
spec.email = ["ken@realhub.com.au"]
|
11
|
+
|
12
|
+
spec.summary = 'Thin ruby bindings for the APM Pricefinder API'
|
13
|
+
spec.description = 'Pricefinder API provides access to property, sale and listing searches as well as suburb statistics and SSO to the Pricefinder website capabilities.'
|
14
|
+
spec.homepage = "https://github.com/realhub/pricefinder-ruby"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
|
+
spec.bindir = "exe"
|
19
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
|
+
spec.require_paths = ["lib"]
|
21
|
+
|
22
|
+
spec.add_development_dependency "bundler", "~> 1.11"
|
23
|
+
spec.add_development_dependency "byebug", "~> 9.0"
|
24
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
25
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
26
|
+
spec.add_development_dependency "guard-rspec"
|
27
|
+
spec.add_development_dependency "webmock", "~> 3.0"
|
28
|
+
spec.add_development_dependency "vcr", "~> 3.0"
|
29
|
+
spec.add_development_dependency "rb-readline", "~> 0"
|
30
|
+
|
31
|
+
spec.add_dependency "faraday", "~> 0"
|
32
|
+
spec.add_dependency "faraday_middleware", "~> 0"
|
33
|
+
spec.add_dependency "json", "~> 1.8"
|
34
|
+
end
|
metadata
ADDED
@@ -0,0 +1,217 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pricefinder
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Realhub Systems
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-08-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.11'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.11'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: byebug
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '9.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '9.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: guard-rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: webmock
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '3.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: vcr
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '3.0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '3.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rb-readline
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: faraday
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: faraday_middleware
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: json
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '1.8'
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '1.8'
|
167
|
+
description: Pricefinder API provides access to property, sale and listing searches
|
168
|
+
as well as suburb statistics and SSO to the Pricefinder website capabilities.
|
169
|
+
email:
|
170
|
+
- ken@realhub.com.au
|
171
|
+
executables: []
|
172
|
+
extensions: []
|
173
|
+
extra_rdoc_files: []
|
174
|
+
files:
|
175
|
+
- ".byebug_history"
|
176
|
+
- ".gitignore"
|
177
|
+
- ".rspec"
|
178
|
+
- ".travis.yml"
|
179
|
+
- Gemfile
|
180
|
+
- Guardfile
|
181
|
+
- LICENSE.txt
|
182
|
+
- README.md
|
183
|
+
- Rakefile
|
184
|
+
- bin/console
|
185
|
+
- bin/setup
|
186
|
+
- lib/pricefinder.rb
|
187
|
+
- lib/pricefinder/client.rb
|
188
|
+
- lib/pricefinder/configuration.rb
|
189
|
+
- lib/pricefinder/error.rb
|
190
|
+
- lib/pricefinder/utilities.rb
|
191
|
+
- lib/pricefinder/version.rb
|
192
|
+
- pricefinder.gemspec
|
193
|
+
homepage: https://github.com/realhub/pricefinder-ruby
|
194
|
+
licenses:
|
195
|
+
- MIT
|
196
|
+
metadata: {}
|
197
|
+
post_install_message:
|
198
|
+
rdoc_options: []
|
199
|
+
require_paths:
|
200
|
+
- lib
|
201
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
202
|
+
requirements:
|
203
|
+
- - ">="
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
version: '0'
|
206
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
207
|
+
requirements:
|
208
|
+
- - ">="
|
209
|
+
- !ruby/object:Gem::Version
|
210
|
+
version: '0'
|
211
|
+
requirements: []
|
212
|
+
rubyforge_project:
|
213
|
+
rubygems_version: 2.5.1
|
214
|
+
signing_key:
|
215
|
+
specification_version: 4
|
216
|
+
summary: Thin ruby bindings for the APM Pricefinder API
|
217
|
+
test_files: []
|