fixed some serious issues but left some for tomorrow (validations aren't working right)
This commit is contained in:
parent
bc47e72ae0
commit
e448112ff6
8 changed files with 89 additions and 48 deletions
|
@ -48,6 +48,19 @@ module CouchRest
|
|||
module Validation
|
||||
|
||||
def self.included(base)
|
||||
base.cattr_accessor(:auto_validation)
|
||||
base.class_eval <<-EOS, __FILE__, __LINE__
|
||||
# Turn off auto validation by default
|
||||
@@auto_validation = false
|
||||
|
||||
# Force the auto validation for the class properties
|
||||
# This feature is still not fully ported over,
|
||||
# test are lacking, so please use with caution
|
||||
def self.auto_validate!
|
||||
self.auto_validation = true
|
||||
end
|
||||
EOS
|
||||
|
||||
base.extend(ClassMethods)
|
||||
base.class_eval <<-EOS, __FILE__, __LINE__
|
||||
if method_defined?(:_run_save_callbacks)
|
||||
|
@ -164,7 +177,7 @@ module CouchRest
|
|||
context = opts.delete(:when) if opts.has_key?(:when)
|
||||
context = opts.delete(:group) if opts.has_key?(:group)
|
||||
opts[:context] = context
|
||||
opts.mergs!(defaults) unless defaults.nil?
|
||||
opts.merge!(defaults) unless defaults.nil?
|
||||
opts
|
||||
end
|
||||
|
||||
|
@ -197,7 +210,7 @@ module CouchRest
|
|||
#
|
||||
def add_validator_to_context(opts, fields, klazz)
|
||||
fields.each do |field|
|
||||
validator = klazz.new(field, opts)
|
||||
validator = klazz.new(field.to_sym, opts)
|
||||
if opts[:context].is_a?(Symbol)
|
||||
unless validators.context(opts[:context]).include?(validator)
|
||||
validators.context(opts[:context]) << validator
|
||||
|
|
|
@ -14,11 +14,14 @@ module CouchRest
|
|||
# Same as CouchRest::Document but with properties and validations
|
||||
class ExtendedDocument < Document
|
||||
include CouchRest::Callbacks
|
||||
include CouchRest::Mixins::DocumentQueries
|
||||
include CouchRest::Mixins::Properties
|
||||
include CouchRest::Mixins::DocumentQueries
|
||||
include CouchRest::Mixins::Views
|
||||
include CouchRest::Mixins::DesignDoc
|
||||
|
||||
def self.inherited(subklass)
|
||||
subklass.send(:include, CouchRest::Mixins::Properties)
|
||||
end
|
||||
|
||||
# Callbacks
|
||||
define_callbacks :save
|
||||
define_callbacks :destroy
|
||||
|
@ -38,8 +41,8 @@ module CouchRest
|
|||
# decent time format by default. See Time#to_json
|
||||
def self.timestamps!
|
||||
class_eval <<-EOS, __FILE__, __LINE__
|
||||
property(:updated_at, :read_only => true, :cast_as => 'Time')
|
||||
property(:created_at, :read_only => true, :cast_as => 'Time')
|
||||
property(:updated_at, :read_only => true, :cast_as => 'Time', :auto_validation => false)
|
||||
property(:created_at, :read_only => true, :cast_as => 'Time', :auto_validation => false)
|
||||
|
||||
save_callback :before do |object|
|
||||
object['updated_at'] = Time.now
|
||||
|
@ -115,7 +118,7 @@ module CouchRest
|
|||
# Overridden to set the unique ID.
|
||||
# Returns a boolean value
|
||||
def save_without_callbacks(bulk = false)
|
||||
raise ArgumentError, "a document requires database to be saved to" unless database
|
||||
raise ArgumentError, "a document requires a database to be saved to" unless database
|
||||
set_unique_id if new_document? && self.respond_to?(:set_unique_id)
|
||||
result = database.save_doc(self, bulk)
|
||||
result["ok"] == true
|
||||
|
|
|
@ -6,22 +6,20 @@ module CouchRest
|
|||
class Property
|
||||
# flag letting us know if we already checked the autovalidation settings
|
||||
attr_accessor :autovalidation_check
|
||||
@@autovalidation_check = false
|
||||
end
|
||||
|
||||
module Validation
|
||||
module AutoValidate
|
||||
module AutoValidate
|
||||
|
||||
# Turn off auto validation by default
|
||||
def auto_validation
|
||||
@@auto_validation ||= false
|
||||
end
|
||||
|
||||
# Force the auto validation for the class properties
|
||||
# This feature is still not fully ported over,
|
||||
# test are lacking, so please use with caution
|
||||
def auto_validate!
|
||||
@@auto_validation = true
|
||||
end
|
||||
# # Force the auto validation for the class properties
|
||||
# # This feature is still not fully ported over,
|
||||
# # test are lacking, so please use with caution
|
||||
# def auto_validate!
|
||||
# require 'ruby-debug'
|
||||
# debugger
|
||||
# auto_validation = true
|
||||
# end
|
||||
|
||||
# adds message for validator
|
||||
def options_with_message(base_options, property, validator_name)
|
||||
|
@ -93,9 +91,7 @@ module CouchRest
|
|||
# It is just shortcut if only one validation option is set
|
||||
#
|
||||
def auto_generate_validations(property)
|
||||
return unless property.options
|
||||
return unless property.autovalidation_check || auto_validation || (property.options && property.options.has_key?(:auto_validation) && property.options[:auto_validation])
|
||||
|
||||
return unless (property.autovalidation_check && self.auto_validation && (property.options && property.options.has_key?(:auto_validation) && property.options[:auto_validation]))
|
||||
# value is set by the storage system
|
||||
opts = {}
|
||||
opts[:context] = property.options[:validates] if property.options.has_key?(:validates)
|
||||
|
|
|
@ -40,7 +40,7 @@ module CouchRest
|
|||
value = target.send(field_name)
|
||||
return true if @options[:allow_nil] && value.nil?
|
||||
|
||||
value = value.kind_of?(BigDecimal) ? value.to_s('F') : value.to_s
|
||||
value = value.kind_of?(Float) ? value.to_s('F') : value.to_s
|
||||
|
||||
error_message = @options[:message]
|
||||
precision = @options[:precision]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue