Compare commits

...

14 Commits

Author SHA1 Message Date
Adam Meehan
cb3ac8d445 v4.0.1 2016-01-06 22:20:44 +11:00
Adam Meehan
4e5f5fa695 Return value if not of known type in type cast 2016-01-06 22:20:24 +11:00
Adam Meehan
321834b5ff Fix thread lock on undefine
Move active model methods into active model ORM module to be included
manually if not using AR or other ORM
2016-01-06 22:18:54 +11:00
Adam Meehan
ff131415f7 Fix shadowing 2016-01-06 16:36:25 +11:00
Adam Meehan
ad43eb31d6 Return date if date type 2016-01-06 16:35:01 +11:00
Adam Meehan
0f782a4ed5 Latest rails gems in appraisals 2015-12-30 12:07:06 +11:00
Adam Meehan
d57c64dcc2 Getting with the RSpec times 2015-12-30 12:06:42 +11:00
Adam Meehan
244f398cc4 travis gem install failure on 2.2.0 trying 2.2.3 2015-12-29 18:02:18 +11:00
Adam Meehan
0feeb746cd Fix zone in test 2015-12-29 17:57:54 +11:00
Adam Meehan
6f23e40c25 Remove ruby 2.0 from travis 2015-12-29 17:51:54 +11:00
Adam Meehan
773e816a4d Use latest rspec 2015-12-29 17:51:42 +11:00
Adam Meehan
80c9df448d v3.x changelog 2015-12-29 16:30:46 +11:00
Adam Meehan
54ae49b8a0 Update changelog 2015-12-29 16:27:59 +11:00
Adam Meehan
2fef0a23d6 v3.0.15 2015-11-10 18:50:02 +11:00
24 changed files with 79 additions and 73 deletions

1
.rspec
View File

@@ -1,3 +1,4 @@
--format documentation
--color
--require spec_helper
--require byebug

View File

@@ -7,8 +7,7 @@ gemfile:
- gemfiles/rails_4_2.gemfile
rvm:
- "2.0.0"
- "2.2.0"
- "2.2.3"
- "2.3.0"
script: 'bundle exec rake'

View File

@@ -1,11 +1,11 @@
appraise "rails_4_0" do
gem "rails", "~> 4.0.0"
gem "rails", "~> 4.0.13"
end
appraise "rails_4_1" do
gem "rails", "~> 4.1.0"
gem "rails", "~> 4.1.14"
end
appraise "rails_4_2" do
gem "rails", "~> 4.2.0"
gem "rails", "~> 4.2.5"
end

View File

@@ -1,3 +1,15 @@
= 4.0.0 [2015-12-29]
* Extracted mongoid support into https://github.com/adzap/validates_timeliness-mongoid which is broken (not supported anymore).
* Fixed Rails 4.0, 4.1 and 4.2 compatability issues
* Upgrade specs to RSpec 3
* Added travis config
* Huge thanks to @johncarney for keeping it alive with his fork (https://github.com/johncarney/validates_timeliness)
= 3.0.15 [2015-12-29]
* Fixes mongoid 3 support and removes mongoid 2 support(johnnyshields)
* Some documentation/comments tidying
* Some general tidying up
= 3.0.14 [2012-08-23]
* Fix for using validates :timeliness => {} form to correctly add attributes to timeliness validated attributes.

View File

@@ -3,8 +3,8 @@ source 'http://rubygems.org'
gemspec
gem 'rails', '~> 4.0.13'
gem 'rspec', '~> 3.0.0'
gem 'rspec-rails', '~> 3.0.0'
gem 'rspec', '~> 3.4.0'
gem 'rspec-rails', '~> 3.4.0'
gem 'timecop'
gem 'byebug'
gem 'appraisal'

View File

@@ -33,15 +33,9 @@ module ValidatesTimeliness
}.tap { |mod| include mod }
end
def undefine_attribute_methods
super.tap { undefine_timeliness_attribute_methods }
end
def undefine_timeliness_attribute_methods
generated_timeliness_methods.synchronize do
generated_timeliness_methods.module_eval do
instance_methods.each { |m| undef_method(m) }
end
generated_timeliness_methods.module_eval do
instance_methods.each { |m| undef_method(m) }
end
end
@@ -74,8 +68,10 @@ module ValidatesTimeliness
@timeliness_cache[attr_name] = value
if ValidatesTimeliness.use_plugin_parser
type = self.class.timeliness_attribute_type(attr_name)
timezone = :current if self.class.timeliness_attribute_timezone_aware?(attr_name)
value = Timeliness::Parser.parse(value, self.class.timeliness_attribute_type(attr_name), :zone => timezone)
value = Timeliness::Parser.parse(value, type, :zone => timezone)
value = value.to_date if value && type == :date
end
@attributes[attr_name] = value

