Skip to content

delano/storable

main
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
bin
 
 
lib
 
 
try
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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