Module: Mapper::Reso

Defined in:
lib/mapper/reso.rb

Class Method Summary collapse

Class Method Details

.address(queued_listing, listing) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/mapper/reso.rb', line 8

def self.address queued_listing, listing
  if (result = get_value(queued_listing, %w(Address)))
    listing.address ||= Address.new
    listing.address.assign_attributes({
      preference_order: result.drilldown('preference_order'),
      address_preference_order: result.drilldown('address_preference_order'),
      full_street_address: result.drilldown('FullStreetAddress'),
      unit_number: result.drilldown('UnitNumber'),
      city: result.drilldown('City'),
      state_or_province: result.drilldown('StateOrProvince'),
      postal_code: result.drilldown('PostalCode'),
      country: result.drilldown('Country')
    })
    listing.address
  end
end

.alternate_prices(queued_listing, listing) ⇒ Object



25
26
27
28
29
30
31
32
33
34
# File 'lib/mapper/reso.rb', line 25

def self.alternate_prices queued_listing, listing
  if (result = get_repeaters(queued_listing, %w(AlternatePrices AlternatePrice)))
    result.map{|item| listing.alternate_prices.find_or_initialize_by(
      list_price: item.drilldown('AlternateListPrice'),
      currency_code: item.drilldown('AlternateListPrice currencyCode'),
      list_price_low: item.drilldown('AlternateListPriceLow'),
      currency_code_low: item.drilldown('AlternateListPriceLow currencyCode')
    )}
  end
end

.appliances(queued_listing, listing) ⇒ Object



36
37
38
# File 'lib/mapper/reso.rb', line 36

def self.appliances queued_listing, listing
  get_enums(queued_listing, %w(DetailedCharacteristics Appliances Appliance))
end

.architecture_style(queued_listing, listing) ⇒ Object



40
41
42
# File 'lib/mapper/reso.rb', line 40

def self.architecture_style queued_listing, listing
  (result = get_value(queued_listing, %w(DetailedCharacteristics ArchitectureStyle))) ? Mapper::architecture_styles[result] : nil
end

.architecture_style_description(queued_listing, listing) ⇒ Object



44
45
46
# File 'lib/mapper/reso.rb', line 44

def self.architecture_style_description queued_listing, listing
  get_value(queued_listing, %w(DetailedCharacteristics ArchitectureStyle otherDescription))
end

.bathrooms(queued_listing, listing) ⇒ Object



48
49
50
# File 'lib/mapper/reso.rb', line 48

def self.bathrooms queued_listing, listing
  get_value(queued_listing, %w(Bathrooms))
end

.bedrooms(queued_listing, listing) ⇒ Object



52
53
54
# File 'lib/mapper/reso.rb', line 52

def self.bedrooms queued_listing, listing
  get_value(queued_listing, %w(Bedrooms))
end

.brokerage(queued_listing, listing) ⇒ Object



56
57
58
# File 'lib/mapper/reso.rb', line 56

def self.brokerage queued_listing, listing
  get_reso_business(queued_listing, 'Brokerage')
end

.builder(queued_listing, listing) ⇒ Object



60
61
62
# File 'lib/mapper/reso.rb', line 60

def self.builder queued_listing, listing
  get_reso_business(queued_listing, 'Builder')
end

.building_unit_count(queued_listing, listing) ⇒ Object



64
65
66
# File 'lib/mapper/reso.rb', line 64

def self.building_unit_count queued_listing, listing
  get_value(queued_listing, %w(DetailedCharacteristics BuildingUnitCount))
end

.condo_floor_num(queued_listing, listing) ⇒ Object



68
69
70
# File 'lib/mapper/reso.rb', line 68

def self.condo_floor_num queued_listing, listing
  get_value(queued_listing, %w(DetailedCharacteristics CondoFloorNum))
end

.cooling_systems(queued_listing, listing) ⇒ Object



72
73
74
# File 'lib/mapper/reso.rb', line 72

def self.cooling_systems queued_listing, listing
  get_enums(queued_listing, %w(DetailedCharacteristics CoolingSystems CoolingSystem))
end

.county(queued_listing, listing) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
# File 'lib/mapper/reso.rb', line 76

def self.county queued_listing, listing
  if (get_value(queued_listing, %w(Location County)))
    county = County.find_or_initialize_by(
      name: get_value(queued_listing, %w(Location County)),
      state_or_province: get_value(queued_listing, %w(Address StateOrProvince)),
      country: get_value(queued_listing, %w(Address Country))
    )
  else
    return nil
  end