View File

@@ -12,6 +12,8 @@ module ValidatesTimeliness
value.to_date
when :datetime
value.is_a?(Time) ? value : value.to_time
else
value
end
if options[:ignore_usec] && value.is_a?(Time)
Timeliness::Parser.make_time(Array(value).reverse[4..9], (:current if @timezone_aware))

View File

@@ -0,0 +1,20 @@
module ValidatesTimeliness
module ORM
module ActiveModel
extend ActiveSupport::Concern
module ClassMethods
public
def define_attribute_methods(*attr_names)
super.tap { define_timeliness_methods}
end
def undefine_attribute_methods
super.tap { undefine_timeliness_attribute_methods }
end
end
end
end
end

View File

@@ -14,26 +14,26 @@ module ValidatesTimeliness
timeliness_column_for_attribute(attr_name).type
end
if ActiveModel.version >= Gem::Version.new('4.2')
if ::ActiveModel.version >= Gem::Version.new('4.2')
def timeliness_column_for_attribute(attr_name)
columns_hash.fetch(attr_name.to_s) do |attr_name|
validation_type = _validators[attr_name.to_sym].find {|v| v.kind == :timeliness }.type.to_s
::ActiveRecord::ConnectionAdapters::Column.new(attr_name, nil, lookup_cast_type(validation_type), validation_type)
columns_hash.fetch(attr_name.to_s) do |key|
validation_type = _validators[key.to_sym].find {|v| v.kind == :timeliness }.type.to_s
::ActiveRecord::ConnectionAdapters::Column.new(key, nil, lookup_cast_type(validation_type), validation_type)
end
end
def lookup_cast_type(sql_type)
case sql_type
when 'datetime' then ::ActiveRecord::Type::DateTime.new
when 'date' then ::ActiveRecord::Type::Date.new
when 'time' then ::ActiveRecord::Type::Time.new
when 'datetime' then ::ActiveRecord::Type::DateTime.new
when 'date' then ::ActiveRecord::Type::Date.new
when 'time' then ::ActiveRecord::Type::Time.new
end
end
else
def timeliness_column_for_attribute(attr_name)
columns_hash.fetch(attr_name.to_s) do |attr_name|
validation_type = _validators[attr_name.to_sym].find {|v| v.kind == :timeliness }.type.to_s
::ActiveRecord::ConnectionAdapters::Column.new(attr_name, nil, validation_type)
columns_hash.fetch(attr_name.to_s) do |key|
validation_type = _validators[key.to_sym].find {|v| v.kind == :timeliness }.type.to_s
::ActiveRecord::ConnectionAdapters::Column.new(key, nil, validation_type)
end
end
end

View File

@@ -1,3 +1,3 @@
module ValidatesTimeliness
VERSION = '4.0.0'
VERSION = '4.0.1'
end

View File

@@ -7,6 +7,7 @@ require 'action_view'
require 'timecop'
require 'validates_timeliness'
require 'validates_timeliness/orm/active_model'
require 'support/test_model'
require 'support/model_helpers'
@@ -30,14 +31,9 @@ I18n.available_locales = ['en', 'es']
module TestModelShim
extend ActiveSupport::Concern
include ValidatesTimeliness::AttributeMethods
include ValidatesTimeliness::ORM::ActiveModel
module ClassMethods
# Hook method for attribute method generation
def define_attribute_methods(attr_names)
super
define_timeliness_methods
end
# Hook into native time zone handling check, if any
def timeliness_attribute_timezone_aware?(attr_name)
false

View File

@@ -1,6 +1,4 @@
require 'spec_helper'
describe ValidatesTimeliness::AttributeMethods do
RSpec.describe ValidatesTimeliness::AttributeMethods do
it 'should define read_timeliness_attribute_before_type_cast instance method' do
expect(PersonWithShim.new).to respond_to(:read_timeliness_attribute_before_type_cast)
end

View File

