module TrackingNumber::Loader
Public Class Methods
load_tracking_number_data()
click to toggle source
# File lib/tracking_number/loader.rb, line 5 def load_tracking_number_data tracking_number_types = [] Dir.glob(File.join(File.dirname(__FILE__), "../data/couriers/*.json")).each do |file| courier_info = read_courier_info(file) courier_info[:tracking_numbers].each do |tracking_info| tracking_name = tracking_info[:name] klass = create_class(klass, courier_info, tracking_info) # Do some basic checks on the data file throw 'missing test numbers' unless has_test_numbers?(tracking_info) throw 'missing regex match groups' unless test_numbers_return_required_groups?(tracking_info, Regexp.new(klass::VERIFY_PATTERN)) const = register_class(klass, tracking_name) tracking_number_types.push(const) end end TrackingNumber.const_set("TYPES", tracking_number_types) end
Private Class Methods
create_class(klass, courier_info, tracking_info)
click to toggle source
# File lib/tracking_number/loader.rb, line 44 def create_class(klass, courier_info, tracking_info) klass = Class.new(TrackingNumber::Base) klass.const_set("COURIER_CODE", courier_info[:courier_code]) info = courier_info.dup info.delete(:tracking_numbers) klass.const_set("COURIER_INFO", info) pattern = tracking_info[:regex] pattern = tracking_info[:regex].join if tracking_info[:regex].is_a?(Array) verify_pattern = "^#{pattern}$" search_pattern = "\\b#{pattern}\\b" klass.const_set("SEARCH_PATTERN", Regexp.new(search_pattern)) klass.const_set("VERIFY_PATTERN", Regexp.new(verify_pattern)) klass.const_set("VALIDATION", tracking_info[:validation]) klass.const_set("ADDITIONAL", tracking_info[:additional]) klass.const_set("TRACKING_URL", tracking_info[:tracking_url]) return klass end
has_test_numbers?(tracking)
click to toggle source
# File lib/tracking_number/loader.rb, line 29 def has_test_numbers?(tracking) return tracking[:test_numbers] && tracking[:test_numbers][:valid] end
read_courier_info(file)
click to toggle source
# File lib/tracking_number/loader.rb, line 40 def read_courier_info(file) return JSON.parse(File.read(file)).deep_symbolize_keys! end
register_class(klass, tracking_name)
click to toggle source
# File lib/tracking_number/loader.rb, line 67 def register_class(klass, tracking_name) klass_name = tracking_name.gsub(/[^0-9A-Za-z]/, '') return TrackingNumber.const_set(klass_name, klass) end
test_numbers_return_required_groups?(tracking, regex)
click to toggle source
# File lib/tracking_number/loader.rb, line 33 def test_numbers_return_required_groups?(tracking, regex) test_number = tracking[:test_numbers][:valid][0] matches = test_number.match(regex) return matches["SerialNumber"] end