class RoutingNumber
Constants
- DefaultOptions
- FORMAT
- Stores
Public Class Methods
fetch_fresh_data!( fetch=true )
click to toggle source
# File lib/bank_routing/routing_numbers.rb, line 88 def fetch_fresh_data!( fetch=true ) options[ :fetch_fed_data ] = fetch load_routing_numbers( get_raw_data ) end
get(num)
click to toggle source
# File lib/bank_routing/routing_numbers.rb, line 61 def get(num) init!(options) if cnt = store.get(num.to_s) cnt else nil end end
init!(opts = {})
click to toggle source
# File lib/bank_routing/routing_numbers.rb, line 43 def init!(opts = {}) return if @initted @options = options.merge(opts) if options[:store_in] store_in options[:store_in], options[:store_opts] end unless store.loaded? log.info "Loading routing numbers..." load_routing_numbers log.info "Done loading routing numbers." end @initted = true end
options=(opts)
click to toggle source
# File lib/bank_routing/routing_numbers.rb, line 57 def options=(opts) @options = options.merge(opts) end
reconnect!()
click to toggle source
# File lib/bank_routing/routing_numbers.rb, line 83 def reconnect! log.info "Reconnecting!" store.reconnect! end
store_in(name, opts={})
click to toggle source
# File lib/bank_routing/routing_numbers.rb, line 72 def store_in(name, opts={}) raise InvalidStore unless s_cls = Stores[name.to_sym] return if @store.is_a?(s_cls) @store.shutdown! if @store @store = s_cls.new(opts.merge(logger: log)) @initted = false options[:store_in] = name.to_sym options[:store_opts] = opts init! end
Private Class Methods
converted(name,val)
click to toggle source
# File lib/bank_routing/routing_numbers.rb, line 170 def converted(name,val) if pretty_maps[name.to_s] and (v = pretty_maps[name.to_s][val]) v else val end end
default_store()
click to toggle source
# File lib/bank_routing/routing_numbers.rb, line 99 def default_store Stores[:default].new(logger: log) end
done_loading!()
click to toggle source
# File lib/bank_routing/routing_numbers.rb, line 151 def done_loading! tm = Time.now - @st_time print "\r #{@cur} loaded (#{tm.round(2)} seconds ~ #{tm > 0 ? (@cur / tm).round(0) : "?"}/sec) \n" @cur = @st_time = @pretty_maps = @metadata = nil end
get_raw_data()
click to toggle source
# File lib/bank_routing/routing_numbers.rb, line 107 def get_raw_data unless options[:fetch_fed_data] log.info "Using routing data from local file at: #{options[:routing_data_file]}" File.new(options[:routing_data_file]) else log.info "Getting new bank routing data from: #{options[:routing_data_url]}" require 'typhoeus' Typhoeus::Request.get(options[:routing_data_url], :ssl_verifypeer => false).body end end
load_routing_numbers(data=get_raw_data)
click to toggle source
# File lib/bank_routing/routing_numbers.rb, line 118 def load_routing_numbers(data=get_raw_data) if store.loading! loading! data.each_line do |line| process_line line end store.done_loading! done_loading! end end
loading!()
click to toggle source
# File lib/bank_routing/routing_numbers.rb, line 144 def loading! @cur = 0 @st_time = Time.now @pretty_maps = Yajl::Parser.parse(IO.read(options[:mapping_file])) @metadata = Yajl::Parser.parse(IO.read(options[:metadata_file])) end
log()
click to toggle source
# File lib/bank_routing/routing_numbers.rb, line 184 def log @logger ||= Logger.new(STDOUT) end
options()
click to toggle source
# File lib/bank_routing/routing_numbers.rb, line 103 def options @options ||= DefaultOptions.dup end
pretty_maps()
click to toggle source
# File lib/bank_routing/routing_numbers.rb, line 140 def pretty_maps @pretty_maps end
process_line(line)
click to toggle source
# File lib/bank_routing/routing_numbers.rb, line 129 def process_line(line) obj = unpack_line(line) rt = obj.delete(:route) store.save rt, obj.merge(:routingnumber_id => rt.to_s).merge(@metadata[rt.to_s] || {}) @cur += 1 if @cur % 10 == 0 tm = Time.now - @st_time print "\r #{@cur} loaded (#{tm.round(2)} seconds ~ #{tm > 0 ? (@cur / tm).round(0) : "?"}/sec) " end end
store()
click to toggle source
# File lib/bank_routing/routing_numbers.rb, line 95 def store @store ||= default_store end
unpack_line(line)
click to toggle source
# File lib/bank_routing/routing_numbers.rb, line 157 def unpack_line(line) vals = line.unpack(unpack_template) obj = {} FORMAT.each_with_index do |(name,length),i| val = vals[i] obj[name] = converted(name,val) end obj[:zip] = "#{obj.delete(:zip)}#{(ext = obj.delete(:zip_ext)) and ext.size > 0 ? "-#{ext}" : ""}" obj[:phone] = "#{obj.delete(:phone_area)}-#{obj.delete(:phone_prefix)}-#{obj.delete(:phone_suffix)}" obj.delete(:garbage) obj end
unpack_template()
click to toggle source
# File lib/bank_routing/routing_numbers.rb, line 178 def unpack_template @unpack_format ||= FORMAT.map do |(name,length)| "A#{length}" end.join end