validates_timeliness 6.0.1 → 7.0.0.beta2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/.github/workflows/ci.yml +4 -10
 - data/README.md +4 -4
 - data/gemfiles/{rails_6_0.gemfile → rails_7_0.gemfile} +2 -2
 - data/gemfiles/{rails_6_1.gemfile → rails_edge.gemfile} +1 -2
 - data/lib/validates_timeliness/converter.rb +2 -3
 - data/lib/validates_timeliness/helper_methods.rb +1 -1
 - data/lib/validates_timeliness/orm/active_model.rb +30 -6
 - data/lib/validates_timeliness/railtie.rb +1 -1
 - data/lib/validates_timeliness/version.rb +1 -1
 - data/spec/spec_helper.rb +2 -5
 - data/spec/support/model_helpers.rb +15 -8
 - data/spec/support/test_model.rb +4 -52
 - data/spec/validates_timeliness/attribute_methods_spec.rb +4 -0
 - data/spec/validates_timeliness/converter_spec.rb +17 -48
 - data/spec/validates_timeliness/orm/active_model_spec.rb +0 -0
 - data/spec/validates_timeliness/validator/format_spec.rb +57 -0
 - data/validates_timeliness.gemspec +2 -1
 - metadata +15 -10
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 291ec2c50666a8ce39654fb9c065ca22a27cc91413039a41faa1045e5143ee7e
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 8ec042268f1524503c5daf4e0038769d64b0be9b0329281137a569579a5d991a
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 0f7fd09d93f725dcbda325d6d681f1f68fd765ea75a5ae8d3206fe369fd9647f1ae6cb1be36d353c790482e310bd4f8cd4cc749fbb75a8aafc8b4653f7e76025
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 433b16c8be0034ca7e9d8f6349ee9423a1437df4183e47efd623116b634287833f7b57f7f7a456bff06a1bbb9eb19df14c5cf73a0a6bb1e46d52f3ff112522df
         
     | 
    
        data/.github/workflows/ci.yml
    CHANGED
    
    | 
         @@ -7,18 +7,12 @@ jobs: 
     | 
|
| 
       7 
7 
     | 
    
         
             
                  fail-fast: false
         
     | 
| 
       8 
8 
     | 
    
         
             
                  matrix:
         
     | 
| 
       9 
9 
     | 
    
         
             
                    include:
         
     | 
| 
       10 
     | 
    
         
            -
                      - gemfile:  
     | 
| 
       11 
     | 
    
         
            -
                        ruby: 2.6
         
     | 
| 
       12 
     | 
    
         
            -
                      - gemfile: rails_6_0
         
     | 
| 
      
 10 
     | 
    
         
            +
                      - gemfile: rails_7_0
         
     | 
| 
       13 
11 
     | 
    
         
             
                        ruby: 2.7
         
     | 
| 
       14 
     | 
    
         
            -
                      - gemfile:  
     | 
| 
       15 
     | 
    
         
            -
                        ruby: 3.0
         
     | 
| 
       16 
     | 
    
         
            -
                      - gemfile: rails_6_1
         
     | 
| 
       17 
     | 
    
         
            -
                        ruby: 2.6
         
     | 
| 
       18 
     | 
    
         
            -
                      - gemfile: rails_6_1
         
     | 
| 
       19 
     | 
    
         
            -
                        ruby: 2.7
         
     | 
| 
       20 
     | 
    
         
            -
                      - gemfile: rails_6_1
         
     | 
| 
      
 12 
     | 
    
         
            +
                      - gemfile: rails_7_0
         
     | 
| 
       21 
13 
     | 
    
         
             
                        ruby: 3.0
         
     | 
| 
      
 14 
     | 
    
         
            +
                      - gemfile: rails_7_0
         
     | 
| 
      
 15 
     | 
    
         
            +
                        ruby: 3.1
         
     | 
| 
       22 
16 
     | 
    
         | 
| 
       23 
17 
     | 
    
         
             
                name: ${{ matrix.gemfile }}, ruby ${{ matrix.ruby }}
         
     | 
| 
       24 
18 
     | 
    
         
             
                env:
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -6,13 +6,13 @@ 
     | 
|
| 
       6 
6 
     | 
    
         | 
| 
       7 
7 
     | 
    
         
             
            ## Description
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
       9 
     | 
    
         
            -
            Complete validation of dates, times and datetimes for Rails  
     | 
| 
       10 
     | 
    
         
            -
            ActiveModel.
         
     | 
| 
      
 9 
     | 
    
         
            +
            Complete validation of dates, times and datetimes for Rails 7.x and ActiveModel.
         
     | 
| 
       11 
10 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
      
 11 
     | 
    
         
            +
            Older Rails versions:
         
     | 
| 
       13 
12 
     | 
    
         | 
| 
       14 
