activescaffold/active_scaffold

View on GitHub
lib/active_scaffold/bridges/date_picker/ext.rb

Summary

Maintainability
A
45 mins
Test Coverage
C
77%
class File #:nodoc:
  unless File.respond_to?(:binread)
    def self.binread(file)
      File.open(file, 'rb', &:read)
    end
  end
end

class ActiveScaffold::Bridges::DatePicker
  module DatePickerBridge
    def initialize(model_id)
      super
      return unless ActiveScaffold::Bridges::DatePicker.default_ui

      date_picker_fields = _columns.collect { |c| {:name => c.name.to_sym, :type => c.type} if %i[date datetime].include?(c.type) }.compact
      # check to see if file column was used on the model
      return if date_picker_fields.empty?

      # automatically set the forum_ui to a date_picker or datetime_picker
      date_picker_fields.each do |field|
        col_config = columns[field[:name]]
        col_config.form_ui = (field[:type] == :date ? :date_picker : :datetime_picker)
      end
    end
  end

  module Finder
    def datetime_conversion_for_condition(column)
      if column.search_ui == :date_picker
        :to_date
      else
        super
      end
    end

    def datetime_column_date?(column)
      if %i[date_picker datetime_picker].include? column.search_ui
        column.search_ui == :date_picker
      else
        super
      end
    end

    def format_for_date(column, value, format_name = column.options[:format])
      super column, value, format_name || (:default if column.search_ui == :date_picker)
    end
  end

  module AttributeParams
    def datetime_conversion_for_value(column)
      if column.form_ui == :date_picker
        :to_date
      else
        super
      end
    end
  end
end

ActiveScaffold::Config::Core.send :prepend, ActiveScaffold::Bridges::DatePicker::DatePickerBridge
ActionView::Base.class_eval do
  alias_method :active_scaffold_search_date_picker, :active_scaffold_search_datetime
  alias_method :active_scaffold_search_datetime_picker, :active_scaffold_search_datetime
  alias_method :active_scaffold_human_condition_date_picker, :active_scaffold_human_condition_datetime
  alias_method :active_scaffold_human_condition_datetime_picker, :active_scaffold_human_condition_datetime
  include ActiveScaffold::Bridges::DatePicker::Helper::SearchColumnHelpers
  alias_method :active_scaffold_search_datetime_picker_field, :active_scaffold_search_date_picker_field
  include ActiveScaffold::Bridges::DatePicker::Helper::FormColumnHelpers
  alias_method :active_scaffold_input_datetime_picker, :active_scaffold_input_date_picker
  include ActiveScaffold::Bridges::DatePicker::Helper::DatepickerColumnHelpers
end
ActiveScaffold::Finder::ClassMethods.module_eval do
  prepend ActiveScaffold::Bridges::DatePicker::Finder
  alias_method :condition_for_date_picker_type, :condition_for_datetime
  alias_method :condition_for_datetime_picker_type, :condition_for_datetime
end
ActiveScaffold::AttributeParams.module_eval do
  prepend ActiveScaffold::Bridges::DatePicker::AttributeParams
  alias_method :column_value_for_date_picker_type, :column_value_for_datetime_type
  alias_method :column_value_for_datetime_picker_type, :column_value_for_datetime_type
end