lib/adapter/cassanity.rb in adapter-cassanity-0.1.0 vs lib/adapter/cassanity.rb in adapter-cassanity-0.2.0

- old
+ new

@@ -6,37 +6,67 @@ module Cassanity extend Forwardable def_delegator :@client, :schema - def read(key) - rows = client.select(where: where(key)) + # Public + def read(key, options = nil) + operation_options = {where: where(key)} + adapter_options = @options[:read] + arguments = update_arguments(operation_options, adapter_options, options) + + rows = @client.select(arguments) rows.empty? ? nil : decode(rows.first) end - def write(key, attributes) - client.update({ - set: encode(attributes), - where: where(key), - }) + # Public + def write(key, attributes, options = nil) + operation_options = {set: encode(attributes), where: where(key)} + adapter_options = @options[:write] + arguments = update_arguments(operation_options, adapter_options, options) + + @client.update(arguments) end - def delete(key) - client.delete(where: where(key)) + # Public + def delete(key, options = nil) + operation_options = {where: where(key)} + adapter_options = @options[:delete] + arguments = update_arguments(operation_options, adapter_options, options) + + @client.delete(arguments) end + # Public def clear - client.truncate + @client.truncate end # Private def where(criteria) if schema.composite_primary_key? criteria else primary_key = schema.primary_keys.first {primary_key => criteria} end + end + + # Private + def update_arguments(operation_options, adapter_options, method_options) + keys = operation_options.keys + + if !adapter_options.nil? && !adapter_options.empty? + filtered_options = adapter_options.reject { |key| keys.include?(key) } + operation_options.update(filtered_options) + end + + if !method_options.nil? && !method_options.empty? + filtered_options = method_options.reject { |key| keys.include?(key) } + operation_options.update(filtered_options) + end + + operation_options end end end Adapter.define(:cassanity, Adapter::Cassanity)