Module: Schema

Included in:
Issue
Defined in:
lib/taco/schema.rb

Overview

Schema characteristics

attributes have default validations, coercions, and transformations

FIXME: document

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



10
11
12
# File 'lib/taco/schema.rb', line 10

def self.included(base)
  base.extend(ClassMethods)
end

Instance Method Details

#schema_errorsObject



20
21
22
# File 'lib/taco/schema.rb', line 20

def schema_errors
  @errors || []
end

#to_hashObject



14
15
16
17
18
# File 'lib/taco/schema.rb', line 14

def to_hash
  Hash[self.class.schema_attributes.map do |attr, opts|
    [ attr, send(attr) ]
  end]
end

#valid?Boolean

Returns:

  • (Boolean)


24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/taco/schema.rb', line 24

def valid?
  @errors = nil

  self.class.schema_attributes.each do |attr, opts|
    if opts[:validate].nil?
      case opts[:class].to_s # can't case on opts[:class], because class of opts[:class] is always Class :-)
      when 'String'
        opts[:validate] = lambda { |v| v !~ /\A\s*\Z/ }
      end
    end

    if opts[:validate]
      value = eval(attr.to_s)

      valid = if opts[:validate].is_a?(Array)
        opts[:validate].include? value
      elsif opts[:validate].is_a?(Proc)
        opts[:validate].call(value)
      end

      unless valid
        @errors = [ [ attr, value ] ]
        return false
      end
    end
  end

  true
end