Class: CoinTools::BaseStruct

Inherits:
Object
  • Object
show all
Defined in:
lib/cointools/base_struct.rb

Class Method Summary collapse

Class Method Details

.make(*fields) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/cointools/base_struct.rb', line 3

def self.make(*fields)
  struct = Class.new(self)

  fields.each do |f|
    raise ArgumentError.new("Invalid field name: #{f}") unless f.to_s =~ /[a-z][a-z_]*/
  end

  struct.class_eval <<-CODE
    def initialize(#{fields.map { |f| "#{f}:" }.join(', ')})
      #{fields.map { |f| "@#{f} = #{f}" }.join("\n")}
    end

    attr_reader #{fields.map { |f| ":#{f}" }.join(', ')}
  CODE

  struct
end