reso 0.1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +3 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +149 -0
  6. data/Rakefile +1 -0
  7. data/app/controllers/syndication_controller.rb +5 -0
  8. data/app/models/.keep +0 -0
  9. data/app/models/address.rb +25 -0
  10. data/app/models/address_type.rb +3 -0
  11. data/app/models/alternate_price.rb +2 -0
  12. data/app/models/appliance.rb +3 -0
  13. data/app/models/architecture_style.rb +5 -0
  14. data/app/models/area_unit.rb +2 -0
  15. data/app/models/brokerage.rb +4 -0
  16. data/app/models/builder.rb +4 -0
  17. data/app/models/business.rb +8 -0
  18. data/app/models/community.rb +5 -0
  19. data/app/models/cooling_system.rb +3 -0
  20. data/app/models/county.rb +5 -0
  21. data/app/models/currency_period.rb +3 -0
  22. data/app/models/enumeration.rb +7 -0
  23. data/app/models/expense.rb +6 -0
  24. data/app/models/expense_category.rb +2 -0
  25. data/app/models/exterior_type.rb +3 -0
  26. data/app/models/floor_covering.rb +3 -0
  27. data/app/models/foreclosure_status.rb +5 -0
  28. data/app/models/franchise.rb +4 -0
  29. data/app/models/gender.rb +3 -0
  30. data/app/models/heating_fuel.rb +3 -0
  31. data/app/models/heating_system.rb +3 -0
  32. data/app/models/home_feature.rb +3 -0
  33. data/app/models/import.rb +16 -0
  34. data/app/models/import_format.rb +3 -0
  35. data/app/models/license_category.rb +2 -0
  36. data/app/models/listing.rb +64 -0
  37. data/app/models/listing_category.rb +5 -0
  38. data/app/models/listing_media.rb +6 -0
  39. data/app/models/listing_provider.rb +9 -0
  40. data/app/models/listing_status.rb +5 -0
  41. data/app/models/multiple_listing_service.rb +5 -0
  42. data/app/models/neighborhood.rb +3 -0
  43. data/app/models/office.rb +6 -0
  44. data/app/models/open_house.rb +4 -0
  45. data/app/models/parking.rb +3 -0
  46. data/app/models/participant.rb +5 -0
  47. data/app/models/participant_license.rb +8 -0
  48. data/app/models/participant_role.rb +3 -0
  49. data/app/models/person.rb +18 -0
  50. data/app/models/photo.rb +3 -0
  51. data/app/models/place.rb +3 -0
  52. data/app/models/price.rb +4 -0
  53. data/app/models/property_sub_type.rb +5 -0
  54. data/app/models/property_type.rb +5 -0
  55. data/app/models/queued_listing.rb +26 -0
  56. data/app/models/roof_type.rb +3 -0
  57. data/app/models/room.rb +4 -0
  58. data/app/models/room_category.rb +2 -0
  59. data/app/models/school.rb +3 -0
  60. data/app/models/school_category.rb +2 -0
  61. data/app/models/source_provider_category.rb +2 -0
  62. data/app/models/tax.rb +3 -0
  63. data/app/models/video.rb +3 -0
  64. data/app/models/view_type.rb +3 -0
  65. data/app/models/virtual_tour.rb +3 -0
  66. data/app/views/syndication/rets.xml.erb +325 -0
  67. data/lib/class_extensions.rb +53 -0
  68. data/lib/generators/reso/install_generator.rb +43 -0
  69. data/lib/generators/reso/setup.rb +36 -0
  70. data/lib/generators/reso/templates/create_addresses.rb +33 -0
  71. data/lib/generators/reso/templates/create_businesses.rb +19 -0
  72. data/lib/generators/reso/templates/create_enumerations.rb +11 -0
  73. data/lib/generators/reso/templates/create_expenses.rb +13 -0
  74. data/lib/generators/reso/templates/create_imports.rb +17 -0
  75. data/lib/generators/reso/templates/create_join_tables.rb +27 -0
  76. data/lib/generators/reso/templates/create_listing_media.rb +19 -0
  77. data/lib/generators/reso/templates/create_listing_providers.rb +12 -0
  78. data/lib/generators/reso/templates/create_listings.rb +154 -0
  79. data/lib/generators/reso/templates/create_multiple_listing_services.rb +11 -0
  80. data/lib/generators/reso/templates/create_offices.rb +29 -0
  81. data/lib/generators/reso/templates/create_open_houses.rb +18 -0
  82. data/lib/generators/reso/templates/create_participant_licenses.rb +13 -0
  83. data/lib/generators/reso/templates/create_participants.rb +26 -0
  84. data/lib/generators/reso/templates/create_people.rb +18 -0
  85. data/lib/generators/reso/templates/create_places.rb +20 -0
  86. data/lib/generators/reso/templates/create_prices.rb +19 -0
  87. data/lib/generators/reso/templates/create_queued_listings.rb +10 -0
  88. data/lib/generators/reso/templates/create_rooms.rb +10 -0
  89. data/lib/generators/reso/templates/create_schools.rb +13 -0
  90. data/lib/generators/reso/templates/create_taxes.rb +12 -0
  91. data/lib/generators/reso/templates/enumerations.csv +748 -0
  92. data/lib/mapper/reso.rb +658 -0
  93. data/lib/mapper.rb +114 -0
  94. data/lib/reso/engine.rb +13 -0
  95. data/lib/reso/railties/reso.rake +128 -0
  96. data/lib/reso/version.rb +3 -0
  97. data/lib/reso.rb +10 -0
  98. data/reso.gemspec +31 -0
  99. metadata +261 -0