end

.currency_code(queued_listing, listing) ⇒ Object



88
89
90
# File 'lib/mapper/reso.rb', line 88

def self.currency_code queued_listing, listing
  get_value(queued_listing, %w(ListPrice currencyCode))
end

.directions(queued_listing, listing) ⇒ Object



92
93
94
# File 'lib/mapper/reso.rb', line 92

def self.directions queued_listing, listing
  get_value(queued_listing, %w(Location Directions))
end

.disclaimer(queued_listing, listing) ⇒ Object



96
97
98
# File 'lib/mapper/reso.rb', line 96

def self.disclaimer queued_listing, listing
  get_value(queued_listing, %w(Disclaimer))
end

.disclose_address(queued_listing, listing) ⇒ Object



100
101
102
# File 'lib/mapper/reso.rb', line 100

def self.disclose_address queued_listing, listing
  get_boolean_value(queued_listing, %w(DiscloseAddress))
end

.elevation(queued_listing, listing) ⇒ Object



104
105
106
# File 'lib/mapper/reso.rb', line 104

def self.elevation queued_listing, listing
  get_value(queued_listing, %w(Location Elevation))
end

.expenses(queued_listing, listing) ⇒ Object



108
109
110
111
112
113
114
115
116
# File 'lib/mapper/reso.rb', line 108

def self.expenses queued_listing, listing
  if (result = get_repeaters(queued_listing, %w(Expenses Expense)))
    result.map{|item| listing.expenses.find_or_initialize_by(
      expense_category: Mapper::expense_categories[item['ExpenseCategory']],
      currency_period: Mapper::expense_categories[item['ExpenseValue']['currencyPeriod']],
      expense_value: item['ExpenseValue'].unwrap_attribute
    )}
  end
end

.exterior_types(queued_listing, listing) ⇒ Object



118
119
120
# File 'lib/mapper/reso.rb', line 118

def self.exterior_types queued_listing, listing
  get_enums(queued_listing, %w(DetailedCharacteristics ExteriorTypes ExteriorType))
end

.floor_coverings(queued_listing, listing) ⇒ Object



122
123
124
# File 'lib/mapper/reso.rb', line 122

def self.floor_coverings queued_listing, listing
  get_enums(queued_listing, %w(DetailedCharacteristics FloorCoverings FloorCovering))
end

.foreclosure_status(queued_listing, listing) ⇒ Object



126
127
128
# File 'lib/mapper/reso.rb', line 126

def self.foreclosure_status queued_listing, listing
  (result = get_value(queued_listing, %w(ForeclosureStatus))) ? Mapper::foreclosure_statuses[result] : nil
end

.franchise(queued_listing, listing) ⇒ Object



130
131
132
# File 'lib/mapper/reso.rb', line 130

def self.franchise queued_listing, listing
  get_reso_business(queued_listing, 'Franchise')
end

.full_bathrooms(queued_listing, listing) ⇒ Object



134
135
136
# File 'lib/mapper/reso.rb', line 134

def self.full_bathrooms queued_listing, listing
  get_value(queued_listing, %w(FullBathrooms))
end

.geocode_options(queued_listing, listing) ⇒ Object



138
139
140
# File 'lib/mapper/reso.rb', line 138

def self.geocode_options queued_listing, listing
  get_value(queued_listing, %w(Location GeocodeOptions))
end

.get_boolean_value(queued_listing, elements) ⇒ Object



613
614
615
# File 'lib/mapper/reso.rb', line 613

def self.get_boolean_value queued_listing, elements
  (result = get_value(queued_listing, elements)) ? result.to_s.to_bool : nil
end

.get_enums(queued_listing, elements) ⇒ Object



625
626
627
628
629
630
# File 'lib/mapper/reso.rb', line 625

def self.get_enums queued_listing, elements
  if (result = get_repeaters(queued_listing, elements))
    enums = result.map{|name| Mapper.send(elements.last.tableize)[name]}
  end
  enums ? enums.compact : nil
end

.get_repeaters(queued_listing, elements) ⇒ Object



617
618
619
620
621
622
623
# File 'lib/mapper/reso.rb', line 617