@@ -1,6 +1,4 @@
require 'spec_helper'
describe ValidatesTimeliness::Conversion do
RSpec.describe ValidatesTimeliness::Conversion do
include ValidatesTimeliness::Conversion
let(:options) { Hash.new }
@@ -176,7 +174,7 @@ describe ValidatesTimeliness::Conversion do
it 'should return Time value for attribute method symbol which returns string time value' do
value = '2010-01-01 12:00:00'
person.birth_time = value
expect(evaluate_option_value(:birth_time, person)).to eq(Time.zone.local(2010,1,1,12,0,0))
expect(evaluate_option_value(:birth_time, person)).to eq(Time.local(2010,1,1,12,0,0))
end
context "restriction shorthand" do

View File

@@ -1,6 +1,4 @@
require 'spec_helper'
describe 'ValidatesTimeliness::Extensions::DateTimeSelect' do
RSpec.describe 'ValidatesTimeliness::Extensions::DateTimeSelect' do
include ActionView::Helpers::DateHelper
attr_reader :person, :params

View File

@@ -1,6 +1,4 @@
require 'spec_helper'
describe 'ValidatesTimeliness::Extensions::MultiparameterHandler' do
RSpec.describe 'ValidatesTimeliness::Extensions::MultiparameterHandler' do
context "time column" do
it 'should assign a string value for invalid date portion' do

View File

@@ -1,6 +1,4 @@
require 'spec_helper'
describe ValidatesTimeliness, 'HelperMethods' do
RSpec.describe ValidatesTimeliness, 'HelperMethods' do
let(:record) { Person.new }
it 'should define class validation methods' do

View File

@@ -1,6 +1,4 @@
require 'spec_helper'
describe ValidatesTimeliness, 'ActiveRecord' do
RSpec.describe ValidatesTimeliness, 'ActiveRecord' do
context "validation methods" do
let(:record) { Employee.new }
@@ -241,4 +239,10 @@ describe ValidatesTimeliness, 'ActiveRecord' do
expect(Employee.define_attribute_methods).to be_falsey
end
end
context "undefine_attribute_methods" do
it "returns a falsy value if the attribute methods have already been generated" do
expect { Employee.undefine_attribute_methods }.to_not raise_error
end
end
end

View File

@@ -1,6 +1,4 @@
require 'spec_helper'
describe ValidatesTimeliness::Validator, ":after option" do
RSpec.describe ValidatesTimeliness::Validator, ":after option" do
describe "for date type" do
before do
Person.validates_date :birth_date, :after => Date.new(2010, 1, 1)

View File

@@ -1,6 +1,4 @@
require 'spec_helper'
describe ValidatesTimeliness::Validator, ":before option" do
RSpec.describe ValidatesTimeliness::Validator, ":before option" do
describe "for date type" do
before do
Person.validates_date :birth_date, :before => Date.new(2010, 1, 1)

View File

@@ -1,6 +1,4 @@
require 'spec_helper'
describe ValidatesTimeliness::Validator, ":is_at option" do
RSpec.describe ValidatesTimeliness::Validator, ":is_at option" do
before do
Timecop.freeze(Time.local(2010, 1, 1, 0, 0, 0))
end

View File

@@ -1,6 +1,4 @@
require 'spec_helper'
describe ValidatesTimeliness::Validator, ":on_or_after option" do
RSpec.describe ValidatesTimeliness::Validator, ":on_or_after option" do
describe "for date type" do
before do
Person.validates_date :birth_date, :on_or_after => Date.new(2010, 1, 1)

View File

@@ -1,6 +1,4 @@
require 'spec_helper'
describe ValidatesTimeliness::Validator, ":on_or_before option" do
RSpec.describe ValidatesTimeliness::Validator, ":on_or_before option" do
describe "for date type" do
before do
Person.validates_date :birth_date, :on_or_before => Date.new(2010, 1, 1)

View File

@@ -1,6 +1,4 @@
require 'spec_helper'
describe ValidatesTimeliness::Validator do
RSpec.describe ValidatesTimeliness::Validator do
before do
Timecop.freeze(Time.local(2010, 1, 1, 0, 0, 0))
end

View File

@@ -1,6 +1,4 @@
require 'spec_helper'
describe ValidatesTimeliness do
RSpec.describe ValidatesTimeliness do
it 'should alias use_euro_formats to remove_us_formats on Timeliness gem' do
expect(Timeliness).to respond_to(:remove_us_formats)