simplyrets 0.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +46 -13
  3. data/README.org +6 -6
  4. data/example.rb +9 -9
  5. data/lib/simplyrets.rb +33 -56
  6. data/lib/simplyrets/#listing.rb# +199 -0
  7. data/lib/simplyrets/api/default_api.rb +154 -0
  8. data/lib/simplyrets/listing.rb~ +199 -0
  9. data/lib/simplyrets/models/agent.rb +61 -0
  10. data/lib/simplyrets/models/base_object.rb +87 -0
  11. data/lib/simplyrets/models/broker.rb +37 -0
  12. data/lib/simplyrets/models/contact_information.rb +53 -0
  13. data/lib/simplyrets/models/error.rb +45 -0
  14. data/lib/simplyrets/models/geographic_data.rb +69 -0
  15. data/lib/simplyrets/models/listing.rb +199 -0
  16. data/lib/simplyrets/models/listing.rb~ +199 -0
  17. data/lib/simplyrets/models/mls_information.rb +69 -0
  18. data/lib/simplyrets/models/office.rb +61 -0
  19. data/lib/simplyrets/models/open_house.rb +37 -0
  20. data/lib/simplyrets/models/parking.rb +53 -0
  21. data/lib/simplyrets/models/property.rb +277 -0
  22. data/lib/simplyrets/models/sales.rb +69 -0
  23. data/lib/simplyrets/models/school.rb +61 -0
  24. data/lib/simplyrets/models/street_address.rb +85 -0
  25. data/lib/simplyrets/models/tax.rb +53 -0
  26. data/lib/simplyrets/simplyrets.rb +76 -0
  27. data/lib/simplyrets/simplyrets/api_error.rb +26 -0
  28. data/lib/simplyrets/simplyrets/configuration.rb +101 -0
  29. data/lib/simplyrets/simplyrets/request.rb +213 -0
  30. data/lib/simplyrets/simplyrets/response.rb +156 -0
  31. data/lib/simplyrets/simplyrets/version.rb +5 -0
  32. data/simplyrets.gemspec +16 -9
  33. metadata +153 -36
  34. data/#example.rb# +0 -29
  35. data/lib/monkey.rb +0 -90
  36. data/lib/properties_api.rb +0 -75
  37. data/lib/simplyrets.rb~ +0 -85
  38. data/lib/simplyrets/configuration.rb +0 -25
  39. data/lib/simplyrets/request.rb +0 -205
  40. data/lib/simplyrets/response.rb +0 -70
  41. data/lib/simplyrets/version.rb +0 -4
  42. data/models/agent.rb +0 -39
  43. data/models/contactinformation.rb +0 -36
  44. data/models/geographicdata.rb +0 -43
  45. data/models/listing.rb +0 -95
  46. data/models/mlsinformation.rb +0 -35
  47. data/models/office.rb +0 -39
  48. data/models/property.rb +0 -84
  49. data/models/school.rb +0 -27
  50. data/models/streetaddress.rb +0 -47
  51. data/models/tax.rb +0 -28
  52. data/pkg/simplyrets-0.1.gem +0 -0
