Skip to content

Commit

Permalink
fixing up more query types, refactored spec_helper
Browse files Browse the repository at this point in the history
  • Loading branch information
whoahbot committed May 13, 2011
1 parent 1bef582 commit 923591b
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 16 deletions.
24 changes: 17 additions & 7 deletions lib/dm-redis-adapter/adapter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ def create(resources)
#
# @api semipublic
def read(query)
records_for(query).each do |record|
records = records_for(query)
records.each do |record|
record_data = @redis.hgetall("#{query.model.to_s.downcase}:#{record[redis_key_for(query.model)]}")

query.fields.each do |property|
Expand All @@ -50,8 +51,11 @@ def read(query)
# now. All other typecasting is handled by datamapper
# separately.
record[name] = [Integer, Date].include?(property.primitive) ? property.typecast( value ) : value
record
end
end
# This is in place until I can get limiting working or something similar
query.filter_records(records)
end

##
Expand Down Expand Up @@ -157,7 +161,7 @@ def records_for(query)
keys = keys + perform_query(query, op)
end
else
keys = keys + perform_query(query, operand)
keys = perform_query(query, operand)
end
end
end
Expand Down Expand Up @@ -188,11 +192,17 @@ def perform_query(query, operand)
end

if query.model.key.include?(subject)
if @redis.sismember(key_set_for(query.model), value)
if operand.is_a?(DataMapper::Query::Conditions::NotOperation)
@redis.smembers(key_set_for(query.model)).each do |key|
if operand.matches?(subject.typecast(key))
matched_records << {redis_key_for(query.model) => key}
end
end
elsif @redis.sismember(key_set_for(query.model), value)
matched_records << {redis_key_for(query.model) => value}
end
# search for any indexed properties
find_matches(query, subject, value).each do |k|
elsif subject.index
find_indexed_matches(query, subject, value).each do |k|
matched_records << {redis_key_for(query.model) => k.to_i, "#{subject.name}" => value}
end
else # worst case, loop through each record and match
Expand Down Expand Up @@ -233,9 +243,9 @@ def key_set_for(model)
# Find a matching entry for a query
#
# @return [Array]
# Array of id's of all members matching the query
# Array of id's of all members for an indexed field
# @api private
def find_matches(query, subject, value)
def find_indexed_matches(query, subject, value)
@redis.smembers("#{query.model.to_s.downcase}:#{subject.name}:#{encode(value)}")
end

Expand Down
4 changes: 3 additions & 1 deletion spec/dm_redis_associations_spec.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
require File.expand_path("../spec_helper", __FILE__)
require 'spec_helper'

require 'dm-core'
require 'dm-core/spec/shared/adapter_spec'
require 'dm-redis-adapter/spec/setup'

describe DataMapper::Adapters::RedisAdapter do
Expand Down
7 changes: 0 additions & 7 deletions spec/dm_redis_spec.rb
Original file line number Diff line number Diff line change
@@ -1,12 +1,5 @@
require 'spec_helper'

require 'dm-core'
require 'dm-core/spec/shared/adapter_spec'
require 'dm-redis-adapter/spec/setup'

ENV['ADAPTER'] = 'redis'
ENV['ADAPTER_SUPPORTS'] = 'all'

describe DataMapper::Adapters::RedisAdapter do
before(:all) do
@adapter = DataMapper.setup(:default, {
Expand Down
7 changes: 6 additions & 1 deletion spec/spec_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,9 @@
Bundler.setup
end

require 'dm-core'
require 'dm-core'
require 'dm-core/spec/shared/adapter_spec'
require 'dm-redis-adapter/spec/setup'

ENV['ADAPTER'] = 'redis'
ENV['ADAPTER_SUPPORTS'] = 'all'

0 comments on commit 923591b

Please sign in to comment.