## Parsing Resources The three scripts `ParserDewey.rb`, `ParserConcertes.rb` and `ParserPotagers.rb` parse .csv and .json files containing map data from Maps Dewey, ConcertES and the Ceinture Alimentaire de Bruxelles and transforms it inot a .geojson file. To run it: `ruby ParserDewey.rb` `ruby ParserConcertes.rb` `ruby ParserPotagers.rb` Each parser creates a corresponding file: `LocationsDewey.rb` `LocationsConcertes.rb` `LocationsPotagers.rb` The main files it uses are: Concertes/20200312_EntreprisesSignaletique.csv which contains the name of the points from the Concertes data Concertes/20200312_EntreprisesCoordonnees.csv which contains the coordinates of the points from the Concertes data and Dewey/dewey-maps-markers.json which contains the data of the points from the Dewey data and potagers_merged_spjoined_ar2_1.csv.diff ## Importing to Database Once you have `Locations.geojson`, connect to the Rails console: ```ruby # Load the GeoJSON into an Array locs = JSON.parse(IO.read('doc/import/Locations.geojson')) # Get related Agent records. You must have run `rails db:seed` beforehand. dewey = Agent.find_by(name: 'Dewey') concertes = Agent.find_by(name: 'ConcertES') # Create Resource records locs['features'].each do |f| agent = f['properties']['source'] == dewey['name'] ? dewey : concertes Resource.create(agent_id: agent.id, feature: f) end ``` ### Importing categories We have a JSON file in French for categories in `doc/import/categories-fr.json`. From the console: ```ruby if Category.count == 0 dewey_taxo = Taxonomy.first cats = JSON.parse(IO.read('doc/import/categories-fr.json')) cats.each do |cat| c = Category.create(name: cat['name'], dewey_id: cat['id'], taxonomy_id: dewey_taxo.id, color: cat['color']) cat['sections'].each do |sec| Section.create(name: sec['name'], category_id: c.id, dewey_id: sec['id'], color: sec['color']) end end # Now that we have all we need, update resources_sections... Resource.all.each do |res| sec_ids = res.feature['properties']['categories'] next if sec_ids.empty? sec_ids.each do |id| s = Section.find_by(dewey_id: id) res.sections << s if s.present? res.save end end end ``` It's taken into account in `rails db:seed`