@@ -0,0 +1,213 @@
1
+ require 'uri'
2
+ require 'typhoeus'
3
+
4
+ module SimplyRetsClient
5
+ module SimplyRets
6
+ class Request
7
+ attr_accessor :host, :path, :format, :params, :body, :http_method, :headers, :form_params, :auth_names, :response
8
+
9
+ # All requests must have an HTTP method and a path
10
+ # Optionals parameters are :params, :headers, :body, :format, :host
11
+ def initialize(http_method, path, attributes = {})
12
+ @http_method = http_method.to_sym.downcase
13
+ @path = path
14
+
15
+ attributes.each { |name, value| send "#{name}=", value }
16
+
17
+ @format ||= SimplyRets.configuration.format
18
+ @params ||= {}
19
+
20
+ # Apply default headers
21
+ @headers = SimplyRets.configuration.default_headers.merge(@headers || {})
22
+
23
+ # Stick in the auth token if there is one
24
+ if SimplyRets.authenticated?
25
+ @headers.merge!({:auth_token => SimplyRets.configuration.auth_token})
26
+ end
27
+
28
+ update_params_for_auth!
29
+
30
+ end
31
+
32
+
33
+ # Update hearder and query params based on authentication settings.
34
+ def update_params_for_auth!
35
+ (@auth_names || []).each do |auth_name|
36
+ case auth_name
37
+ when 'basicAuth'
38
+ @headers ||= {}
39
+ http_auth_header = 'Basic ' + ["#{SimplyRets.configuration.username}:#{SimplyRets.configuration.password}"].pack('m').delete("\r\n")
40
+ @headers['Authorization'] = http_auth_header
41
+
42
+ end
43
+ end
44
+ end
45
+
46
+
47
+ # Get API key (with prefix if set).
48
+ # @param [String] param_name the parameter name of API key auth
49
+ def get_api_key_with_prefix(param_name)
50
+ if SimplyRets.configuration.api_key_prefix[param_name]
51
+ "#{SimplyRets.configuration.api_key_prefix[param_name]} #{SimplyRets.configuration.api_key[param_name]}"
52
+ else
53
+ SimplyRets.configuration.api_key[param_name]
54
+ end
55
+ end
56
+
57
+ # Construct the request URL.
58
+ def url(options = {})
59
+ _path = self.interpreted_path
60
+ _path = "/#{_path}" unless _path.start_with?('/')
61
+ "#{SimplyRets.configuration.scheme}://#{SimplyRets.configuration.host}#{_path}"
62
+ end
63
+
64
+ # Iterate over the params hash, injecting any path values into the path string
65
+ # e.g. /word.{format}/{word}/entries => /word.json/cat/entries
66
+ def interpreted_path
67
+ p = self.path.dup
68
+
69
+ # Stick a .{format} placeholder into the path if there isn't
70
+ # one already or an actual format like json or xml
71
+ # e.g. /words/blah => /words.{format}/blah
72
+ if SimplyRets.configuration.inject_format
73
+ unless ['.json', '.xml', '{format}'].any? {|s| p.downcase.include? s }
74
+ p = p.sub(/^(\/?\w+)/, "\\1.#{format}")
75
+ end
76
+ end
77
+
78
+ # Stick a .{format} placeholder on the end of the path if there isn't
79
+ # one already or an actual format like json or xml
80
+ # e.g. /words/blah => /words/blah.{format}
81
+ if SimplyRets.configuration.force_ending_format
82
+ unless ['.json', '.xml', '{format}'].any? {|s| p.downcase.include? s }
83
+ p = "#{p}.#{format}"
84
+ end
85
+ end
86
+
87
+ p = p.sub("{format}", self.format.to_s)
88
+
89
+ URI.encode [SimplyRets.configuration.base_path, p].join("/").gsub(/\/+/, '/')
90
+ end
91
+
92
+ # If body is an object, JSONify it before making the actual request.
93
+ # For form parameters, remove empty value
94
+ def outgoing_body
95
+ # http form
96
+ if headers['Content-Type'] == 'application/x-www-form-urlencoded'
97
+ data = form_params.dup
98
+ data.each do |key, value|
99
+ data[key] = value.to_s if value && !value.is_a?(File) # remove emtpy form parameter
100
+ end
101
+ elsif @body # http body is JSON
102
+ data = @body.is_a?(String) ? @body : @body.to_json
103
+ else
104
+ data = nil
105
+ end
106
+
107
+ if SimplyRets.configuration.debug
108
+ SimplyRets.logger.debug "HTTP request body param ~BEGIN~\n#{data}\n~END~\n"
109
+ end
110
+
111
+ data
112
+ end
113
+
114
+ def make
115
+ request_options = {
116
+ :method => self.http_method,
117
+ :headers => self.headers,
118
+ :params => self.params,
119
+ :ssl_verifypeer => SimplyRets.configuration.verify_ssl,
120
+ :cainfo => SimplyRets.configuration.ssl_ca_cert,
121
+ :verbose => SimplyRets.configuration.debug
122
+ }
123
+
124
+ if [:post, :patch, :put, :delete].include?(self.http_method)
125
+ request_options.update :body => self.outgoing_body
126
+ end
127
+
128
+ raw = Typhoeus::Request.new(self.url, request_options).run
129
+
130
+ @response = Response.new(raw)
131
+
132
+ if SimplyRets.configuration.debug
133
+ SimplyRets.logger.debug "HTTP response body ~BEGIN~\n#{@response.body}\n~END~\n"
134
+ end
135
+
136
+ # record as last response
137
+ SimplyRets.last_response = @response
138
+
139
+ unless @response.success?
140
+ fail ApiError.new(:code => @response.code,
141
+ :response_headers => @response.headers,
142
+ :response_body => @response.body),
143
+ @response.status_message
144
+ end
145
+
146
+ @response
147
+ end
148
+
149
+ def response_code_pretty
150
+ return unless @response
151
+ @response.code.to_s
152
+ end
153
+
154
+ def response_headers_pretty
155
+ return unless @response
156
+ # JSON.pretty_generate(@response.headers).gsub(/\n/, '<br/>') # <- This was for RestClient
157
+ @response.headers.gsub(/\n/, '<br/>') # <- This is for Typhoeus
158
+ end
159
+
160
+ # return 'Accept' based on an array of accept provided
161
+ # @param [Array] header_accept_array Array fo 'Accept'
162
+ # @return String Accept (e.g. application/json)
163
+ def self.select_header_accept header_accept_array
164
+ if header_accept_array.empty?
165
+ return
166
+ elsif header_accept_array.any?{ |s| s.casecmp('application/json')==0 }
167
+ 'application/json' # look for json data by default
168
+ else
169
+ header_accept_array.join(',')
170
+ end
171
+ end
172
+
173
+ # return the content type based on an array of content-type provided
174
+ # @param [Array] content_type_array Array fo content-type
175
+ # @return String Content-Type (e.g. application/json)
176
+ def self.select_header_content_type content_type_array
177
+ if content_type_array.empty?
178
+ 'application/json' # use application/json by default
179
+ elsif content_type_array.any?{ |s| s.casecmp('application/json')==0 }
180
+ 'application/json' # use application/json if it's included
181
+ else
182
+ content_type_array[0]; # otherwise, use the first one
183
+ end
184
+ end
185
+
186
+ # static method to convert object (array, hash, object, etc) to JSON string
187
+ # @param model object to be converted into JSON string
188
+ # @return string JSON string representation of the object
189
+ def self.object_to_http_body model
190
+ return if model.nil?
191
+ _body = nil
192
+ if model.is_a?(Array)
193
+ _body = model.map{|m| object_to_hash(m) }
194
+ else
195
+ _body = object_to_hash(model)
196
+ end
197
+ _body.to_json
198
+ end
199
+
200
+ # static method to convert object(non-array) to hash
201
+ # @param obj object to be converted into JSON string
202
+ # @return string JSON string representation of the object
203
+ def self.object_to_hash obj
204
+ if obj.respond_to?(:to_hash)
205
+ obj.to_hash
206
+ else
207
+ obj
208
+ end
209
+ end
210
+
211
+ end
212
+ end
213
+ end
@@ -0,0 +1,156 @@
1
+ module SimplyRetsClient
2
+ module SimplyRets
3
+ class Response
4
+ require 'json'
5
+ require 'date'
6
+ require 'tempfile'
7
+
8
+ attr_accessor :raw
9
+
10
+ def initialize(raw)
11
+ self.raw = raw
12
+ end
13
+
14
+ def code
15
+ raw.code
16
+ end
17
+
18
+ def status_message
19
+ raw.status_message
20
+ end
21
+
22
+ def body
23
+ raw.body
24
+ end
25
+
26
+ def success?
27
+ raw.success?
28
+ end
29
+
30
+ # Deserialize the raw response body to the given return type.
31
+ #
32
+ # @param [String] return_type some examples: "User", "Array[User]", "Hash[String,Integer]"
33
+ def deserialize(return_type)
34
+ return nil if body.nil? || body.empty?
35
+
36
+ # handle file downloading - save response body into a tmp file and return the File instance
37
+ return download_file if return_type == 'File'
38
+
39
+ # ensuring a default content type
40
+ content_type = raw.headers['Content-Type'] || 'application/json'
41
+
42
+ unless content_type.start_with?('application/json')
43
+ fail "Content-Type is not supported: #{content_type}"
44
+ end
45
+
46
+ begin
47
+ data = JSON.parse("[#{body}]", :symbolize_names => true)[0]
48
+ rescue JSON::ParserError => e
49
+ if %w(String Date DateTime).include?(return_type)
50
+ data = body
51
+ else
52
+ raise e
53
+ end
54
+ end
55
+
56
+ convert_to_type data, return_type
57
+ end
58
+
59
+ # Convert data to the given return type.
60
+ def convert_to_type(data, return_type)
61
+ return nil if data.nil?
62
+ case return_type
63
+ when 'String'
64
+ data.to_s
65
+ when 'Integer'
66
+ data.to_i
67
+ when 'Float'
68
+ data.to_f
69
+ when 'BOOLEAN'
70
+ data == true
71
+ when 'DateTime'
72
+ # parse date time (expecting ISO 8601 format)
73
+ DateTime.parse data
74
+ when 'Date'
75
+ # parse date time (expecting ISO 8601 format)
76
+ Date.parse data
77
+ when 'Object'
78
+ # generic object, return directly
79
+ data
80
+ when /\AArray<(.+)>\z/
81
+ # e.g. Array<Pet>
82
+ sub_type = $1
83
+ data.map {|item| convert_to_type(item, sub_type) }
84
+ when /\AHash\<String, (.+)\>\z/
85
+ # e.g. Hash<String, Integer>
86
+ sub_type = $1
87
+ {}.tap do |hash|
88
+ data.each {|k, v| hash[k] = convert_to_type(v, sub_type) }
89
+ end
90
+ else
91
+ # models, e.g. Pet
92
+ SimplyRetsClient.const_get(return_type).new.tap do |model|
93
+ model.build_from_hash data
94
+ end
95
+ end
96
+ end
97
+
98
+ # Save response body into a file in (the defined) temporary folder, using the filename
99
+ # from the "Content-Disposition" header if provided, otherwise a random filename.
100
+ #
101
+ # @see Configuration#temp_folder_path
102
+ # @return [File] the file downloaded
103
+ def download_file
104
+ tmp_file = Tempfile.new '', SimplyRets.configuration.temp_folder_path
105
+ content_disposition = raw.headers['Content-Disposition']
106
+ if content_disposition
107
+ filename = content_disposition[/filename=['"]?([^'"\s]+)['"]?/, 1]
108
+ path = File.join File.dirname(tmp_file), filename
109
+ else
110
+ path = tmp_file.path
111
+ end
112
+ # close and delete temp file
113
+ tmp_file.close!
114
+
115
+ File.open(path, 'w') { |file| file.write(raw.body) }
116
+ SimplyRets.logger.info "File written to #{path}. Please move the file to a proper folder for further processing and delete the temp afterwards"
117
+ return File.new(path)
118
+ end
119
+
120
+ # `headers_hash` is a Typhoeus-specific extension of Hash,
121
+ # so simplify it back into a regular old Hash.
122
+ def headers
123
+ h = {}
124
+ raw.headers_hash.each {|k,v| h[k] = v }
125
+ h
126
+ end
127
+
128
+ # Extract the response format from the header hash
129
+ # e.g. {'Content-Type' => 'application/json'}
130
+ def format
131
+ headers['Content-Type'].split("/").last.downcase
132
+ end
133
+
134
+ def json?
135
+ format == 'json'
136
+ end
137
+
138
+ def xml?
139
+ format == 'xml'
140
+ end
141
+
142
+ def pretty_body
143
+ return unless body
144
+ if format == 'json'
145
+ JSON.pretty_generate(JSON.parse(body)).gsub(/\n/, '<br/>')
146
+ else
147
+ body
148
+ end
149
+ end
150
+
151
+ def pretty_headers
152
+ JSON.pretty_generate(headers).gsub(/\n/, '<br/>')
153
+ end
154
+ end
155
+ end
156
+ end
@@ -0,0 +1,5 @@
1
+ module SimplyRetsClient
2
+ module SimplyRets
3
+ VERSION = "1.0.0"
4
+ end
5
+ end
@@ -1,25 +1,32 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  $:.push File.expand_path("../lib", __FILE__)
3
- $:.push File.expand_path("../models", __FILE__)
4
- require "simplyrets/version"
3
+ require "simplyrets/simplyrets/version"
5
4
 
