def load( name )

    if name =~ /^continents/
       load_continent_defs( name )
    elsif name =~ /\/continents/
       load_continent_refs( name )
    elsif name =~ /^lang/
       ## todo: pass along opts too
       ## use match_usage( name ) - why? why not?? ???
       r = create_lang_reader( name )
       r.read()
    elsif name =~ /\/lang/
       ## todo: pass along opts too
       ## use match_usage( name ) - why? why not?? ???
       r = create_usage_reader( name )
       r.read()
    elsif name =~ /\/fifa/     ||
          name =~ /\/fips/     ||
          name =~ /\/internet/ ||
          name =~ /\/ioc/      ||
          name =~ /\/iso/      ||
          name =~ /\/motor/
       load_codes( name )
    elsif name =~ /^tag.*\.\d$/
       ## todo: pass along opts too
       ## use match_tags( name ) - why? why not?? ???
       
       ######## FIX: add back again
       ### fix: use read() only, that is, w/o name
       ## r = create_tag_reader( name )
       ## r.read()
    elsif match_countries_for_continent( name ) do |continent|  # # e.g. africa/countries or america/countries
            ### NB: continent changed to regions (e.g. middle-east, caribbean, north-america, etc.)
            ## auto-add continent (from folder structure) as tag
            ## fix: allow dash/hyphen/minus in tag

            ### todo/fix: add opts - how??
            r = create_country_reader( name, tags: continent.tr('-', '_') )
            r.read()
          end
    elsif match_cities_for_country( name ) do |country_key|  #  name =~ /\/([a-z]{2})\/cities/
            ## auto-add required country code (from folder structure)
            country = Country.find_by_key!( country_key )
            logger.debug "Country #{country.key} >#{country.name} (#{country.code})<"

            r = create_city_reader( name, country_id: country.id )
            r.read()
          end
    elsif match_tree_for_country( name ) do |country_key|
            ## auto-add required country code (from folder structure)
            country = Country.find_by_key!( country_key )
            logger.debug "Country #{country.key} >#{country.name} (#{country.code})<"

            r = create_tree_reader( name, country_id: country.id )
            r.read()
          end
    elsif match_states_abbr_for_country( name ) do |country_key|   # name =~ /\/([a-z]{2})\/states\.abbr/
            load_states_xxx( country_key, 'abbr', name )
          end
    elsif match_states_iso_for_country( name ) do |country_key|  # name =~ /\/([a-z]{2})\/states\.iso/
            load_states_xxx( country_key, 'iso', name )
          end
    elsif match_states_nuts_for_country( name ) do |country_key|  # name =~ /\/([a-z]{2})\/states\.nuts/
            load_states_xxx( country_key, 'nuts', name )
          end
    elsif match_adm3_counties_for_country( name ) do |country_key, state_key, part_name|
            ## auto-add required country code (from folder structure)
            country = Country.find_by_key!( country_key )
            logger.debug "Country #{country.key} >#{country.name} (#{country.code})<"
            state  = State.find_by_key_and_country_id!( state_key, country.id )
            logger.debug "State (ADM1) #{state.key} >#{state.name}<"

            ### todo: move find adm2 to model for (re)use !!!
            part = Part.where( "lower(name) = ? AND state_id = ?",
                                     part_name, state.id ).first   ## check - first needed? returns ary??
            if part.nil?
              logger.error "fix!! - skipping adm3_counties - part (ADM2) '#{part_name}' not found"
              next
            end
            logger.debug "Part (ADM2) #{part.key} >#{part.name}<"

            st = create_county_reader( name, 
                                       state_id: state.id,
                                       part_id: part.id,
                                       level: 3 )   # note: change county level to 3 (default is 2)
            st.read()
          end
    elsif match_adm2_counties_for_country( name ) do |country_key,state_key|
            ## auto-add required country code (from folder structure)
            country = Country.find_by_key!( country_key )
            logger.debug "Country #{country.key} >#{country.name} (#{country.code})<"
            state  = State.find_by_key_and_country_id!( state_key, country.id )
            logger.debug "State (ADM1) #{state.key} >#{state.name}<"

            st = create_county_reader( name,
                                       state_id: state.id,
                                       ## part_id: nil,
                                       level: 2 )
            st.read()
          end
    elsif match_adm2_parts_for_country( name ) do |country_key,state_key|
            ## auto-add required country code (from folder structure)
            country = Country.find_by_key!( country_key )
            logger.debug "Country #{country.key} >#{country.name} (#{country.code})<"
            state  = State.find_by_key_and_country_id!( state_key, country.id )
            logger.debug "State (ADM2) #{state.key} >#{state.name}<"

            st = create_part_reader( name,
                                     state_id: state.id,
                                     level: 2 )
            st.read()
          end
    ### fix: change to match_adm1_states_for_country() - why? why not??
    elsif match_states_for_country( name ) do |country_key|  # name =~ /\/([a-z]{2})\/states/
            ## auto-add required country code (from folder structure)
            country = Country.find_by_key!( country_key )
            logger.debug "Country #{country.key} >#{country.name} (#{country.code})<"

            st = create_state_reader( name,
                                      country_id: country.id,
                                      level: 1 )
            st.read()
          end
    else
      logger.error "unknown world.db fixture type >#{name}<"
      # todo/fix: exit w/ error
    end
  end
