reso 0.1.6.7 → 0.2.2

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.
Files changed (325) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +11 -17
  3. data/.rspec +3 -0
  4. data/.travis.yml +7 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +4 -1
  7. data/Gemfile.lock +60 -0
  8. data/LICENSE.txt +17 -18
  9. data/README.md +19 -125
  10. data/Rakefile +5 -0
  11. data/bin/console +14 -0
  12. data/bin/setup +8 -0
  13. data/lib/generators/reso/install/install_generator.rb +23 -0
  14. data/lib/generators/reso/install/templates/create_reso_enumeration_assignments.rb +14 -0
  15. data/lib/generators/reso/install/templates/create_reso_enumerations.rb +12 -0
  16. data/lib/reso/app/models/.DS_Store +0 -0
  17. data/lib/reso/app/models/application_record.rb +3 -0
  18. data/lib/reso/app/models/reso/contact.rb +3 -0
  19. data/lib/reso/app/models/reso/contact_listing.rb +3 -0
  20. data/lib/reso/app/models/reso/contact_listing_note.rb +3 -0
  21. data/lib/reso/app/models/reso/data_dictionary.rb +124 -0
  22. data/lib/reso/app/models/reso/enumeration.rb +3 -0
  23. data/lib/reso/app/models/reso/enumeration_assignment.rb +4 -0
  24. data/lib/reso/app/models/reso/history_transactional.rb +3 -0
  25. data/lib/reso/app/models/reso/internet_tracking/actor.rb +6 -0
  26. data/lib/reso/app/models/reso/internet_tracking/event.rb +6 -0
  27. data/lib/reso/app/models/reso/internet_tracking/object.rb +6 -0
  28. data/lib/reso/app/models/reso/internet_tracking.rb +7 -0
  29. data/lib/reso/app/models/reso/lookup/accessibility_feature.rb +4 -0
  30. data/lib/reso/app/models/reso/lookup/actor_type.rb +4 -0
  31. data/lib/reso/app/models/reso/lookup/appliance.rb +4 -0
  32. data/lib/reso/app/models/reso/lookup/area_source.rb +6 -0
  33. data/lib/reso/app/models/reso/lookup/area_unit.rb +5 -0
  34. data/lib/reso/app/models/reso/lookup/association_amenity.rb +4 -0
  35. data/lib/reso/app/models/reso/lookup/association_fee_include.rb +5 -0
  36. data/lib/reso/app/models/reso/lookup/attended.rb +4 -0
  37. data/lib/reso/app/models/reso/lookup/basement.rb +5 -0
  38. data/lib/reso/app/models/reso/lookup/body_type.rb +4 -0
  39. data/lib/reso/app/models/reso/lookup/business_type.rb +4 -0
  40. data/lib/reso/app/models/reso/lookup/buyer_agent_designation.rb +5 -0
  41. data/lib/reso/app/models/reso/lookup/buyer_financing.rb +4 -0
  42. data/lib/reso/app/models/reso/lookup/change_type.rb +5 -0
  43. data/lib/reso/app/models/reso/lookup/class_name.rb +4 -0
  44. data/lib/reso/app/models/reso/lookup/co_buyer_agent_designation.rb +4 -0
  45. data/lib/reso/app/models/reso/lookup/co_list_agent_designation.rb +4 -0
  46. data/lib/reso/app/models/reso/lookup/common_interest.rb +4 -0
  47. data/lib/reso/app/models/reso/lookup/common_wall.rb +4 -0
  48. data/lib/reso/app/models/reso/lookup/community_feature.rb +4 -0
  49. data/lib/reso/app/models/reso/lookup/compensation_type.rb +8 -0
  50. data/lib/reso/app/models/reso/lookup/concession.rb +4 -0
  51. data/lib/reso/app/models/reso/lookup/construction_material.rb +4 -0
  52. data/lib/reso/app/models/reso/lookup/contact_listing_preference.rb +4 -0
  53. data/lib/reso/app/models/reso/lookup/contact_status.rb +4 -0
  54. data/lib/reso/app/models/reso/lookup/contact_type.rb +4 -0
  55. data/lib/reso/app/models/reso/lookup/cooling.rb +4 -0
  56. data/lib/reso/app/models/reso/lookup/current_financing.rb +4 -0
  57. data/lib/reso/app/models/reso/lookup/current_use.rb +4 -0
  58. data/lib/reso/app/models/reso/lookup/daily_schedule.rb +4 -0
  59. data/lib/reso/app/models/reso/lookup/development_status.rb +4 -0
  60. data/lib/reso/app/models/reso/lookup/device_type.rb +4 -0
  61. data/lib/reso/app/models/reso/lookup/direction_face.rb +4 -0
  62. data/lib/reso/app/models/reso/lookup/door_feature.rb +4 -0
  63. data/lib/reso/app/models/reso/lookup/electric.rb +4 -0
  64. data/lib/reso/app/models/reso/lookup/event_target.rb +4 -0
  65. data/lib/reso/app/models/reso/lookup/event_type.rb +4 -0
  66. data/lib/reso/app/models/reso/lookup/existing_lease_type.rb +4 -0
  67. data/lib/reso/app/models/reso/lookup/exterior_feature.rb +4 -0
  68. data/lib/reso/app/models/reso/lookup/fencing.rb +4 -0
  69. data/lib/reso/app/models/reso/lookup/financial_data_source.rb +4 -0
  70. data/lib/reso/app/models/reso/lookup/fireplace_feature.rb +4 -0
  71. data/lib/reso/app/models/reso/lookup/flooring.rb +4 -0
  72. data/lib/reso/app/models/reso/lookup/foundation_detail.rb +4 -0
  73. data/lib/reso/app/models/reso/lookup/frontage_type.rb +4 -0
  74. data/lib/reso/app/models/reso/lookup/furnished.rb +4 -0
  75. data/lib/reso/app/models/reso/lookup/green_building_verification_type.rb +4 -0
  76. data/lib/reso/app/models/reso/lookup/green_energy_efficient.rb +4 -0
  77. data/lib/reso/app/models/reso/lookup/green_energy_generation.rb +4 -0
  78. data/lib/reso/app/models/reso/lookup/green_indoor_air_quality.rb +4 -0
  79. data/lib/reso/app/models/reso/lookup/green_sustainability.rb +4 -0
  80. data/lib/reso/app/models/reso/lookup/green_water_conservation.rb +4 -0
  81. data/lib/reso/app/models/reso/lookup/heating.rb +4 -0
  82. data/lib/reso/app/models/reso/lookup/horse_amenity.rb +4 -0
  83. data/lib/reso/app/models/reso/lookup/hours_days_of_operation.rb +4 -0
  84. data/lib/reso/app/models/reso/lookup/image_of.rb +4 -0
  85. data/lib/reso/app/models/reso/lookup/income_include.rb +4 -0
  86. data/lib/reso/app/models/reso/lookup/labor_information.rb +4 -0
  87. data/lib/reso/app/models/reso/lookup/laundry_feature.rb +4 -0
  88. data/lib/reso/app/models/reso/lookup/lease_renewal_compensation.rb +4 -0
  89. data/lib/reso/app/models/reso/lookup/lease_term.rb +4 -0
  90. data/lib/reso/app/models/reso/lookup/list_agent_designation.rb +4 -0
  91. data/lib/reso/app/models/reso/lookup/listing_agreement.rb +4 -0
  92. data/lib/reso/app/models/reso/lookup/listing_service.rb +4 -0
  93. data/lib/reso/app/models/reso/lookup/listing_term.rb +4 -0
  94. data/lib/reso/app/models/reso/lookup/lock_box_type.rb +4 -0
  95. data/lib/reso/app/models/reso/lookup/lot_dimensions_source.rb +4 -0
  96. data/lib/reso/app/models/reso/lookup/lot_feature.rb +4 -0
  97. data/lib/reso/app/models/reso/lookup/lot_size_source.rb +4 -0
  98. data/lib/reso/app/models/reso/lookup/lot_size_unit.rb +4 -0
  99. data/lib/reso/app/models/reso/lookup/media_category.rb +4 -0
  100. data/lib/reso/app/models/reso/lookup/media_type.rb +4 -0
  101. data/lib/reso/app/models/reso/lookup/member_designation.rb +4 -0
  102. data/lib/reso/app/models/reso/lookup/member_other_phone_type.rb +4 -0
  103. data/lib/reso/app/models/reso/lookup/member_status.rb +4 -0
  104. data/lib/reso/app/models/reso/lookup/member_type.rb +4 -0
  105. data/lib/reso/app/models/reso/lookup/noted_by.rb +4 -0
  106. data/lib/reso/app/models/reso/lookup/object_id_type.rb +4 -0
  107. data/lib/reso/app/models/reso/lookup/object_type.rb +4 -0
  108. data/lib/reso/app/models/reso/lookup/occupant_type.rb +4 -0
  109. data/lib/reso/app/models/reso/lookup/open_house_status.rb +4 -0
  110. data/lib/reso/app/models/reso/lookup/open_house_type.rb +4 -0
  111. data/lib/reso/app/models/reso/lookup/operating_expense_include.rb +4 -0
  112. data/lib/reso/app/models/reso/lookup/other_equipment.rb +4 -0
  113. data/lib/reso/app/models/reso/lookup/other_structure.rb +4 -0
  114. data/lib/reso/app/models/reso/lookup/owner_pay.rb +4 -0
  115. data/lib/reso/app/models/reso/lookup/ownership_type.rb +4 -0
  116. data/lib/reso/app/models/reso/lookup/parking_feature.rb +4 -0
  117. data/lib/reso/app/models/reso/lookup/patio_and_porch_feature.rb +4 -0
  118. data/lib/reso/app/models/reso/lookup/permission.rb +4 -0
  119. data/lib/reso/app/models/reso/lookup/pets_allowed.rb +4 -0
  120. data/lib/reso/app/models/reso/lookup/pool_feature.rb +4 -0
  121. data/lib/reso/app/models/reso/lookup/possession.rb +4 -0
  122. data/lib/reso/app/models/reso/lookup/possible_use.rb +4 -0
  123. data/lib/reso/app/models/reso/lookup/property_condition.rb +4 -0
  124. data/lib/reso/app/models/reso/lookup/property_sub_type.rb +4 -0
  125. data/lib/reso/app/models/reso/lookup/property_type.rb +4 -0
  126. data/lib/reso/app/models/reso/lookup/queue_transaction_type.rb +4 -0
  127. data/lib/reso/app/models/reso/lookup/reason_active_or_disabled.rb +4 -0
  128. data/lib/reso/app/models/reso/lookup/rent_include.rb +4 -0
  129. data/lib/reso/app/models/reso/lookup/road_frontage_type.rb +4 -0
  130. data/lib/reso/app/models/reso/lookup/road_responsibility.rb +4 -0
  131. data/lib/reso/app/models/reso/lookup/road_surface_type.rb +4 -0
  132. data/lib/reso/app/models/reso/lookup/roof.rb +4 -0
  133. data/lib/reso/app/models/reso/lookup/rule_format.rb +4 -0
  134. data/lib/reso/app/models/reso/lookup/schedule_type.rb +4 -0
  135. data/lib/reso/app/models/reso/lookup/search_query_type.rb +4 -0
  136. data/lib/reso/app/models/reso/lookup/security_feature.rb +4 -0
  137. data/lib/reso/app/models/reso/lookup/sewer.rb +4 -0
  138. data/lib/reso/app/models/reso/lookup/showing_contact_type.rb +4 -0
  139. data/lib/reso/app/models/reso/lookup/showing_requirement.rb +4 -0
  140. data/lib/reso/app/models/reso/lookup/skirt.rb +4 -0
  141. data/lib/reso/app/models/reso/lookup/spa_feature.rb +4 -0
  142. data/lib/reso/app/models/reso/lookup/special_license.rb +4 -0
  143. data/lib/reso/app/models/reso/lookup/special_listing_condition.rb +4 -0
  144. data/lib/reso/app/models/reso/lookup/standard_status.rb +4 -0
  145. data/lib/reso/app/models/reso/lookup/street_direction.rb +4 -0
  146. data/lib/reso/app/models/reso/lookup/structure_type.rb +4 -0
  147. data/lib/reso/app/models/reso/lookup/syndicate_to.rb +4 -0
  148. data/lib/reso/app/models/reso/lookup/tax_status_current.rb +4 -0
  149. data/lib/reso/app/models/reso/lookup/team_member_type.rb +4 -0
  150. data/lib/reso/app/models/reso/lookup/team_status.rb +4 -0
  151. data/lib/reso/app/models/reso/lookup/tenant_pay.rb +4 -0
  152. data/lib/reso/app/models/reso/lookup/unit_type_type.rb +4 -0
  153. data/lib/reso/app/models/reso/lookup/units_furnished.rb +4 -0
  154. data/lib/reso/app/models/reso/lookup/utility.rb +4 -0
  155. data/lib/reso/app/models/reso/lookup/vegetation.rb +4 -0
  156. data/lib/reso/app/models/reso/lookup/view.rb +4 -0
  157. data/lib/reso/app/models/reso/lookup/water_source.rb +4 -0
  158. data/lib/reso/app/models/reso/lookup/waterfront_feature.rb +4 -0
  159. data/lib/reso/app/models/reso/lookup/window_feature.rb +4 -0
  160. data/lib/reso/app/models/reso/lookup/year_built_source.rb +4 -0
  161. data/lib/reso/app/models/reso/lookup.rb +2 -0
  162. data/lib/reso/app/models/reso/media.rb +3 -0
  163. data/lib/reso/app/models/reso/member.rb +3 -0
  164. data/lib/reso/app/models/reso/office.rb +3 -0
  165. data/lib/reso/app/models/reso/open_house.rb +3 -0
  166. data/lib/reso/app/models/reso/other_phone.rb +3 -0
  167. data/lib/reso/app/models/reso/ouid.rb +3 -0
  168. data/lib/reso/app/models/reso/property/business.rb +6 -0
  169. data/lib/reso/app/models/reso/property/characteristic.rb +9 -0
  170. data/lib/reso/app/models/reso/property/equipment.rb +5 -0
  171. data/lib/reso/app/models/reso/property/farming.rb +9 -0
  172. data/lib/reso/app/models/reso/property/financial.rb +9 -0
  173. data/lib/reso/app/models/reso/property/hoa.rb +6 -0
  174. data/lib/reso/app/models/reso/property/listing/agent_office/buyer_agent.rb +6 -0
  175. data/lib/reso/app/models/reso/property/listing/agent_office/buyer_office.rb +6 -0
  176. data/lib/reso/app/models/reso/property/listing/agent_office/co_buyer_agent.rb +6 -0
  177. data/lib/reso/app/models/reso/property/listing/agent_office/co_buyer_office.rb +6 -0
  178. data/lib/reso/app/models/reso/property/listing/agent_office/co_list_agent.rb +6 -0
  179. data/lib/reso/app/models/reso/property/listing/agent_office/co_list_office.rb +6 -0
  180. data/lib/reso/app/models/reso/property/listing/agent_office/list_agent.rb +6 -0
  181. data/lib/reso/app/models/reso/property/listing/agent_office/list_office.rb +6 -0
  182. data/lib/reso/app/models/reso/property/listing/agent_office/team.rb +6 -0
  183. data/lib/reso/app/models/reso/property/listing/agent_office.rb +15 -0
  184. data/lib/reso/app/models/reso/property/listing/closing.rb +6 -0
  185. data/lib/reso/app/models/reso/property/listing/compensation.rb +6 -0
  186. data/lib/reso/app/models/reso/property/listing/contract.rb +6 -0
  187. data/lib/reso/app/models/reso/property/listing/date.rb +6 -0
  188. data/lib/reso/app/models/reso/property/listing/marketing.rb +6 -0
  189. data/lib/reso/app/models/reso/property/listing/media.rb +6 -0
  190. data/lib/reso/app/models/reso/property/listing/price.rb +6 -0
  191. data/lib/reso/app/models/reso/property/listing/remark.rb +6 -0
  192. data/lib/reso/app/models/reso/property/listing/showing.rb +6 -0
  193. data/lib/reso/app/models/reso/property/listing.rb +17 -0
  194. data/lib/reso/app/models/reso/property/location/address.rb +6 -0
  195. data/lib/reso/app/models/reso/property/location/area.rb +6 -0
  196. data/lib/reso/app/models/reso/property/location/gis.rb +6 -0
  197. data/lib/reso/app/models/reso/property/location/school.rb +6 -0
  198. data/lib/reso/app/models/reso/property/location.rb +10 -0
  199. data/lib/reso/app/models/reso/property/occupant_owner.rb +6 -0
  200. data/lib/reso/app/models/reso/property/structure/performance/green_marketing.rb +6 -0
  201. data/lib/reso/app/models/reso/property/structure/performance/green_verification.rb +6 -0
  202. data/lib/reso/app/models/reso/property/structure/performance.rb +7 -0
  203. data/lib/reso/app/models/reso/property/structure/room.rb +6 -0
  204. data/lib/reso/app/models/reso/property/structure.rb +11 -0
  205. data/lib/reso/app/models/reso/property/tax.rb +6 -0
  206. data/lib/reso/app/models/reso/property/unit_type.rb +9 -0
  207. data/lib/reso/app/models/reso/property/utility.rb +12 -0
  208. data/lib/reso/app/models/reso/property.rb +22 -0
  209. data/lib/reso/app/models/reso/property_agent_office.rb +2 -0
  210. data/lib/reso/app/models/reso/property_green_verification.rb +3 -0
  211. data/lib/reso/app/models/reso/property_location.rb +2 -0
  212. data/lib/reso/app/models/reso/property_performance.rb +2 -0
  213. data/lib/reso/app/models/reso/property_power_production.rb +3 -0
  214. data/lib/reso/app/models/reso/property_room.rb +3 -0
  215. data/lib/reso/app/models/reso/property_unit_type.rb +3 -0
  216. data/lib/reso/app/models/reso/prospecting.rb +3 -0
  217. data/lib/reso/app/models/reso/queue.rb +48 -0
  218. data/lib/reso/app/models/reso/rule.rb +85 -0
  219. data/lib/reso/app/models/reso/saved_search.rb +3 -0
  220. data/lib/reso/app/models/reso/showing/agent.rb +6 -0
  221. data/lib/reso/app/models/reso/showing/listing.rb +6 -0
  222. data/lib/reso/app/models/reso/showing.rb +7 -0
  223. data/lib/reso/app/models/reso/social_media.rb +3 -0
  224. data/lib/reso/app/models/reso/team.rb +7 -0
  225. data/lib/reso/app/models/reso/team_member.rb +3 -0
  226. data/lib/reso/config/inflections.rb +10 -0
  227. data/lib/reso/config/initializers/enumeration_assignments.rb +374 -0
  228. data/lib/reso/railtie.rb +5 -0
  229. data/lib/reso/version.rb +2 -2
  230. data/lib/reso.rb +215 -8
  231. data/reso-1.7.xml +109899 -0
  232. data/reso.gemspec +20 -20
  233. metadata +259 -159
  234. data/app/controllers/syndication_controller.rb +0 -5
  235. data/app/models/.keep +0 -0
  236. data/app/models/address.rb +0 -25
  237. data/app/models/address_type.rb +0 -3
  238. data/app/models/alternate_price.rb +0 -2
  239. data/app/models/appliance.rb +0 -3
  240. data/app/models/architecture_style.rb +0 -5
  241. data/app/models/area_unit.rb +0 -2
  242. data/app/models/brokerage.rb +0 -4
  243. data/app/models/builder.rb +0 -4
  244. data/app/models/business.rb +0 -8
  245. data/app/models/community.rb +0 -5
  246. data/app/models/cooling_system.rb +0 -3
  247. data/app/models/county.rb +0 -5
  248. data/app/models/currency_period.rb +0 -3
  249. data/app/models/enumeration.rb +0 -7
  250. data/app/models/expense.rb +0 -6
  251. data/app/models/expense_category.rb +0 -2
  252. data/app/models/exterior_type.rb +0 -3
  253. data/app/models/floor_covering.rb +0 -3
  254. data/app/models/foreclosure_status.rb +0 -5
  255. data/app/models/franchise.rb +0 -4
  256. data/app/models/gender.rb +0 -3
  257. data/app/models/heating_fuel.rb +0 -3
  258. data/app/models/heating_system.rb +0 -3
  259. data/app/models/home_feature.rb +0 -3
  260. data/app/models/import.rb +0 -153
  261. data/app/models/import_format.rb +0 -3
  262. data/app/models/import_result.rb +0 -12
  263. data/app/models/license_category.rb +0 -2
  264. data/app/models/listing.rb +0 -64
  265. data/app/models/listing_category.rb +0 -5
  266. data/app/models/listing_media.rb +0 -6
  267. data/app/models/listing_provider.rb +0 -9
  268. data/app/models/listing_status.rb +0 -5
  269. data/app/models/multiple_listing_service.rb +0 -5
  270. data/app/models/neighborhood.rb +0 -3
  271. data/app/models/office.rb +0 -6
  272. data/app/models/open_house.rb +0 -4
  273. data/app/models/parking.rb +0 -3
  274. data/app/models/participant.rb +0 -5
  275. data/app/models/participant_license.rb +0 -8
  276. data/app/models/participant_role.rb +0 -3
  277. data/app/models/person.rb +0 -18
  278. data/app/models/photo.rb +0 -3
  279. data/app/models/place.rb +0 -3
  280. data/app/models/price.rb +0 -4
  281. data/app/models/property_sub_type.rb +0 -5
  282. data/app/models/property_type.rb +0 -5
  283. data/app/models/queued_listing.rb +0 -31
  284. data/app/models/roof_type.rb +0 -3
  285. data/app/models/room.rb +0 -4
  286. data/app/models/room_category.rb +0 -2
  287. data/app/models/school.rb +0 -3
  288. data/app/models/school_category.rb +0 -2
  289. data/app/models/source_provider_category.rb +0 -2
  290. data/app/models/tax.rb +0 -3
  291. data/app/models/video.rb +0 -3
  292. data/app/models/view_type.rb +0 -3
  293. data/app/models/virtual_tour.rb +0 -3
  294. data/app/views/syndication/rets.xml.erb +0 -325
  295. data/lib/class_extensions.rb +0 -53
  296. data/lib/generators/reso/install_generator.rb +0 -45
  297. data/lib/generators/reso/setup.rb +0 -37
  298. data/lib/generators/reso/templates/create_addresses.rb +0 -33
  299. data/lib/generators/reso/templates/create_businesses.rb +0 -18
  300. data/lib/generators/reso/templates/create_enumerations.rb +0 -13
  301. data/lib/generators/reso/templates/create_expenses.rb +0 -13
  302. data/lib/generators/reso/templates/create_import_results.rb +0 -16
  303. data/lib/generators/reso/templates/create_imports.rb +0 -19
  304. data/lib/generators/reso/templates/create_join_tables.rb +0 -27
  305. data/lib/generators/reso/templates/create_listing_media.rb +0 -18
  306. data/lib/generators/reso/templates/create_listing_providers.rb +0 -13
  307. data/lib/generators/reso/templates/create_listings.rb +0 -111
  308. data/lib/generators/reso/templates/create_multiple_listing_services.rb +0 -11
  309. data/lib/generators/reso/templates/create_offices.rb +0 -29
  310. data/lib/generators/reso/templates/create_open_houses.rb +0 -18
  311. data/lib/generators/reso/templates/create_participant_licenses.rb +0 -13
  312. data/lib/generators/reso/templates/create_participants.rb +0 -26
  313. data/lib/generators/reso/templates/create_people.rb +0 -18
  314. data/lib/generators/reso/templates/create_places.rb +0 -20
  315. data/lib/generators/reso/templates/create_prices.rb +0 -19
  316. data/lib/generators/reso/templates/create_queued_listings.rb +0 -10
  317. data/lib/generators/reso/templates/create_rooms.rb +0 -10
  318. data/lib/generators/reso/templates/create_schools.rb +0 -13
  319. data/lib/generators/reso/templates/create_taxes.rb +0 -12
  320. data/lib/generators/reso/templates/enumerations.csv +0 -748
  321. data/lib/generators/reso/templates/reso.rake +0 -142
  322. data/lib/mapper/reso.rb +0 -617
  323. data/lib/mapper.rb +0 -274
  324. data/lib/reso/engine.rb +0 -13
  325. data/lib/reso/railties/reso.rake +0 -38