6
5
  Gem::Specification.new do |s|
6
+
7
7
  s.name = "simplyrets"
8
- s.version = SimplyRets::VERSION
8
+ s.version = SimplyRetsClient::SimplyRets::VERSION
9
9
  s.platform = Gem::Platform::RUBY
10
10
  s.authors = ["Christopher Reichert", "Cody Reichert"]
11
11
  s.email = ["christopher@simplyrets.com", "cody@simplyrets.com"]
12
12
  s.homepage = "https://simplyrets.com"
13
13
  s.summary = %q{SimplyRETS Ruby SDK}
14
14
  s.description = %q{This gem provides a SimplyRETS SDK for creating real estate software with RETS data}
15
+ s.license = "MIT"
15
16
 
16
- s.add_dependency 'typhoeus', '>=0.2.1'
17
- s.add_dependency 'addressable', '>=2.3.4'
18
- s.add_dependency 'json', '>=1.8'
17
+ s.add_runtime_dependency 'typhoeus', '~> 0.2', '>= 0.2.1'
18
+ s.add_runtime_dependency 'json', '~> 1.4', '>= 1.4.6'
19
19
 
20
- s.add_development_dependency 'rake'
21
- s.add_development_dependency 'bundler'
20
+ s.add_development_dependency 'rspec', '~> 3.2', '>= 3.2.0'
21
+ s.add_development_dependency 'vcr', '~> 2.9', '>= 2.9.3'
22
+ s.add_development_dependency 'webmock', '~> 1.6', '>= 1.6.2'
23
+ s.add_development_dependency 'autotest', '~> 4.4', '>= 4.4.6'
24
+ s.add_development_dependency 'autotest-rails-pure', '~> 4.1', '>= 4.1.2'
25
+ s.add_development_dependency 'autotest-growl', '~> 0.2', '>= 0.2.16'
26
+ s.add_development_dependency 'autotest-fsevent', '~> 0.2', '>= 0.2.10'
22
27
 