def load( name )

    if name =~ /^continents/
       load_continent_defs( name )
    elsif name =~ /\/continents/
       load_continent_refs( name )
    elsif name =~ /^lang/
       ## todo: pass along opts too
       ## use match_usage( name ) - why? why not?? ???
       r = create_lang_reader( name )
       r.read()
    elsif name =~ /\/lang/
       ## todo: pass along opts too
       ## use match_usage( name ) - why? why not?? ???
       r = create_usage_reader( name )
       r.read()
    elsif name =~ /\/fifa/     ||
          name =~ /\/fips/     ||
          name =~ /\/internet/ ||
          name =~ /\/ioc/      ||
          name =~ /\/iso/      ||
          name =~ /\/motor/
       load_codes( name )
    elsif name =~ /^tag.*\.\d$/
       ## todo: pass along opts too
       ## use match_tags( name ) - why? why not?? ???
       
       ######## FIX: add back again
       ### fix: use read() only, that is, w/o name
       ## r = create_tag_reader( name )
       ## r.read()
    elsif match_countries_for_continent( name ) do |continent|  # # e.g. africa/countries or america/countries
            ### NB: continent changed to regions (e.g. middle-east, caribbean, north-america, etc.)
            ## auto-add continent (from folder structure) as tag
            ## fix: allow dash/hyphen/minus in tag

            ### todo/fix: add opts - how??
            r = create_country_reader( name, tags: continent.tr('-', '_') )
            r.read()
          end
    elsif match_cities_for_country( name ) do |country_key|  #  name =~ /\/([a-z]{2})\/cities/
            ## auto-add required country code (from folder structure)
            country = Country.find_by_key!( country_key )
            logger.debug "Country #{country.key} >#{country.name} (#{country.code})<"

            r = create_city_reader( name, country_id: country.id )
            r.read()
          end
    elsif match_tree_for_country( name ) do |country_key|
            ## auto-add required country code (from folder structure)
            country = Country.find_by_key!( country_key )
            logger.debug "Country #{country.key} >#{country.name} (#{country.code})<"

            r = create_tree_reader( name, country_id: country.id )
            r.read()
          end
    elsif match_states_abbr_for_country( name ) do |country_key|   # name =~ /\/([a-z]{2})\/states\.abbr/
            load_states_xxx( country_key, 'abbr', name )
          end
    elsif match_states_iso_for_country( name ) do |country_key|  # name =~ /\/([a-z]{2})\/states\.iso/
            load_states_xxx( country_key, 'iso', name )
          end
    elsif match_states_nuts_for_country( name ) do |country_key|  # name =~ /\/([a-z]{2})\/states\.nuts/
            load_states_xxx( country_key, 'nuts', name )
          end
    elsif match_adm3_counties_for_country( name ) do |country_key, state_key, part_name|
            ## auto-add required country code (from folder structure)
            country = Country.find_by_key!( country_key )
            logger.debug "Country #{country.key} >#{country.name} (#{country.code})<"
            state  = State.find_by_key_and_country_id!( state_key, country.id )
            logger.debug "State (ADM1) #{state.key} >#{state.name}<"

            ### todo: move find adm2 to model for (re)use !!!
            part = Part.where( "lower(name) = ? AND state_id = ?",
                                     part_name, state.id ).first   ## check - first needed? returns ary??
            if part.nil?
              logger.error "fix!! - skipping adm3_counties - part (ADM2) '#{part_name}' not found"
              next
            end
            logger.debug "Part (ADM2) #{part.key} >#{part.name}<"

            st = create_county_reader( name, 
                                       state_id: state.id,
                                       part_id: part.id,
                                       level: 3 )   # note: change county level to 3 (default is 2)
            st.read()
          end
    elsif match_adm2_counties_for_country( name ) do |country_key,state_key|
            ## auto-add required country code (from folder structure)
            country = Country.find_by_key!( country_key )
            logger.debug "Country #{country.key} >#{country.name} (#{country.code})<"
            state  = State.find_by_key_and_country_id!( state_key, country.id )
            logger.debug "State (ADM1) #{state.key} >#{state.name}<"

            st = create_county_reader( name,
                                       state_id: state.id,
                                       ## part_id: nil,
                                       level: 2 )
            st.read()
          end
    elsif match_adm2_parts_for_country( name ) do |country_key,state_key|
            ## auto-add required country code (from folder structure)
            country = Country.find_by_key!( country_key )
            logger.debug "Country #{country.key} >#{country.name} (#{country.code})<"
            state  = State.find_by_key_and_country_id!( state_key, country.id )
            logger.debug "State (ADM2) #{state.key} >#{state.name}<"

            st = create_part_reader( name,
                                     state_id: state.id,
                                     level: 2 )
            st.read()
          end
    ### fix: change to match_adm1_states_for_country() - why? why not??
    elsif match_states_for_country( name ) do |country_key|  # name =~ /\/([a-z]{2})\/states/
            ## auto-add required country code (from folder structure)
            country = Country.find_by_key!( country_key )
            logger.debug "Country #{country.key} >#{country.name} (#{country.code})<"

            st = create_state_reader( name,
                                      country_id: country.id,
                                      level: 1 )
            st.read()
          end
    else
      logger.error "unknown world.db fixture type >#{name}<"
      # todo/fix: exit w/ error
    end
  end
method load_setup