simplyrets 0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b6c9398d25929ede70fc2f027ba8a048b72983fd
4
+ data.tar.gz: 9b7f142e7814cac26d553800a96505e171ce8ae8
5
+ SHA512:
6
+ metadata.gz: 51d0f11bcc6eecd244d3ce9694396a335e90cbfc71a6a73d777d693be593545dbae2cc1b7baaeaecf1926082e055601560b3967853fcd47f9128e20481110f50
7
+ data.tar.gz: 432870f3d25ca223aea79c22e60127a015efddba29edf708662815f172158824619b00175eee1b253648d88e7bf03a465949d34e63a24eb5a7c9edfc349c0999
data/#example.rb# ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ %w(rubygems simplyrets).each {|lib| require lib}
4
+ %w(rubygems simplyrets).each {|models| require models}
5
+
6
+ require "simplyrets"
7
+ require "properties_api"
8
+ require "listing"
9
+
10
+ p "SimplyRETS Ruby SDK"
11
+
12
+ SimplyRets.configure do |config|
13
+ config.username = 'simplyrets'
14
+ config.password = 'simplyrets'
15
+ end
16
+
17
+ # Properties
18
+ listings = Properties_api.properties({:minbeds => 2,:brokers => [ "COLD09" ]})
19
+ listings.each do |l|
20
+ p l.property['bedrooms']
21
+ p l.office['brokerid']
22
+ end
23
+
24
+
25
+ # Single Properties
26
+ # Single Listing
27
+ p = Properties_api.property(47638976)
28
+ Agentlist 47638976
29
+ p "#{p.geo['lat']}, #{p.geo['lng']}"
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify dependencies in simplyrets.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,27 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ simplyrets (0.1)
5
+ addressable (>= 2.3.4)
6
+ json (>= 1.8)
7
+ typhoeus (>= 0.2.1)
8
+
9
+ GEM
10
+ remote: http://rubygems.org/
11
+ specs:
12
+ addressable (2.3.7)
13
+ ethon (0.7.3)
14
+ ffi (>= 1.3.0)
15
+ ffi (1.9.8)
16
+ json (1.8.2)
17
+ rake (10.4.2)
18
+ typhoeus (0.7.1)
19
+ ethon (>= 0.7.1)
20
+
21
+ PLATFORMS
22
+ ruby
23
+
24
+ DEPENDENCIES
25
+ bundler
26
+ rake
27
+ simplyrets!
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2015 SimplyRETS Inc. <support@simplyrets.com>
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.org ADDED
@@ -0,0 +1,109 @@
1
+ #+AUTHOR: SimplyRETS, Christopher Reichert, Cody Reichert
2
+ #+TITLE: SimplyRETS Ruby SDK (Beta)
3
+
4
+ The official Ruby SDK for the [[https://simplrets.com][SimplyRETS]] Listings API.
5
+
6
+ SimplyRETS provides a modern and simple interface for building robust
7
+ applications and websites with Real Estate data.
8
+
9
+ ** Installation
10
+
11
+ Clone the repo or install the =simplyrets= gem:
12
+
13
+ #+BEGIN_SRC bash
14
+ $ git clone git@github.com/SimplyRETS/simplyrets-ruby-sdk
15
+ #+END_SRC
16
+ or
17
+ #+BEGIN_SRC bash
18
+ $ gem install simplyrets
19
+ #+END_SRC
20
+
21
+
22
+ ** Quick Start
23
+
24
+ Here's a quick example to set up the client and make a request:
25
+
26
+ #+BEGIN_SRC ruby
27
+ %w(rubygems simplyrets).each {|lib| require lib}
28
+ %w(rubygems simplyrets).each {|models| require models}
29
+
30
+ require "simplyrets"
31
+ require "properties_api"
32
+ require "listing"
33
+
34
+ SimplyRets.configure do |config|
35
+ config.username = 'simplyrets'
36
+ config.password = 'simplyrets'
37
+ end
38
+
39
+ # all properties
40
+ ps = Properties_api.properties()
41
+ p ps
42
+ #+END_SRC
43
+
44
+
45
+ ** Setup the client
46
+
47
+ To start using the SDK, require =simplyrets= in your gemspec and
48
+ configure a client by setting your API key and API secret (we have
49
+ demo credentials available you can use for free!). Here's a short
50
+ example:
51
+
52
+ #+BEGIN_SRC ruby
53
+ require 'simplyrets'
54
+
55
+ SimplyRets.configure do |config|
56
+ config.username = 'simplyrets'
57
+ config.password = 'simplyrets'
58
+ end
59
+ #+END_SRC
60
+
61
+
62
+ ** Examples: Making Requests
63
+
64
+ Once you have instantiated the API Client, you can use the
65
+ Properties API to make requests for multiple or single listings.
66
+
67
+ Request all listings with no filters:
68
+ #+BEGIN_SRC ruby
69
+ require 'properties_api'
70
+
71
+ ps = Properties_api.properties()
72
+ p ps
73
+ #+END_SRC
74
+
75
+ Request a single listing by id:
76
+ #+BEGIN_SRC ruby
77
+ l = Properties_api.property(mls_id=19548526)
78
+ p l.mls
79
+ #+END_SRC
80
+
81
+
82
+ Multiple query parameters can be sent to the API to request more
83
+ refined results:
84
+ #+BEGIN_SRC ruby
85
+ # listings with minprice of $700,000 and minbeds of 4
86
+ ps = Properties_api.properties({:minprice => 700000, :minbeds => 4})
87
+ p ps
88
+ #+END_SRC
89
+
90
+ Sending back points to get listings in a geographical area:
91
+ #+BEGIN_SRC ruby
92
+ # listings within geographics points
93
+ points = ["29.723837146389066,-95.69778442382812" ,"29.938275329718987,-95.778442382812" ,"29.938275329718987,-95.32974243164061","29.723837146389066,-95.32974243164061"]
94
+ ps = Properties_api.properties({:points => points})
95
+ p ps
96
+ #+END_SRC
97
+
98
+
99
+ ** Additional Info
100
+
101
+ View the complete interactive API on [[https://docs.simplyrets.com/api/index.html][the docs page]]. Here you can
102
+ find all the available query parameters and the complete response
103
+ body. You can even see the URL made for that request.
104
+
105
+
106
+ ** Support
107
+
108
+ For support regarding the API or bugs in the SDK, can contact us at
109
+ support (at) simplyrets (dot) com - or leave an issue on the [[https://github.com/simplyrets/simplyrets-ruby-sdk][Github page]]!
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
data/example.rb ADDED
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ %w(rubygems simplyrets).each {|lib| require lib}
4
+ %w(rubygems simplyrets).each {|models| require models}
5
+
6
+ require "simplyrets"
7
+ require "properties_api"
8
+ require "listing"
9
+
10
+ p "SimplyRETS Ruby SDK"
11
+
12
+ SimplyRets.configure do |config|
13
+ config.username = 'simplyrets'
14
+ config.password = 'simplyrets'
15
+ end
16
+
17
+ # Properties
18
+ listings = Properties_api.properties({:minbeds => 2,:brokers => [ "SR1234", "ACME12" ]})
19
+ listings.each do |l|
20
+ p l.property['bedrooms']
21
+ p l.office['brokerid']
22
+ end
23
+
24
+ # Single Listing
25
+ prop = Properties_api.property(47639002)
26
+ p "#{prop.geo['lat']}, #{prop.geo['lng']}"
data/lib/monkey.rb ADDED
@@ -0,0 +1,90 @@
1
+ # module SimplyRets
2
+ class Object
3
+
4
+ unless Object.method_defined? :blank?
5
+ def blank?
6
+ respond_to?(:empty?) ? empty? : !self
7
+ end
8
+ end
9
+
10
+ unless Object.method_defined? :present?
11
+ def present?
12
+ !blank?
13
+ end
14
+ end
15
+
16
+ end
17
+
18
+ class String
19
+
20
+ unless String.method_defined? :underscore
21
+ def underscore
22
+ self.gsub(/::/, '/').
23
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
24
+ gsub(/([a-z\d])([A-Z])/,'\1_\2').
25
+ tr("-", "_").
26
+ downcase
27
+ end
28
+ end
29
+
30
+ unless String.method_defined? :camelize
31
+ def camelize(first_letter_in_uppercase = true)
32
+ if first_letter_in_uppercase != :lower
33
+ self.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
34
+ else
35
+ self.to_s[0].chr.downcase + camelize(self)[1..-1]
36
+ end
37
+ end
38
+ end
39
+
40
+ end
41
+
42
+ class Hash
43
+
44
+ unless Hash.method_defined? :stringify_keys
45
+ def stringify_keys
46
+ inject({}) do |options, (key, value)|
47
+ options[key.to_s] = value
48
+ options
49
+ end
50
+ end
51
+ end
52
+
53
+ unless Hash.method_defined? :stringify_keys!
54
+ def stringify_keys!
55
+ self.replace(self.stringify_keys)
56
+ end
57
+ end
58
+
59
+ unless Hash.method_defined? :symbolize_keys
60
+ def symbolize_keys
61
+ inject({}) do |options, (key, value)|
62
+ options[(key.to_sym rescue key) || key] = value
63
+ options
64
+ end
65
+ end
66
+ end
67
+
68
+ unless Hash.method_defined? :symbolize_keys!
69
+ def symbolize_keys!
70
+ self.replace(self.symbolize_keys)
71
+ end
72
+ end
73
+
74
+ unless Hash.method_defined? :symbolize_and_underscore_keys
75
+ def symbolize_and_underscore_keys
76
+ inject({}) do |options, (key, value)|
77
+ options[(key.to_s.underscore.to_sym rescue key) || key] = value
78
+ options
79
+ end
80
+ end
81
+ end
82
+
83
+ unless Hash.method_defined? :symbolize_and_underscore_keys!
84
+ def symbolize_and_underscore_keys!
85
+ self.replace(self.symbolize_and_underscore_keys)
86
+ end
87
+ end
88
+
89
+ end
90
+ # end
@@ -0,0 +1,75 @@
1
+ require "uri"
2
+
3
+ class Properties_api
4
+ basePath = "https://api.simplyrets.com"
5
+
6
+ def self.escapeString(string)
7
+ URI.encode(string.to_s)
8
+ end
9
+
10
+ def self.properties (opts={})
11
+ query_param_keys = [:brokers,:features,:amenities,:agent,:maxarea,
12
+ :minarea,:minprice,:minbaths,:maxbeds,:minbeds,
13
+ :neighborhoods,:points,:counties,:status,:type,:q]
14
+
15
+ # set default values and merge with input
16
+ options = {
17
+ :brokers => nil ,
18
+ :features => nil ,
19
+ :amenities => nil ,
20
+ :agent => nil ,
21
+ :maxarea => nil ,
22
+ :minarea => nil ,
23
+ :minprice => nil ,
24
+ :minbaths => nil ,
25
+ :maxbeds => nil ,
26
+ :minbeds => nil ,
27
+ :neighborhoods => nil ,
28
+ :points => nil ,
29
+ :counties => nil ,
30
+ :status => nil ,
31
+ :type => nil ,
32
+ :q => nil }.merge(opts)
33
+
34
+ #resource path
35
+ path = "/properties".sub('{format}','json')
36
+
37
+ # pull querystring keys from options
38
+ queryopts = options.select do |key,value|
39
+ query_param_keys.include? key
40
+ end
41
+
42
+ headers = nil
43
+ post_body = nil
44
+ response = SimplyRets::Request.new(:GET, path,{:params=>queryopts, :headers=>headers, :body=>post_body }).make.body
45
+ response.map {|response|Listing.new(response)}
46
+
47
+ end
48
+
49
+ def self.property (mls_id=nil,opts={})
50
+ query_param_keys = []
51
+
52
+ # verify existence of params
53
+ raise "mls_id is required" if mls_id.nil?
54
+
55
+ # set default values and merge with input
56
+ options = {
57
+ :mls_id => nil
58
+ }.merge(opts)
59
+
60
+ #resource path
61
+ path = "/properties/{mlsId}".sub('{format}','json').sub('{' + 'mlsId' + '}', escapeString(mls_id))
62
+
63
+ # pull querystring keys from options
64
+ queryopts = options.select do |key,value|
65
+ query_param_keys.include? key
66
+ end
67
+
68
+ headers = nil
69
+ post_body = nil
70
+ response = SimplyRets::Request.new(:GET, path, {:params=>queryopts,:headers=>headers, :body=>post_body }).make.body
71
+ Listing.new(response)
72
+
73
+ end
74
+
75
+ end
data/lib/simplyrets.rb ADDED
@@ -0,0 +1,57 @@
1
+
2
+ require 'monkey'
3
+ require 'simplyrets/configuration'
4
+ require 'simplyrets/request'
5
+ require 'simplyrets/response'
6
+ require 'simplyrets/version'
7
+ require 'logger'
8
+
9
+ module SimplyRets
10
+
11
+ class << self
12
+ attr_accessor :logger
13
+
14
+ # A SimplyRets configuration object. Must act like a hash and
15
+ # return sensible values for all SimplyRets configuration
16
+ # options. See SimplyRets::Configuration.
17
+ attr_accessor :configuration
18
+
19
+ attr_accessor :resources
20
+
21
+ # Call this method to modify defaults in your initializers.
22
+ #
23
+ # @example
24
+ # SimplyRets.configure do |config|
25
+ # config.username = 'simplyrets'
26
+ # config.password = 'simplyrets'
27
+ # config.format = 'json' # optional, defaults to 'json'
28
+ # end
29
+ #
30
+ def configure
31
+ self.configuration ||= Configuration.new
32
+ yield(configuration) if block_given?
33
+
34
+ # Configure logger. Default to use Rails
35
+ self.logger ||= configuration.logger || (defined?(Rails) ? Rails.logger : Logger.new(STDOUT))
36
+
37
+ # remove :// from scheme
38
+ configuration.scheme.sub!(/:\/\//, '')
39
+
40
+ # remove http(s):// and anything after a slash
41
+ configuration.host.sub!(/https?:\/\//, '')
42
+ configuration.host = configuration.host.split('/').first
43
+
44
+ # Add leading and trailing slashes to base_path
45
+ configuration.base_path = "/#{configuration.base_path}".gsub(/\/+/, '/')
46
+ configuration.base_path = "" if configuration.base_path == "/"
47
+ end
48
+
49
+ end
50
+
51
+ end
52
+
53
+ class ServerError < StandardError
54
+ end
55
+
56
+ class ClientError < StandardError
57
+ end