reso 0.1.0.3 → 0.1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/models/import.rb +9 -0
- data/app/models/queued_listing.rb +1 -1
- data/lib/generators/reso/templates/reso.rake +11 -5
- data/lib/mapper.rb +45 -0
- data/lib/mapper/reso.rb +119 -160
- data/lib/reso/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5e4cf4dfcb9e6c4b1ed0a73f10bc721b710762b7
|
4
|
+
data.tar.gz: c05035bf8cadb7a7044027357488f3e2ec65c709
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c533cabc8a83c661b24d254bde866b56ba604107512e10217efbad93712753beb045348d7058ea3a3c833c8b893a490c32a69550ff253c048c2d00b6c0db5281
|
7
|
+
data.tar.gz: 9573993e629bb919d59776afc8ae4bdc75d1480cccf29c305154e4de4b57d6cbf621dbb85ba2a15a60a10970940c166fcdaf0775789d64fb952ff997fc94be03
|
data/app/models/import.rb
CHANGED
@@ -9,6 +9,15 @@ class Import < ActiveRecord::Base
|
|
9
9
|
|
10
10
|
before_save :set_import_format
|
11
11
|
|
12
|
+
def remove_listings_no_longer_present fresh_listing_keys
|
13
|
+
existing_listing_keys = self.listings.all.pluck(:listing_key)
|
14
|
+
stale_listing_keys = existing_listing_keys.delete_if{|key| fresh_listing_keys.include? key }
|
15
|
+
stale_listing_keys.each do |listing_key|
|
16
|
+
Listing.find_by(listing_key: listing_key).destroy
|
17
|
+
end
|
18
|
+
stale_listing_keys
|
19
|
+
end
|
20
|
+
|
12
21
|
def set_import_format
|
13
22
|
self.import_format = ImportFormat.find_by(name: 'reso') unless self.import_format.present?
|
14
23
|
end
|
@@ -14,7 +14,7 @@ class QueuedListing < ActiveRecord::Base
|
|
14
14
|
eager_load(:participants).
|
15
15
|
eager_load(:photos).
|
16
16
|
find_or_initialize_by(
|
17
|
-
listing_key:
|
17
|
+
listing_key: Mapper::unique_identifier(self)
|
18
18
|
)
|
19
19
|
if (listing.modification_timestamp != mapper.modification_timestamp(self, listing))
|
20
20
|
Mapper::RESO_LISTING_ATTRIBUTES.each do |attribute|
|
@@ -32,16 +32,19 @@ namespace :reso do
|
|
32
32
|
nil # Just in cases
|
33
33
|
end
|
34
34
|
|
35
|
-
def
|
35
|
+
def create_queued_listing_and_return_listing_key doc, import
|
36
36
|
begin
|
37
37
|
doc.css(import.repeating_element).each do |o|
|
38
38
|
listing_data = {}
|
39
39
|
Hash.from_xml(o.to_xml)[import.repeating_element].each_pair{|key, value| listing_data[key] = value }
|
40
|
-
QueuedListing.
|
40
|
+
queued_listing = QueuedListing.new(import: import, listing_data: listing_data)
|
41
|
+
queued_listing.save
|
42
|
+
return Mapper::unique_identifier(queued_listing)
|
41
43
|
end
|
42
44
|
rescue Exception => e
|
43
45
|
puts e.inspect
|
44
46
|
exit if Rails.env.development?
|
47
|
+
return nil
|
45
48
|
end
|
46
49
|
end
|
47
50
|
|
@@ -93,7 +96,7 @@ namespace :reso do
|
|
93
96
|
import = Import.find_by(token: args.import_token)
|
94
97
|
|
95
98
|
unless import.blank?
|
96
|
-
l, count, stream = 0, 0, ''
|
99
|
+
l, count, incoming_listing_keys, stream = 0, 0, [], ''
|
97
100
|
open_tag, close_tag = get_open_and_closing_tag_for import.repeating_element
|
98
101
|
|
99
102
|
# Grab a file to work with
|
@@ -110,7 +113,7 @@ namespace :reso do
|
|
110
113
|
while (from_here = stream.index(open_tag)) && (to_there = stream.index(close_tag))
|
111
114
|
xml = stream[from_here..to_there + (close_tag.length-1)]
|
112
115
|
doc = Nokogiri::XML([xml_header, xml].join).remove_namespaces!
|
113
|
-
|
116
|
+
incoming_listing_keys << create_queued_listing_and_return_listing_key(doc, import)
|
114
117
|
stream.gsub!(xml, '')
|
115
118
|
if ((l += 1) % 1000).zero?
|
116
119
|
puts "#{l}\t#{l/(Time.now - start)}" if Rails.env.development?
|
@@ -118,7 +121,10 @@ namespace :reso do
|
|
118
121
|
GC.start if (l % 100).zero?
|
119
122
|
end
|
120
123
|
end
|
121
|
-
puts "
|
124
|
+
puts "Import speed: #{l/(Time.now - start)} listings/s" if Rails.env.development?
|
125
|
+
puts "Found #{l} new listings." if Rails.env.development?
|
126
|
+
stale_listing_keys = import.remove_listings_no_longer_present(incoming_listing_keys)
|
127
|
+
puts "Removed #{stale_listing_keys.count} old listings." if Rails.env.development?
|
122
128
|
File.delete(filepath)
|
123
129
|
end
|
124
130
|
end
|
data/lib/mapper.rb
CHANGED
@@ -225,5 +225,50 @@ module Mapper
|
|
225
225
|
def self.view_types item_name
|
226
226
|
fetch_enumeration 'ViewType', item_name
|
227
227
|
end
|
228
|
+
|
229
|
+
def self.unique_identifier queued_listing
|
230
|
+
(result = Mapper::get_value(queued_listing, queued_listing.import.unique_identifier.split(' ')))
|
231
|
+
end
|
232
|
+
|
233
|
+
def self.get_boolean_value queued_listing, elements
|
234
|
+
(result = Mapper::get_value(queued_listing, elements)) ? result.to_s.to_bool : nil
|
235
|
+
end
|
236
|
+
|
237
|
+
def self.get_value queued_listing, elements
|
238
|
+
if elements.count.eql?(1)
|
239
|
+
get_simple_value(queued_listing, elements.first)
|
240
|
+
else
|
241
|
+
get_subvalue(queued_listing, elements.first, elements[1..-1])
|
242
|
+
end
|
243
|
+
end
|
244
|
+
|
245
|
+
def self.get_simple_value queued_listing, element
|
246
|
+
if (value = queued_listing.listing_data[element])
|
247
|
+
value.unwrap_attribute
|
248
|
+
end
|
249
|
+
end
|
250
|
+
|
251
|
+
def self.get_subvalue queued_listing, element, child_elements
|
252
|
+
if (value = get_simple_value(queued_listing, element))
|
253
|
+
if (subvalue = child_elements.inject(value){|v, e| v[e] ? v[e] : Hash.new })
|
254
|
+
subvalue.present? ? subvalue.unwrap_attribute : nil
|
255
|
+
end
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
def self.get_repeaters queued_listing, elements
|
260
|
+
if (value = Mapper::get_value(queued_listing, elements[0..-2]))
|
261
|
+
(result = value.drilldown(elements.last)) ? (result.is_a?(Array) ? result : [result]) : nil
|
262
|
+
else
|
263
|
+
return []
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
267
|
+
def self.get_enums queued_listing, elements
|
268
|
+
if (result = get_repeaters(queued_listing, elements))
|
269
|
+
enums = result.map{|name| Mapper.send(elements.last.tableize, name)}
|
270
|
+
end
|
271
|
+
enums ? enums.compact : nil
|
272
|
+
end
|
228
273
|
|
229
274
|
end
|
data/lib/mapper/reso.rb
CHANGED
@@ -6,7 +6,7 @@ module Mapper
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def self.address queued_listing, listing
|
9
|
-
if (result = get_value(queued_listing, %w(Address)))
|
9
|
+
if (result = Mapper::get_value(queued_listing, %w(Address)))
|
10
10
|
listing.address ||= Address.new
|
11
11
|
listing.address.assign_attributes({
|
12
12
|
preference_order: result.drilldown('preference_order'),
|
@@ -23,7 +23,7 @@ module Mapper
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def self.alternate_prices queued_listing, listing
|
26
|
-
if (result = get_repeaters(queued_listing, %w(AlternatePrices AlternatePrice)))
|
26
|
+
if (result = Mapper::get_repeaters(queued_listing, %w(AlternatePrices AlternatePrice)))
|
27
27
|
result.map{|item| listing.alternate_prices.find_or_initialize_by(
|
28
28
|
list_price: item.drilldown('AlternateListPrice'),
|
29
29
|
currency_code: item.drilldown('AlternateListPrice currencyCode'),
|
@@ -34,23 +34,23 @@ module Mapper
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def self.appliances queued_listing, listing
|
37
|
-
get_enums(queued_listing, %w(DetailedCharacteristics Appliances Appliance))
|
37
|
+
Mapper::get_enums(queued_listing, %w(DetailedCharacteristics Appliances Appliance))
|
38
38
|
end
|
39
39
|
|
40
40
|
def self.architecture_style queued_listing, listing
|
41
|
-
(result = get_value(queued_listing, %w(DetailedCharacteristics ArchitectureStyle))) ? Mapper::architecture_styles(result) : nil
|
41
|
+
(result = Mapper::get_value(queued_listing, %w(DetailedCharacteristics ArchitectureStyle))) ? Mapper::architecture_styles(result) : nil
|
42
42
|
end
|
43
43
|
|
44
44
|
def self.architecture_style_description queued_listing, listing
|
45
|
-
get_value(queued_listing, %w(DetailedCharacteristics ArchitectureStyle otherDescription))
|
45
|
+
Mapper::get_value(queued_listing, %w(DetailedCharacteristics ArchitectureStyle otherDescription))
|
46
46
|
end
|
47
47
|
|
48
48
|
def self.bathrooms queued_listing, listing
|
49
|
-
get_value(queued_listing, %w(Bathrooms))
|
49
|
+
Mapper::get_value(queued_listing, %w(Bathrooms))
|
50
50
|
end
|
51
51
|
|
52
52
|
def self.bedrooms queued_listing, listing
|
53
|
-
get_value(queued_listing, %w(Bedrooms))
|
53
|
+
Mapper::get_value(queued_listing, %w(Bedrooms))
|
54
54
|
end
|
55
55
|
|
56
56
|
def self.brokerage queued_listing, listing
|
@@ -62,23 +62,23 @@ module Mapper
|
|
62
62
|
end
|
63
63
|
|
64
64
|
def self.building_unit_count queued_listing, listing
|
65
|
-
get_value(queued_listing, %w(DetailedCharacteristics BuildingUnitCount))
|
65
|
+
Mapper::get_value(queued_listing, %w(DetailedCharacteristics BuildingUnitCount))
|
66
66
|
end
|
67
67
|
|
68
68
|
def self.condo_floor_num queued_listing, listing
|
69
|
-
get_value(queued_listing, %w(DetailedCharacteristics CondoFloorNum))
|
69
|
+
Mapper::get_value(queued_listing, %w(DetailedCharacteristics CondoFloorNum))
|
70
70
|
end
|
71
71
|
|
72
72
|
def self.cooling_systems queued_listing, listing
|
73
|
-
get_enums(queued_listing, %w(DetailedCharacteristics CoolingSystems CoolingSystem))
|
73
|
+
Mapper::get_enums(queued_listing, %w(DetailedCharacteristics CoolingSystems CoolingSystem))
|
74
74
|
end
|
75
75
|
|
76
76
|
def self.county queued_listing, listing
|
77
|
-
if (get_value(queued_listing, %w(Location County)))
|
77
|
+
if (Mapper::get_value(queued_listing, %w(Location County)))
|
78
78
|
county = County.find_or_initialize_by(
|
79
|
-
name: get_value(queued_listing, %w(Location County)),
|
80
|
-
state_or_province: get_value(queued_listing, %w(Address StateOrProvince)),
|
81
|
-
country: get_value(queued_listing, %w(Address Country))
|
79
|
+
name: Mapper::get_value(queued_listing, %w(Location County)),
|
80
|
+
state_or_province: Mapper::get_value(queued_listing, %w(Address StateOrProvince)),
|
81
|
+
country: Mapper::get_value(queued_listing, %w(Address Country))
|
82
82
|
)
|
83
83
|
else
|
84
84
|
return nil
|
@@ -86,27 +86,27 @@ module Mapper
|
|
86
86
|
end
|
87
87
|
|
88
88
|
def self.currency_code queued_listing, listing
|
89
|
-
get_value(queued_listing, %w(ListPrice currencyCode))
|
89
|
+
Mapper::get_value(queued_listing, %w(ListPrice currencyCode))
|
90
90
|
end
|
91
91
|
|
92
92
|
def self.directions queued_listing, listing
|
93
|
-
get_value(queued_listing, %w(Location Directions))
|
93
|
+
Mapper::get_value(queued_listing, %w(Location Directions))
|
94
94
|
end
|
95
95
|
|
96
96
|
def self.disclaimer queued_listing, listing
|
97
|
-
get_value(queued_listing, %w(Disclaimer))
|
97
|
+
Mapper::get_value(queued_listing, %w(Disclaimer))
|
98
98
|
end
|
99
99
|
|
100
100
|
def self.disclose_address queued_listing, listing
|
101
|
-
get_boolean_value(queued_listing, %w(DiscloseAddress))
|
101
|
+
Mapper::get_boolean_value(queued_listing, %w(DiscloseAddress))
|
102
102
|
end
|
103
103
|
|
104
104
|
def self.elevation queued_listing, listing
|
105
|
-
get_value(queued_listing, %w(Location Elevation))
|
105
|
+
Mapper::get_value(queued_listing, %w(Location Elevation))
|
106
106
|
end
|
107
107
|
|
108
108
|
def self.expenses queued_listing, listing
|
109
|
-
if (result = get_repeaters(queued_listing, %w(Expenses Expense)))
|
109
|
+
if (result = Mapper::get_repeaters(queued_listing, %w(Expenses Expense)))
|
110
110
|
result.map{|item| listing.expenses.find_or_initialize_by(
|
111
111
|
expense_category: Mapper::expense_categories(item['ExpenseCategory']),
|
112
112
|
currency_period: Mapper::expense_categories(item['ExpenseValue']['currencyPeriod']),
|
@@ -116,15 +116,15 @@ module Mapper
|
|
116
116
|
end
|
117
117
|
|
118
118
|
def self.exterior_types queued_listing, listing
|
119
|
-
get_enums(queued_listing, %w(DetailedCharacteristics ExteriorTypes ExteriorType))
|
119
|
+
Mapper::get_enums(queued_listing, %w(DetailedCharacteristics ExteriorTypes ExteriorType))
|
120
120
|
end
|
121
121
|
|
122
122
|
def self.floor_coverings queued_listing, listing
|
123
|
-
get_enums(queued_listing, %w(DetailedCharacteristics FloorCoverings FloorCovering))
|
123
|
+
Mapper::get_enums(queued_listing, %w(DetailedCharacteristics FloorCoverings FloorCovering))
|
124
124
|
end
|
125
125
|
|
126
126
|
def self.foreclosure_status queued_listing, listing
|
127
|
-
(result = get_value(queued_listing, %w(ForeclosureStatus))) ? Mapper::foreclosure_statuses(result) : nil
|
127
|
+
(result = Mapper::get_value(queued_listing, %w(ForeclosureStatus))) ? Mapper::foreclosure_statuses(result) : nil
|
128
128
|
end
|
129
129
|
|
130
130
|
def self.franchise queued_listing, listing
|
@@ -132,199 +132,203 @@ module Mapper
|
|
132
132
|
end
|
133
133
|
|
134
134
|
def self.full_bathrooms queued_listing, listing
|
135
|
-
get_value(queued_listing, %w(FullBathrooms))
|
135
|
+
Mapper::get_value(queued_listing, %w(FullBathrooms))
|
136
136
|
end
|
137
137
|
|
138
138
|
def self.geocode_options queued_listing, listing
|
139
|
-
get_value(queued_listing, %w(Location GeocodeOptions))
|
139
|
+
Mapper::get_value(queued_listing, %w(Location GeocodeOptions))
|
140
140
|
end
|
141
141
|
|
142
142
|
def self.half_bathrooms queued_listing, listing
|
143
|
-
get_value(queued_listing, %w(HalfBathrooms))
|
143
|
+
Mapper::get_value(queued_listing, %w(HalfBathrooms))
|
144
144
|
end
|
145
145
|
|
146
146
|
def self.has_attic queued_listing, listing
|
147
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasAttic))
|
147
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasAttic))
|
148
148
|
end
|
149
149
|
|
150
150
|
def self.has_barbecue_area queued_listing, listing
|
151
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasBarbecueArea))
|
151
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasBarbecueArea))
|
152
152
|
end
|
153
153
|
|
154
154
|
def self.has_basement queued_listing, listing
|
155
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasBasement))
|
155
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasBasement))
|
156
156
|
end
|
157
157
|
|
158
158
|
def self.has_ceiling_fan queued_listing, listing
|
159
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasCeilingFan))
|
159
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasCeilingFan))
|
160
160
|
end
|
161
161
|
|
162
162
|
def self.has_deck queued_listing, listing
|
163
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasDeck))
|
163
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasDeck))
|
164
164
|
end
|
165
165
|
|
166
166
|
def self.has_disabled_access queued_listing, listing
|
167
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasDisabledAccess))
|
167
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasDisabledAccess))
|
168
168
|
end
|
169
169
|
|
170
170
|
def self.has_dock queued_listing, listing
|
171
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasDock))
|
171
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasDock))
|
172
172
|
end
|
173
173
|
|
174
174
|
def self.has_doorman queued_listing, listing
|
175
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasDoorman))
|
175
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasDoorman))
|
176
176
|
end
|
177
177
|
|
178
178
|
def self.has_double_pane_windows queued_listing, listing
|
179
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasDoublePaneWindows))
|
179
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasDoublePaneWindows))
|
180
180
|
end
|
181
181
|
|
182
182
|
def self.has_elevator queued_listing, listing
|
183
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasElevator))
|
183
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasElevator))
|
184
184
|
end
|
185
185
|
|
186
186
|
def self.has_fireplace queued_listing, listing
|
187
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasFireplace))
|
187
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasFireplace))
|
188
188
|
end
|
189
189
|
|
190
190
|
def self.has_garden queued_listing, listing
|
191
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasGarden))
|
191
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasGarden))
|
192
192
|
end
|
193
193
|
|
194
194
|
def self.has_gated_entry queued_listing, listing
|
195
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasGatedEntry))
|
195
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasGatedEntry))
|
196
196
|
end
|
197
197
|
|
198
198
|
def self.has_greenhouse queued_listing, listing
|
199
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasGreenhouse))
|
199
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasGreenhouse))
|
200
200
|
end
|
201
201
|
|
202
202
|
def self.has_hot_tub_spa queued_listing, listing
|
203
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasHotTubSpa))
|
203
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasHotTubSpa))
|
204
204
|
end
|
205
205
|
|
206
206
|
def self.has_intercom queued_listing, listing
|
207
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics Intercom))
|
207
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics Intercom))
|
208
208
|
end
|
209
209
|
|
210
210
|
def self.has_jetted_bath_tub queued_listing, listing
|
211
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasJettedBathTub))
|
211
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasJettedBathTub))
|
212
212
|
end
|
213
213
|
|
214
214
|
def self.has_lawn queued_listing, listing
|
215
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasLawn))
|
215
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasLawn))
|
216
216
|
end
|
217
217
|
|
218
218
|
def self.has_mother_in_law queued_listing, listing
|
219
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasMotherInLaw))
|
219
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasMotherInLaw))
|
220
220
|
end
|
221
221
|
|
222
222
|
def self.has_patio queued_listing, listing
|
223
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasPatio))
|
223
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasPatio))
|
224
224
|
end
|
225
225
|
|
226
226
|
def self.has_pond queued_listing, listing
|
227
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasPond))
|
227
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasPond))
|
228
228
|
end
|
229
229
|
|
230
230
|
def self.has_pool queued_listing, listing
|
231
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasPool))
|
231
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasPool))
|
232
232
|
end
|
233
233
|
|
234
234
|
def self.has_porch queued_listing, listing
|
235
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasPorch))
|
235
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasPorch))
|
236
236
|
end
|
237
237
|
|
238
238
|
def self.has_rv_parking queued_listing, listing
|
239
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasRVParking))
|
239
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasRVParking))
|
240
240
|
end
|
241
241
|
|
242
242
|
def self.has_sauna queued_listing, listing
|
243
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasSauna))
|
243
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasSauna))
|
244
244
|
end
|
245
245
|
|
246
246
|
def self.has_security_system queued_listing, listing
|
247
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasSecuritySystem))
|
247
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasSecuritySystem))
|
248
248
|
end
|
249
249
|
|
250
250
|
def self.has_skylight queued_listing, listing
|
251
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasSkylight))
|
251
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasSkylight))
|
252
252
|
end
|
253
253
|
|
254
254
|
def self.has_sports_court queued_listing, listing
|
255
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasSportsCourt))
|
255
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasSportsCourt))
|
256
256
|
end
|
257
257
|
|
258
258
|
def self.has_sprinkler_system queued_listing, listing
|
259
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasSprinklerSystem))
|
259
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasSprinklerSystem))
|
260
260
|
end
|
261
261
|
|
262
262
|
def self.has_vaulted_ceiling queued_listing, listing
|
263
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasVaultedCeiling))
|
263
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasVaultedCeiling))
|
264
264
|
end
|
265
265
|
|
266
266
|
def self.has_wet_bar queued_listing, listing
|
267
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics HasWetBar))
|
267
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics HasWetBar))
|
268
268
|
end
|
269
269
|
|
270
270
|
def self.heating_fuels queued_listing, listing
|
271
|
-
get_enums(queued_listing, %w(DetailedCharacteristics HeatingFuels HeatingFuel)).uniq
|
271
|
+
Mapper::get_enums(queued_listing, %w(DetailedCharacteristics HeatingFuels HeatingFuel)).uniq
|
272
272
|
end
|
273
273
|
|
274
274
|
def self.heating_systems queued_listing, listing
|
275
|
-
get_enums(queued_listing, %w(DetailedCharacteristics HeatingSystems HeatingSystem)).uniq
|
275
|
+
Mapper::get_enums(queued_listing, %w(DetailedCharacteristics HeatingSystems HeatingSystem)).uniq
|
276
|
+
end
|
277
|
+
|
278
|
+
def self.import queued_listing, listing
|
279
|
+
queued_listing.import
|
276
280
|
end
|
277
281
|
|
278
282
|
def self.is_cable_ready queued_listing, listing
|
279
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics IsCableReady))
|
283
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics IsCableReady))
|
280
284
|
end
|
281
285
|
|
282
286
|
def self.is_new_construction queued_listing, listing
|
283
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics IsNewConstruction))
|
287
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics IsNewConstruction))
|
284
288
|
end
|
285
289
|
|
286
290
|
def self.is_waterfront queued_listing, listing
|
287
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics IsWaterfront))
|
291
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics IsWaterfront))
|
288
292
|
end
|
289
293
|
|
290
294
|
def self.is_wired queued_listing, listing
|
291
|
-
get_boolean_value(queued_listing, %w(DetailedCharacteristics IsWired))
|
295
|
+
Mapper::get_boolean_value(queued_listing, %w(DetailedCharacteristics IsWired))
|
292
296
|
end
|
293
297
|
|
294
298
|
def self.latitude queued_listing, listing
|
295
|
-
get_value(queued_listing, %w(Location Latitude))
|
299
|
+
Mapper::get_value(queued_listing, %w(Location Latitude))
|
296
300
|
end
|
297
301
|
|
298
302
|
def self.lead_routing_email queued_listing, listing
|
299
|
-
get_value(queued_listing, %w(LeadRoutingEmail))
|
303
|
+
Mapper::get_value(queued_listing, %w(LeadRoutingEmail))
|
300
304
|
end
|
301
305
|
|
302
306
|
def self.legal_description queued_listing, listing
|
303
|
-
get_value(queued_listing, %w(DetailedCharacteristics LegalDescription))
|
307
|
+
Mapper::get_value(queued_listing, %w(DetailedCharacteristics LegalDescription))
|
304
308
|
end
|
305
309
|
|
306
310
|
def self.list_price queued_listing, listing
|
307
|
-
get_value(queued_listing, %w(ListPrice))
|
311
|
+
Mapper::get_value(queued_listing, %w(ListPrice))
|
308
312
|
end
|
309
313
|
|
310
314
|
def self.list_price_low queued_listing, listing
|
311
|
-
get_value(queued_listing, %w(ListPriceLow))
|
315
|
+
Mapper::get_value(queued_listing, %w(ListPriceLow))
|
312
316
|
end
|
313
317
|
|
314
318
|
def self.listing_category queued_listing, listing
|
315
|
-
(result = get_value(queued_listing, %w(ListingCategory))) ? Mapper::listing_categories(result) : nil
|
319
|
+
(result = Mapper::get_value(queued_listing, %w(ListingCategory))) ? Mapper::listing_categories(result) : nil
|
316
320
|
end
|
317
321
|
|
318
322
|
def self.listing_date queued_listing, listing
|
319
|
-
(result = get_value(queued_listing, %w(ListingDate))) ? Chronic::parse(result).to_date : nil
|
323
|
+
(result = Mapper::get_value(queued_listing, %w(ListingDate))) ? Chronic::parse(result).to_date : nil
|
320
324
|
end
|
321
325
|
|
322
326
|
def self.listing_description queued_listing, listing
|
323
|
-
get_value(queued_listing, %w(ListingDescription))
|
327
|
+
Mapper::get_value(queued_listing, %w(ListingDescription))
|
324
328
|
end
|
325
329
|
|
326
330
|
def self.listing_media queued_listing, listing, elements
|
327
|
-
if (result = get_repeaters(queued_listing, elements))
|
331
|
+
if (result = Mapper::get_repeaters(queued_listing, elements))
|
328
332
|
result.map do |item|
|
329
333
|
listing.send(elements.last.tableize).find_or_initialize_by(
|
330
334
|
media_url: item.drilldown('MediaURL'),
|
@@ -339,68 +343,68 @@ module Mapper
|
|
339
343
|
|
340
344
|
# TODO: Make ListingProvider and SourceProviderCategory Provider and ProviderCategory
|
341
345
|
def self.listing_provider queued_listing, listing
|
342
|
-
if get_value(queued_listing, %w(ProviderName)).present?
|
346
|
+
if Mapper::get_value(queued_listing, %w(ProviderName)).present?
|
343
347
|
result = ListingProvider.find_or_initialize_by(
|
344
|
-
name: get_value(queued_listing, %w(ProviderName)),
|
345
|
-
url: get_value(queued_listing, %w(ProviderURL)),
|
346
|
-
source_provider_category: Mapper::source_provider_categories(get_value(queued_listing, %w(ProviderCategory)))
|
348
|
+
name: Mapper::get_value(queued_listing, %w(ProviderName)),
|
349
|
+
url: Mapper::get_value(queued_listing, %w(ProviderURL)),
|
350
|
+
source_provider_category: Mapper::source_provider_categories(Mapper::get_value(queued_listing, %w(ProviderCategory)))
|
347
351
|
)
|
348
352
|
end
|
349
353
|
end
|
350
354
|
|
351
355
|
def self.listing_status queued_listing, listing
|
352
|
-
(result = get_value(queued_listing, %w(ListingStatus))) ? Mapper::listing_statuses(result) : nil
|
356
|
+
(result = Mapper::get_value(queued_listing, %w(ListingStatus))) ? Mapper::listing_statuses(result) : nil
|
353
357
|
end
|
354
358
|
|
355
359
|
def self.listing_title queued_listing, listing
|
356
|
-
get_value(queued_listing, %w(ListingTitle))
|
360
|
+
Mapper::get_value(queued_listing, %w(ListingTitle))
|
357
361
|
end
|
358
362
|
|
359
363
|
def self.listing_url queued_listing, listing
|
360
|
-
get_value(queued_listing, %w(ListingURL))
|
364
|
+
Mapper::get_value(queued_listing, %w(ListingURL))
|
361
365
|
end
|
362
366
|
|
363
367
|
def self.living_area queued_listing, listing
|
364
|
-
get_value(queued_listing, %w(LivingArea))
|
368
|
+
Mapper::get_value(queued_listing, %w(LivingArea))
|
365
369
|
end
|
366
370
|
|
367
371
|
def self.living_area_unit queued_listing, listing
|
368
|
-
get_value(queued_listing, %w(LivingArea areaUnits))
|
372
|
+
Mapper::get_value(queued_listing, %w(LivingArea areaUnits))
|
369
373
|
end
|
370
374
|
|
371
375
|
def self.longitude queued_listing, listing
|
372
|
-
get_value(queued_listing, %w(Location Longitude))
|
376
|
+
Mapper::get_value(queued_listing, %w(Location Longitude))
|
373
377
|
end
|
374
378
|
|
375
379
|
def self.lot_size queued_listing, listing
|
376
|
-
get_value(queued_listing, %w(LotSize))
|
380
|
+
Mapper::get_value(queued_listing, %w(LotSize))
|
377
381
|
end
|
378
382
|
|
379
383
|
def self.mls_number queued_listing, listing
|
380
|
-
get_value(queued_listing, %w(MlsNumber))
|
384
|
+
Mapper::get_value(queued_listing, %w(MlsNumber))
|
381
385
|
end
|
382
386
|
|
383
387
|
def self.modification_timestamp queued_listing, listing
|
384
388
|
# TODO: Change from string to datetime
|
385
|
-
get_value(queued_listing, %w(ModificationTimestamp))
|
389
|
+
Mapper::get_value(queued_listing, %w(ModificationTimestamp))
|
386
390
|
end
|
387
391
|
|
388
392
|
def self.multiple_listing_service queued_listing, listing
|
389
|
-
if (get_value(queued_listing, %w(MlsId)) || get_value(queued_listing, %w(MlsName)))
|
393
|
+
if (Mapper::get_value(queued_listing, %w(MlsId)) || Mapper::get_value(queued_listing, %w(MlsName)))
|
390
394
|
MultipleListingService.find_or_initialize_by(
|
391
|
-
mls_id: get_value(queued_listing, %w(MlsId)),
|
392
|
-
mls_name: get_value(queued_listing, %w(MlsName))
|
395
|
+
mls_id: Mapper::get_value(queued_listing, %w(MlsId)),
|
396
|
+
mls_name: Mapper::get_value(queued_listing, %w(MlsName))
|
393
397
|
)
|
394
398
|
end
|
395
399
|
end
|
396
400
|
|
397
401
|
def self.neighborhoods queued_listing, listing
|
398
|
-
if (result = get_value(queued_listing, %w(Location Neighborhoods Neighborhood)))
|
402
|
+
if (result = Mapper::get_value(queued_listing, %w(Location Neighborhoods Neighborhood)))
|
399
403
|
places = result.map do |item|
|
400
404
|
place = Neighborhood.find_or_initialize_by(
|
401
|
-
city: get_value(queued_listing, %w(Address City)),
|
405
|
+
city: Mapper::get_value(queued_listing, %w(Address City)),
|
402
406
|
name: item.drilldown('Name'),
|
403
|
-
state_or_province: get_value(queued_listing, %w(Address StateOrProvince))
|
407
|
+
state_or_province: Mapper::get_value(queued_listing, %w(Address StateOrProvince))
|
404
408
|
)
|
405
409
|
place.description = item.drilldown('Description')
|
406
410
|
place
|
@@ -410,15 +414,15 @@ module Mapper
|
|
410
414
|
end
|
411
415
|
|
412
416
|
def self.num_floors queued_listing, listing
|
413
|
-
get_value(queued_listing, %w(DetailedCharacteristics NumFloors))
|
417
|
+
Mapper::get_value(queued_listing, %w(DetailedCharacteristics NumFloors))
|
414
418
|
end
|
415
419
|
|
416
420
|
def self.num_parking_spaces queued_listing, listing
|
417
|
-
get_value(queued_listing, %w(DetailedCharacteristics NumParkingSpaces))
|
421
|
+
Mapper::get_value(queued_listing, %w(DetailedCharacteristics NumParkingSpaces))
|
418
422
|
end
|
419
423
|
|
420
424
|
def self.office queued_listing, listing
|
421
|
-
if (result = get_value(queued_listing, %w(Offices Office)))
|
425
|
+
if (result = Mapper::get_value(queued_listing, %w(Offices Office)))
|
422
426
|
office = Office.find_or_initialize_by(
|
423
427
|
office_identifier: result.drilldown('OfficeId'),
|
424
428
|
name: result.drilldown('Name')
|
@@ -448,12 +452,12 @@ module Mapper
|
|
448
452
|
end
|
449
453
|
|
450
454
|
def self.one_quarter_bathrooms queued_listing, listing
|
451
|
-
get_value(queued_listing, %w(OneQuarterBathrooms))
|
455
|
+
Mapper::get_value(queued_listing, %w(OneQuarterBathrooms))
|
452
456
|
end
|
453
457
|
|
454
458
|
# TODO: Figure out how to provide time zone for StartTime and EndTime
|
455
459
|
def self.open_houses queued_listing, listing
|
456
|
-
if (result = get_repeaters(queued_listing, %w(OpenHouses OpenHouse)))
|
460
|
+
if (result = Mapper::get_repeaters(queued_listing, %w(OpenHouses OpenHouse)))
|
457
461
|
result.map do |open_house|
|
458
462
|
oh = listing.open_houses.find_or_initialize_by(
|
459
463
|
showing_date: Chronic::parse(open_house['Date']).to_date,
|
@@ -467,12 +471,12 @@ module Mapper
|
|
467
471
|
end
|
468
472
|
|
469
473
|
def self.parcel_id queued_listing, listing
|
470
|
-
get_value(queued_listing, %w(Location ParcelId))
|
474
|
+
Mapper::get_value(queued_listing, %w(Location ParcelId))
|
471
475
|
end
|
472
476
|
|
473
477
|
# TODO: Change participant_identifier to participant_id
|
474
478
|
def self.participants queued_listing, listing
|
475
|
-
if (result = get_repeaters(queued_listing, %w(ListingParticipants Participant)))
|
479
|
+
if (result = Mapper::get_repeaters(queued_listing, %w(ListingParticipants Participant)))
|
476
480
|
result.map do |item|
|
477
481
|
participant = Participant.find_or_initialize_by(
|
478
482
|
first_name: item['FirstName'],
|
@@ -494,7 +498,7 @@ module Mapper
|
|
494
498
|
end
|
495
499
|
|
496
500
|
def self.permit_address_on_internet queued_listing, listing
|
497
|
-
get_boolean_value(queued_listing, %w(MarketingInformation PermitAddressOnInternet'))
|
501
|
+
Mapper::get_boolean_value(queued_listing, %w(MarketingInformation PermitAddressOnInternet'))
|
498
502
|
end
|
499
503
|
|
500
504
|
def self.photos queued_listing, listing
|
@@ -502,38 +506,38 @@ module Mapper
|
|
502
506
|
end
|
503
507
|
|
504
508
|
def self.property_sub_type queued_listing, listing
|
505
|
-
(result = get_value(queued_listing, %w(PropertySubType))) ? Mapper::property_sub_types(result) : nil
|
509
|
+
(result = Mapper::get_value(queued_listing, %w(PropertySubType))) ? Mapper::property_sub_types(result) : nil
|
506
510
|
end
|
507
511
|
|
508
512
|
def self.property_sub_type_description queued_listing, listing
|
509
|
-
get_value(queued_listing, %w(PropertySubType otherDescription))
|
513
|
+
Mapper::get_value(queued_listing, %w(PropertySubType otherDescription))
|
510
514
|
end
|
511
515
|
|
512
516
|
def self.property_type queued_listing, listing
|
513
|
-
(result = get_value(queued_listing, %w(PropertyType))) ? Mapper::property_types(result) : nil
|
517
|
+
(result = Mapper::get_value(queued_listing, %w(PropertyType))) ? Mapper::property_types(result) : nil
|
514
518
|
end
|
515
519
|
|
516
520
|
def self.property_type_description queued_listing, listing
|
517
|
-
get_value(queued_listing, %w(PropertyType otherDescription))
|
521
|
+
Mapper::get_value(queued_listing, %w(PropertyType otherDescription))
|
518
522
|
end
|
519
523
|
|
520
524
|
def self.roof_types queued_listing, listing
|
521
|
-
get_enums(queued_listing, %w(DetailedCharacteristics RoofTypes RoofType))
|
525
|
+
Mapper::get_enums(queued_listing, %w(DetailedCharacteristics RoofTypes RoofType))
|
522
526
|
end
|
523
527
|
|
524
528
|
def self.room_count queued_listing, listing
|
525
|
-
get_value(queued_listing, %w(DetailedCharacteristics RoomCount))
|
529
|
+
Mapper::get_value(queued_listing, %w(DetailedCharacteristics RoomCount))
|
526
530
|
end
|
527
531
|
|
528
532
|
def self.rooms queued_listing, listing
|
529
|
-
if (result = get_value(queued_listing, %w(DetailedCharacteristics Rooms Room)))
|
533
|
+
if (result = Mapper::get_value(queued_listing, %w(DetailedCharacteristics Rooms Room)))
|
530
534
|
rooms = Array(result).map{|room_category| Room.new(listing: listing, room_category: Mapper::room_categories(room_category))}
|
531
535
|
end
|
532
536
|
rooms ? rooms : []
|
533
537
|
end
|
534
538
|
|
535
539
|
def self.taxes queued_listing, listing
|
536
|
-
if (result = get_repeaters(queued_listing, %w(Taxes Tax)))
|
540
|
+
if (result = Mapper::get_repeaters(queued_listing, %w(Taxes Tax)))
|
537
541
|
result.map{|item| Tax.find_or_initialize_by(
|
538
542
|
year: item['Year'],
|
539
543
|
amount: item['Amount'],
|
@@ -543,7 +547,7 @@ module Mapper
|
|
543
547
|
end
|
544
548
|
|
545
549
|
def self.three_quarter_bathrooms queued_listing, listing
|
546
|
-
get_value(queued_listing, %w(ThreeQuarterBathrooms))
|
550
|
+
Mapper::get_value(queued_listing, %w(ThreeQuarterBathrooms))
|
547
551
|
end
|
548
552
|
|
549
553
|
def self.videos queued_listing, listing
|
@@ -551,7 +555,7 @@ module Mapper
|
|
551
555
|
end
|
552
556
|
|
553
557
|
def self.view_types queued_listing, listing
|
554
|
-
get_enums(queued_listing, %w(DetailedCharacteristics ViewTypes ViewType))
|
558
|
+
Mapper::get_enums(queued_listing, %w(DetailedCharacteristics ViewTypes ViewType))
|
555
559
|
end
|
556
560
|
|
557
561
|
def self.virtual_tours queued_listing, listing
|
@@ -559,29 +563,29 @@ module Mapper
|
|
559
563
|
end
|
560
564
|
|
561
565
|
def self.vow_address_display queued_listing, listing
|
562
|
-
get_boolean_value(queued_listing, %w(MarketingInformation VOWAutomatedValuationDisplay'))
|
566
|
+
Mapper::get_boolean_value(queued_listing, %w(MarketingInformation VOWAutomatedValuationDisplay'))
|
563
567
|
end
|
564
568
|
|
565
569
|
def self.vow_automated_valuation_display queued_listing, listing
|
566
|
-
get_boolean_value(queued_listing, %w(MarketingInformation VOWAddressDisplay'))
|
570
|
+
Mapper::get_boolean_value(queued_listing, %w(MarketingInformation VOWAddressDisplay'))
|
567
571
|
end
|
568
572
|
|
569
573
|
def self.vow_consumer_comment queued_listing, listing
|
570
|
-
get_boolean_value(queued_listing, %w(MarketingInformation VOWConsumerComment'))
|
574
|
+
Mapper::get_boolean_value(queued_listing, %w(MarketingInformation VOWConsumerComment'))
|
571
575
|
end
|
572
576
|
|
573
577
|
def self.year_built queued_listing, listing
|
574
|
-
get_value(queued_listing, %w(YearBuilt))
|
578
|
+
Mapper::get_value(queued_listing, %w(YearBuilt))
|
575
579
|
end
|
576
580
|
|
577
581
|
def self.year_updated queued_listing, listing
|
578
|
-
get_value(queued_listing, %w(DetailedCharacteristics YearUpdated))
|
582
|
+
Mapper::get_value(queued_listing, %w(DetailedCharacteristics YearUpdated))
|
579
583
|
end
|
580
584
|
|
581
585
|
# Utilities
|
582
586
|
|
583
587
|
def self.get_reso_business queued_listing, business_type
|
584
|
-
if (result = get_value(queued_listing, [business_type]))
|
588
|
+
if (result = Mapper::get_value(queued_listing, [business_type]))
|
585
589
|
business = business_type.constantize.find_or_initialize_by(
|
586
590
|
name: result.drilldown('Name'),
|
587
591
|
phone: result.drilldown('Phone')
|
@@ -606,50 +610,5 @@ module Mapper
|
|
606
610
|
end
|
607
611
|
end
|
608
612
|
|
609
|
-
def self.unique_identifier queued_listing
|
610
|
-
(result = get_value(queued_listing, queued_listing.import.unique_identifier.split(' ')))
|
611
|
-
end
|
612
|
-
|
613
|
-
def self.get_boolean_value queued_listing, elements
|
614
|
-
(result = get_value(queued_listing, elements)) ? result.to_s.to_bool : nil
|
615
|
-
end
|
616
|
-
|
617
|
-
def self.get_repeaters queued_listing, elements
|
618
|
-
if (value = get_value(queued_listing, elements[0..-2]))
|
619
|
-
(result = value.drilldown(elements.last)) ? (result.is_a?(Array) ? result : [result]) : nil
|
620
|
-
else
|
621
|
-
return []
|
622
|
-
end
|
623
|
-
end
|
624
|
-
|
625
|
-
def self.get_enums queued_listing, elements
|
626
|
-
if (result = get_repeaters(queued_listing, elements))
|
627
|
-
enums = result.map{|name| Mapper.send(elements.last.tableize)[name]}
|
628
|
-
end
|
629
|
-
enums ? enums.compact : nil
|
630
|
-
end
|
631
|
-
|
632
|
-
def self.get_value queued_listing, elements
|
633
|
-
if elements.count.eql?(1)
|
634
|
-
get_simple_value(queued_listing, elements.first)
|
635
|
-
else
|
636
|
-
get_subvalue(queued_listing, elements.first, elements[1..-1])
|
637
|
-
end
|
638
|
-
end
|
639
|
-
|
640
|
-
def self.get_simple_value queued_listing, element
|
641
|
-
if (value = queued_listing.listing_data[element])
|
642
|
-
value.unwrap_attribute
|
643
|
-
end
|
644
|
-
end
|
645
|
-
|
646
|
-
def self.get_subvalue queued_listing, element, child_elements
|
647
|
-
if (value = get_simple_value(queued_listing, element))
|
648
|
-
if (subvalue = child_elements.inject(value){|v, e| v[e] ? v[e] : Hash.new })
|
649
|
-
subvalue.present? ? subvalue.unwrap_attribute : nil
|
650
|
-
end
|
651
|
-
end
|
652
|
-
end
|
653
|
-
|
654
613
|
end
|
655
614
|
end
|
data/lib/reso/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: reso
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.0
|
4
|
+
version: 0.1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Edlund
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|