simplyrets 1.0.7 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +23 -21
  3. data/Makefile +48 -0
  4. data/README.org +5 -58
  5. data/example.rb +14 -4
  6. data/lib/simplyrets.rb +42 -21
  7. data/lib/simplyrets/api/default_api.rb +292 -59
  8. data/lib/simplyrets/api_client.rb +370 -0
  9. data/lib/simplyrets/api_error.rb +36 -0
  10. data/lib/simplyrets/configuration.rb +170 -0
  11. data/lib/simplyrets/models/agent.rb +146 -11
  12. data/lib/simplyrets/models/broker.rb +133 -7
  13. data/lib/simplyrets/models/contact_information.rb +149 -17
  14. data/lib/simplyrets/models/error.rb +138 -9
  15. data/lib/simplyrets/models/geographic_data.rb +150 -12
  16. data/lib/simplyrets/models/listing.rb +248 -49
  17. data/lib/simplyrets/models/mls_information.rb +148 -12
  18. data/lib/simplyrets/models/office.rb +146 -11
  19. data/lib/simplyrets/models/open_house.rb +215 -12
  20. data/lib/simplyrets/models/parking.rb +148 -17
  21. data/lib/simplyrets/models/property.rb +353 -129
  22. data/lib/simplyrets/models/sales.rb +163 -25
  23. data/lib/simplyrets/models/school.rb +167 -24
  24. data/lib/simplyrets/models/street_address.rb +204 -26
  25. data/lib/simplyrets/models/tax.rb +150 -18
  26. data/lib/simplyrets/version.rb +15 -0
  27. data/multi-query-param.patch +44 -0
  28. data/simplyrets.gemspec +4 -4
  29. data/spec/api/default_api_spec.rb +172 -0
  30. data/spec/models/agent_spec.rb +75 -0
  31. data/spec/models/broker_spec.rb +45 -0
  32. data/spec/models/contact_information_spec.rb +65 -0
  33. data/spec/models/error_spec.rb +55 -0
  34. data/spec/models/geographic_data_spec.rb +85 -0
  35. data/spec/models/listing_spec.rb +245 -0
  36. data/spec/models/mls_information_spec.rb +75 -0
  37. data/spec/models/office_spec.rb +75 -0
  38. data/spec/models/open_house_spec.rb +115 -0
  39. data/spec/models/parking_spec.rb +65 -0
  40. data/spec/models/property_spec.rb +365 -0
  41. data/spec/models/sales_spec.rb +85 -0
  42. data/spec/models/school_spec.rb +75 -0
  43. data/spec/models/street_address_spec.rb +105 -0
  44. data/spec/models/tax_spec.rb +65 -0
  45. data/spec/spec_helper.rb +78 -0
  46. metadata +33 -18
  47. data/lib/simplyrets.rb~ +0 -34
  48. data/lib/simplyrets/api/#default_api.rb# +0 -146
  49. data/lib/simplyrets/simplyrets/api_error.rb +0 -26
  50. data/lib/simplyrets/simplyrets/configuration.rb +0 -101
  51. data/lib/simplyrets/simplyrets/request.rb +0 -248
  52. data/lib/simplyrets/simplyrets/response.rb +0 -156
  53. data/lib/simplyrets/simplyrets/version.rb +0 -5
  54. data/simplyrets-1.0.6.gem +0 -0
@@ -1,156 +0,0 @@
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
@@ -1,5 +0,0 @@
1
- module SimplyRetsClient
2
- module SimplyRets
3
- VERSION = "1.0.7"
4
- end
5
- end
Binary file