Class: MARCSpec::Map

Inherits:
Object
  • Object
show all
Includes:
JLogger::Simple
Defined in:
lib/marcspec/map.rb

Overview

A Map is just a named lookup table. The access (via []) takes, in adition to a key, an optional default value to return (e.g., val = map[key, defaultIfNotFound])

We don't have the default be a part of the map because it might be used in several different contexts.

NOTE: THIS IS AN ABSTRACT SUPERCLASS. DO NOT INSTANTIATE IT DIRECTLY

Direct Known Subclasses

KVMap, MultiValueMap

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(mapname, map) ⇒ Map

Create a new map. The passed map is either a standard hash (KVMap) or a list of duples (for a MultiValueMap)

Parameters:

  • mapname (String)

    The name of this map; can be used to find it later on.

  • map (Hash, Array)

    Either a normal key-value hash (for a KV Map) or an array of duples (2-value arrays) for a MultiValueMap.



24
25
26
27
# File 'lib/marcspec/map.rb', line 24

def initialize(mapname, map)
  @mapname = mapname
  @map = map
end

Instance Attribute Details

#mapObject

Returns the value of attribute map.



17
18
19
# File 'lib/marcspec/map.rb', line 17

def map
  @map
end

#mapnameObject

Returns the value of attribute mapname.



17
18
19
# File 'lib/marcspec/map.rb', line 17

def mapname
  @mapname
end

Class Method Details

.fromFile(filename) ⇒ Object

Load a map from a file, determining what kind it is along the way.

The file is valid ruby code; see the subclasses KVMap and MutlValueMap for examples.

Parameters:

  • filename (String)

    The name of the map file to be eval'd

Returns:

  • MARC2Solr::Map An instance of a subclass of MARC2Solr::Map



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/marcspec/map.rb', line 36

def self.fromFile filename
  begin
    str = File.open(filename).read
  rescue Exception => e
     "Problem opening #{filename}: #{e}"
    raise e
  end
  
  begin 
    rawmap = eval(str)
  rescue Exception => e
    log.error "Problem evaluating (with 'eval') file #{filename}: #{e}"
    raise e
  end
  
  # Derive a name if there isn't one
  unless rawmap[:mapname]
    name = File.basename(filename)
    name.gsub! /\..*$/, '' # remove the extension
    rawmap[:mapname] = name
  end
  
  case rawmap[:maptype]
  when :kv
    return KVMap.new(rawmap[:mapname], rawmap[:map])
  when :multi
    return MultiValueMap.new(rawmap[:mapname], rawmap[:map])
  else
    log.error "Map file #{filename} doesn't seem to be either a KV map or a MuliValueMap according to :maptype (#{rawmap[:maptype]})"
    raise ArgumentError, "File #{filename} doesn't evaluate to a valid map"
  end
  
end

.fromHash(rawmap) ⇒ Object

Produce a map from the data structure produced by asPPString

Parameters:

  • rawmap (Hash)

    A hash with two keys; :mapname and :map



83
84
85
# File 'lib/marcspec/map.rb', line 83

def self.fromHash rawmap
  return self.new(rawmap[:mapname], rawmap[:map])
end

.fromPPString(str) ⇒ Object

Take the output of pretty_print and eval it to get rawmap; pass it tp fromHash to get the map object



89
90
91
92
# File 'lib/marcspec/map.rb', line 89

def self.fromPPString str
  rawmap = eval(str)
  return self.fromHash rawmap
end

Instance Method Details

#==(other) ⇒ Object

Check for map equality



72
73
74
# File 'lib/marcspec/map.rb', line 72

def == other
  return ((other.mapname == @mapname) and (other.map == @map))
end

#pretty_print(pp) ⇒ Object

Generic pretty_print; used mostly for translating from solrmarc



77
78
79
# File 'lib/marcspec/map.rb', line 77

def pretty_print pp
  pp.pp eval(self.asPPString)
end