def self.get_repeaters queued_listing, elements
  if (value = get_value(queued_listing, elements[0..-2]))
    (result = value.drilldown(elements.last)) ? (result.is_a?(Array) ? result : [result]) : nil
  else
    return []
  end
end

.get_reso_business(queued_listing, business_type) ⇒ Object

Utilities



583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
# File 'lib/mapper/reso.rb', line 583

def self.get_reso_business queued_listing, business_type
  if (result = get_value(queued_listing, [business_type]))
    business = business_type.constantize.find_or_initialize_by(
      name: result.drilldown('Name'),
      phone: result.drilldown('Phone')
    )
    business.assign_attributes({
      email: result.drilldown('Email'),
      logo_url: result.drilldown('LogoURL'),
      website_url: result.drilldown('WebsiteURL')
    })
    business.address ||= Address.new
    business.address.assign_attributes({
      preference_order: result.drilldown('Address preference_order'),
      address_preference_order: result.drilldown('Address address_preference_order'),
      full_street_address: result.drilldown('Address FullStreetAddress'),
      unit_number: result.drilldown('Address UnitNumber'),
      city: result.drilldown('Address City'),
      state_or_province: result.drilldown('Address StateOrProvince'),
      postal_code: result.drilldown('Address PostalCode'),
      country: result.drilldown('Address Country')
    })
    business
  end
end

.get_simple_value(queued_listing, element) ⇒ Object



640
641
642
643
644
# File 'lib/mapper/reso.rb', line 640

def self.get_simple_value queued_listing, element
  if (value = queued_listing.listing_data[element])
    value.unwrap_attribute
  end
end

.get_subvalue(queued_listing, element, child_elements) ⇒ Object



646
647
648
649
650
651
652
# File 'lib/mapper/reso.rb', line 646

def self.get_subvalue queued_listing, element, child_elements
  if (value = get_simple_value(queued_listing, element))
    if (subvalue = child_elements.inject(value){|v, e| v[e] ? v[e] : Hash.new })
      subvalue.present? ? subvalue.unwrap_attribute : nil
    end
  end
end

.get_value(queued_listing, elements) ⇒ Object



632
633
634
635
636
637
638
# File 'lib/mapper/reso.rb', line 632

def self.get_value queued_listing, elements
  if elements.count.eql?(1)
    get_simple_value(queued_listing, elements.first)
  else
    get_subvalue(queued_listing, elements.first, elements[1..-1])
  end
end

.half_bathrooms(queued_listing, listing) ⇒ Object



142
143
144
# File 'lib/mapper/reso.rb', line 142

def self.half_bathrooms queued_listing, listing
  get_value(queued_listing, %w(HalfBathrooms))
end

.has_attic(queued_listing, listing) ⇒ Object



146
147
148
# File 'lib/mapper/reso.rb', line 146

def self.has_attic queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasAttic))
end

.has_barbecue_area(queued_listing, listing) ⇒ Object



150
151
152
# File 'lib/mapper/reso.rb', line 150

def self.has_barbecue_area queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasBarbecueArea))
end

.has_basement(queued_listing, listing) ⇒ Object



154
155
156
# File 'lib/mapper/reso.rb', line 154

def self.has_basement queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasBasement))
end

.has_ceiling_fan(queued_listing, listing) ⇒ Object



158
159
160
# File 'lib/mapper/reso.rb', line 158

def self.has_ceiling_fan queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasCeilingFan))
end

.has_deck(queued_listing, listing) ⇒ Object



162
163
164
# File 'lib/mapper/reso.rb', line 162

def self.has_deck queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasDeck))
end

.has_disabled_access(queued_listing, listing) ⇒ Object



166
167
168
# File 'lib/mapper/reso.rb', line 166

def self.has_disabled_access queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasDisabledAccess))
end

.has_dock(queued_listing, listing) ⇒ Object



170
171
172
# File 'lib/mapper/reso.rb', line 170

def self.has_dock queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasDock))
end

.has_doorman(queued_listing, listing) ⇒ Object



174
175
176
# File 'lib/mapper/reso.rb', line 174

def self.has_doorman queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasDoorman))
end

.has_double_pane_windows(queued_listing, listing) ⇒ Object



178
179
180
# File 'lib/mapper/reso.rb', line 178

def self.has_double_pane_windows queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasDoublePaneWindows))
end

.has_elevator(queued_listing, listing) ⇒ Object



