Skip to content

Instantly share code, notes, and snippets.

@techieshark
Created September 9, 2014 07:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save techieshark/1a93c255a9ea1bc17466 to your computer and use it in GitHub Desktop.
Save techieshark/1a93c255a9ea1bc17466 to your computer and use it in GitHub Desktop.
legistar stuff
module Legistar
module_function
# Takes objects with camel case property names and converts
# to ruby format.
# camelcase_object: just SomeObject object which needs to have
# SomeObjectPropertyNames changed to property_names
# prefix_to_strip: any CamelCase part like 'SomeObject' which should be
# removed before converting the rest of the name to snake_case
# Example:
# camel = { 'CamelFirstName' => 'Ed', 'CamelLastName' => 'Jones' }
# rubify_name(camel, 'Camel')
# => {"first_name"=>"Ed", "last_name"=>"Jones"}
#
def rubify_name(camelcase_object, prefix_to_strip)
attrs = camelcase_object.reduce({}){ |result, (k,v)|
result[k.sub(prefix_to_strip, '').underscore] = v
# result[k.underscore.sub(prefix_to_strip, '')] = v
result
}
end
# hack. This should go in a config file. TODO.
def city
'Mesa'
end
end
require 'rgeo/shapefile'
require 'shellwords'
require 'Legistar'
require 'net/http'
require 'json'
require 'logger'
require 'faraday'
require 'faraday_middleware'
require 'logger'
require 'prettyprint'
namespace :legistar_events do
desc "Load Legistar events into database from JSON file"
task :load => :environment do
Log = Logger.new(STDOUT)
FileLog = Logger.new('fetch-events.log')
url = nil
connection = Faraday.new(url: 'http://webapi.legistar.com') do |conn|
conn.headers['Accept'] = 'text/json'
conn.request :instrumentation
conn.response :json
conn.adapter Faraday.default_adapter
url = conn.url_prefix.to_s
end
begin
# HACK. For testing, we're limiting the date range of events returned.
filter = "?$filter=EventDate+ge+datetime'2014-09-01'+and+EventDate+lt+datetime'2014-10-01'"
url_path = "/v1/#{Legistar.city}/Events#{filter}"
response = connection.get(url_path)
url = url + url_path
status = response.status
raise unless status == 200
events = response.body
events.each do |item|
attrs = Legistar.rubify_name(item, 'Event')
attrs['source_id'] = attrs.delete('id')
PP.pp(attrs)
Log.info("Attempting creation of Event with attrs: #{attrs}")
Event.create(attrs)
end
sleep 1
rescue => e
msg = "Failed fetching #{url}, status: #{status}"
Log.error(msg)
FileLog.error(msg)
Log.error(e)
FileLog.error(e)
end
end
desc "Load Legistar events into database from SQL file"
task :load_sql do
source = "#{Rails.root}/lib/assets/Mesa/legistar_import.sql"
sh "psql zone_development < #{Shellwords.escape(source)}" # hack -- need to get db, user, pw from env
end
desc "Empty legistar events table"
task :drop => :environment do |t, args|
Event.destroy_all
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment