Sha256: 7cb6e6a3b037f2bcdd206173e1c514dadded79e49a52955e16e61bbb26be4814
Contents?: true
Size: 1.62 KB
Versions: 3
Compression:
Stored size: 1.62 KB
Contents
# frozen_string_literal: true require 'json' class SearchCriteria attr_accessor :filters, :match def initialize(filters: [], match: 'all') @filters = filters @match = match end # Nested Filter class for search criteria filters class Filter attr_accessor :field, :operator, :value, :values, :lower, :upper def initialize( field:, operator:, value: nil, values: nil, lower: nil, upper: nil ) @field = field @operator = operator @value = value @values = values @lower = lower @upper = upper end # Class method to create a Filter from a JSON string def self.from_json(data) new( field: data['field'], operator: data['operator'], value: data['value'], values: data['values'], lower: data['lower'], upper: data['upper'] ) end def self.from_site_id(id) new( field: 'site-id', operator: 'in', values: [id] ) end def to_json(*_options) { field:, operator:, value:, values:, lower:, upper: }.compact end end # Method to add a filter to the search criteria def add_filter(filter) @filters << name end # Class method to create SearchCriteria from a JSON string def self.from_json(data) return nil if data.nil? filters = data['filters'].map do |filter_data| Filter.from_json(filter_data) # Utilize Filter.from_json end new(filters:, match: data['match']) end def to_json(*_args) { match: @match, filters: @filters.map(&:to_json) } end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
avs-0.1.3 | lib/domain/search_criteria/model.rb |
avs-0.1.2 | lib/domain/search_criteria/model.rb |
avs-0.1.1 | lib/domain/search_criteria/model.rb |