Sha256: bea55c3816db8fab5b42d66a753a0fd1025f6ac23caec6f4eda46780b875dc9d

Contents?: true

Size: 1.98 KB

Versions: 18

Compression:

Stored size: 1.98 KB

Contents

module Symphonia
  module ModelFilters
    class Base
      attr_reader :name, :type, :options, :query, :value, :operator

      # @param [Symphonia::ModelAttributes::Attribute] attribute
      # @param [Symphonia::Query] query
      # @param [Hash] options
      def initialize(attribute, query, options = {})
        if attribute.is_a? String
          ActiveSupport::Deprecation.warn("name as argument is no longer supported - use Attribute")
          @name = attribute
        else
          @name = attribute.name
          @attribute = attribute
        end
        @options = options
        @query = query
        @operator = 'eq'
      end

      def caption
        @caption = @options[:caption]
        @caption ||= query.model.human_attribute_name(name)
      end

      def form_field(_context)
        raise NotImplementError
      end

      def inspect
        "#<#{self.class.name} name='#{name}' caption='#{caption}' options=#{@options.inspect}>"
      end

      def active?
        !!query.active_filters[name]
      end

      def value=(to)
        @value = if (m = to.downcase.match(/^([!~><]+)(.*)/))
                   self.operator = m[1]
                   m[2]
                 else
                   @operator ||= 'eq'
                   to
                 end
      end

      def operator=(to)
        @operator = case to
                    when '!'
                      'not_eq'
                    when '~'
                      @value = "%#{@value}%"
                      'matches'
                    when '!~'
                      @value = "%#{@value}%"
                      'not_matches'
                    when '>'
                      'lt'
                    when '<'
                      'gt'
                    else
                      'eq'
                    end
      end

      def apply(_scope)
        Rails.logger.debug("Apply filter #{name} '#{operator}' #{value}")
      end

      private

      def form_field_name
        name
      end

    end
  end
end

Version data entries

18 entries across 18 versions & 1 rubygems

Version Path
symphonia-6.0.6 lib/symphonia/model_filters/base.rb
symphonia-6.0.5 lib/symphonia/model_filters/base.rb
symphonia-6.0.4 lib/symphonia/model_filters/base.rb
symphonia-6.0.2 lib/symphonia/model_filters/base.rb
symphonia-6.0.1 lib/symphonia/model_filters/base.rb
symphonia-6.0.0 lib/symphonia/model_filters/base.rb
symphonia-5.0.6 lib/symphonia/model_filters/base.rb
symphonia-5.0.5 lib/symphonia/model_filters/base.rb
symphonia-5.0.4 lib/symphonia/model_filters/base.rb
symphonia-5.0.3 lib/symphonia/model_filters/base.rb
symphonia-5.0.0 lib/symphonia/model_filters/base.rb
symphonia-4.2.0 lib/symphonia/model_filters/base.rb
symphonia-4.1.3 lib/symphonia/model_filters/base.rb
symphonia-4.1.2 lib/symphonia/model_filters/base.rb
symphonia-4.1.1 lib/symphonia/model_filters/base.rb
symphonia-4.1.0 lib/symphonia/model_filters/base.rb
symphonia-4.0.1 lib/symphonia/model_filters/base.rb
symphonia-4.0.0 lib/symphonia/model_filters/base.rb