Skip to content

Commit 88458d5

Browse files
author
Patrick Kaeding
committed
Merge branch 'fix_index' of git://github.com/stefanneculai/Dynamoid into 0.7.x
This accepts PR Veraticus#133
2 parents de55ad5 + d10acb4 commit 88458d5

File tree

3 files changed

+32
-11
lines changed

3 files changed

+32
-11
lines changed

Diff for: lib/dynamoid/indexes/index.rb

+5-5
Original file line numberDiff line numberDiff line change
@@ -83,19 +83,19 @@ def save(obj)
8383
return true if values[:hash_value].blank? || (!values[:range_value].nil? && values[:range_value].blank?)
8484
existing = Dynamoid::Adapter.read(self.table_name, values[:hash_value], { :range_key => values[:range_value] })
8585
ids = ((existing and existing[:ids]) or Set.new)
86-
Dynamoid::Adapter.write(self.table_name, {:id => values[:hash_value], :ids => ids.merge([obj.id]), :range => values[:range_value]})
86+
Dynamoid::Adapter.write(self.table_name, {:id => values[:hash_value], :ids => ids.merge([obj.hash_key]), :range => values[:range_value]})
8787
end
8888

89-
# Delete an object from this index, preserving existing ids if there are any, and failing gracefully if for some reason the
89+
# Delete an object from this index, preserving existing ids if there are any, and failing gracefully if for some reason the
9090
# index doesn't already have this object in it.
9191
#
92-
# @since 0.2.0
92+
# @since 0.2.0
9393
def delete(obj, changed_attributes = false)
9494
values = values(obj, changed_attributes)
9595
return true if values[:hash_value].blank? || (!values[:range_value].nil? && values[:range_value].blank?)
9696
existing = Dynamoid::Adapter.read(self.table_name, values[:hash_value], { :range_key => values[:range_value]})
97-
return true unless existing && existing[:ids] && existing[:ids].include?(obj.id)
98-
Dynamoid::Adapter.write(self.table_name, {:id => values[:hash_value], :ids => (existing[:ids] - Set[obj.id]), :range => values[:range_value]})
97+
return true unless existing && existing[:ids] && existing[:ids].include?(obj.hash_key)
98+
Dynamoid::Adapter.write(self.table_name, {:id => values[:hash_value], :ids => (existing[:ids] - Set[obj.hash_key]), :range => values[:range_value]})
9999
end
100100

101101
end

Diff for: spec/app/models/message.rb

+3
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,7 @@ class Message
66
range :time, :datetime
77

88
field :text
9+
field :subject
10+
11+
index :subject, :range_key => :time
912
end

Diff for: spec/dynamoid/indexes/index_spec.rb

+24-6
Original file line numberDiff line numberDiff line change
@@ -69,24 +69,42 @@
6969
Dynamoid::Adapter.read("dynamoid_tests_index_user_names", 'Josh')[:ids].should == Set['test123']
7070
end
7171

72-
it 'saves an object to the index it is associated with with a range' do
72+
it 'saves an object to the index it is associated with a range' do
7373
@index = Dynamoid::Indexes::Index.new(User, :name, :range_key => :last_logged_in_at)
7474
@user = User.create(:name => 'Josh', :last_logged_in_at => @time)
75-
75+
7676
@index.save(@user)
77-
77+
7878
Dynamoid::Adapter.read("dynamoid_tests_index_user_last_logged_in_ats_and_names", 'Josh', :range_key => @time.to_f)[:ids].should == Set[@user.id]
7979
end
80-
80+
81+
it 'saves an object with another HASH than id to the index' do
82+
@index = Dynamoid::Indexes::Index.new(Message, :subject, :range_key => :time)
83+
@message = Message.create(:subject => 'Hello!', :time => @time.to_f, :message_id => 100)
84+
85+
@index.save(@message)
86+
Dynamoid::Adapter.read("dynamoid_tests_index_message_subjects_and_times", 'Hello!', :range_key => @time.to_f)[:ids].should == Set[@message.message_id]
87+
end
88+
8189
it 'deletes an object from the index it is associated with' do
8290
@index = Dynamoid::Indexes::Index.new(User, :name)
8391
@user = User.create(:name => 'Josh', :password => 'test123', :last_logged_in_at => @time, :id => 'test123')
84-
92+
8593
@index.save(@user)
8694
@index.delete(@user)
87-
95+
8896
Dynamoid::Adapter.read("dynamoid_tests_index_user_names", 'Josh')[:ids].should be_nil
8997
end
98+
99+
it 'deletes an object with another HASH than id from the index it is associated with' do
100+
@index = Dynamoid::Indexes::Index.new(Message, :subject, :range_key => :time)
101+
@message = Message.create(:subject => 'Hello!', :time => @time.to_f, :message_id => 100)
102+
103+
@index.save(@message)
104+
@index.delete(@message)
105+
106+
Dynamoid::Adapter.read("dynamoid_tests_index_message_subjects_and_times", 'Hello!', :range_key => @time.to_f)[:ids].should be_nil
107+
end
90108

91109
it 'updates an object by removing it from its previous index and adding it to its new one' do
92110
@index = Dynamoid::Indexes::Index.new(User, :name)

0 commit comments

Comments
 (0)