182
183
184
# File 'lib/mapper/reso.rb', line 182

def self.has_elevator queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasElevator))
end

.has_fireplace(queued_listing, listing) ⇒ Object



186
187
188
# File 'lib/mapper/reso.rb', line 186

def self.has_fireplace queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasFireplace))
end

.has_garden(queued_listing, listing) ⇒ Object



190
191
192
# File 'lib/mapper/reso.rb', line 190

def self.has_garden queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasGarden))
end

.has_gated_entry(queued_listing, listing) ⇒ Object



194
195
196
# File 'lib/mapper/reso.rb', line 194

def self.has_gated_entry queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasGatedEntry))
end

.has_greenhouse(queued_listing, listing) ⇒ Object



198
199
200
# File 'lib/mapper/reso.rb', line 198

def self.has_greenhouse queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasGreenhouse))
end

.has_hot_tub_spa(queued_listing, listing) ⇒ Object



202
203
204
# File 'lib/mapper/reso.rb', line 202

def self.has_hot_tub_spa queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasHotTubSpa))
end

.has_intercom(queued_listing, listing) ⇒ Object



206
207
208
# File 'lib/mapper/reso.rb', line 206

def self.has_intercom queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics Intercom))
end

.has_jetted_bath_tub(queued_listing, listing) ⇒ Object



210
211
212
# File 'lib/mapper/reso.rb', line 210

def self.has_jetted_bath_tub queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasJettedBathTub))
end

.has_lawn(queued_listing, listing) ⇒ Object



214
215
216
# File 'lib/mapper/reso.rb', line 214

def self.has_lawn queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasLawn))
end

.has_mother_in_law(queued_listing, listing) ⇒ Object



218
219
220
# File 'lib/mapper/reso.rb', line 218

def self.has_mother_in_law queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasMotherInLaw))
end

.has_patio(queued_listing, listing) ⇒ Object



222
223
224
# File 'lib/mapper/reso.rb', line 222

def self.has_patio queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasPatio))
end

.has_pond(queued_listing, listing) ⇒ Object



226
227
228
# File 'lib/mapper/reso.rb', line 226

def self.has_pond queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasPond))
end

.has_pool(queued_listing, listing) ⇒ Object



230
231
232
# File 'lib/mapper/reso.rb', line 230

def self.has_pool queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasPool))
end

.has_porch(queued_listing, listing) ⇒ Object



234
235
236
# File 'lib/mapper/reso.rb', line 234

def self.has_porch queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasPorch))
end

.has_rv_parking(queued_listing, listing) ⇒ Object



238
239
240
# File 'lib/mapper/reso.rb', line 238

def self.has_rv_parking queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasRVParking))
end

.has_sauna(queued_listing, listing) ⇒ Object



242
243
244
# File 'lib/mapper/reso.rb', line 242

def self.has_sauna queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasSauna))
end

.has_security_system(queued_listing, listing) ⇒ Object



246
247
248
# File 'lib/mapper/reso.rb', line 246

def self.has_security_system queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasSecuritySystem))
end

.has_skylight(queued_listing, listing) ⇒ Object



250
251
252
# File 'lib/mapper/reso.rb', line 250

def self.has_skylight queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasSkylight))
end

.has_sports_court(queued_listing, listing) ⇒ Object



254
255
256
# File 'lib/mapper/reso.rb', line 254

def self.has_sports_court queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasSportsCourt))
end

.has_sprinkler_system(queued_listing, listing) ⇒ Object



258
259
260
# File 'lib/mapper/reso.rb', line 258

def self.has_sprinkler_system queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasSprinklerSystem))
end

.has_vaulted_ceiling(queued_listing, listing) ⇒ Object



262
263
264
# File 'lib/mapper/reso.rb', line 262

def self.has_vaulted_ceiling queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasVaultedCeiling))
end

.has_wet_bar(queued_listing, listing) ⇒ Object



266
267
268
# File 'lib/mapper/reso.rb', line 266

def self.has_wet_bar queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics HasWetBar))
end

.heating_fuels(queued_listing, listing) ⇒ Object



270
271
272
# File 'lib/mapper/reso.rb', line 270

def self.heating_fuels queued_listing, listing
  get_enums(queued_listing, %w(DetailedCharacteristics HeatingFuels HeatingFuel)).uniq
end

.heating_systems(queued_listing, listing) ⇒ Object