23
28
  s.files = `find *`.split("\n").uniq.sort.select{|f| !f.empty? }
24
- s.require_paths = ["lib", "models"]
29
+ #s.test_files = `find spec/*`.split("\n")
30
+ s.executables = []
31
+ s.require_paths = ["lib"]
25
32
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simplyrets
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christopher Reichert
@@ -9,12 +9,15 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-03-23 00:00:00.000000000 Z
12
+ date: 2015-09-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: typhoeus
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '0.2'
18
21
  - - ">="
19
22
  - !ruby/object:Gem::Version
20
23
  version: 0.2.1
@@ -22,65 +25,172 @@ dependencies:
22
25
  prerelease: false
23
26
  version_requirements: !ruby/object:Gem::Requirement
24
27
  requirements:
28
+ - - "~>"
29
+ - !ruby/object:Gem::Version
30
+ version: '0.2'
25
31
  - - ">="
26
32
  - !ruby/object:Gem::Version
27
33
  version: 0.2.1
28
34
  - !ruby/object:Gem::Dependency
29
- name: addressable
35
+ name: json
30
36
  requirement: !ruby/object:Gem::Requirement
31
37
  requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.4'
32
41
  - - ">="
33
42
  - !ruby/object:Gem::Version
34
- version: 2.3.4
43
+ version: 1.4.6
35
44
  type: :runtime