data/lib/mapper.rb ADDED
@@ -0,0 +1,114 @@
1
+ module Mapper
2
+ RESO_LISTING_ATTRIBUTES = %w(
3
+ address
4
+ alternate_prices
5
+ appliances
6
+ architecture_style
7
+ architecture_style_description
8
+ bathrooms
9
+ bedrooms
10
+ brokerage
11
+ builder
12
+ building_unit_count
13
+ condo_floor_num
14
+ cooling_systems
15
+ county
16
+ currency_code
17
+ directions
18
+ disclaimer
19
+ disclose_address
20
+ elevation
21
+ expenses
22
+ exterior_types
23
+ floor_coverings
24
+ foreclosure_status
25
+ franchise
26
+ full_bathrooms
27
+ geocode_options
28
+ half_bathrooms
29
+ has_attic
30
+ has_barbecue_area
31
+ has_basement
32
+ has_ceiling_fan
33
+ has_deck
34
+ has_disabled_access
35
+ has_dock
36
+ has_doorman
37
+ has_double_pane_windows
38
+ has_elevator
39
+ has_fireplace
40
+ has_garden
41
+ has_gated_entry
42
+ has_greenhouse
43
+ has_hot_tub_spa
44
+ has_intercom
45
+ has_jetted_bath_tub
46
+ has_lawn
47
+ has_mother_in_law
48
+ has_patio
49
+ has_pond
50
+ has_pool
51
+ has_porch
52
+ has_rv_parking
53
+ has_sauna
54
+ has_security_system
55
+ has_skylight
56
+ has_sports_court
57
+ has_sprinkler_system
58
+ has_vaulted_ceiling
59
+ has_wet_bar
60
+ heating_fuels
61
+ heating_systems
62
+ import
63
+ is_cable_ready
64
+ is_new_construction
65
+ is_waterfront
66
+ is_wired
67
+ latitude
68
+ lead_routing_email
69
+ legal_description
70
+ list_price
71
+ list_price_low
72
+ listing_category
73
+ listing_date
74
+ listing_description
75
+ listing_provider
76
+ listing_status
77
+ listing_title
78
+ listing_url
79
+ living_area
80
+ living_area_unit
81
+ longitude
82
+ lot_size
83
+ mls_number
84
+ multiple_listing_service
85
+ modification_timestamp
86
+ neighborhoods
87
+ num_floors
88
+ num_parking_spaces
89
+ office
90
+ one_quarter_bathrooms
91
+ open_houses
92
+ parcel_info
93
+ participants
94
+ permit_address_on_internet
95
+ photos
96
+ property_sub_type
97
+ property_sub_type_description
98
+ property_type
99
+ property_type_description
100
+ roof_types
101
+ room_count
102
+ rooms
103
+ taxes
104
+ three_quarter_bathrooms
105
+ videos
106
+ view_types
107
+ virtual_tours
108
+ vow_address_display
109
+ vow_automated_valuation_display
110
+ vow_consumer_comment
111
+ year_built
112
+ year_updated
113
+ )
114
+ end
@@ -0,0 +1,13 @@
1
+ require "reso"
2
+ require "rails"
3
+
4
+ module Reso
5
+ class Engine < ::Rails::Engine
6
+ engine_name :reso
7
+
8
+ rake_tasks do
9
+ load "reso/railties/reso.rake"
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,128 @@
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 process_item xml, xml_header, import
36
+ begin
37
+ doc = Nokogiri::XML([xml_header, xml].join).remove_namespaces!
38
+ doc.css(import.repeating_element).each do |o|
39
+ listing_data = Hash.new
40
+ listing = Hash.from_xml(o.to_xml)
41
+ object = import.queued_listings.new
42
+ listing[import.repeating_element].each_pair{|key, value| listing_data[key] = value }
43
+ object.listing_data = listing_data
44
+ object.save
45
+ end
46
+ rescue Exception => e
47
+ puts e.inspect
48
+ exit if Rails.env.development?
49
+ end
50
+ end
51
+
52
+ def uncompress_and_return_new_filepath filepath
53
+ output_path = [filepath, '.xml'].join
54
+ File.delete(output_path) if File.file? output_path
55
+ Zlib::GzipReader.open(filepath) do |gz|
56
+ File.open(output_path, "w") do |g|
57
+ IO.copy_stream(gz, g)
58
+ end
59
+ end
60
+ File.delete(filepath)
61
+ output_path
62
+ end
63
+
64
+ desc "Populate database with seed data."
65
+ task :seed => [:load_enumerations, :seed_imports]
66
+
67
+ task :load_enumerations => [:environment] do
68
+ require "csv"
69
+ csv_text = File.read("#{Rails.root}/db/enumerations.csv")
70
+ csv = CSV.parse(csv_text, :headers => true)
71
+ csv.each do |row|
72
+ row = row.to_hash.with_indifferent_access
73
+ Enumeration.create!(row.to_hash.symbolize_keys)
74
+ puts row.inspect
75
+ end
76
+ puts
77
+ end
78
+
79
+ task :seed_imports => [:environment] do
80
+ imports = [{ name: "RESO Example",
81
+ token: "reso",
82
+ import_format_id: ImportFormat.find_by(name: 'reso').id,
83
+ source_url: "https://app.listhub.com/syndication-docs/example.xml"
84
+ }]
85
+
86
+ imports.each do |import|
87
+ @import = Import.new
88
+ import.each_pair{|key, value| @import[key] = value }
89
+ @import.save
90
+ end
91
+ end
92
+
93
+ desc "Download and import data file for specified import."
94
+ task :import, [:import_token] => [:environment] do |t, args|
95
+
96
+ args.with_defaults(:import_token => "reso")
97
+ import = Import.find_by(token: args.import_token)
98
+
99
+ unless import.blank?
100
+ l, count, stream = 0, 0, ''
101
+ open_tag, close_tag = get_open_and_closing_tag_for import.repeating_element
102
+
103
+ # Grab a file to work with
104
+ filepath = download_feed_to_import import
105
+ filepath = uncompress_and_return_new_filepath(filepath) if filepath.split('.').last.downcase == 'gz'
106
+
107
+ # Grab the XML header to avoid namespace errors later
108
+ xml_header = get_xml_header filepath, import.repeating_element
109
+
110
+ start = Time.now
111
+ puts "Starting..." if Rails.env.development?
112
+ File.foreach(filepath) do |line|
113
+ stream += line
114
+ while (from_here = stream.index(open_tag)) && (to_there = stream.index(close_tag))
115
+ xml = stream[from_here..to_there + (close_tag.length-1)]
116
+ process_item xml, xml_header, import
117
+ stream.gsub!(xml, '')
118
+ if (l += 1) % 1000 == 0
119
+ puts "#{l} - #{l/(Time.now - start)} listings/s" if Rails.env.development?
120
+ end
121
+ end
122
+ end
123
+ puts "#{l} - #{l/(Time.now - start)} listings/s" if Rails.env.development?
124
+ File.delete(filepath)
125
+ end
126
+ end
127
+
128
+ end
@@ -0,0 +1,3 @@
1
+ module Reso
2
+ VERSION = "0.1.0.0"
3
+ end
data/lib/reso.rb ADDED
@@ -0,0 +1,10 @@
1
+ require 'reso/version'
2
+ require 'reso/engine' if defined?(Rails)
3
+ require 'chronic'
4
+ require 'class_extensions'
5
+ require 'mapper'
6
+ require 'mapper/reso'
7
+ require 'street_address'
8
+
9
+ module Reso
10
+ end
data/reso.gemspec ADDED
@@ -0,0 +1,31 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'reso/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "reso"
8
+ spec.version = Reso::VERSION
9
+ spec.authors = ["Michael Edlund"]
10
+ spec.email = ["medlund@mac.com"]
11
+ spec.description = %q{RESO Data Dictionary data models and import.}
12
+ spec.summary = %q{The RESO Data Dictionary gem provides models and data import based on the Real Estate Standards Organization Syndication Format for exchange of real estate listing data.}
13
+ spec.homepage = "http://github.com/arcticleo/reso"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.required_ruby_version = '>= 1.9.3'
22
+
23
+ spec.add_development_dependency "rake", '~> 10'
24
+ spec.add_development_dependency "bundler", "~> 1.3"
25
+ spec.add_development_dependency "rspec", "~> 2.6"
26
+ spec.add_dependency "rails", '~> 4.0', '>= 4.0.0'
27
+ spec.add_dependency "nokogiri", '~> 1'
28
+ spec.add_dependency 'chronic', '~> 0'
29
+ spec.add_dependency 'StreetAddress', '~> 1'
30
+ spec.add_dependency 'open_uri_redirections', '~> 0'
31
+ end
metadata ADDED
@@ -0,0 +1,261 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: reso
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Michael Edlund
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-08-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '10'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '10'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.6'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.6'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '4.0'
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: 4.0.0
65
+ type: :runtime
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - "~>"
70
+ - !ruby/object:Gem::Version
71
+ version: '4.0'
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 4.0.0
75
+ - !ruby/object:Gem::Dependency
76
+ name: nokogiri
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '1'
82
+ type: :runtime
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '1'
89
+ - !ruby/object:Gem::Dependency
90
+ name: chronic
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ type: :runtime
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: StreetAddress
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '1'
110
+ type: :runtime
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '1'
117
+ - !ruby/object:Gem::Dependency
118
+ name: open_uri_redirections
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ type: :runtime
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ description: RESO Data Dictionary data models and import.
132
+ email:
133
+ - medlund@mac.com
134
+ executables: []
135
+ extensions: []
136
+ extra_rdoc_files: []
137
+ files:
138
+ - ".gitignore"
139
+ - Gemfile
140
+ - LICENSE.txt
141
+ - README.md
142
+ - Rakefile
143
+ - app/controllers/syndication_controller.rb
144
+ - app/models/.keep
145
+ - app/models/address.rb
146
+ - app/models/address_type.rb
147
+ - app/models/alternate_price.rb
148
+ - app/models/appliance.rb
149
+ - app/models/architecture_style.rb
150
+ - app/models/area_unit.rb
151
+ - app/models/brokerage.rb
152
+ - app/models/builder.rb
153
+ - app/models/business.rb
154
+ - app/models/community.rb
155
+ - app/models/cooling_system.rb
156
+ - app/models/county.rb
157
+ - app/models/currency_period.rb
158
+ - app/models/enumeration.rb
159
+ - app/models/expense.rb
160
+ - app/models/expense_category.rb
161
+ - app/models/exterior_type.rb
162
+ - app/models/floor_covering.rb
163
+ - app/models/foreclosure_status.rb
164
+ - app/models/franchise.rb
165
+ - app/models/gender.rb
166
+ - app/models/heating_fuel.rb
167
+ - app/models/heating_system.rb
168
+ - app/models/home_feature.rb
169
+ - app/models/import.rb
170
+ - app/models/import_format.rb
171
+ - app/models/license_category.rb
172
+ - app/models/listing.rb
173
+ - app/models/listing_category.rb
174
+ - app/models/listing_media.rb
175
+ - app/models/listing_provider.rb
176
+ - app/models/listing_status.rb
177
+ - app/models/multiple_listing_service.rb
178
+ - app/models/neighborhood.rb
179
+ - app/models/office.rb
180
+ - app/models/open_house.rb
181
+ - app/models/parking.rb
182
+ - app/models/participant.rb
183
+ - app/models/participant_license.rb
184
+ - app/models/participant_role.rb
185
+ - app/models/person.rb
186
+ - app/models/photo.rb
187
+ - app/models/place.rb
188
+ - app/models/price.rb
189
+ - app/models/property_sub_type.rb
190
+ - app/models/property_type.rb
191
+ - app/models/queued_listing.rb
192
+ - app/models/roof_type.rb
193
+ - app/models/room.rb
194
+ - app/models/room_category.rb
195
+ - app/models/school.rb
196
+ - app/models/school_category.rb
197
+ - app/models/source_provider_category.rb
198
+ - app/models/tax.rb
199
+ - app/models/video.rb
200
+ - app/models/view_type.rb
201
+ - app/models/virtual_tour.rb
202
+ - app/views/syndication/rets.xml.erb
203
+ - lib/class_extensions.rb
204
+ - lib/generators/reso/install_generator.rb
205
+ - lib/generators/reso/setup.rb
206
+ - lib/generators/reso/templates/create_addresses.rb
207
+ - lib/generators/reso/templates/create_businesses.rb
208
+ - lib/generators/reso/templates/create_enumerations.rb
209
+ - lib/generators/reso/templates/create_expenses.rb
210
+ - lib/generators/reso/templates/create_imports.rb
211
+ - lib/generators/reso/templates/create_join_tables.rb
212
+ - lib/generators/reso/templates/create_listing_media.rb
213
+ - lib/generators/reso/templates/create_listing_providers.rb
214
+ - lib/generators/reso/templates/create_listings.rb
215
+ - lib/generators/reso/templates/create_multiple_listing_services.rb
216
+ - lib/generators/reso/templates/create_offices.rb
217
+ - lib/generators/reso/templates/create_open_houses.rb
218
+ - lib/generators/reso/templates/create_participant_licenses.rb
219
+ - lib/generators/reso/templates/create_participants.rb
220
+ - lib/generators/reso/templates/create_people.rb
221
+ - lib/generators/reso/templates/create_places.rb
222
+ - lib/generators/reso/templates/create_prices.rb
223
+ - lib/generators/reso/templates/create_queued_listings.rb
224
+ - lib/generators/reso/templates/create_rooms.rb
225
+ - lib/generators/reso/templates/create_schools.rb
226
+ - lib/generators/reso/templates/create_taxes.rb
227
+ - lib/generators/reso/templates/enumerations.csv
228
+ - lib/mapper.rb
229
+ - lib/mapper/reso.rb
230
+ - lib/reso.rb
231
+ - lib/reso/engine.rb
232
+ - lib/reso/railties/reso.rake
233
+ - lib/reso/version.rb
234
+ - reso.gemspec
235
+ homepage: http://github.com/arcticleo/reso
236
+ licenses:
237
+ - MIT
238
+ metadata: {}
239
+ post_install_message:
240
+ rdoc_options: []
241
+ require_paths:
242
+ - lib
243
+ required_ruby_version: !ruby/object:Gem::Requirement
244
+ requirements:
245
+ - - ">="
246
+ - !ruby/object:Gem::Version
247
+ version: 1.9.3
248
+ required_rubygems_version: !ruby/object:Gem::Requirement
249
+ requirements:
250
+ - - ">="
251
+ - !ruby/object:Gem::Version
252
+ version: '0'
253
+ requirements: []
254
+ rubyforge_project:
255
+ rubygems_version: 2.4.6
256
+ signing_key:
257
+ specification_version: 4
258
+ summary: The RESO Data Dictionary gem provides models and data import based on the
259
+ Real Estate Standards Organization Syndication Format for exchange of real estate
260
+ listing data.
261
+ test_files: []