Class: Ethname::Directory

Inherits:
Object
  • Object
show all
Defined in:
lib/ethname/directory.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeDirectory

Returns a new instance of Directory.



68
69
70
71
# File 'lib/ethname/directory.rb', line 68

def initialize
  @recs          = {}   ## lookup (record) by (normalized) address

  @reverse_table = {}   ## lookup (address) by (normalized) name

end

Class Method Details

.normalize(str) ⇒ Object

convencience helpers



113
114
115
116
# File 'lib/ethname/directory.rb', line 113

def self.normalize( str )
    ## remove all non a-z (and 0-9) characters

   str.downcase.gsub( /[^a-z0-9]/i, '' )
end

.read(*paths) ⇒ Object

let’s you lookup up ethereum addresses by name



57
58
59
60
61
62
63
64
# File 'lib/ethname/directory.rb', line 57

def self.read( *paths )    ## use load - why? why not?

   dir = new
   paths.each do |path|
     rows= read_csv( path )
     dir.add_rows( rows )
   end
   dir
end

Instance Method Details

#[](name) ⇒ Object



87
88
89
90
# File 'lib/ethname/directory.rb', line 87

def []( name )
   rec = find_record_by( name: name )
   rec ? rec.addr : nil
end

#add_rows(rows) ⇒ Object



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/ethname/directory.rb', line 93

def add_rows( rows )
  rows.each do |row|
    rec = Record.parse( row )
    rec.names.each do |name|

      key = normalize( name )
      rec2 = @reverse_table[ key ]

      ## check for duplicates

      raise ArgumentError, "duplicate (normalized) key >#{key} for addr >#{rec.addr}<"  if rec == rec2
      raise ArgumentError, "duplicate (normalized) key >#{key}< for addr >#{rec.addr}; addr already in use >#{rec2.addr}<"  if rec2
      @reverse_table[ key ] = rec
    end

    @recs[rec.addr] = rec
  end
end

#find_record(addr) ⇒ Object



77
78
79
# File 'lib/ethname/directory.rb', line 77

def find_record( addr )
  @recs[ addr.downcase ]
end

#find_record_by(name:) ⇒ Object



81
82
83
84
# File 'lib/ethname/directory.rb', line 81

def find_record_by( name: )
  key = normalize( name )
  @reverse_table[ key ]
end

#normalize(str) ⇒ Object



118
# File 'lib/ethname/directory.rb', line 118

def normalize( str ) self.class.normalize( str ); end

#recordsObject



74
# File 'lib/ethname/directory.rb', line 74

def records() @recs.values; end

#sizeObject



75
# File 'lib/ethname/directory.rb', line 75

def size() @recs.size; end