13 
     | 
    
         
             
            - Rails 4.x: [https://github.com/adzap/validates_timeliness/tree/4-0-stable]
         
     | 
| 
       15 
14 
     | 
    
         
             
            - Rails 5.x: [https://github.com/adzap/validates_timeliness/tree/5-0-stable]
         
     | 
| 
      
 15 
     | 
    
         
            +
            - Rails 6.x: [https://github.com/adzap/validates_timeliness/tree/6-0-stable]
         
     | 
| 
       16 
16 
     | 
    
         | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
18 
     | 
    
         
             
            ## Features
         
     | 
| 
         @@ -30,7 +30,7 @@ Old Rails versions: 
     | 
|
| 
       30 
30 
     | 
    
         | 
| 
       31 
31 
     | 
    
         
             
            In Gemfile
         
     | 
| 
       32 
32 
     | 
    
         
             
            ```ruby
         
     | 
| 
       33 
     | 
    
         
            -
            gem 'validates_timeliness', '~>  
     | 
| 
      
 33 
     | 
    
         
            +
            gem 'validates_timeliness', '~> 7.0.0.beta1'
         
     | 
| 
       34 
34 
     | 
    
         
             
            ```
         
     | 
| 
       35 
35 
     | 
    
         | 
| 
       36 
36 
     | 
    
         
             
            Run bundler:
         
     | 
| 
         @@ -2,11 +2,10 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            source "http://rubygems.org"
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
            gem "rails", " 
     | 
| 
      
 5 
     | 
    
         
            +
            gem "rails", git: "https://github.com/rails/rails.git", branch: "main"
         
     | 
| 
       6 
6 
     | 
    
         
             
            gem "rspec"
         
     | 
| 
       7 
7 
     | 
    
         
             
            gem "rspec-rails", "~> 3.7"
         
     | 
| 
       8 
8 
     | 
    
         
             
            gem "sqlite3"
         
     | 
| 
       9 
     | 
    
         
            -
            gem "timecop"
         
     | 
| 
       10 
9 
     | 
    
         
             
            gem "byebug"
         
     | 
| 
       11 
10 
     | 
    
         
             
            gem "appraisal"
         
     | 
| 
       12 
11 
     | 
    
         
             
            gem "nokogiri", "~> 1.8"
         
     | 
| 
         @@ -19,13 +19,12 @@ module ValidatesTimeliness 
     | 
|
| 
       19 
19 
     | 
    
         
             
                  when :date
         
     | 
| 
       20 
20 
     | 
    
         
             
                    value.to_date
         
     | 
| 
       21 
21 
     | 
    
         
             
                  when :datetime
         
     | 
| 
       22 
     | 
    
         
            -
                    value.is_a?(Time) ? value :  
     | 
| 
      
 22 
     | 
    
         
            +
                    value.is_a?(Time) ? value : value.to_time
         
     | 
| 
       23 
23 
     | 
    
         
             
                  else
         
     | 
| 
       24 
24 
     | 
    
         
             
                    value
         
     | 
| 
       25 
25 
     | 
    
         
             
                  end
         
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
26 
     | 
    
         
             
                  if ignore_usec && value.is_a?(Time)
         
     | 
| 
       28 
     | 
    
         
            -
                    value. 
     | 
| 
      
 27 
     | 
    
         
            +
                    Timeliness::Parser.make_time(Array(value).reverse[4..9], (:current if time_zone_aware?))
         
     | 
| 
       29 
28 
     | 
    
         
             
                  else
         
     | 
| 
       30 
29 
     | 
    
         
             
                    value
         
     | 
| 
       31 
30 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -6,30 +6,54 @@ module ValidatesTimeliness 
     | 
|
| 
       6 
6 
     | 
    
         
             
                  module ClassMethods
         
     | 
| 
       7 
7 
     | 
    
         
             
                    public
         
     | 
| 
       8 
8 
     | 
    
         | 
| 
      
 9 
     | 
    
         
            +
                    # Hook into bulk method definitions for non-attribute based methods validated.
         
     | 
| 
       9 
10 
     | 
    
         
             
                    def define_attribute_methods(*attr_names)
         
     | 
| 
       10 
     | 
    
         
            -
                      super.tap { 
     | 
| 
      
 11 
     | 
    
         
            +
                      super.tap {
         
     | 
| 
      
 12 
     | 
    
         
            +
                        define_timeliness_methods
         
     | 
| 
      
 13 
     | 
    
         
            +
                      }
         
     | 
| 
      
 14 
     | 
    
         
            +
                    end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                    # Called when `attribute` methods is called and the timeliness overrides are defined here
         
     | 
| 
      
 17 
     | 
    
         
            +
                    def define_attribute_method(attr_name)
         
     | 
| 
      
 18 
     | 
    
         
            +
                      super.tap {
         
     | 
| 
      
 19 
     | 
    
         
            +
                        define_attribute_timeliness_methods(attr_name)
         
     | 
| 
      
 20 
     | 
    
         
            +
                      }
         
     | 
| 
       11 
21 
     | 
    
         
             
                    end
         
     | 
| 
       12 
22 
     | 
    
         | 
| 
       13 
23 
     | 
    
         
             
                    def undefine_attribute_methods
         
     | 
| 
       14 
     | 
    
         
            -
                      super.tap { 
     | 
| 
      
 24 
     | 
    
         
            +
                      super.tap {
         
     | 
| 
      
 25 
     | 
    
         
            +
                        undefine_timeliness_attribute_methods
         
     | 
| 
      
 26 
     | 
    
         
            +
                      }
         
     | 
| 
       15 
27 
     | 
    
         
             
                    end
         
     | 
| 
       16 
28 
     | 
    
         | 
| 
       17 
29 
     | 
    
         
             
                    def define_timeliness_methods(before_type_cast=false)
         
     | 
| 
       18 
30 
     | 
    
         
             
                      return if timeliness_validated_attributes.blank?
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
       19 
32 
     | 
    
         
             
                      timeliness_validated_attributes.each do |attr_name|
         
     | 
| 
       20 
     | 
    
         
            -
                         
     | 
| 
      
 33 
     | 
    
         
            +
                        unless timeliness_method_already_implemented?(attr_name)
         
     | 
| 
      
 34 
     | 
    
         
            +
                          define_attribute_timeliness_methods(attr_name, before_type_cast)
         
     | 
| 
      
 35 
     | 
    
         
            +
                        end
         
     | 
| 
       21 
36 
     | 
    
         
             
                      end
         
     | 
| 
       22 
37 
     | 
    
         
             
                    end
         
     | 
| 
       23 
38 
     | 
    
         | 
| 
      
 39 
     | 
    
         
            +
                    def define_timeliness_method(attr_name, before_type_cast=false)
         
     | 
| 
      
 40 
     | 
    
         
            +
                      define_attribute_timeliness_methods(attr_name, before_type_cast)
         
     | 
| 
      
 41 
     | 
    
         
            +
                    end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                    # Lazy instantiate module as container of timeliness methods included in the model
         
     | 
| 
       24 
44 
     | 
    
         
             
                    def generated_timeliness_methods
         
     | 
| 
       25 
45 
     | 
    
         
             
                      @generated_timeliness_methods ||= Module.new { |m|
         
     | 
| 
       26 
46 
     | 
    
         
             
                        extend Mutex_m
         
     | 
| 
       27 
47 
     | 
    
         
             
                      }.tap { |mod| include mod }
         
     | 
| 
       28 
48 
     | 
    
         
             
                    end
         
     | 
| 
       29 
49 
     | 
    
         | 
| 
      
 50 
     | 
    
         
            +
                    def timeliness_method_already_implemented?(method_name)
         
     | 
| 
      
 51 
     | 
    
         
            +
                      generated_timeliness_methods.method_defined?(method_name)
         
     | 
| 
      
 52 
     | 
    
         
            +
                    end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
       30 
54 
     | 
    
         
             
                    def undefine_timeliness_attribute_methods
         
     | 
| 
       31 
55 
     | 
    
         
             
                      generated_timeliness_methods.module_eval do
         
     | 
| 
       32 
     | 
    
         
            -
                         
     | 
| 
      
 56 
     | 
    
         
            +
                        undef_method(*instance_methods)
         
     | 
| 
       33 
57 
     | 
    
         
             
                      end
         
     | 
| 
       34 
58 
     | 
    
         
             
                    end
         
     | 
| 
       35 
59 
     | 
    
         | 
| 
         @@ -44,7 +68,7 @@ module ValidatesTimeliness 
     | 
|
| 
       44 
68 
     | 
    
         
             
                          @timeliness_cache ||= {}
         
     | 
| 
       45 
69 
     | 
    
         
             
                          @timeliness_cache['#{attr_name}'] = value
         
     | 
| 
       46 
70 
     | 
    
         | 
| 
       47 
     | 
    
         
            -
                           
     | 
| 
      
 71 
     | 
    
         
            +
                          super
         
     | 
| 
       48 
72 
     | 
    
         
             
                        end
         
     | 
| 
       49 
73 
     | 
    
         
             
                      STR
         
     | 
| 
       50 
74 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -59,7 +83,7 @@ module ValidatesTimeliness 
     | 
|
| 
       59 
83 
     | 
    
         
             
                  end
         
     | 
| 
       60 
84 
     | 
    
         | 
| 
       61 
85 
     | 
    
         
             
                  def read_timeliness_attribute_before_type_cast(attr_name)
         
     | 
| 
       62 
     | 
    
         
            -
                    @timeliness_cache && @timeliness_cache[attr_name] || @attributes[attr_name]
         
     | 
| 
      
 86 
     | 
    
         
            +
                    @timeliness_cache && @timeliness_cache[attr_name] || @attributes[attr_name].value_before_type_cast
         
     | 
| 
       63 
87 
     | 
    
         
             
                  end
         
     | 
| 
       64 
88 
     | 
    
         | 
| 
       65 
89 
     | 
    
         
             
                  def _clear_timeliness_cache
         
     | 
| 
         @@ -2,7 +2,7 @@ module ValidatesTimeliness 
     | 
|
| 
       2 
2 
     | 
    
         
             
              class Railtie < Rails::Railtie
         
     | 
| 
       3 
3 
     | 
    
         
             
                initializer "validates_timeliness.initialize_active_record", :after => 'active_record.initialize_timezone' do
         
     | 
| 
       4 
4 
     | 
    
         
             
                  ActiveSupport.on_load(:active_record) do
         
     | 
| 
       5 
     | 
    
         
            -
                    ValidatesTimeliness.default_timezone = ActiveRecord 
     | 
| 
      
 5 
     | 
    
         
            +
                    ValidatesTimeliness.default_timezone = ActiveRecord.default_timezone
         
     | 
| 
       6 
6 
     | 
    
         
             
                    ValidatesTimeliness.extend_orms << :active_record
         
     | 
| 
       7 
7 
     | 
    
         
             
                    ValidatesTimeliness.load_orms
         
     | 
| 
       8 
8 
     | 
    
         
             
                  end
         
     | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    | 
         @@ -33,8 +33,6 @@ I18n.available_locales = ['en', 'es'] 
     | 
|
| 
       33 
33 
     | 
    
         
             
            # Extend TestModel as you would another ORM/ODM module
         
     | 
| 
       34 
34 
     | 
    
         
             
            module TestModelShim
         
     | 
| 
       35 
35 
     | 
    
         
             
              extend ActiveSupport::Concern
         
     | 
| 
       36 
     | 
    
         
            -
              include ValidatesTimeliness::AttributeMethods
         
     | 
| 
       37 
     | 
    
         
            -
              include ValidatesTimeliness::ORM::ActiveModel
         
     | 
| 
       38 
36 
     | 
    
         | 
| 
       39 
37 
     | 
    
         
             
              module ClassMethods
         
     | 
| 
       40 
38 
     | 
    
         
             
                # Hook into native time zone handling check, if any
         
     | 
| 
         @@ -46,18 +44,17 @@ end 
     | 
|
| 
       46 
44 
     | 
    
         | 
| 
       47 
45 
     | 
    
         
             
            class Person
         
     | 
| 
       48 
46 
     | 
    
         
             
              include TestModel
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
       49 
48 
     | 
    
         
             
              attribute :birth_date, :date
         
     | 
| 
       50 
49 
     | 
    
         
             
              attribute :birth_time, :time
         
     | 
| 
       51 
50 
     | 
    
         
             
              attribute :birth_datetime, :datetime
         
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
              define_attribute_methods model_attributes.keys
         
     | 
| 
       54 
51 
     | 
    
         
             
            end
         
     | 
| 
       55 
52 
     | 
    
         | 
| 
       56 
53 
     | 
    
         
             
            class PersonWithShim < Person
         
     | 
| 
       57 
54 
     | 
    
         
             
              include TestModelShim
         
     | 
| 
       58 
55 
     | 
    
         
             
            end
         
     | 
| 
       59 
56 
     | 
    
         | 
| 
       60 
     | 
    
         
            -
            ActiveRecord 
     | 
| 
      
 57 
     | 
    
         
            +
            ActiveRecord.default_timezone = :utc
         
     | 
| 
       61 
58 
     | 
    
         
             
            ActiveRecord::Base.time_zone_aware_attributes = true
         
     | 
| 
       62 
59 
     | 
    
         
             
            ActiveRecord::Base.establish_connection({:adapter => 'sqlite3', :database => ':memory:'})
         
     | 
| 
       63 
60 
     | 
    
         
             
            ActiveRecord::Base.time_zone_aware_types = [:datetime, :time]
         
     | 
| 
         @@ -1,22 +1,29 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module ModelHelpers 
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
              # Some test helpers from Rails source 
         
     | 
| 
       4 
     | 
    
         
            -
              def invalid!(attr_name, values, error = nil)
         
     | 
| 
       5 
     | 
    
         
            -
                 
     | 
| 
       6 
     | 
    
         
            -
                  expect(record). 
     | 
| 
      
 4 
     | 
    
         
            +
              def invalid!(attr_name, values, error = nil, model_class = Person)
         
     | 
| 
      
 5 
     | 
    
         
            +
                with_each_model_value(attr_name, values, model_class) do |record, value|
         
     | 
| 
      
 6 
     | 
    
         
            +
                  expect(record).to_not be_valid
         
     | 
| 
       7 
7 
     | 
    
         
             
                  expect(record.errors[attr_name].size).to be >= 1
         
     | 
| 
       8 
     | 
    
         
            -
             
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                  return unless error
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  if error.is_a?(Regexp)
         
     | 
| 
      
 12 
     | 
    
         
            +
                    expect(record.errors[attr_name].first).to match(error)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  else
         
     | 
| 
      
 14 
     | 
    
         
            +
                    expect(record.errors[attr_name].first).to eq(error)
         
     | 
| 
      
 15 
     | 
    
         
            +
                  end
         
     | 
| 
       9 
16 
     | 
    
         
             
                end
         
     | 
| 
       10 
17 
     | 
    
         
             
              end
         
     | 
| 
       11 
18 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
              def valid!(attr_name, values)
         
     | 
| 
       13 
     | 
    
         
            -
                 
     | 
| 
      
 19 
     | 
    
         
            +
              def valid!(attr_name, values, model_class = Person)
         
     | 
| 
      
 20 
     | 
    
         
            +
                with_each_model_value(attr_name, values, model_class) do |record, value|
         
     | 
| 
       14 
21 
     | 
    
         
             
                  expect(record).to be_valid
         
     | 
| 
       15 
22 
     | 
    
         
             
                end
         
     | 
| 
       16 
23 
     | 
    
         
             
              end
         
     | 
| 
       17 
24 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
              def  
     | 
| 
       19 
     | 
    
         
            -
                record =  
     | 
| 
      
 25 
     | 
    
         
            +
              def with_each_model_value(attr_name, values, model_class)
         
     | 
| 
      
 26 
     | 
    
         
            +
                record = model_class.new
         
     | 
| 
       20 
27 
     | 
    
         
             
                Array.wrap(values).each do |value|
         
     | 
| 
       21 
28 
     | 
    
         
             
                  record.send("#{attr_name}=", value)
         
     | 
| 
       22 
29 
     | 
    
         
             
                  yield record, value
         
     | 
    
        data/spec/support/test_model.rb
    CHANGED
    
    | 
         @@ -1,61 +1,13 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module TestModel
         
     | 
| 
       2 
2 
     | 
    
         
             
              extend ActiveSupport::Concern
         
     | 
| 
       3 
     | 
    
         
            -
               
     | 
| 
      
 3 
     | 
    
         
            +
              include ActiveModel::Model
         
     | 
| 
      
 4 
     | 
    
         
            +
              include ActiveModel::Attributes
         
     | 
| 
       4 
5 
     | 
    
         
             
              include ActiveModel::Validations
         
     | 
| 
       5 
     | 
    
         
            -
              include  
     | 
| 
      
 6 
     | 
    
         
            +
              include ValidatesTimeliness::AttributeMethods
         
     | 
| 
      
 7 
     | 
    
         
            +
              include ValidatesTimeliness::ORM::ActiveModel
         
     | 
| 
       6 
8 
     | 
    
         | 
| 
       7 
9 
     | 
    
         
             
              included do
         
     | 
| 
       8 
10 
     | 
    
         
             
                attribute_method_suffix "="
         
     | 
| 
       9 
     | 
    
         
            -
                cattr_accessor :model_attributes
         
     | 
| 
       10 
     | 
    
         
            -
              end
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
              module ClassMethods
         
     | 
| 
       13 
     | 
    
         
            -
                def attribute(name, type)
         
     | 
| 
       14 
     | 
    
         
            -
                  self.model_attributes ||= {}
         
     | 
| 
       15 
     | 
    
         
            -
                  self.model_attributes[name] = type
         
     | 
| 
       16 
     | 
    
         
            -
                end
         
     | 
| 
       17 
     | 
    
         
            -
             
     | 
| 
       18 
     | 
    
         
            -
                def define_method_attribute=(attr_name, owner: nil)
         
     | 
| 
       19 
     | 
    
         
            -
                  generated_attribute_methods.module_eval("def #{attr_name}=(new_value); @attributes['#{attr_name}']=self.class.type_cast('#{attr_name}', new_value); end", __FILE__, __LINE__)
         
     | 
| 
       20 
     | 
    
         
            -
                end
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
                def define_method_attribute(attr_name, owner: nil)
         
     | 
| 
       23 
     | 
    
         
            -
                  generated_attribute_methods.module_eval("def #{attr_name}; @attributes['#{attr_name}']; end", __FILE__, __LINE__)
         
     | 
| 
       24 
     | 
    
         
            -
                end
         
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
                def type_cast(attr_name, value)
         
     | 
| 
       27 
     | 
    
         
            -
                  return value unless value.is_a?(String)
         
     | 
| 
       28 
     | 
    
         
            -
                  type_name = model_attributes[attr_name.to_sym]
         
     | 
| 
       29 
     | 
    
         
            -
                  type = ActiveModel::Type.lookup(type_name)
         
     | 
| 
       30 
     | 
    
         
            -
                  type.cast(value)
         
     | 
| 
       31 
     | 
    
         
            -
                end
         
     | 
| 
       32 
     | 
    
         
            -
              end
         
     | 
| 
       33 
     | 
    
         
            -
             
     | 
| 
       34 
     | 
    
         
            -
              def initialize(attributes = nil)
         
     | 
| 
       35 
     | 
    
         
            -
                @attributes = self.class.model_attributes.keys.inject({}) do |hash, column|
         
     | 
| 
       36 
     | 
    
         
            -
                  hash[column.to_s] = nil
         
     | 
| 
       37 
     | 
    
         
            -
                  hash
         
     | 
| 
       38 
     | 
    
         
            -
                end
         
     | 
| 
       39 
     | 
    
         
            -
                self.attributes = attributes unless attributes.nil?
         
     | 
| 
       40 
     | 
    
         
            -
              end
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
              def attributes
         
     | 
| 
       43 
     | 
    
         
            -
                @attributes
         
     | 
| 
       44 
     | 
    
         
            -
              end
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
              def attributes=(new_attributes={})
         
     | 
| 
       47 
     | 
    
         
            -
                new_attributes.each do |key, value|
         
     | 
| 
       48 
     | 
    
         
            -
                  send "#{key}=", value
         
     | 
| 
       49 
     | 
    
         
            -
                end
         
     | 
| 
       50 
     | 
    
         
            -
              end
         
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
              def method_missing(method_id, *args, &block)
         
     | 
| 
       53 
     | 
    
         
            -
                if !matched_attribute_method(method_id.to_s).nil?
         
     | 
| 
       54 
     | 
    
         
            -
                  self.class.define_attribute_methods self.class.model_attributes.keys
         
     | 
| 
       55 
     | 
    
         
            -
                  send(method_id, *args, &block)
         
     | 
| 
       56 
     | 
    
         
            -
                else
         
     | 
| 
       57 
     | 
    
         
            -
                  super
         
     | 
| 
       58 
     | 
    
         
            -
                end
         
     | 
| 
       59 
11 
     | 
    
         
             
              end
         
     | 
| 
       60 
12 
     | 
    
         
             
            end
         
     | 
| 
       61 
13 
     | 
    
         | 
| 
         @@ -44,9 +44,11 @@ RSpec.describe ValidatesTimeliness::AttributeMethods do 
     | 
|
| 
       44 
44 
     | 
    
         
             
                  class PersonWithParser
         
     | 
| 
       45 
45 
     | 
    
         
             
                    include TestModel
         
     | 
| 
       46 
46 
     | 
    
         
             
                    include TestModelShim
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
       47 
48 
     | 
    
         
             
                    attribute :birth_date, :date
         
     | 
| 
       48 
49 
     | 
    
         
             
                    attribute :birth_time, :time
         
     | 
| 
       49 
50 
     | 
    
         
             
                    attribute :birth_datetime, :datetime
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
       50 
52 
     | 
    
         
             
                    validates_date :birth_date
         
     | 
| 
       51 
53 
     | 
    
         
             
                    validates_time :birth_time
         
     | 
| 
       52 
54 
     | 
    
         
             
                    validates_datetime :birth_datetime
         
     | 
| 
         @@ -54,8 +56,10 @@ RSpec.describe ValidatesTimeliness::AttributeMethods do 
     | 
|
| 
       54 
56 
     | 
    
         | 
| 
       55 
57 
     | 
    
         
             
                  it 'should parse a string value' do
         
     | 
| 
       56 
58 
     | 
    
         
             
                    expect(Timeliness::Parser).to receive(:parse)
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
       57 
60 
     | 
    
         
             
                    r = PersonWithParser.new
         
     | 
| 
       58 
61 
     | 
    
         
             
                    r.birth_date = '2010-01-01'
         
     | 
| 
      
 62 
     | 
    
         
            +
                    r.birth_date # parsing happens on read not write
         
     | 
| 
       59 
63 
     | 
    
         
             
                  end
         
     | 
| 
       60 
64 
     | 
    
         | 
| 
       61 
65 
     | 
    
         
             
                end
         
     | 
| 
         @@ -63,61 +63,30 @@ RSpec.describe ValidatesTimeliness::Converter do 
     | 
|
| 
       63 
63 
     | 
    
         | 
| 
       64 
64 
     | 
    
         
             
                describe "for datetime type" do
         
     | 
| 
       65 
65 
     | 
    
         
             
                  let(:type) { :datetime }
         
     | 
| 
      
 66 
     | 
    
         
            +
                  let(:time_zone_aware) { true }
         
     | 
| 
       66 
67 
     | 
    
         | 
| 
       67 
     | 
    
         
            -
                  it  
     | 
| 
       68 
     | 
    
         
            -
                    expect(type_cast_value( 
     | 
| 
      
 68 
     | 
    
         
            +
                  it "should return Date as Time value" do
         
     | 
| 
      
 69 
     | 
    
         
            +
                    expect(type_cast_value(Date.new(2010, 1, 1))).to eq(Time.local(2010, 1, 1, 0, 0, 0))
         
     | 
| 
       69 
70 
     | 
    
         
             
                  end
         
     | 
| 
       70 
71 
     | 
    
         | 
| 
       71 
     | 
    
         
            -
                   
     | 
| 
       72 
     | 
    
         
            -
                     
     | 
| 
       73 
     | 
    
         
            -
             
     | 
| 
       74 
     | 
    
         
            -
                    around { |example|
         
     | 
| 
       75 
     | 
    
         
            -
                      Time.use_zone("Perth", &example)
         
     | 
| 
       76 
     | 
    
         
            -
                    }
         
     | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
       78 
     | 
    
         
            -
                    it "should return Date as Time value" do
         
     | 
| 
       79 
     | 
    
         
            -
                      Time.use_zone('London') do
         
     | 
| 
       80 
     | 
    
         
            -
                        result = type_cast_value(Date.new(2010, 1, 1))
         
     | 
| 
       81 
     | 
    
         
            -
                        expected = Time.zone.local(2010, 1, 1, 0, 0, 0)
         
     | 
| 
       82 
     | 
    
         
            -
             
     | 
| 
       83 
     | 
    
         
            -
                        expect(result).to eq(expected)
         
     | 
| 
       84 
     | 
    
         
            -
                        expect(result.zone).to eq(expected.zone)
         
     | 
| 
       85 
     | 
    
         
            -
                      end
         
     | 
| 
       86 
     | 
    
         
            -
                    end
         
     | 
| 
       87 
     | 
    
         
            -
             
     | 
| 
       88 
     | 
    
         
            -
                    it "should return same Time value" do
         
     | 
| 
       89 
     | 
    
         
            -
                      value = Time.utc(2010, 1, 1, 12, 34, 56)
         
     | 
| 
       90 
     | 
    
         
            -
                      expect(type_cast_value(value)).to eq(value)
         
     | 
| 
       91 
     | 
    
         
            -
                    end
         
     | 
| 
       92 
     | 
    
         
            -
             
     | 
| 
       93 
     | 
    
         
            -
                    it "should return as Time with same component values" do
         
     | 
| 
       94 
     | 
    
         
            -
                      expect(type_cast_value(DateTime.civil_from_format(:utc, 2010, 1, 1, 12, 34, 56))).to eq(Time.utc(2010, 1, 1, 12, 34, 56))
         
     | 
| 
       95 
     | 
    
         
            -
                    end
         
     | 
| 
       96 
     | 
    
         
            -
             
     | 
| 
       97 
     | 
    
         
            -
                    it "should return same Time in correct zone if timezone aware" do
         
     | 
| 
       98 
     | 
    
         
            -
                      value = Time.utc(2010, 1, 1, 12, 34, 56)
         
     | 
| 
       99 
     | 
    
         
            -
                      result = type_cast_value(value)
         
     | 
| 
       100 
     | 
    
         
            -
             
     | 
| 
       101 
     | 
    
         
            -
                      expect(result).to eq(Time.zone.local(2010, 1, 1, 20, 34, 56))
         
     | 
| 
       102 
     | 
    
         
            -
                      expect(result.zone).to eq('AWST')
         
     | 
| 
       103 
     | 
    
         
            -
                    end
         
     | 
| 
      
 72 
     | 
    
         
            +
                  it "should return same Time value" do
         
     | 
| 
      
 73 
     | 
    
         
            +
                    value = Time.utc(2010, 1, 1, 12, 34, 56)
         
     | 
| 
      
 74 
     | 
    
         
            +
                    expect(type_cast_value(Time.utc(2010, 1, 1, 12, 34, 56))).to eq(value)
         
     | 
| 
       104 
75 
     | 
    
         
             
                  end
         
     | 
| 
       105 
76 
     | 
    
         | 
| 
       106 
     | 
    
         
            -
                   
     | 
| 
       107 
     | 
    
         
            -
                     
     | 
| 
       108 
     | 
    
         
            -
             
     | 
| 
       109 
     | 
    
         
            -
                    it "should return Date as Time value" do
         
     | 
| 
       110 
     | 
    
         
            -
                      expect(type_cast_value(Date.new(2010, 1, 1))).to eq(Time.local(2010, 1, 1, 0, 0, 0))
         
     | 
| 
       111 
     | 
    
         
            -
                    end
         
     | 
| 
      
 77 
     | 
    
         
            +
                  it "should return as Time with same component values" do
         
     | 
| 
      
 78 
     | 
    
         
            +
                    expect(type_cast_value(DateTime.civil_from_format(:utc, 2010, 1, 1, 12, 34, 56))).to eq(Time.utc(2010, 1, 1, 12, 34, 56))
         
     | 
| 
      
 79 
     | 
    
         
            +
                  end
         
     | 
| 
       112 
80 
     | 
    
         | 
| 
       113 
     | 
    
         
            -
             
     | 
| 
       114 
     | 
    
         
            -
             
     | 
| 
       115 
     | 
    
         
            -
             
     | 
| 
       116 
     | 
    
         
            -
                     
     | 
| 
      
 81 
     | 
    
         
            +
                  it "should return same Time in correct zone if timezone aware" do
         
     | 
| 
      
 82 
     | 
    
         
            +
                    value = Time.utc(2010, 1, 1, 12, 34, 56)
         
     | 
| 
      
 83 
     | 
    
         
            +
                    result = type_cast_value(value)
         
     | 
| 
      
 84 
     | 
    
         
            +
                    expect(result).to eq(Time.zone.local(2010, 1, 1, 23, 34, 56))
         
     | 
| 
      
 85 
     | 
    
         
            +
                    expect(result.zone).to eq('AEDT')
         
     | 
| 
      
 86 
     | 
    
         
            +
                  end
         
     | 
| 
       117 
87 
     | 
    
         | 
| 
       118 
     | 
    
         
            -
             
     | 
| 
       119 
     | 
    
         
            -
             
     | 
| 
       120 
     | 
    
         
            -
                    end
         
     | 
| 
      
 88 
     | 
    
         
            +
                  it 'should return nil for invalid value types' do
         
     | 
| 
      
 89 
     | 
    
         
            +
                    expect(type_cast_value(12)).to eq(nil)
         
     | 
| 
       121 
90 
     | 
    
         
             
                  end
         
     | 
| 
       122 
91 
     | 
    
         
             
                end
         
     | 
| 
       123 
92 
     | 
    
         | 
| 
         
            File without changes
         
     | 
| 
         @@ -0,0 +1,57 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            RSpec.describe ValidatesTimeliness::Validator, ":format option" do
         
     | 
| 
      
 2 
     | 
    
         
            +
              with_config(:use_plugin_parser, true)
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
              describe "for date type" do
         
     | 
| 
      
 5 
     | 
    
         
            +
                before do
         
     | 
| 
      
 6 
     | 
    
         
            +
                  Person.validates_date :birth_date, format: "yyyy-mm-dd"
         
     | 
| 
      
 7 
     | 
    
         
            +
                end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                it "should not be valid for string given in the wrong format" do
         
     | 
| 
      
 10 
     | 
    
         
            +
                  invalid!(:birth_date, '23/12/2023', /is not a valid date/)
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                it "should be valid for string given in the right format" do
         
     | 
| 
      
 14 
     | 
    
         
            +
                  valid!(:birth_date, '2023-12-23')
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                it "should be valid for date instance" do
         
     | 
| 
      
 18 
     | 
    
         
            +
                  valid!(:birth_date, Date.new(2022,12,23))
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              describe "for time type" do
         
     | 
| 
      
 23 
     | 
    
         
            +
                before do
         
     | 
| 
      
 24 
     | 
    
         
            +
                  Person.validates_time :birth_time, format: "hh:nn:ss"
         
     | 
| 
      
 25 
     | 
    
         
            +
                end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                it "should not be valid for string given in the wrong format" do
         
     | 
| 
      
 28 
     | 
    
         
            +
                  invalid!(:birth_time, "00-00-00", /is not a valid time/)
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                it "should be valid for string given in the right format" do
         
     | 
| 
      
 32 
     | 
    
         
            +
                  valid!(:birth_time, "00:00:00")
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                it "should be valid for date instance" do
         
     | 
| 
      
 36 
     | 
    
         
            +
                  valid!(:birth_time, Time.new(2010, 1, 1, 0, 0, 0))
         
     | 
| 
      
 37 
     | 
    
         
            +
                end
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
              describe "for datetime type" do
         
     | 
| 
      
 41 
     | 
    
         
            +
                before do
         
     | 
| 
      
 42 
     | 
    
         
            +
                  Person.validates_datetime :birth_datetime, format: "yyyy-mm-dd hh:nn:ss"
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                it "should not be valid for string given in the wrong format" do
         
     | 
| 
      
 46 
     | 
    
         
            +
                  invalid!(:birth_datetime, "01-01-2010 00-00-00", /is not a valid datetime/)
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                it "should be valid for string given in the right format" do
         
     | 
| 
      
 50 
     | 
    
         
            +
                  valid!(:birth_datetime, "2010-01-01 00:00:00")
         
     | 
| 
      
 51 
     | 
    
         
            +
                end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                it "should be valid for date instance" do
         
     | 
| 
      
 54 
     | 
    
         
            +
                  valid!(:birth_datetime, DateTime.new(2010, 1, 1, 0, 0, 0))
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
              end
         
     | 
| 
      
 57 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -21,12 +21,13 @@ Gem::Specification.new do |s| 
     | 
|
| 
       21 
21 
     | 
    
         
             
              s.extra_rdoc_files = ["README.md", "CHANGELOG.md", "LICENSE"]
         
     | 
| 
       22 
22 
     | 
    
         | 
| 
       23 
23 
     | 
    
         
             
              s.metadata = {
         
     | 
| 
      
 24 
     | 
    
         
            +
                "rubygems_mfa_required" => "true",
         
     | 
| 
       24 
25 
     | 
    
         
             
                "bug_tracker_uri" => "#{github_url}/issues",
         
     | 
| 
       25 
26 
     | 
    
         
             
                "changelog_uri"   => "#{github_url}/blob/master/CHANGELOG.md",
         
     | 
| 
       26 
27 
     | 
    
         
             
                "source_code_uri" => "#{github_url}",
         
     | 
| 
       27 
28 
     | 
    
         
             
                "wiki_uri"        => "#{github_url}/wiki",
         
     | 
| 
       28 
29 
     | 
    
         
             
              }
         
     | 
| 
       29 
30 
     | 
    
         | 
| 
       30 
     | 
    
         
            -
              s.add_runtime_dependency("activemodel", [">=  
     | 
| 
      
 31 
     | 
    
         
            +
              s.add_runtime_dependency("activemodel", [">= 7.0.0", "< 8"])
         
     | 
| 
       31 
32 
     | 
    
         
             
              s.add_runtime_dependency("timeliness", [">= 0.3.10", "< 1"])
         
     | 
| 
       32 
33 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: validates_timeliness
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version:  
     | 
| 
      
 4 
     | 
    
         
            +
              version: 7.0.0.beta2
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Adam Meehan
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire:
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2023- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2023-03-24 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: activemodel
         
     | 
| 
         @@ -16,20 +16,20 @@ dependencies: 
     | 
|
| 
       16 
16 
     | 
    
         
             
                requirements:
         
     | 
| 
       17 
17 
     | 
    
         
             
                - - ">="
         
     | 
| 
       18 
18 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       19 
     | 
    
         
            -
                    version:  
     | 
| 
      
 19 
     | 
    
         
            +
                    version: 7.0.0
         
     | 
| 
       20 
20 
     | 
    
         
             
                - - "<"
         
     | 
| 
       21 
21 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       22 
     | 
    
         
            -
                    version: ' 
     | 
| 
      
 22 
     | 
    
         
            +
                    version: '8'
         
     | 
| 
       23 
23 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       24 
24 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       25 
25 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       26 
26 
     | 
    
         
             
                requirements:
         
     | 
| 
       27 
27 
     | 
    
         
             
                - - ">="
         
     | 
| 
       28 
28 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       29 
     | 
    
         
            -
                    version:  
     | 
| 
      
 29 
     | 
    
         
            +
                    version: 7.0.0
         
     | 
| 
       30 
30 
     | 
    
         
             
                - - "<"
         
     | 
| 
       31 
31 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       32 
     | 
    
         
            -
                    version: ' 
     | 
| 
      
 32 
     | 
    
         
            +
                    version: '8'
         
     | 
| 
       33 
33 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       34 
34 
     | 
    
         
             
              name: timeliness
         
     | 
| 
       35 
35 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -66,8 +66,8 @@ files: 
     | 
|
| 
       66 
66 
     | 
    
         
             
            - LICENSE
         
     | 
| 
       67 
67 
     | 
    
         
             
            - README.md
         
     | 
| 
       68 
68 
     | 
    
         
             
            - Rakefile
         
     | 
| 
       69 
     | 
    
         
            -
            - gemfiles/ 
     | 
| 
       70 
     | 
    
         
            -
            - gemfiles/ 
     | 
| 
      
 69 
     | 
    
         
            +
            - gemfiles/rails_7_0.gemfile
         
     | 
| 
      
 70 
     | 
    
         
            +
            - gemfiles/rails_edge.gemfile
         
     | 
| 
       71 
71 
     | 
    
         
             
            - init.rb
         
     | 
| 
       72 
72 
     | 
    
         
             
            - lib/generators/validates_timeliness/install_generator.rb
         
     | 
| 
       73 
73 
     | 
    
         
             
            - lib/generators/validates_timeliness/templates/en.yml
         
     | 
| 
         @@ -94,10 +94,12 @@ files: 
     | 
|
| 
       94 
94 
     | 
    
         
             
            - spec/validates_timeliness/extensions/date_time_select_spec.rb
         
     | 
| 
       95 
95 
     | 
    
         
             
            - spec/validates_timeliness/extensions/multiparameter_handler_spec.rb
         
     | 
| 
       96 
96 
     | 
    
         
             
            - spec/validates_timeliness/helper_methods_spec.rb
         
     | 
| 
      
 97 
     | 
    
         
            +
            - spec/validates_timeliness/orm/active_model_spec.rb
         
     | 
| 
       97 
98 
     | 
    
         
             
            - spec/validates_timeliness/orm/active_record_spec.rb
         
     | 
| 
       98 
99 
     | 
    
         
             
            - spec/validates_timeliness/railtie_spec.rb
         
     | 
| 
       99 
100 
     | 
    
         
             
            - spec/validates_timeliness/validator/after_spec.rb
         
     | 
| 
       100 
101 
     | 
    
         
             
            - spec/validates_timeliness/validator/before_spec.rb
         
     | 
| 
      
 102 
     | 
    
         
            +
            - spec/validates_timeliness/validator/format_spec.rb
         
     | 
| 
       101 
103 
     | 
    
         
             
            - spec/validates_timeliness/validator/is_at_spec.rb
         
     | 
| 
       102 
104 
     | 
    
         
             
            - spec/validates_timeliness/validator/on_or_after_spec.rb
         
     | 
| 
       103 
105 
     | 
    
         
             
            - spec/validates_timeliness/validator/on_or_before_spec.rb
         
     | 
| 
         @@ -108,6 +110,7 @@ homepage: https://github.com/adzap/validates_timeliness 
     | 
|
| 
       108 
110 
     | 
    
         
             
            licenses:
         
     | 
| 
       109 
111 
     | 
    
         
             
            - MIT
         
     | 
| 
       110 
112 
     | 
    
         
             
            metadata:
         
     | 
| 
      
 113 
     | 
    
         
            +
              rubygems_mfa_required: 'true'
         
     | 
| 
       111 
114 
     | 
    
         
             
              bug_tracker_uri: https://github.com/adzap/validates_timeliness/issues
         
     | 
| 
       112 
115 
     | 
    
         
             
              changelog_uri: https://github.com/adzap/validates_timeliness/blob/master/CHANGELOG.md
         
     | 
| 
       113 
116 
     | 
    
         
             
              source_code_uri: https://github.com/adzap/validates_timeliness
         
     | 
| 
         @@ -123,9 +126,9 @@ required_ruby_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       123 
126 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       124 
127 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       125 
128 
     | 
    
         
             
              requirements:
         
     | 
| 
       126 
     | 
    
         
            -
              - - " 
     | 
| 
      
 129 
     | 
    
         
            +
              - - ">"
         
     | 
| 
       127 
130 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       128 
     | 
    
         
            -
                  version:  
     | 
| 
      
 131 
     | 
    
         
            +
                  version: 1.3.1
         
     | 
| 
       129 
132 
     | 
    
         
             
            requirements: []
         
     | 
| 
       130 
133 
     | 
    
         
             
            rubygems_version: 3.1.6
         
     | 
| 
       131 
134 
     | 
    
         
             
            signing_key:
         
     | 
| 
         @@ -142,10 +145,12 @@ test_files: 
     | 
|
| 
       142 
145 
     | 
    
         
             
            - spec/validates_timeliness/extensions/date_time_select_spec.rb
         
     | 
| 
       143 
146 
     | 
    
         
             
            - spec/validates_timeliness/extensions/multiparameter_handler_spec.rb
         
     | 
| 
       144 
147 
     | 
    
         
             
            - spec/validates_timeliness/helper_methods_spec.rb
         
     | 
| 
      
 148 
     | 
    
         
            +
            - spec/validates_timeliness/orm/active_model_spec.rb
         
     | 
| 
       145 
149 
     | 
    
         
             
            - spec/validates_timeliness/orm/active_record_spec.rb
         
     | 
| 
       146 
150 
     | 
    
         
             
            - spec/validates_timeliness/railtie_spec.rb
         
     | 
| 
       147 
151 
     | 
    
         
             
            - spec/validates_timeliness/validator/after_spec.rb
         
     | 
| 
       148 
152 
     | 
    
         
             
            - spec/validates_timeliness/validator/before_spec.rb
         
     | 
| 
      
 153 
     | 
    
         
            +
            - spec/validates_timeliness/validator/format_spec.rb
         
     | 
| 
       149 
154 
     | 
    
         
             
            - spec/validates_timeliness/validator/is_at_spec.rb
         
     | 
| 
       150 
155 
     | 
    
         
             
            - spec/validates_timeliness/validator/on_or_after_spec.rb
         
     | 
| 
       151 
156 
     | 
    
         
             
            - spec/validates_timeliness/validator/on_or_before_spec.rb
         
     |