class Factbook::Codes

Public Class Methods

new( codes ) click to toggle source
# File lib/factbook-codes/codes.rb, line 69
def initialize( codes )
  @codes = codes
end
read_csv( path ) click to toggle source
# File lib/factbook-codes/codes.rb, line 37
def self.read_csv( path )
  ###
  #  note:
  #   if you use quotes - NO leading spaces allowed e.g.
  #  use au,"Austria",... and NOT
  #      au, "Austria", ...
  #
  #  for headers - NO leading spaces allowed e.g.
  #   use  Code,Name,Category,Region,...   and NOT
  #        Code, Name, Category, Region, ...

  rows = CsvHash.read( path )

  ## pp rows

  recs = []
  rows.each do |row|
    ## pp row
    rec = Code.new
    rec.code     = row['Code'].strip    ## remove leading n trailing whitespaces
    rec.name     = row['Name'].strip
    rec.category = row['Category'].strip
    rec.region   = row['Region'].strip

    ## pp rec
    recs << rec
  end

  new( recs )
end

Public Instance Methods

[](key) click to toggle source
# File lib/factbook-codes/codes.rb, line 82
def [](key) @codes[ key ]; end
africa() click to toggle source
# File lib/factbook-codes/codes.rb, line 105
def africa()               region 'Africa';            end
antartica() click to toggle source
# File lib/factbook-codes/codes.rb, line 110
def antartica()            region 'Antarctica';        end
australia_oceania() click to toggle source
# File lib/factbook-codes/codes.rb, line 109
def australia_oceania()    region 'Australia-Oceania'; end
category( query ) click to toggle source

note: regions oceans and world - same as category oceans and world

  use oceans_ii or world_ii or something ??
use category('World')  n region('World')
use category('Oceans') n region('Oceans')
# File lib/factbook-codes/codes.rb, line 118
def category( query )
  ## todo/future: allow passing in of regex too (not just string)
  ## note: e.g. Dependencies (France) needs to get escpaed to
  ##            Dependencies \(France\)  etc.
  filter_regex = /#{Regexp.escape(query)}/i
  codes = @codes.select do |code|
    code.category ? filter_regex.match( code.category ) : false   ## note: allow nil for category; will fail on search
  end
  Codes.new( codes )   ## return new Codes obj for easy-chaining
end
central_america_n_caribbean() click to toggle source
# File lib/factbook-codes/codes.rb, line 107
def central_america_n_caribbean() region 'Central America and Caribbean'; end
central_asia() click to toggle source
# File lib/factbook-codes/codes.rb, line 102
def central_asia()         region 'Central Asia';      end
countries() click to toggle source

“pre-defined” convenience shortcuts

# File lib/factbook-codes/codes.rb, line 91
def countries()       category 'Countries';     end
dependencies() click to toggle source
# File lib/factbook-codes/codes.rb, line 96
def dependencies()    category 'Dependencies';  end
dependencies_us() click to toggle source
# File lib/factbook-codes/codes.rb, line 97
def dependencies_us() category 'Dependencies (United States)'; end
each( &blk ) click to toggle source
# File lib/factbook-codes/codes.rb, line 75
def each( &blk ) @codes.each( &blk ); end
east_n_souteast_asia() click to toggle source
# File lib/factbook-codes/codes.rb, line 103
def east_n_souteast_asia() region 'East & Southeast Asia'; end
europe() click to toggle source

fix/todo: add all dependencies uk (or gb?), fr,cn,au,nz,no,dk,etc.

# File lib/factbook-codes/codes.rb, line 100
def europe()               region 'Europe';            end
middle_east() click to toggle source
# File lib/factbook-codes/codes.rb, line 104
def middle_east()          region 'Middle East';       end
misc() click to toggle source
# File lib/factbook-codes/codes.rb, line 94
def misc()            category 'Miscellaneous'; end
north_america() click to toggle source
# File lib/factbook-codes/codes.rb, line 106
def north_america()        region 'North America';     end
oceans() click to toggle source
# File lib/factbook-codes/codes.rb, line 93
def oceans()          category 'Oceans';        end
others() click to toggle source
# File lib/factbook-codes/codes.rb, line 95
def others()          category 'Other';         end
region( query ) click to toggle source
# File lib/factbook-codes/codes.rb, line 129
def region( query )
  ## todo/future: allow passing in of regex too (not just string)
  filter_regex = /#{Regexp.escape(query)}/i
  codes = @codes.select do |code|
     code.region ? filter_regex.match( code.region ) : false      ## note: allow nil for region; will fail on search
  end
  Codes.new( codes )   ## return new Codes obj for easy-chaining
end
select( &blk ) click to toggle source
# File lib/factbook-codes/codes.rb, line 76
def select( &blk )
  codes = @codes.select( &blk )
  Codes.new( codes )   ## return (again) new Codes obj for easy-chaining - why? why not?
end
size() click to toggle source
# File lib/factbook-codes/codes.rb, line 73
def size() @codes.size; end
south_america() click to toggle source
# File lib/factbook-codes/codes.rb, line 108
def south_america()        region 'South America';     end
south_asia() click to toggle source
# File lib/factbook-codes/codes.rb, line 101
def south_asia()           region 'South Asia';        end
to_a() click to toggle source
# File lib/factbook-codes/codes.rb, line 84
def to_a
  @codes.collect {|code| code.code }   ## return array of codes
end
world() click to toggle source
# File lib/factbook-codes/codes.rb, line 92
def world()           category 'World';         end