36
45
  prerelease: false
37
46
  version_requirements: !ruby/object:Gem::Requirement
38
47
  requirements:
48
+ - - "~>"
49
+ - !ruby/object:Gem::Version
50
+ version: '1.4'
39
51
  - - ">="
40
52
  - !ruby/object:Gem::Version
41
- version: 2.3.4
53
+ version: 1.4.6
42
54
  - !ruby/object:Gem::Dependency
43
- name: json
55
+ name: rspec
44
56
  requirement: !ruby/object:Gem::Requirement
45
57
  requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '3.2'
46
61
  - - ">="
47
62
  - !ruby/object:Gem::Version
48
- version: '1.8'
49
- type: :runtime
63
+ version: 3.2.0
64
+ type: :development
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - "~>"
69
+ - !ruby/object:Gem::Version
70
+ version: '3.2'
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: 3.2.0
74
+ - !ruby/object:Gem::Dependency
75
+ name: vcr
76
+ requirement: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - "~>"
79
+ - !ruby/object:Gem::Version
80
+ version: '2.9'
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: 2.9.3
84
+ type: :development
85
+ prerelease: false
86
+ version_requirements: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: '2.9'
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: 2.9.3
94
+ - !ruby/object:Gem::Dependency
95
+ name: webmock
96
+ requirement: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - "~>"
99
+ - !ruby/object:Gem::Version
100
+ version: '1.6'
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: 1.6.2
104
+ type: :development
50
105
  prerelease: false
