module DoesKeyValue::TableStorage
Public Instance Methods
has_key(key_name, opts={})
click to toggle source
Define a supported key
# File lib/doeskeyvalue/table_storage.rb, line 11 def has_key(key_name, opts={}) opts = { index: true, type: "string", default: nil }.merge(opts) key_indexed = opts[:index] key_type = opts[:type].to_sym key_default_value = opts[:default] raise Exception.new("Data type not supported: #{key_type}") unless DoesKeyValue::SUPPORTED_DATA_TYPES.include?(key_type.to_s) DoesKeyValue::State.instance.add_key(self, key_name, opts) storage_table = DoesKeyValue::State.instance.options_for_class(self)[:table] # Accessor for new key with support for default value: define_method(key_name) do DoesKeyValue.log("Accessing BY TABLE key:#{key_name} for class:#{self.class}") if self.new_record? DoesKeyValue.log("-- Object does not have a database ID. No resource to query against.") return nil end value = DoesKeyValue::Index.read_index(self, key_name) if !value.nil? return value elsif default_value = self.class.key_options(key_name)[:default] return default_value end end # Manipulator for new key: define_method("#{key_name}=") do |value| DoesKeyValue.log("Modifying BY TABLE value for key:#{key_name} to value:#{value}") unless self.new_record? DoesKeyValue::Index.update_index(self, key_name, value) else DoesKeyValue.log("-- Object does not have a database ID. Holding back table index update.") end end # All table-based key-value stores have index finders and scopes: scope "with_#{key_name}", lambda {|value| DoesKeyValue::Index.find_objects(self, key_name, value) } DoesKeyValue.log("Scope with_#{key_name} added for table-storage key #{key_name}") # Delete the index after destroy: define_method("destroy_index_for_#{key_name}") do DoesKeyValue::Index.delete_index(self, key_name) end after_destroy "destroy_index_for_#{key_name}" end
key_options(key_name)
click to toggle source
Return the specific configuration for a given key:
# File lib/doeskeyvalue/table_storage.rb, line 74 def key_options(key_name) DoesKeyValue::State.instance.options_for_key(self, key_name) end
keys()
click to toggle source
Return a list of currently supported keys:
# File lib/doeskeyvalue/table_storage.rb, line 69 def keys DoesKeyValue::State.instance.keys[self.to_s] end