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_errors ⇒ Object
20 21 22 |
# File 'lib/taco/schema.rb', line 20 def schema_errors @errors || [] end |
#to_hash ⇒ Object
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
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 |