Class: Ethname::Directory
- Inherits:
-
Object
- Object
- Ethname::Directory
- Defined in:
- lib/ethname/directory.rb
Class Method Summary collapse
-
.normalize(str) ⇒ Object
convencience helpers.
-
.read(*paths) ⇒ Object
let’s you lookup up ethereum addresses by name.
Instance Method Summary collapse
- #[](name) ⇒ Object
- #add_rows(rows) ⇒ Object
- #find_record(addr) ⇒ Object
- #find_record_by(name:) ⇒ Object
-
#initialize ⇒ Directory
constructor
A new instance of Directory.
- #normalize(str) ⇒ Object
- #records ⇒ Object
- #size ⇒ Object
Constructor Details
#initialize ⇒ Directory
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 |
#records ⇒ Object
74 |
# File 'lib/ethname/directory.rb', line 74 def records() @recs.values; end |
#size ⇒ Object
75 |
# File 'lib/ethname/directory.rb', line 75 def size() @recs.size; end |