[ANN] record library / gem v1.2 - named tuples / records with typed structs / schemas


(Gerald Bauer) #1

Hello,

  I've updated the (new) record library / gem [1] that lets you define
named tuples / records with typed structs / schemas. How?

Step 1: Define a (typed) struct for your records / named tuples. Example:

require 'record'

Beer = Record.define do
  field :brewery ## note: default type is :string
  field :city
  field :name
  field :abv, Float ## allows type specified as class (or use :float)
end

# or in "classic" style:

class Beer < Record::Base
  field :brewery
  field :city
  field :name
  field :abv, Float
end

And now use the new class to create new (typed) records. Example:

beer = Beer.new( 'Andechser Klosterbrauerei',
                 'Andechs',
                 'Doppelbock Dunkel',
                 '7%' )

# -or-

values = ['Andechser Klosterbrauerei', 'Andechs', 'Doppelbock Dunkel', '7%']
beer = Beer.new( values )

# -or-

beer = Beer.new( brewery: 'Andechser Klosterbrauerei',
                 city: 'Andechs',
                 name: 'Doppelbock Dunkel',
                 abv: '7%' )

# -or-

hash = { brewery: 'Andechser Klosterbrauerei',
         city: 'Andechs',
         name: 'Doppelbock Dunkel',
         abv: '7%' }
beer = Beer.new( hash )

# -or-

beer = Beer.new
beer.update( brewery: 'Andechser Klosterbrauerei',
             city: 'Andechs',
             name: 'Doppelbock Dunkel' )
beer.update( abv: 7.0 )

# -or-

beer = Beer.new
beer.parse( ['Andechser Klosterbrauerei', 'Andechs', 'Doppelbock
Dunkel', '7%'] )

# -or-

beer = Beer.new
beer.parse( 'Andechser Klosterbrauerei,Andechs,Doppelbock Dunkel,7%' )

# -or-

beer = Beer.new
beer.brewery = 'Andechser Klosterbrauerei'
beer.name = 'Doppelbock Dunkel'
beer.abv = 7.0

And so on. That's it.

Why? What for?
The (new) record library is "extracted" for easy (re)use from the
csvrecord library / gem [2] :-).

Cheers. Prost. Happy coding and data wrangling with ruby.

[1] https://github.com/rubycoco/record
[2] https://github.com/csvreader/csvrecord