Sha256: 8628384b7c0a2226fa400b569bd67dbee8463d9096df3470610be8e43f10c3b6

Contents?: true

Size: 1.44 KB

Versions: 71

Compression:

Stored size: 1.44 KB

Contents

module RSpectacular
  module ActiveRecord
    module Matchers
      class DateRangeMatcher
        include Shoulda::ActiveRecord::Helpers

        def initialize(dates)
          @begin_field  = dates[:from].to_s
          @end_field    = dates[:to].to_s

          @begin_method = "#{dates[:from].to_s}=".to_sym
          @end_method   = "#{dates[:to].to_s}=".to_sym
        end

        def matches?(rangeable)
          @rangeable = rangeable
          beginning_date = Date.today
          ending_date = Date.today - 1

          rangeable.send(@begin_method, beginning_date)
          rangeable.send(@end_method, ending_date)

          rangeable.valid?

          rangeable.errors[@begin_field].include?("must be on or before #{ending_date.to_s}") &&
          rangeable.errors[@end_field].include?("must be on or after #{beginning_date.to_s}")
        end

        def failure_message
          "#{@rangeable_class} should only accept a valid date range from #{@begin_field} to #{@end_field}, got: #{pretty_error_messages(@rangeable)}"
        end

        def negative_failure_message
          "#{@rangeable_class} shouldn't accept a valid date range from #{@begin_field} to #{@end_field}, got: #{pretty_error_messages(@rangeable)}"
        end

        def description
          "should be contain a valid range for #{@rangeable_class}"
        end
      end

      def validate_date_range(dates)
        DateRangeMatcher.new(dates)
      end
    end
  end
end

Version data entries

71 entries across 71 versions & 1 rubygems

Version Path
rspectacular-0.53.0 lib/rspectacular/matchers/active_record/date_range_matcher.rb
rspectacular-0.52.0 lib/rspectacular/matchers/active_record/date_range_matcher.rb
rspectacular-0.51.0 lib/rspectacular/matchers/active_record/date_range_matcher.rb
rspectacular-0.50.0 lib/rspectacular/matchers/active_record/date_range_matcher.rb
rspectacular-0.49.0 lib/rspectacular/matchers/active_record/date_range_matcher.rb
rspectacular-0.48.0 lib/rspectacular/matchers/active_record/date_range_matcher.rb
rspectacular-0.47.0 lib/rspectacular/matchers/active_record/date_range_matcher.rb
rspectacular-0.46.0 lib/rspectacular/matchers/active_record/date_range_matcher.rb
rspectacular-0.45.0 lib/rspectacular/matchers/active_record/date_range_matcher.rb
rspectacular-0.44.0 lib/rspectacular/matchers/active_record/date_range_matcher.rb
rspectacular-0.43.0 lib/rspectacular/matchers/active_record/date_range_matcher.rb
rspectacular-0.42.0 lib/rspectacular/matchers/active_record/date_range_matcher.rb
rspectacular-0.41.0 lib/rspectacular/matchers/active_record/date_range_matcher.rb
rspectacular-0.40.0 lib/rspectacular/matchers/active_record/date_range_matcher.rb
rspectacular-0.39.0 lib/rspectacular/matchers/active_record/date_range_matcher.rb
rspectacular-0.38.0 lib/rspectacular/matchers/active_record/date_range_matcher.rb
rspectacular-0.37.0 lib/rspectacular/matchers/active_record/date_range_matcher.rb
rspectacular-0.36.0 lib/rspectacular/matchers/active_record/date_range_matcher.rb
rspectacular-0.35.0 lib/rspectacular/matchers/active_record/date_range_matcher.rb
rspectacular-0.34.0 lib/rspectacular/matchers/active_record/date_range_matcher.rb