Project

storable

0.04
Low commit activity in last 3 years
No release in over a year
Storable: Marshal Ruby classes into and out of multiple formats (yaml, json, csv, tsv)
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
 Dependencies
 Project Readme

Storable - v0.9-RC1

Marshal Ruby classes in to and out of multiple formats (yaml, json, csv, tsv).

Example

require 'storable'

class Machine < Storable
  field :environment            # Define field names for Machine. The
  field :role                   # default type is String, but you can
  field :position => Integer    # specify a type using a hash syntax.
end

mac1 = Machine.new              # Instances of Machine have accessors
mac1.environment = "stage"      # just like regular attributes.
mac1.role = "app"
mac1.position = 1

puts "# YAML", mac1.to_yaml     # Note: the field order is maintained
puts "# CSV", mac1.to_csv       # => stage,app,1
puts "# JSON", mac1.to_json     # Note: field order not maintained.

mac2 = Machine.from_yaml(mac1.to_yaml)
puts mac2.environment           # => "stage"
puts mac2.position.class        # => Fixnum

Sensitive Fields

require 'storable'

class Calc < Storable
  field :three
  field :two
  field :one
  sensitive_fields :three
end

calc = Calc.new 3, 2, 1
calc.to_a                       # => [3, 2, 1]
calc.sensitive!
calc.to_a                       # => [2, 1]

Storing Procs

Storable can also marshal Proc objects to and from their actual source code.

require 'storable'

class Maths < Storable
  field :x         => Float
  field :y         => Float
  field :calculate => Proc
end

m1 = Maths.new 2.0, 3.0
m1.calculate = Proc.new { @x * @y }

m1.calculate.source            # => "{ @x * @y }"
m1.call :calculate             # => 6.0

dump = m1.to_json

m2 = Maths.from_json dump
m2.call :calculate             # => 6.0

Anything is possible when you keep your mind open and you use Ruby.

Installation

Via Rubygems, one of:

$ sudo gem install storable
$ sudo gem install delano-storable --source http://gems.github.com/

or via download:

Prerequisites

  • Ruby <=2.7, >=1.9, possibly JRuby

Credits

Thanks

More Info

License

See: LICENSE.txt