274
275
276
# File 'lib/mapper/reso.rb', line 274

def self.heating_systems queued_listing, listing
  get_enums(queued_listing, %w(DetailedCharacteristics HeatingSystems HeatingSystem)).uniq
end

.is_cable_ready(queued_listing, listing) ⇒ Object



278
279
280
# File 'lib/mapper/reso.rb', line 278

def self.is_cable_ready queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics IsCableReady))
end

.is_new_construction(queued_listing, listing) ⇒ Object



282
283
284
# File 'lib/mapper/reso.rb', line 282

def self.is_new_construction queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics IsNewConstruction))
end

.is_waterfront(queued_listing, listing) ⇒ Object



286
287
288
# File 'lib/mapper/reso.rb', line 286

def self.is_waterfront queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics IsWaterfront))
end

.is_wired(queued_listing, listing) ⇒ Object



290
291
292
# File 'lib/mapper/reso.rb', line 290

def self.is_wired queued_listing, listing
  get_boolean_value(queued_listing, %w(DetailedCharacteristics IsWired))
end

.latitude(queued_listing, listing) ⇒ Object



294
295
296
# File 'lib/mapper/reso.rb', line 294

def self.latitude queued_listing, listing
  get_value(queued_listing, %w(Location Latitude))
end

.lead_routing_email(queued_listing, listing) ⇒ Object



298
299
300
# File 'lib/mapper/reso.rb', line 298

def self.lead_routing_email queued_listing, listing
  get_value(queued_listing, %w(LeadRoutingEmail))
end


302
303
304
# File 'lib/mapper/reso.rb', line 302

def self.legal_description queued_listing, listing
  get_value(queued_listing, %w(DetailedCharacteristics LegalDescription))
end

.list_price(queued_listing, listing) ⇒ Object



306
307
308
# File 'lib/mapper/reso.rb', line 306

def self.list_price queued_listing, listing
  get_value(queued_listing, %w(ListPrice))
end

.list_price_low(queued_listing, listing) ⇒ Object



310
311
312
# File 'lib/mapper/reso.rb', line 310

def self.list_price_low queued_listing, listing
  get_value(queued_listing, %w(ListPriceLow))
end

.listing_category(queued_listing, listing) ⇒ Object



314
315
316
# File 'lib/mapper/reso.rb', line 314

def self.listing_category queued_listing, listing
  (result = get_value(queued_listing, %w(ListingCategory))) ? Mapper::listing_categories[result] : nil
end

.listing_date(queued_listing, listing) ⇒ Object



318
319
320
# File 'lib/mapper/reso.rb', line 318

def self.listing_date queued_listing, listing
  (result = get_value(queued_listing, %w(ListingDate))) ? Chronic::parse(result).to_date : nil
end

.listing_description(queued_listing, listing) ⇒ Object



322
323
324
# File 'lib/mapper/reso.rb', line 322

def self.listing_description queued_listing, listing
  get_value(queued_listing, %w(ListingDescription))
end

.listing_media(queued_listing, listing, elements) ⇒ Object



326
327
328
329
330
331
332
333
334
335
336
337
338
# File 'lib/mapper/reso.rb', line 326

def self.listing_media queued_listing, listing, elements
  if (result = get_repeaters(queued_listing, elements))
    result.map do |item|
      listing.send(elements.last.tableize).find_or_initialize_by(
        media_url: item.drilldown('MediaURL'),
        media_modification_timestamp: item.drilldown('MediaModificationTimestamp'),
        media_order_number: item.drilldown('MediaOrderNumber'),
        media_caption: item.drilldown('MediaCaption'),
        media_description: item.drilldown('MediaDescription')
      )
    end
  end
end

.listing_provider(queued_listing, listing) ⇒ Object

TODO: Make ListingProvider and SourceProviderCategory Provider and ProviderCategory



341
342
343
344
345
346
347
348
349
# File 'lib/mapper/reso.rb', line 341

def self.listing_provider queued_listing, listing
  if get_value(queued_listing, %w(ProviderName)).present?
    result = ListingProvider.find_or_initialize_by(
      name: get_value(queued_listing, %w(ProviderName)),
      url: get_value(queued_listing, %w(ProviderURL)),
      source_provider_category: Mapper::source_provider_categories[get_value(queued_listing, %w(ProviderCategory))]
    )
  end
