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
clear()
Alias for: dump
clear_by(attribute, value)
Alias for: dump_by
deposit(items)
Alias for: store
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
find_by(attribute, value)
Alias for: retrieve_by
full?() click to toggle source
# File lib/adjective/concerns/storable.rb, line 19
def full?
  @max_size == :unlimited ? false : @items.length < @max_size
end
get_by(attribute, value)
Alias for: retrieve_by
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
put(items)
Alias for: store
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
Also aliased as: get_by, find_by
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
store(items) click to toggle source

Store - Put

# File lib/adjective/concerns/storable.rb, line 50
def store(items)
  if can_store?(items)
    Array(items).each do |item|
      @items << item 
    end
    return items
  else
    return false
  end
end
Also aliased as: deposit, put

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