module Adjective::Storable
Public Instance Methods
can_store?(items)
click to toggle source
# File lib/adjective/concerns/storable.rb, line 23 def can_store?(items) return true if @max_size == :unlimited return true if (Array(items).length + @items.length) <= @max_size return false end
dump()
click to toggle source
Dump - Delete all
# File lib/adjective/concerns/storable.rb, line 69 def dump outbound_items = @items @items = [] return outbound_items end
Also aliased as: clear
dump_by(attribute, value)
click to toggle source
Dump selection - Selective delete
# File lib/adjective/concerns/storable.rb, line 76 def dump_by(attribute, value) outbound_items = retrieve_by(attribute, value) @items = @items.select {|item| !outbound_items.include?(item) } return outbound_items end
Also aliased as: clear_by
empty?()
click to toggle source
Utility Methods
# File lib/adjective/concerns/storable.rb, line 15 def empty? @items.length === 0 end
empty_slots()
click to toggle source
# File lib/adjective/concerns/storable.rb, line 29 def empty_slots @max_size == :unlimited ? :unlimited : @max_size - @items.length end
full?()
click to toggle source
# File lib/adjective/concerns/storable.rb, line 19 def full? @max_size == :unlimited ? false : @items.length < @max_size end
initialize_storage_data(items = [], opts = {})
click to toggle source
# File lib/adjective/concerns/storable.rb, line 5 def initialize_storage_data(items = [], opts = {}) @items = items @initialized_at = Time.now @max_size = opts[:max_size] ||= :unlimited @default_sort_method = opts[:default_sort_method] ||= :object_id validate_inventory_capacity [:items, :initialized_at, :max_size, :default_sort_method].each {|attribute| self.class.send(:attr_accessor, attribute) } end
query(term, scope = :all)
click to toggle source
Simple Search options for scope are: :all, :attributes, :values
# File lib/adjective/concerns/storable.rb, line 35 def query(term, scope = :all) validate_query_scope(scope) matches = [] @items.each do |item| chunks = [] attributes = item.instance_variables.map {|ivar| ivar.to_s.gsub("@", "").to_sym} attributes.each do |attribute| chunks.push(construct_query_data(attribute.to_s, item.send(attribute).to_s)[scope]) end matches << item if chunks.join.include?(term) end return matches end
Also aliased as: search
retrieve_by(attribute, value)
click to toggle source
retrieve_by
- Get
# File lib/adjective/concerns/storable.rb, line 62 def retrieve_by(attribute, value) @items.select do |item| item if item.respond_to?(attribute) && item.send(attribute) === value end end
sort()
click to toggle source
Sorting
# File lib/adjective/concerns/storable.rb, line 83 def sort @items.sort_by { |item| item.send(@default_sort_method) } return @items end
sort!()
click to toggle source
# File lib/adjective/concerns/storable.rb, line 88 def sort! @items = @items.sort_by { |item| item.send(@default_sort_method) } return @items end
sort_by(attribute, order = :asc)
click to toggle source
# File lib/adjective/concerns/storable.rb, line 93 def sort_by(attribute, order = :asc) sorted = @items.sort_by(&attribute) return order == :asc ? sorted : sorted.reverse end
sort_by!(attribute, order = :asc)
click to toggle source
# File lib/adjective/concerns/storable.rb, line 98 def sort_by!(attribute, order = :asc) sorted = @items.sort_by(&attribute) return order == :asc ? @items = sorted : @items = sorted.reverse end
Private Instance Methods
construct_query_data(attribute, val)
click to toggle source
# File lib/adjective/concerns/storable.rb, line 117 def construct_query_data(attribute, val) # Delimiting with &: to avoid issues with intermingled data return { all: attribute + "&:" + val + "&:", attributes: attribute + "&:", values: val + "&:" } end
validate_inventory_capacity()
click to toggle source
# File lib/adjective/concerns/storable.rb, line 126 def validate_inventory_capacity return true if @max_size == :unlimited total_length = @items.length raise ArgumentError, "#{Time.now}]: items argument length larger than max size: max_size: #{@max_size}, items_length: #{total_length}" if total_length > @max_size end
validate_query_scope(scope)
click to toggle source
# File lib/adjective/concerns/storable.rb, line 113 def validate_query_scope(scope) raise ArgumentError, "[#{Time.now}]: Please provide :full, :attributes, or :values to the scope parameter: given #{scope}" if ![:all, :attributes, :values].include?(scope) end