end

.listing_status(queued_listing, listing) ⇒ Object



351
352
353
# File 'lib/mapper/reso.rb', line 351

def self.listing_status queued_listing, listing
  (result = get_value(queued_listing, %w(ListingStatus))) ? Mapper::listing_statuses[result] : nil
end

.listing_title(queued_listing, listing) ⇒ Object



355
356
357
# File 'lib/mapper/reso.rb', line 355

def self.listing_title queued_listing, listing
  get_value(queued_listing, %w(ListingTitle))
end

.listing_url(queued_listing, listing) ⇒ Object



359
360
361
# File 'lib/mapper/reso.rb', line 359

def self.listing_url queued_listing, listing
  get_value(queued_listing, %w(ListingURL))
end

.living_area(queued_listing, listing) ⇒ Object



363
364
365
# File 'lib/mapper/reso.rb', line 363

def self.living_area queued_listing, listing
  get_value(queued_listing, %w(LivingArea))
end

.living_area_unit(queued_listing, listing) ⇒ Object



367
368
369
# File 'lib/mapper/reso.rb', line 367

def self.living_area_unit queued_listing, listing
  get_value(queued_listing, %w(LivingArea areaUnits))
end

.longitude(queued_listing, listing) ⇒ Object



371
372
373
# File 'lib/mapper/reso.rb', line 371

def self.longitude queued_listing, listing
  get_value(queued_listing, %w(Location Longitude))
end

.lot_size(queued_listing, listing) ⇒ Object



375
376
377
# File 'lib/mapper/reso.rb', line 375

def self.lot_size queued_listing, listing
  get_value(queued_listing, %w(LotSize))
end

.method_missing(method_name, *args) ⇒ Object



4
5
6
# File 'lib/mapper/reso.rb', line 4

def self.method_missing method_name, *args
  args[1][method_name]
end

.mls_number(queued_listing, listing) ⇒ Object



379
380
381
# File 'lib/mapper/reso.rb', line 379

def self.mls_number queued_listing, listing
  get_value(queued_listing, %w(MlsNumber))
end

.modification_timestamp(queued_listing, listing) ⇒ Object



383
384
385
386
# File 'lib/mapper/reso.rb', line 383

def self.modification_timestamp queued_listing, listing
  # TODO: Change from string to datetime
  get_value(queued_listing, %w(ModificationTimestamp))
end

.multiple_listing_service(queued_listing, listing) ⇒ Object



388
389
390
391
392
393
394
395
# File 'lib/mapper/reso.rb', line 388

def self.multiple_listing_service queued_listing, listing
  if (get_value(queued_listing, %w(MlsId)) || get_value(queued_listing, %w(MlsName)))
    MultipleListingService.find_or_initialize_by(
      mls_id: get_value(queued_listing, %w(MlsId)),
      mls_name: get_value(queued_listing, %w(MlsName))
    )
  end
end

.neighborhoods(queued_listing, listing) ⇒ Object



397
398
399
400
401
402
403
404
405
406
407
408
409
410
# File 'lib/mapper/reso.rb', line 397

def self.neighborhoods queued_listing, listing
  if (result = get_value(queued_listing, %w(Location Neighborhoods Neighborhood)))
    places = result.map do |item| 
      place = Neighborhood.find_or_initialize_by(
        city: get_value(queued_listing, %w(Address City)),
        name: item.drilldown('Name'),
        state_or_province: get_value(queued_listing, %w(Address StateOrProvince))
      )
      place.description = item.drilldown('Description')
      place
    end
  end
  places.present? ? places : []
end

.num_floors(queued_listing, listing) ⇒ Object



412
413
414
# File 'lib/mapper/reso.rb', line 412

def self.num_floors queued_listing, listing
  get_value(queued_listing, %w(DetailedCharacteristics NumFloors))
end

.num_parking_spaces(queued_listing, listing) ⇒ Object



416
417
418
# File 'lib/mapper/reso.rb', line 416

def self.num_parking_spaces queued_listing, listing
  get_value(queued_listing, %w(DetailedCharacteristics NumParkingSpaces))
end

.office(queued_listing, listing) ⇒ Object



420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
# File 'lib/mapper/reso.rb', line 420