@@ -1,3 +0,0 @@
1
- class CoolingSystem < Enumeration
2
- has_and_belongs_to_many :listings, foreign_key: "enumeration_id"
3
- end
data/app/models/county.rb DELETED
@@ -1,5 +0,0 @@
1
- class County < Place
2
-
3
- has_many :listings
4
-
5
- end
@@ -1,3 +0,0 @@
1
- class CurrencyPeriod < Enumeration
2
- has_many :expenses
3
- end
@@ -1,7 +0,0 @@
1
- class Enumeration < ActiveRecord::Base
2
-
3
- validates_presence_of :name
4
- validates_presence_of :type
5
- validates_uniqueness_of :name, scope: :type
6
-
7
- end
@@ -1,6 +0,0 @@
1
- class Expense < ActiveRecord::Base
2
- belongs_to :expense_category, optional: true
3
- belongs_to :currency_period, optional: true
4
- belongs_to :listing, optional: true
5
-
6
- end
@@ -1,2 +0,0 @@
1
- class ExpenseCategory < Enumeration
2
- end
@@ -1,3 +0,0 @@
1
- class ExteriorType < Enumeration
2
- has_and_belongs_to_many :listings, foreign_key: "enumeration_id"
3
- end
@@ -1,3 +0,0 @@
1
- class FloorCovering < Enumeration
2
- has_and_belongs_to_many :listings, foreign_key: "enumeration_id"
3
- end
@@ -1,5 +0,0 @@
1
- class ForeclosureStatus < Enumeration
2
-
3
- has_many :listings
4
-
5
- end
@@ -1,4 +0,0 @@
1
- class Franchise < Business
2
- has_many :listings
3
- has_one :address, as: :addressable
4
- end
data/app/models/gender.rb DELETED
@@ -1,3 +0,0 @@
1
- class Gender < Enumeration
2
- has_many :people
3
- end
@@ -1,3 +0,0 @@
1
- class HeatingFuel < Enumeration
2
- has_and_belongs_to_many :listings, foreign_key: "enumeration_id"
3
- end
@@ -1,3 +0,0 @@
1
- class HeatingSystem < Enumeration
2
- has_and_belongs_to_many :listings, foreign_key: "enumeration_id"
3
- end
@@ -1,3 +0,0 @@
1
- class HomeFeature < Enumeration
2
- has_and_belongs_to_many :listings, foreign_key: "enumeration_id"
3
- end
data/app/models/import.rb DELETED
@@ -1,153 +0,0 @@
1
- class Import < ActiveRecord::Base
2
-
3
- require 'nokogiri'
4
- require 'open-uri'
5
- require 'open_uri_redirections'
6
- include ActionView::Helpers::TagHelper
7
-
8
- before_save :set_import_format
9
- belongs_to :import_format
10
- enum status: [ :active, :inactive, :running ]
11
- has_many :import_results
12
- has_many :listings
13
- has_many :queued_listings
14
- validates_uniqueness_of :token
15
-
16
- def remove_listings_not_present fresh_listing_keys
17
- existing_listing_keys = self.listings.all.pluck(:listing_key)
18
- stale_listing_keys = existing_listing_keys.delete_if{|key| fresh_listing_keys.include? key }
19
- stale_listing_keys.each do |listing_key|
20
- Listing.find_by(listing_key: listing_key).destroy
21
- end
22
- stale_listing_keys
23
- end
24
-
25
- def set_import_format
26
- self.import_format = ImportFormat.find_by(name: 'reso') unless self.import_format.present?
27
- end
28
-
29
- def source_url_last_modified
30
- open(self.source_url,
31
- http_basic_authentication: [self.source_user, self.source_pass],
32
- allow_redirections: :all
33
- ){|f| return f.last_modified }
34
- end
35
-
36
- def new_source_data_exists?
37
- source_url_last_modified = self.source_url_last_modified
38
- if source_url_last_modified.present? && self.source_data_modified.present?
39
- DateTime.parse(source_url_last_modified.to_s) > DateTime.parse(self.source_data_modified.to_s) ? true : false
40
- else
41
- true
42
- end
43
- end
44
-
45
- def run_import
46
- if self.status == 'active'
47
- self.update_attribute(:status, :running)
48
- if self.new_source_data_exists?
49
-
50
- source_data_modified = self.source_url_last_modified
51
- self.update_attribute(:source_data_modified, source_data_modified)
52
-
53
- listing_count, count, found_listing_keys, snapshots, stream = 0, 0, [], [], ''
54
- open_tag, close_tag = get_open_and_closing_tag_for self.repeating_element
55
-
56
- # Grab a file to work with
57
- filepath = download_feed_to_import self
58
- filepath = uncompress_and_return_new_filepath(filepath) if filepath.split('.').last.downcase == 'gz'
59
-
60
- # Grab the XML header to avoid namespace errors later
61
- xml_header = get_xml_header filepath, self.repeating_element
62
-
63
- start_time = Time.now
64
- import_result = ImportResult.create(import: self, start_time: start_time, source_data_modified: source_data_modified)
65
- File.foreach(filepath) do |line|
66
- stream += line
67
- while (from_here = stream.index(open_tag)) && (to_there = stream.index(close_tag))
68
- xml = stream[from_here..to_there + (close_tag.length-1)]
69
- doc = Nokogiri::XML([xml_header, xml].join).remove_namespaces!
70
- found_listing_keys << create_queued_listing_and_return_listing_key(doc, self)
71
- stream.gsub!(xml, '')
72
- if ((listing_count += 1) % 100).zero?
73
- GC.start
74
- snapshots << [listing_count, listing_count/(Time.now - start_time)]
75
- import_result.update_attribute(:snapshots, snapshots) if (listing_count % 1000).zero?
76
- puts snapshots.last.inspect if Rails.env.development?
77
- end
78
- end
79
- end
80
- snapshots << [listing_count, listing_count/(Time.now - start_time)]
81
- end_time = Time.now
82
- self.update_attribute(:status, :active)
83
- removed_listing_keys = self.remove_listings_not_present(found_listing_keys)
84
- import_result.assign_attributes({
85
- end_time: end_time,
86
- found_listing_keys: found_listing_keys,
87
- removed_listing_keys: removed_listing_keys,
88
- snapshots: snapshots
89
- })
90
- import_result.save
91
- File.delete(filepath)
92
- end
93
- self.update_attribute(:status, :active)
94
- end
95
- end
96
-
97
- def download_feed_to_import import
98
- filename = [Time.now.to_s.parameterize, import.source_url.split('/').last].join
99
- filepath = Rails.root.join('tmp', filename).to_s
100
- File.delete(filepath) if File.file? filepath
101
- open(filepath, 'wb') do |file|
102
- file << open(import.source_url,
103
- http_basic_authentication: [import.source_user, import.source_pass],
104
- allow_redirections: :all
105
- ).read
106
- end
107
- filepath
108
- end
109
-
110
- def get_open_and_closing_tag_for repeating_element
111
- content_tag(repeating_element, "\n").split
112
- end
113
-
114
- def get_xml_header filepath, repeating_element
115
- stream = ''
116
- open_tag = get_open_and_closing_tag_for(repeating_element).first
117
- File.foreach(filepath) do |line|
118
- stream += line
119
- pos = stream.index(open_tag)
120
- return stream[0..pos-1] if pos
121
- end
122
- nil # Just in cases
123
- end
124
-
125
- def create_queued_listing_and_return_listing_key doc, import
126
- begin
127
- doc.css(import.repeating_element).each do |o|
128
- listing_data = {}
129
- Hash.from_xml(o.to_xml)[import.repeating_element].each_pair{|key, value| listing_data[key] = value }
130
- queued_listing = QueuedListing.new(import: import, listing_data: listing_data)
131
- queued_listing.save
132
- return Mapper::unique_identifier(queued_listing)
133
- end
134
- rescue Exception => e
135
- puts e.inspect
136
- exit if Rails.env.development?
137
- return nil
138
- end
139
- end
140
-
141
- def uncompress_and_return_new_filepath filepath
142
- output_path = [filepath, '.xml'].join
143
- File.delete(output_path) if File.file? output_path
144
- Zlib::GzipReader.open(filepath) do |gz|
145
- File.open(output_path, "w") do |g|
146
- IO.copy_stream(gz, g)
147
- end
148
- end
149
- File.delete(filepath)
150
- output_path
151
- end
152
-
153
- end
@@ -1,3 +0,0 @@
1
- class ImportFormat < Enumeration
2
- has_many :imports
3
- end
@@ -1,12 +0,0 @@
1
- class ImportResult < ActiveRecord::Base
2
- belongs_to :import
3
- enum status: [ :starting, :running, :finishing, :finished, :stalled, :aborted ]
4
- serialize :found_listing_keys
5
- serialize :removed_listing_keys
6
- serialize :snapshots
7
-
8
- def found_count_difference
9
- previous_run = self.import.import_results.where(['start_time < ?', self.start_time]).order("start_time DESC").limit(1).first
10
- previous_run.present? ? self.found_listing_keys.count - previous_run.found_listing_keys.count : nil
11
- end
12
- end
@@ -1,2 +0,0 @@
1
- class LicenseCategory < Enumeration
2
- end
@@ -1,64 +0,0 @@
1
- class Listing < ActiveRecord::Base
2
-
3
- belongs_to :architecture_style, optional: true
4
- belongs_to :brokerage, optional: true
5
- belongs_to :builder, optional: true
6
- belongs_to :community, optional: true
7
- belongs_to :county, optional: true
8
- belongs_to :foreclosure_status, optional: true
9
- belongs_to :franchise, optional: true
10
- belongs_to :import, optional: true
11
- belongs_to :listing_category, optional: true
12
- belongs_to :listing_provider, optional: true
13
- belongs_to :listing_status, optional: true
14
- belongs_to :multiple_listing_service, optional: true
15
- belongs_to :property_sub_type, optional: true
16
- belongs_to :property_type, optional: true
17
- belongs_to :office, optional: true
18
- belongs_to :zoning_type, optional: true
19
-
20
- has_one :address, as: :addressable, dependent: :destroy
21
-
22
- has_many :alternate_prices, dependent: :destroy
23
- has_many :expenses, dependent: :destroy
24
- has_many :open_houses, dependent: :destroy
25
- has_many :photos, dependent: :destroy
26
- has_many :people, through: :participants
27
- has_many :rooms, dependent: :destroy
28
- has_many :taxes, dependent: :destroy
29
- has_many :videos, dependent: :destroy
30
- has_many :virtual_tours, dependent: :destroy
31
-
32
- has_and_belongs_to_many :appliances, association_foreign_key: "enumeration_id"
33
- has_and_belongs_to_many :cooling_systems, association_foreign_key: "enumeration_id"
34
- has_and_belongs_to_many :exterior_types, association_foreign_key: "enumeration_id"
35
- has_and_belongs_to_many :floor_coverings, association_foreign_key: "enumeration_id"
36
- has_and_belongs_to_many :heating_fuels, association_foreign_key: "enumeration_id"
37
- has_and_belongs_to_many :heating_systems, association_foreign_key: "enumeration_id"
38
- has_and_belongs_to_many :home_features, association_foreign_key: "enumeration_id"
39
- has_and_belongs_to_many :neighborhoods, association_foreign_key: "place_id"
40
- has_and_belongs_to_many :parking, association_foreign_key: "enumeration_id"
41
- has_and_belongs_to_many :participants
42
- has_and_belongs_to_many :roof_types, association_foreign_key: "enumeration_id"
43
- has_and_belongs_to_many :view_types, association_foreign_key: "enumeration_id"
44
-
45
- accepts_nested_attributes_for :alternate_prices, allow_destroy: true
46
- accepts_nested_attributes_for :appliances
47
- accepts_nested_attributes_for :cooling_systems
48
- accepts_nested_attributes_for :expenses, allow_destroy: true
49
- accepts_nested_attributes_for :exterior_types
50
- accepts_nested_attributes_for :floor_coverings
51
- accepts_nested_attributes_for :heating_fuels
52
- accepts_nested_attributes_for :heating_systems
53
- accepts_nested_attributes_for :home_features
54
- accepts_nested_attributes_for :neighborhoods
55
- accepts_nested_attributes_for :open_houses, allow_destroy: true
56
- accepts_nested_attributes_for :parking
57
- accepts_nested_attributes_for :participants, allow_destroy: true
58
- accepts_nested_attributes_for :roof_types
59
- accepts_nested_attributes_for :rooms, allow_destroy: true
60
- accepts_nested_attributes_for :taxes, allow_destroy: true
61
- accepts_nested_attributes_for :view_types
62
-
63
- end
64
-
@@ -1,5 +0,0 @@
1
- class ListingCategory < Enumeration
2
-
3
- has_many :listings
4
-
5
- end
@@ -1,6 +0,0 @@
1
- class ListingMedia < ActiveRecord::Base
2
-
3
- # validates_presence_of :media_url
4
- # validates_presence_of :type
5
-
6
- end
@@ -1,9 +0,0 @@
1
- class ListingProvider < ActiveRecord::Base
2
- belongs_to :source_provider_category, optional: true
3
-
4
- has_many :listings
5
-
6
- # validates_presence_of :name
7
- # validates_presence_of :source_provider_category
8
-
9
- end
@@ -1,5 +0,0 @@
1
- class ListingStatus < Enumeration
2
-
3
- has_many :listings
4
-
5
- end
@@ -1,5 +0,0 @@
1
- class MultipleListingService < ActiveRecord::Base
2
-
3
- has_many :listings
4
-
5
- end
@@ -1,3 +0,0 @@
1
- class Neighborhood < Place
2
- has_and_belongs_to_many :listings, foreign_key: "place_id"
3
- end
data/app/models/office.rb DELETED
@@ -1,6 +0,0 @@
1
- class Office < ActiveRecord::Base
2
-
3
- has_many :listings
4
- has_one :address, as: :addressable
5
-
6
- end
@@ -1,4 +0,0 @@
1
- class OpenHouse < ActiveRecord::Base
2
- belongs_to :listing
3
-
4
- end
@@ -1,3 +0,0 @@
1
- class Parking < Enumeration
2
- has_and_belongs_to_many :listings, foreign_key: "enumeration_id"
3
- end
@@ -1,5 +0,0 @@
1
- class Participant < ActiveRecord::Base
2
- belongs_to :participant_role, optional: true
3
- has_many :participant_licenses
4
- has_and_belongs_to_many :listings
5
- end
@@ -1,8 +0,0 @@
1
- class ParticipantLicense < ActiveRecord::Base
2
- belongs_to :license_category
3
- belongs_to :participant
4
-
5
- # validates_presence_of :license_category
6
- # validates_presence_of :participant
7
-
8
- end
@@ -1,3 +0,0 @@
1
- class ParticipantRole < Enumeration
2
- has_many :participants
3
- end
data/app/models/person.rb DELETED
@@ -1,18 +0,0 @@
1
- class Person < ActiveRecord::Base
2
- belongs_to :gender
3
-
4
- def complete_name
5
- # Dr. Edwin E. 'Buzz' Aldrin Jr.
6
-
7
- self.nick_name.blank? ? nick_name = nil : nick_name = "'#{self.nick_name}'"
8
- self.middle_name.blank? ? middle_name = nil : middle_name = "#{self.middle_name.first.upcase}."
9
- [
10
- self.personal_title,
11
- self.first_name,
12
- middle_name,
13
- nick_name,
14
- self.last_name,
15
- self.suffix
16
- ].delete_if{|i| i.blank? }.join(' ')
17
- end
18
- end
data/app/models/photo.rb DELETED
@@ -1,3 +0,0 @@
1
- class Photo < ListingMedia
2
- belongs_to :listing
3
- end
data/app/models/place.rb DELETED
@@ -1,3 +0,0 @@
1
- class Place < ActiveRecord::Base
2
- has_and_belongs_to_many :schools, foreign_key: "place_id"
3
- end
data/app/models/price.rb DELETED
@@ -1,4 +0,0 @@
1
- class Price < ActiveRecord::Base
2
- belongs_to :currency_period, optional: true
3
- belongs_to :listing, optional: true
4
- end
@@ -1,5 +0,0 @@
1
- class PropertySubType < Enumeration
2
-
3
- has_many :listings
4
-
5
- end
@@ -1,5 +0,0 @@
1
- class PropertyType < Enumeration
2
-
3
- has_many :listings
4
-
5
- end
@@ -1,31 +0,0 @@
1
- class QueuedListing < ActiveRecord::Base
2
- belongs_to :import
3
- serialize :listing_data
4
- after_save :create_listing_and_remove_myself
5
-
6
- def mapper
7
- "Mapper::#{self.import.import_format.name.downcase.capitalize}".constantize
8
- end
9
-
10
- def create_or_update_listing
11
- listing = self.import.listings.
12
- eager_load(:address).
13
- eager_load(:appliances).
14
- eager_load(:participants).
15
- eager_load(:photos).
16
- find_or_initialize_by(
17
- listing_key: Mapper::unique_identifier(self)
18
- )
19
- if (listing.modification_timestamp != mapper.modification_timestamp(self, listing))
20
- Mapper::RESO_LISTING_ATTRIBUTES.each do |attribute|
21
- listing.send("#{attribute}=", mapper.send(attribute, self, listing))
22
- end
23
- listing.save
24
- end
25
- end
26
-
27
- def create_listing_and_remove_myself
28
- create_or_update_listing ? self.destroy : false
29
- end
30
-
31
- end
@@ -1,3 +0,0 @@
1
- class RoofType < Enumeration
2
- has_and_belongs_to_many :listings, foreign_key: "enumeration_id"
3
- end
data/app/models/room.rb DELETED
@@ -1,4 +0,0 @@
1
- class Room < ActiveRecord::Base
2
- belongs_to :room_category, optional: true
3
- belongs_to :listing, optional: true
4
- end
@@ -1,2 +0,0 @@
1
- class RoomCategory < Enumeration
2
- end
data/app/models/school.rb DELETED
@@ -1,3 +0,0 @@
1
- class School < ActiveRecord::Base
2
- belongs_to :school_category, optional: true
3
- end
@@ -1,2 +0,0 @@
1
- class SchoolCategory < Enumeration
2
- end
@@ -1,2 +0,0 @@
1
- class SourceProviderCategory < Enumeration
2
- end
data/app/models/tax.rb DELETED
@@ -1,3 +0,0 @@
1
- class Tax < ActiveRecord::Base
2
- belongs_to :listing, optional: true
3
- end
data/app/models/video.rb DELETED
@@ -1,3 +0,0 @@
1
- class Video < ListingMedia
2
- belongs_to :listing, optional: true
3
- end
@@ -1,3 +0,0 @@
1
- class ViewType < Enumeration
2
- has_and_belongs_to_many :listings, foreign_key: "enumeration_id"
3
- end
@@ -1,3 +0,0 @@
1
- class VirtualTour < ListingMedia
2
- belongs_to :listing, optional: true
3
- end