Skip to content

kevincox/valid_array

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

42 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

valid_array

<img src=“https://travis-ci.org/kevincox/valid_array.png” alt=“Build Status”/>

The valid_array gem provides to create an Array that enforces certain properties. Each element added to the array is passed to a validator function written by you. This function can raise errors, drop items or change them.

vaild_array also provides compatibility with the typed-array gem. There is both ‘valid_array/typed_array’ which imports to ‘ValidArray::TypedArray` and a fully compatible ’valid-array’ which passes ‘valid-array’s own test suite.

Examples

ValidArray

Valid Array provides a hook to change and validate every element added to the array.

require 'valid_array'

# An Array that converts all added elements into strings.
class StringArray < Array
 extend ValidArray

 def self.validate(element)
   element.to_s
 end
end

# An array that enforces Numeric types and silently drops odd numbers.
class EvenArray < Array
  extend ValidArray

  def self.validate(element)
     if not element.is_a? Numeric
        raise TypeError, "Got #{element.class}, expected Numeric!"
     end

     if element % 2 == 1
        # This exception is handled by ValidArray, it causes the element to be
        # dropped.  All other exceptions are propagated to the caller.
        raise ValidArray::DontInsertException
     end
  end
end

TypedArray

TypedArray is fully compatible with github.com/yaauie/typed-array/. For compatibility you can require ‘typed-array’, otherwise require ‘valid_array/typed_array’ and access it from ‘ValidArray::TypedArray`.

Create Standard Class

# Compatibility style.
require 'typed-array'
class Things < Array
  extend TypedArray
  restrict_types Thing1,Thing2
end

# or new style

require 'valid_array/typed_array'
class Things < Array
  extend ValidArray::TypedArray
  restrict_types Thing1,Thing2
end

Generate Class using Factory

# Compatibility style.
require 'typed-array'
things = TypedArray(Thing1,Thing2)
a = things.new

# or new style

require 'valid_array/typed_array'
things = ValidArray::TypedArray(Thing1, Thing2)
a = things.new

Adding items to the Array

All standard Array interfaces are implemented, including block-processing and variable-number of arguments. For methods that would usually return an Array, they instead return an instance of the current class (except to_a).

About

Provides methods for creating type-enforced Arrays

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Ruby 100.0%