Sha256: 2539b96e1fb26d35c6e110554ae507c9426b9e85bd5fdf5fd0742a0a06f325e3
Contents?: true
Size: 1.82 KB
Versions: 1
Compression:
Stored size: 1.82 KB
Contents
require "va/version" module Va class Model attr_reader :attributes attr_reader :errors def initialize(args={}) @attributes ||= self.class.defaults.dup args.each do |k, v| key = k.to_sym @attributes[key] = v if self.class.keys.include?(key) end @errors = {} @valid = validate end def validate invalid_validations = self.class.validations.select { |attrs, msg, validation| is_invalid = !validation.call(*attrs.map { |attr| self.send(attr)}) key = attrs.count == 1 ? attrs.first : attrs errors[key] = msg || "is invalid" if is_invalid is_invalid } invalid_validations.empty? end def message(msg="", *attrs) raise __callee__.inspect end def valid? @valid end private def self.validations @validations ||= [] end def self.validate(*attrs, &block) msg = if attrs.last.is_a? String attrs.pop end attrs.each do |attr| raise UnknownAttribute unless keys.include?(attr) end validations << [attrs, msg, block] end def self.validate_present(*attrs) attrs.each do |attr| validate(attr) do |a| a && a != "" end end end def self.keys @keys ||= [] end def self.defaults @defaults ||= {} end def self.attribute(attr_name, options={}) name = attr_name.to_sym self.keys << name default = options.fetch(:default) { NotSpecified } self.defaults[name] = default unless default == NotSpecified define_method "#{name}=" do |value| attributes[name] = value end define_method "#{name}" do attributes[name] end end end class UnknownAttribute < Exception; end class NotSpecified ; end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
va-0.3.0 | lib/va.rb |