def self.office queued_listing, listing
  if (result = get_value(queued_listing, %w(Offices Office)))
    office = Office.find_or_initialize_by(
      office_identifier: result.drilldown('OfficeId'),
      name: result.drilldown('Name')
    )
    office.assign_attributes({
      office_key: result.drilldown('OfficeKey'),
      level: result.drilldown('Level'),
      office_code_identifier: result.drilldown('OfficeCode OfficeCodeId'),
      corporate_name: result.drilldown('CorporateName'),
      broker_identifier: result.drilldown('BrokerId'),
      phone_number: result.drilldown('PhoneNumber'),
      website: result.drilldown('Website'),
    })
    office.address ||= Address.new
    office.address.assign_attributes({
      preference_order: result.drilldown('Address preference_order'),
      address_preference_order: result.drilldown('Address address_preference_order'),
      full_street_address: result.drilldown('Address FullStreetAddress'),
      unit_number: result.drilldown('Address UnitNumber'),
      city: result.drilldown('Address City'),
      state_or_province: result.drilldown('Address StateOrProvince'),
      postal_code: result.drilldown('Address PostalCode'),
      country: result.drilldown('Address Country')
    })
    office
  end
end

.one_quarter_bathrooms(queued_listing, listing) ⇒ Object



450
451
452
# File 'lib/mapper/reso.rb', line 450

def self.one_quarter_bathrooms queued_listing, listing
  get_value(queued_listing, %w(OneQuarterBathrooms))
end

.open_houses(queued_listing, listing) ⇒ Object

TODO: Figure out how to provide time zone for StartTime and EndTime



455
456
457
458
459
460
461
462
463
464
465
466
467
# File 'lib/mapper/reso.rb', line 455

def self.open_houses queued_listing, listing
  if (result = get_repeaters(queued_listing, %w(OpenHouses OpenHouse)))
    result.map do |open_house| 
      oh = listing.open_houses.find_or_initialize_by(
        showing_date: Chronic::parse(open_house['Date']).to_date,
        start_time: open_house['StartTime'],
        end_time: open_house['EndTime']
      )
      oh.description = open_house['Description']
      oh
    end
  end
end

.parcel_id(queued_listing, listing) ⇒ Object



469
470
471
# File 'lib/mapper/reso.rb', line 469

def self.parcel_id queued_listing, listing
  get_value(queued_listing, %w(Location ParcelId))
end

.participants(queued_listing, listing) ⇒ Object

TODO: Change participant_identifier to participant_id



474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
# File 'lib/mapper/reso.rb', line 474

def self.participants queued_listing, listing
  if (result = get_repeaters(queued_listing, %w(ListingParticipants Participant)))
    result.map do |item| 
      participant = Participant.find_or_initialize_by(
        first_name: item['FirstName'],
        last_name: item['LastName'],
        email: item['Email']
      )
      participant.assign_attributes({
        participant_key: item['ParticipantKey'],
        participant_identifier: item['ParticipantId'],
        participant_role: Mapper::participant_roles[item['Role']],
        primary_contact_phone: item['PrimaryContactPhone'],
        office_phone: item['OfficePhone'],
        fax: item['Fax'],
        website_url: item['WebsiteURL']
      })
      participant
    end
  end
end

.permit_address_on_internet(queued_listing, listing) ⇒ Object



496
497
498
# File 'lib/mapper/reso.rb', line 496