51
106
  version_requirements: !ruby/object:Gem::Requirement
52
107
  requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.6'
53
111
  - - ">="
54
112
  - !ruby/object:Gem::Version
55
- version: '1.8'
113
+ version: 1.6.2
56
114
  - !ruby/object:Gem::Dependency
57
- name: rake
115
+ name: autotest
58
116
  requirement: !ruby/object:Gem::Requirement
59
117
  requirements:
118
+ - - "~>"
119
+ - !ruby/object:Gem::Version
120
+ version: '4.4'
60
121
  - - ">="
61
122
  - !ruby/object:Gem::Version
62
- version: '0'
123
+ version: 4.4.6
63
124
  type: :development
64
125
  prerelease: false
65
126
  version_requirements: !ruby/object:Gem::Requirement
66
127
  requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '4.4'
67
131
  - - ">="
68
132
  - !ruby/object:Gem::Version
69
- version: '0'
133
+ version: 4.4.6
70
134
  - !ruby/object:Gem::Dependency
71
- name: bundler
135
+ name: autotest-rails-pure
72
136
  requirement: !ruby/object:Gem::Requirement
73
137
  requirements:
138
+ - - "~>"
139
+ - !ruby/object:Gem::Version
140
+ version: '4.1'
74
141
  - - ">="
75
142
  - !ruby/object:Gem::Version
76
- version: '0'
143
+ version: 4.1.2
77
144
  type: :development
78
145
  prerelease: false
79
146
  version_requirements: !ruby/object:Gem::Requirement
80
147
  requirements:
