Sha256: 838a9ca7c54255f99e898e2c449298690cf1a67e87c93b46d7e130b4adbbb57d

Contents?: true

Size: 1.05 KB

Versions: 4

Compression:

Stored size: 1.05 KB

Contents

class Dorsale::SmallData::Filter
  STRATEGIES = {}

  attr_reader :jar

  def initialize(jar)
    @jar = jar
  end

  def strategies
    self.class::STRATEGIES
  end

  def apply(query)
    strategies.each do |key, strategy|
      value = get(key)

      next if value.blank?

      query = strategy.apply(query, value)
    end

    return query
  end

  def method_missing(method, *args)
    if method.to_s.end_with?("=")
      key    = method.to_s[0..-2]
      value  = args.first
      action = :write
    else
      key    = method.to_s
      action = :read
    end

    if strategies.key?(key) && action == :read
      get(key)
    elsif strategies.key?(key) && action == :write
      set(key, value)
    else
      super
    end
  end

  def read
    JSON.parse jar["filters"].to_s
  rescue JSON::ParserError
    {}
  end

  def write(filters)
    jar["filters"] = filters.to_json
  end

  def merge(new_filters)
    write read.merge(new_filters)
  end

  private

  def get(key)
    read[key.to_s]
  end

  def set(key, value)
    merge(key.to_s => value)
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
dorsale-3.4.0 app/filters/dorsale/small_data/filter.rb
dorsale-3.3.0 app/filters/dorsale/small_data/filter.rb
dorsale-3.2.0 app/filters/dorsale/small_data/filter.rb
dorsale-3.1.7 app/filters/dorsale/small_data/filter.rb