def self.permit_address_on_internet queued_listing, listing
  get_boolean_value(queued_listing, %w(MarketingInformation PermitAddressOnInternet'))
end

.photos(queued_listing, listing) ⇒ Object



500
501
502
# File 'lib/mapper/reso.rb', line 500

def self.photos queued_listing, listing
  listing_media(queued_listing, listing, %w(Photos Photo))
end

.property_sub_type(queued_listing, listing) ⇒ Object



504
505
506
# File 'lib/mapper/reso.rb', line 504

def self.property_sub_type queued_listing, listing
  (result = get_value(queued_listing, %w(PropertySubType))) ? Mapper::property_sub_types[result] : nil
end

.property_sub_type_description(queued_listing, listing) ⇒ Object



508
509
510
# File 'lib/mapper/reso.rb', line 508

def self.property_sub_type_description queued_listing, listing
  get_value(queued_listing, %w(PropertySubType otherDescription))
end

.property_type(queued_listing, listing) ⇒ Object



512
513
514
# File 'lib/mapper/reso.rb', line 512

def self.property_type queued_listing, listing
  (result = get_value(queued_listing, %w(PropertyType))) ? Mapper::property_types[result] : nil
end

.property_type_description(queued_listing, listing) ⇒ Object



516
517
518
# File 'lib/mapper/reso.rb', line 516

def self.property_type_description queued_listing, listing
  get_value(queued_listing, %w(PropertyType otherDescription))
end

.roof_types(queued_listing, listing) ⇒ Object



520
521
522
# File 'lib/mapper/reso.rb', line 520

def self.roof_types queued_listing, listing
  get_enums(queued_listing, %w(DetailedCharacteristics RoofTypes RoofType))
end

.room_count(queued_listing, listing) ⇒ Object



524
525
526
# File 'lib/mapper/reso.rb', line 524

def self.room_count queued_listing, listing
  get_value(queued_listing, %w(DetailedCharacteristics RoomCount))
end

.rooms(queued_listing, listing) ⇒ Object



528
529
530
531
532
533
# File 'lib/mapper/reso.rb', line 528

def self.rooms queued_listing, listing
  if (result = get_value(queued_listing, %w(DetailedCharacteristics Rooms Room)))
    rooms = Array(result).map{|room_category| Room.new(listing: listing, room_category: Mapper::room_categories[room_category])}
  end
  rooms ? rooms : []
end

.taxes(queued_listing, listing) ⇒ Object



535
536
537
538
539
540
541
542
543
# File 'lib/mapper/reso.rb', line 535

def self.taxes queued_listing, listing
  if (result = get_repeaters(queued_listing, %w(Taxes Tax)))
    result.map{|item| Tax.find_or_initialize_by(
      year: item['Year'],
      amount: item['Amount'],
      description: item['TaxDescription']
    )}
  end
end

.three_quarter_bathrooms(queued_listing, listing) ⇒ Object



545
546
547
# File 'lib/mapper/reso.rb', line 545

def self.three_quarter_bathrooms queued_listing, listing
  get_value(queued_listing, %w(ThreeQuarterBathrooms))
end

.unique_identifier(queued_listing) ⇒ Object



609
610
611
# File 'lib/mapper/reso.rb', line 609

def self.unique_identifier queued_listing
  (result = get_value(queued_listing, queued_listing.import.unique_identifier.split(' ')))
end

.videos(queued_listing, listing) ⇒ Object



549
550
551
# File 'lib/mapper/reso.rb', line 549

def self.videos queued_listing, listing
  listing_media(queued_listing, listing, %w(Videos Video))
end

.view_types(queued_listing, listing) ⇒ Object



553
554
555
# File 'lib/mapper/reso.rb', line 553

def self.view_types queued_listing, listing
  get_enums(queued_listing, %w(DetailedCharacteristics ViewTypes ViewType))
end

.virtual_tours(queued_listing, listing) ⇒ Object



557
558
559
# File 'lib/mapper/reso.rb', line 557

def self.virtual_tours queued_listing, listing
  listing_media(queued_listing, listing, %w(VirtualTours VirtualTour))
end

.vow_address_display(queued_listing, listing) ⇒ Object



561
562
563
# File 'lib/mapper/reso.rb', line 561

def self.vow_address_display queued_listing, listing
  get_boolean_value(queued_listing, %w(MarketingInformation VOWAutomatedValuationDisplay'))
end

.vow_automated_valuation_display(queued_listing, listing) ⇒ Object



565
566
567
# File 'lib/mapper/reso.rb', line 565

def self.vow_automated_valuation_display queued_listing, listing
  get_boolean_value(queued_listing, %w(MarketingInformation VOWAddressDisplay'))
end

.vow_consumer_comment(queued_listing, listing) ⇒ Object



569
570
571
# File 'lib/mapper/reso.rb', line 569

def self.vow_consumer_comment queued_listing, listing
  get_boolean_value(queued_listing, %w(MarketingInformation VOWConsumerComment'))
end

.year_built(queued_listing, listing) ⇒ Object



573
574
575
# File 'lib/mapper/reso.rb', line 573

def self.year_built queued_listing, listing
  get_value(queued_listing, %w(YearBuilt))
end

.year_updated(queued_listing, listing) ⇒ Object



577
578
579
# File 'lib/mapper/reso.rb', line 577

def self.year_updated queued_listing, listing
  get_value(queued_listing, %w(DetailedCharacteristics YearUpdated))
end