148
+ - - "~>"
149
+ - !ruby/object:Gem::Version
150
+ version: '4.1'
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ version: 4.1.2
154
+ - !ruby/object:Gem::Dependency
155
+ name: autotest-growl
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - "~>"
159
+ - !ruby/object:Gem::Version
160
+ version: '0.2'
161
+ - - ">="
162
+ - !ruby/object:Gem::Version
163
+ version: 0.2.16
164
+ type: :development
165
+ prerelease: false
166
+ version_requirements: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - "~>"
169
+ - !ruby/object:Gem::Version
170
+ version: '0.2'
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: 0.2.16
174
+ - !ruby/object:Gem::Dependency
175
+ name: autotest-fsevent
176
+ requirement: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: '0.2'
181
+ - - ">="
182
+ - !ruby/object:Gem::Version
183
+ version: 0.2.10
184
+ type: :development
185
+ prerelease: false
186
+ version_requirements: !ruby/object:Gem::Requirement
187
+ requirements:
188
+ - - "~>"
189
+ - !ruby/object:Gem::Version
190
+ version: '0.2'
81
191
  - - ">="
82
192
  - !ruby/object:Gem::Version
83
- version: '0'
193
+ version: 0.2.10
84
194
  description: This gem provides a SimplyRETS SDK for creating real estate software
85
195
  with RETS data
86
196
  email:
@@ -90,41 +200,48 @@ executables: []
90
200
  extensions: []
91
201
  extra_rdoc_files: []
92
202
  files:
93
- - "#example.rb#"
94
203
  - Gemfile
95
204
  - Gemfile.lock
96
205
  - LICENSE
97
206
  - README.org
98
207
  - Rakefile
99
208
  - example.rb
100
- - lib/monkey.rb
101
- - lib/properties_api.rb
102
209
  - lib/simplyrets.rb
103
- - lib/simplyrets.rb~
104
- - lib/simplyrets/configuration.rb
105
- - lib/simplyrets/request.rb
106
- - lib/simplyrets/response.rb
107
- - lib/simplyrets/version.rb
108
- - models/agent.rb
109
- - models/contactinformation.rb
110
- - models/geographicdata.rb
111
- - models/listing.rb
112
- - models/mlsinformation.rb
113
- - models/office.rb
114
- - models/property.rb
115
- - models/school.rb
116
- - models/streetaddress.rb
117
- - models/tax.rb
118
- - pkg/simplyrets-0.1.gem
210
+ - lib/simplyrets/#listing.rb#
211
+ - lib/simplyrets/api/default_api.rb
212
+ - lib/simplyrets/listing.rb~
213
+ - lib/simplyrets/models/agent.rb
214
+ - lib/simplyrets/models/base_object.rb
215
+ - lib/simplyrets/models/broker.rb
216
+ - lib/simplyrets/models/contact_information.rb
217
+ - lib/simplyrets/models/error.rb
218
+ - lib/simplyrets/models/geographic_data.rb
219
+ - lib/simplyrets/models/listing.rb
220
+ - lib/simplyrets/models/listing.rb~
221
+ - lib/simplyrets/models/mls_information.rb
222
+ - lib/simplyrets/models/office.rb
223
+ - lib/simplyrets/models/open_house.rb
224
+ - lib/simplyrets/models/parking.rb
225
+ - lib/simplyrets/models/property.rb
226
+ - lib/simplyrets/models/sales.rb
227
+ - lib/simplyrets/models/school.rb
228
+ - lib/simplyrets/models/street_address.rb
229
+ - lib/simplyrets/models/tax.rb
230
+ - lib/simplyrets/simplyrets.rb
231
+ - lib/simplyrets/simplyrets/api_error.rb
232
+ - lib/simplyrets/simplyrets/configuration.rb
233
+ - lib/simplyrets/simplyrets/request.rb
234
+ - lib/simplyrets/simplyrets/response.rb
235
+ - lib/simplyrets/simplyrets/version.rb
119
236
  - simplyrets.gemspec
120
237
  homepage: https://simplyrets.com
121
- licenses: []
238
+ licenses:
239
+ - MIT
122
240
  metadata: {}
123
241
  post_install_message:
124
242
  rdoc_options: []
125
243
  require_paths:
126
244
  - lib
127
- - models
128
245
  required_ruby_version: !ruby/object:Gem::Requirement
129
246
  requirements:
130
247
  - - ">="