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.
- checksums.yaml +5 -5
- data/.gitignore +11 -17
- data/.rspec +3 -0
- data/.travis.yml +7 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +4 -1
- data/Gemfile.lock +60 -0
- data/LICENSE.txt +17 -18
- data/README.md +19 -125
- data/Rakefile +5 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/generators/reso/install/install_generator.rb +23 -0
- data/lib/generators/reso/install/templates/create_reso_enumeration_assignments.rb +14 -0
- data/lib/generators/reso/install/templates/create_reso_enumerations.rb +12 -0
- data/lib/reso/app/models/.DS_Store +0 -0
- data/lib/reso/app/models/application_record.rb +3 -0
- data/lib/reso/app/models/reso/contact.rb +3 -0
- data/lib/reso/app/models/reso/contact_listing.rb +3 -0
- data/lib/reso/app/models/reso/contact_listing_note.rb +3 -0
- data/lib/reso/app/models/reso/data_dictionary.rb +124 -0
- data/lib/reso/app/models/reso/enumeration.rb +3 -0
- data/lib/reso/app/models/reso/enumeration_assignment.rb +4 -0
- data/lib/reso/app/models/reso/history_transactional.rb +3 -0
- data/lib/reso/app/models/reso/internet_tracking/actor.rb +6 -0
- data/lib/reso/app/models/reso/internet_tracking/event.rb +6 -0
- data/lib/reso/app/models/reso/internet_tracking/object.rb +6 -0
- data/lib/reso/app/models/reso/internet_tracking.rb +7 -0
- data/lib/reso/app/models/reso/lookup/accessibility_feature.rb +4 -0
- data/lib/reso/app/models/reso/lookup/actor_type.rb +4 -0
- data/lib/reso/app/models/reso/lookup/appliance.rb +4 -0
- data/lib/reso/app/models/reso/lookup/area_source.rb +6 -0
- data/lib/reso/app/models/reso/lookup/area_unit.rb +5 -0
- data/lib/reso/app/models/reso/lookup/association_amenity.rb +4 -0
- data/lib/reso/app/models/reso/lookup/association_fee_include.rb +5 -0
- data/lib/reso/app/models/reso/lookup/attended.rb +4 -0
- data/lib/reso/app/models/reso/lookup/basement.rb +5 -0
- data/lib/reso/app/models/reso/lookup/body_type.rb +4 -0
- data/lib/reso/app/models/reso/lookup/business_type.rb +4 -0
- data/lib/reso/app/models/reso/lookup/buyer_agent_designation.rb +5 -0
- data/lib/reso/app/models/reso/lookup/buyer_financing.rb +4 -0
- data/lib/reso/app/models/reso/lookup/change_type.rb +5 -0
- data/lib/reso/app/models/reso/lookup/class_name.rb +4 -0
- data/lib/reso/app/models/reso/lookup/co_buyer_agent_designation.rb +4 -0
- data/lib/reso/app/models/reso/lookup/co_list_agent_designation.rb +4 -0
- data/lib/reso/app/models/reso/lookup/common_interest.rb +4 -0
- data/lib/reso/app/models/reso/lookup/common_wall.rb +4 -0
- data/lib/reso/app/models/reso/lookup/community_feature.rb +4 -0
- data/lib/reso/app/models/reso/lookup/compensation_type.rb +8 -0
- data/lib/reso/app/models/reso/lookup/concession.rb +4 -0
- data/lib/reso/app/models/reso/lookup/construction_material.rb +4 -0
- data/lib/reso/app/models/reso/lookup/contact_listing_preference.rb +4 -0
- data/lib/reso/app/models/reso/lookup/contact_status.rb +4 -0
- data/lib/reso/app/models/reso/lookup/contact_type.rb +4 -0
- data/lib/reso/app/models/reso/lookup/cooling.rb +4 -0
- data/lib/reso/app/models/reso/lookup/current_financing.rb +4 -0
- data/lib/reso/app/models/reso/lookup/current_use.rb +4 -0
- data/lib/reso/app/models/reso/lookup/daily_schedule.rb +4 -0
- data/lib/reso/app/models/reso/lookup/development_status.rb +4 -0
- data/lib/reso/app/models/reso/lookup/device_type.rb +4 -0
- data/lib/reso/app/models/reso/lookup/direction_face.rb +4 -0
- data/lib/reso/app/models/reso/lookup/door_feature.rb +4 -0
- data/lib/reso/app/models/reso/lookup/electric.rb +4 -0
- data/lib/reso/app/models/reso/lookup/event_target.rb +4 -0
- data/lib/reso/app/models/reso/lookup/event_type.rb +4 -0
- data/lib/reso/app/models/reso/lookup/existing_lease_type.rb +4 -0
- data/lib/reso/app/models/reso/lookup/exterior_feature.rb +4 -0
- data/lib/reso/app/models/reso/lookup/fencing.rb +4 -0
- data/lib/reso/app/models/reso/lookup/financial_data_source.rb +4 -0
- data/lib/reso/app/models/reso/lookup/fireplace_feature.rb +4 -0
- data/lib/reso/app/models/reso/lookup/flooring.rb +4 -0
- data/lib/reso/app/models/reso/lookup/foundation_detail.rb +4 -0
- data/lib/reso/app/models/reso/lookup/frontage_type.rb +4 -0
- data/lib/reso/app/models/reso/lookup/furnished.rb +4 -0
- data/lib/reso/app/models/reso/lookup/green_building_verification_type.rb +4 -0
- data/lib/reso/app/models/reso/lookup/green_energy_efficient.rb +4 -0
- data/lib/reso/app/models/reso/lookup/green_energy_generation.rb +4 -0
- data/lib/reso/app/models/reso/lookup/green_indoor_air_quality.rb +4 -0
- data/lib/reso/app/models/reso/lookup/green_sustainability.rb +4 -0
- data/lib/reso/app/models/reso/lookup/green_water_conservation.rb +4 -0
- data/lib/reso/app/models/reso/lookup/heating.rb +4 -0
- data/lib/reso/app/models/reso/lookup/horse_amenity.rb +4 -0
- data/lib/reso/app/models/reso/lookup/hours_days_of_operation.rb +4 -0
- data/lib/reso/app/models/reso/lookup/image_of.rb +4 -0
- data/lib/reso/app/models/reso/lookup/income_include.rb +4 -0
- data/lib/reso/app/models/reso/lookup/labor_information.rb +4 -0
- data/lib/reso/app/models/reso/lookup/laundry_feature.rb +4 -0
- data/lib/reso/app/models/reso/lookup/lease_renewal_compensation.rb +4 -0
- data/lib/reso/app/models/reso/lookup/lease_term.rb +4 -0
- data/lib/reso/app/models/reso/lookup/list_agent_designation.rb +4 -0
- data/lib/reso/app/models/reso/lookup/listing_agreement.rb +4 -0
- data/lib/reso/app/models/reso/lookup/listing_service.rb +4 -0
- data/lib/reso/app/models/reso/lookup/listing_term.rb +4 -0
- data/lib/reso/app/models/reso/lookup/lock_box_type.rb +4 -0
- data/lib/reso/app/models/reso/lookup/lot_dimensions_source.rb +4 -0
- data/lib/reso/app/models/reso/lookup/lot_feature.rb +4 -0
- data/lib/reso/app/models/reso/lookup/lot_size_source.rb +4 -0
- data/lib/reso/app/models/reso/lookup/lot_size_unit.rb +4 -0
- data/lib/reso/app/models/reso/lookup/media_category.rb +4 -0
- data/lib/reso/app/models/reso/lookup/media_type.rb +4 -0
- data/lib/reso/app/models/reso/lookup/member_designation.rb +4 -0
- data/lib/reso/app/models/reso/lookup/member_other_phone_type.rb +4 -0
- data/lib/reso/app/models/reso/lookup/member_status.rb +4 -0
- data/lib/reso/app/models/reso/lookup/member_type.rb +4 -0
- data/lib/reso/app/models/reso/lookup/noted_by.rb +4 -0
- data/lib/reso/app/models/reso/lookup/object_id_type.rb +4 -0
- data/lib/reso/app/models/reso/lookup/object_type.rb +4 -0
- data/lib/reso/app/models/reso/lookup/occupant_type.rb +4 -0
- data/lib/reso/app/models/reso/lookup/open_house_status.rb +4 -0
- data/lib/reso/app/models/reso/lookup/open_house_type.rb +4 -0
- data/lib/reso/app/models/reso/lookup/operating_expense_include.rb +4 -0
- data/lib/reso/app/models/reso/lookup/other_equipment.rb +4 -0
- data/lib/reso/app/models/reso/lookup/other_structure.rb +4 -0
- data/lib/reso/app/models/reso/lookup/owner_pay.rb +4 -0
- data/lib/reso/app/models/reso/lookup/ownership_type.rb +4 -0
- data/lib/reso/app/models/reso/lookup/parking_feature.rb +4 -0
- data/lib/reso/app/models/reso/lookup/patio_and_porch_feature.rb +4 -0
- data/lib/reso/app/models/reso/lookup/permission.rb +4 -0
- data/lib/reso/app/models/reso/lookup/pets_allowed.rb +4 -0
- data/lib/reso/app/models/reso/lookup/pool_feature.rb +4 -0
- data/lib/reso/app/models/reso/lookup/possession.rb +4 -0
- data/lib/reso/app/models/reso/lookup/possible_use.rb +4 -0
- data/lib/reso/app/models/reso/lookup/property_condition.rb +4 -0
- data/lib/reso/app/models/reso/lookup/property_sub_type.rb +4 -0
- data/lib/reso/app/models/reso/lookup/property_type.rb +4 -0
- data/lib/reso/app/models/reso/lookup/queue_transaction_type.rb +4 -0
- data/lib/reso/app/models/reso/lookup/reason_active_or_disabled.rb +4 -0
- data/lib/reso/app/models/reso/lookup/rent_include.rb +4 -0
- data/lib/reso/app/models/reso/lookup/road_frontage_type.rb +4 -0
- data/lib/reso/app/models/reso/lookup/road_responsibility.rb +4 -0
- data/lib/reso/app/models/reso/lookup/road_surface_type.rb +4 -0
- data/lib/reso/app/models/reso/lookup/roof.rb +4 -0
- data/lib/reso/app/models/reso/lookup/rule_format.rb +4 -0
- data/lib/reso/app/models/reso/lookup/schedule_type.rb +4 -0
- data/lib/reso/app/models/reso/lookup/search_query_type.rb +4 -0
- data/lib/reso/app/models/reso/lookup/security_feature.rb +4 -0
- data/lib/reso/app/models/reso/lookup/sewer.rb +4 -0
- data/lib/reso/app/models/reso/lookup/showing_contact_type.rb +4 -0
- data/lib/reso/app/models/reso/lookup/showing_requirement.rb +4 -0
- data/lib/reso/app/models/reso/lookup/skirt.rb +4 -0
- data/lib/reso/app/models/reso/lookup/spa_feature.rb +4 -0
- data/lib/reso/app/models/reso/lookup/special_license.rb +4 -0
- data/lib/reso/app/models/reso/lookup/special_listing_condition.rb +4 -0
- data/lib/reso/app/models/reso/lookup/standard_status.rb +4 -0
- data/lib/reso/app/models/reso/lookup/street_direction.rb +4 -0
- data/lib/reso/app/models/reso/lookup/structure_type.rb +4 -0
- data/lib/reso/app/models/reso/lookup/syndicate_to.rb +4 -0
- data/lib/reso/app/models/reso/lookup/tax_status_current.rb +4 -0
- data/lib/reso/app/models/reso/lookup/team_member_type.rb +4 -0
- data/lib/reso/app/models/reso/lookup/team_status.rb +4 -0
- data/lib/reso/app/models/reso/lookup/tenant_pay.rb +4 -0
- data/lib/reso/app/models/reso/lookup/unit_type_type.rb +4 -0
- data/lib/reso/app/models/reso/lookup/units_furnished.rb +4 -0
- data/lib/reso/app/models/reso/lookup/utility.rb +4 -0
- data/lib/reso/app/models/reso/lookup/vegetation.rb +4 -0
- data/lib/reso/app/models/reso/lookup/view.rb +4 -0
- data/lib/reso/app/models/reso/lookup/water_source.rb +4 -0
- data/lib/reso/app/models/reso/lookup/waterfront_feature.rb +4 -0
- data/lib/reso/app/models/reso/lookup/window_feature.rb +4 -0
- data/lib/reso/app/models/reso/lookup/year_built_source.rb +4 -0
- data/lib/reso/app/models/reso/lookup.rb +2 -0
- data/lib/reso/app/models/reso/media.rb +3 -0
- data/lib/reso/app/models/reso/member.rb +3 -0
- data/lib/reso/app/models/reso/office.rb +3 -0
- data/lib/reso/app/models/reso/open_house.rb +3 -0
- data/lib/reso/app/models/reso/other_phone.rb +3 -0
- data/lib/reso/app/models/reso/ouid.rb +3 -0
- data/lib/reso/app/models/reso/property/business.rb +6 -0
- data/lib/reso/app/models/reso/property/characteristic.rb +9 -0
- data/lib/reso/app/models/reso/property/equipment.rb +5 -0
- data/lib/reso/app/models/reso/property/farming.rb +9 -0
- data/lib/reso/app/models/reso/property/financial.rb +9 -0
- data/lib/reso/app/models/reso/property/hoa.rb +6 -0
- data/lib/reso/app/models/reso/property/listing/agent_office/buyer_agent.rb +6 -0
- data/lib/reso/app/models/reso/property/listing/agent_office/buyer_office.rb +6 -0
- data/lib/reso/app/models/reso/property/listing/agent_office/co_buyer_agent.rb +6 -0
- data/lib/reso/app/models/reso/property/listing/agent_office/co_buyer_office.rb +6 -0
- data/lib/reso/app/models/reso/property/listing/agent_office/co_list_agent.rb +6 -0
- data/lib/reso/app/models/reso/property/listing/agent_office/co_list_office.rb +6 -0
- data/lib/reso/app/models/reso/property/listing/agent_office/list_agent.rb +6 -0
- data/lib/reso/app/models/reso/property/listing/agent_office/list_office.rb +6 -0
- data/lib/reso/app/models/reso/property/listing/agent_office/team.rb +6 -0
- data/lib/reso/app/models/reso/property/listing/agent_office.rb +15 -0
- data/lib/reso/app/models/reso/property/listing/closing.rb +6 -0
- data/lib/reso/app/models/reso/property/listing/compensation.rb +6 -0
- data/lib/reso/app/models/reso/property/listing/contract.rb +6 -0
- data/lib/reso/app/models/reso/property/listing/date.rb +6 -0
- data/lib/reso/app/models/reso/property/listing/marketing.rb +6 -0
- data/lib/reso/app/models/reso/property/listing/media.rb +6 -0
- data/lib/reso/app/models/reso/property/listing/price.rb +6 -0
- data/lib/reso/app/models/reso/property/listing/remark.rb +6 -0
- data/lib/reso/app/models/reso/property/listing/showing.rb +6 -0
- data/lib/reso/app/models/reso/property/listing.rb +17 -0
- data/lib/reso/app/models/reso/property/location/address.rb +6 -0
- data/lib/reso/app/models/reso/property/location/area.rb +6 -0
- data/lib/reso/app/models/reso/property/location/gis.rb +6 -0
- data/lib/reso/app/models/reso/property/location/school.rb +6 -0
- data/lib/reso/app/models/reso/property/location.rb +10 -0
- data/lib/reso/app/models/reso/property/occupant_owner.rb +6 -0
- data/lib/reso/app/models/reso/property/structure/performance/green_marketing.rb +6 -0
- data/lib/reso/app/models/reso/property/structure/performance/green_verification.rb +6 -0
- data/lib/reso/app/models/reso/property/structure/performance.rb +7 -0
- data/lib/reso/app/models/reso/property/structure/room.rb +6 -0
- data/lib/reso/app/models/reso/property/structure.rb +11 -0
- data/lib/reso/app/models/reso/property/tax.rb +6 -0
- data/lib/reso/app/models/reso/property/unit_type.rb +9 -0
- data/lib/reso/app/models/reso/property/utility.rb +12 -0
- data/lib/reso/app/models/reso/property.rb +22 -0
- data/lib/reso/app/models/reso/property_agent_office.rb +2 -0
- data/lib/reso/app/models/reso/property_green_verification.rb +3 -0
- data/lib/reso/app/models/reso/property_location.rb +2 -0
- data/lib/reso/app/models/reso/property_performance.rb +2 -0
- data/lib/reso/app/models/reso/property_power_production.rb +3 -0
- data/lib/reso/app/models/reso/property_room.rb +3 -0
- data/lib/reso/app/models/reso/property_unit_type.rb +3 -0
- data/lib/reso/app/models/reso/prospecting.rb +3 -0
- data/lib/reso/app/models/reso/queue.rb +48 -0
- data/lib/reso/app/models/reso/rule.rb +85 -0
- data/lib/reso/app/models/reso/saved_search.rb +3 -0
- data/lib/reso/app/models/reso/showing/agent.rb +6 -0
- data/lib/reso/app/models/reso/showing/listing.rb +6 -0
- data/lib/reso/app/models/reso/showing.rb +7 -0
- data/lib/reso/app/models/reso/social_media.rb +3 -0
- data/lib/reso/app/models/reso/team.rb +7 -0
- data/lib/reso/app/models/reso/team_member.rb +3 -0
- data/lib/reso/config/inflections.rb +10 -0
- data/lib/reso/config/initializers/enumeration_assignments.rb +374 -0
- data/lib/reso/railtie.rb +5 -0
- data/lib/reso/version.rb +2 -2
- data/lib/reso.rb +215 -8
- data/reso-1.7.xml +109899 -0
- data/reso.gemspec +20 -20
- metadata +259 -159
- data/app/controllers/syndication_controller.rb +0 -5
- data/app/models/.keep +0 -0
- data/app/models/address.rb +0 -25
- data/app/models/address_type.rb +0 -3
- data/app/models/alternate_price.rb +0 -2
- data/app/models/appliance.rb +0 -3
- data/app/models/architecture_style.rb +0 -5
- data/app/models/area_unit.rb +0 -2
- data/app/models/brokerage.rb +0 -4
- data/app/models/builder.rb +0 -4
- data/app/models/business.rb +0 -8
- data/app/models/community.rb +0 -5
- data/app/models/cooling_system.rb +0 -3
- data/app/models/county.rb +0 -5
- data/app/models/currency_period.rb +0 -3
- data/app/models/enumeration.rb +0 -7
- data/app/models/expense.rb +0 -6
- data/app/models/expense_category.rb +0 -2
- data/app/models/exterior_type.rb +0 -3
- data/app/models/floor_covering.rb +0 -3
- data/app/models/foreclosure_status.rb +0 -5
- data/app/models/franchise.rb +0 -4
- data/app/models/gender.rb +0 -3
- data/app/models/heating_fuel.rb +0 -3
- data/app/models/heating_system.rb +0 -3
- data/app/models/home_feature.rb +0 -3
- data/app/models/import.rb +0 -153
- data/app/models/import_format.rb +0 -3
- data/app/models/import_result.rb +0 -12
- data/app/models/license_category.rb +0 -2
- data/app/models/listing.rb +0 -64
- data/app/models/listing_category.rb +0 -5
- data/app/models/listing_media.rb +0 -6
- data/app/models/listing_provider.rb +0 -9
- data/app/models/listing_status.rb +0 -5
- data/app/models/multiple_listing_service.rb +0 -5
- data/app/models/neighborhood.rb +0 -3
- data/app/models/office.rb +0 -6
- data/app/models/open_house.rb +0 -4
- data/app/models/parking.rb +0 -3
- data/app/models/participant.rb +0 -5
- data/app/models/participant_license.rb +0 -8
- data/app/models/participant_role.rb +0 -3
- data/app/models/person.rb +0 -18
- data/app/models/photo.rb +0 -3
- data/app/models/place.rb +0 -3
- data/app/models/price.rb +0 -4
- data/app/models/property_sub_type.rb +0 -5
- data/app/models/property_type.rb +0 -5
- data/app/models/queued_listing.rb +0 -31
- data/app/models/roof_type.rb +0 -3
- data/app/models/room.rb +0 -4
- data/app/models/room_category.rb +0 -2
- data/app/models/school.rb +0 -3
- data/app/models/school_category.rb +0 -2
- data/app/models/source_provider_category.rb +0 -2
- data/app/models/tax.rb +0 -3
- data/app/models/video.rb +0 -3
- data/app/models/view_type.rb +0 -3
- data/app/models/virtual_tour.rb +0 -3
- data/app/views/syndication/rets.xml.erb +0 -325
- data/lib/class_extensions.rb +0 -53
- data/lib/generators/reso/install_generator.rb +0 -45
- data/lib/generators/reso/setup.rb +0 -37
- data/lib/generators/reso/templates/create_addresses.rb +0 -33
- data/lib/generators/reso/templates/create_businesses.rb +0 -18
- data/lib/generators/reso/templates/create_enumerations.rb +0 -13
- data/lib/generators/reso/templates/create_expenses.rb +0 -13
- data/lib/generators/reso/templates/create_import_results.rb +0 -16
- data/lib/generators/reso/templates/create_imports.rb +0 -19
- data/lib/generators/reso/templates/create_join_tables.rb +0 -27
- data/lib/generators/reso/templates/create_listing_media.rb +0 -18
- data/lib/generators/reso/templates/create_listing_providers.rb +0 -13
- data/lib/generators/reso/templates/create_listings.rb +0 -111
- data/lib/generators/reso/templates/create_multiple_listing_services.rb +0 -11
- data/lib/generators/reso/templates/create_offices.rb +0 -29
- data/lib/generators/reso/templates/create_open_houses.rb +0 -18
- data/lib/generators/reso/templates/create_participant_licenses.rb +0 -13
- data/lib/generators/reso/templates/create_participants.rb +0 -26
- data/lib/generators/reso/templates/create_people.rb +0 -18
- data/lib/generators/reso/templates/create_places.rb +0 -20
- data/lib/generators/reso/templates/create_prices.rb +0 -19
- data/lib/generators/reso/templates/create_queued_listings.rb +0 -10
- data/lib/generators/reso/templates/create_rooms.rb +0 -10
- data/lib/generators/reso/templates/create_schools.rb +0 -13
- data/lib/generators/reso/templates/create_taxes.rb +0 -12
- data/lib/generators/reso/templates/enumerations.csv +0 -748
- data/lib/generators/reso/templates/reso.rake +0 -142
- data/lib/mapper/reso.rb +0 -617
- data/lib/mapper.rb +0 -274
- data/lib/reso/engine.rb +0 -13
- data/lib/reso/railties/reso.rake +0 -38
@@ -1,142 +0,0 @@
|
|
1
|
-
namespace :reso do
|
2
|
-
|
3
|
-
require 'nokogiri'
|
4
|
-
require 'open-uri'
|
5
|
-
require 'open_uri_redirections'
|
6
|
-
|
7
|
-
def download_feed_to_import import
|
8
|
-
filename = import.source_url.split('/').last
|
9
|
-
filepath = Rails.root.join('tmp', filename).to_s
|
10
|
-
File.delete(filepath) if File.file? filepath
|
11
|
-
open(filepath, 'wb') do |file|
|
12
|
-
file << open(import.source_url,
|
13
|
-
http_basic_authentication: [import.source_user, import.source_pass],
|
14
|
-
allow_redirections: :all
|
15
|
-
).read
|
16
|
-
end
|
17
|
-
filepath
|
18
|
-
end
|
19
|
-
|
20
|
-
def get_open_and_closing_tag_for repeating_element
|
21
|
-
ApplicationController.helpers.content_tag(repeating_element, "\n").split
|
22
|
-
end
|
23
|
-
|
24
|
-
def get_xml_header filepath, repeating_element
|
25
|
-
stream = ''
|
26
|
-
open_tag = get_open_and_closing_tag_for(repeating_element).first
|
27
|
-
File.foreach(filepath) do |line|
|
28
|
-
stream += line
|
29
|
-
pos = stream.index(open_tag)
|
30
|
-
return stream[0..pos-1] if pos
|
31
|
-
end
|
32
|
-
nil # Just in cases
|
33
|
-
end
|
34
|
-
|
35
|
-
def create_queued_listing_and_return_listing_key doc, import
|
36
|
-
begin
|
37
|
-
doc.css(import.repeating_element).each do |o|
|
38
|
-
listing_data = {}
|
39
|
-
Hash.from_xml(o.to_xml)[import.repeating_element].each_pair{|key, value| listing_data[key] = value }
|
40
|
-
queued_listing = QueuedListing.new(import: import, listing_data: listing_data)
|
41
|
-
queued_listing.save
|
42
|
-
return Mapper::unique_identifier(queued_listing)
|
43
|
-
end
|
44
|
-
rescue Exception => e
|
45
|
-
puts e.inspect
|
46
|
-
exit if Rails.env.development?
|
47
|
-
return nil
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
def uncompress_and_return_new_filepath filepath
|
52
|
-
output_path = [filepath, '.xml'].join
|
53
|
-
File.delete(output_path) if File.file? output_path
|
54
|
-
Zlib::GzipReader.open(filepath) do |gz|
|
55
|
-
File.open(output_path, "w") do |g|
|
56
|
-
IO.copy_stream(gz, g)
|
57
|
-
end
|
58
|
-
end
|
59
|
-
File.delete(filepath)
|
60
|
-
output_path
|
61
|
-
end
|
62
|
-
|
63
|
-
desc "Populate database with seed data."
|
64
|
-
task :seed => [:load_enumerations, :seed_imports]
|
65
|
-
|
66
|
-
task :load_enumerations => [:environment] do
|
67
|
-
require "csv"
|
68
|
-
csv_text = File.read("#{Rails.root}/db/enumerations.csv")
|
69
|
-
csv = CSV.parse(csv_text, :headers => true)
|
70
|
-
csv.each do |row|
|
71
|
-
row = row.to_hash.with_indifferent_access
|
72
|
-
Enumeration.find_or_create_by(row.to_hash.symbolize_keys)
|
73
|
-
puts row.inspect
|
74
|
-
end
|
75
|
-
puts
|
76
|
-
end
|
77
|
-
|
78
|
-
task :seed_imports => [:environment] do
|
79
|
-
imports = [{ name: "RESO Example",
|
80
|
-
token: "reso",
|
81
|
-
import_format_id: ImportFormat.find_by(name: 'reso').id,
|
82
|
-
source_url: "https://app.listhub.com/syndication-docs/example.xml"
|
83
|
-
}]
|
84
|
-
|
85
|
-
imports.each do |import|
|
86
|
-
@import = Import.new
|
87
|
-
import.each_pair{|key, value| @import[key] = value }
|
88
|
-
@import.save
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
desc "Download and import data file for specified import."
|
93
|
-
task :import, [:import_token] => [:environment] do |t, args|
|
94
|
-
|
95
|
-
args.with_defaults(:import_token => "reso")
|
96
|
-
import = Import.where(status: 'active', token: args.import_token).first
|
97
|
-
|
98
|
-
unless import.blank?
|
99
|
-
unless import.new_source_data_exists?
|
100
|
-
import.update_attribute(:status, :running)
|
101
|
-
source_data_modified = import.source_url_last_modified
|
102
|
-
l, count, found_listing_keys, stream = 0, 0, [], ''
|
103
|
-
open_tag, close_tag = get_open_and_closing_tag_for import.repeating_element
|
104
|
-
|
105
|
-
# Grab a file to work with
|
106
|
-
filepath = download_feed_to_import import
|
107
|
-
filepath = uncompress_and_return_new_filepath(filepath) if filepath.split('.').last.downcase == 'gz'
|
108
|
-
|
109
|
-
# Grab the XML header to avoid namespace errors later
|
110
|
-
xml_header = get_xml_header filepath, import.repeating_element
|
111
|
-
|
112
|
-
start_time = Time.now
|
113
|
-
import_result = ImportResult.create(import: import, start_time: start_time)
|
114
|
-
File.foreach(filepath) do |line|
|
115
|
-
stream += line
|
116
|
-
while (from_here = stream.index(open_tag)) && (to_there = stream.index(close_tag))
|
117
|
-
xml = stream[from_here..to_there + (close_tag.length-1)]
|
118
|
-
doc = Nokogiri::XML([xml_header, xml].join).remove_namespaces!
|
119
|
-
found_listing_keys << create_queued_listing_and_return_listing_key(doc, import)
|
120
|
-
stream.gsub!(xml, '')
|
121
|
-
if ((l += 1) % 1000).zero?
|
122
|
-
puts "#{l}\t#{l/(Time.now - start)}" if Rails.env.development?
|
123
|
-
end
|
124
|
-
GC.start if (l % 100).zero?
|
125
|
-
end
|
126
|
-
end
|
127
|
-
end_time = Time.now
|
128
|
-
removed_listing_keys = import.remove_listings_not_present(found_listing_keys)
|
129
|
-
import_result.assign_attributes({
|
130
|
-
end_time: end_time,
|
131
|
-
found_listing_keys: found_listing_keys,
|
132
|
-
removed_listing_keys: removed_listing_keys.inspect
|
133
|
-
})
|
134
|
-
import_result.save
|
135
|
-
import.update_attribute(:status, :active)
|
136
|
-
import.update_attribute(:source_data_modified, source_data_modified)
|
137
|
-
File.delete(filepath)
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
end
|