dynamoid 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "dynamoid"
8
- s.version = "0.1.0"
8
+ s.version = "0.1.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Josh Symonds"]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
@@ -7,6 +7,9 @@ module Dynamoid #:nodoc
7
7
  # module, to keep the document class from getting too cluttered.
8
8
  included do
9
9
  extend ActiveModel::Translation
10
+ extend ActiveModel::Callbacks
11
+
12
+ define_model_callbacks :create, :save, :destroy
10
13
  end
11
14
 
12
15
  include ActiveModel::Conversion
@@ -27,7 +27,9 @@ module Dynamoid #:nodoc:
27
27
  module ClassMethods
28
28
  def create(attrs = {})
29
29
  obj = self.new(attrs)
30
- obj.save && obj.new_record = false
30
+ obj.run_callbacks(:create) do
31
+ obj.save && obj.new_record = false
32
+ end
31
33
  obj
32
34
  end
33
35
 
@@ -54,6 +54,14 @@ module Dynamoid #:nodoc:
54
54
  Dynamoid::Adapter.put_item(self.class.index_table_name(index), {self.class.index_key_name(index).to_sym => self.key_for_index(index), :ids => ids.merge([self.id])})
55
55
  end
56
56
  end
57
+
58
+ def delete_indexes
59
+ self.class.indexes.each do |index|
60
+ existing = Dynamoid::Adapter.get_item(self.class.index_table_name(index), self.key_for_index(index))
61
+ next unless existing && existing[:ids]
62
+ Dynamoid::Adapter.put_item(self.class.index_table_name(index), {self.class.index_key_name(index).to_sym => self.key_for_index(index), :ids => existing[:ids] - [self.id]})
63
+ end
64
+ end
57
65
  end
58
66
 
59
67
  end
@@ -12,9 +12,22 @@ module Dynamoid #:nodoc:
12
12
  end
13
13
 
14
14
  def save
15
- self.id = SecureRandom.uuid if self.id.nil? || self.id.blank?
16
- Dynamoid::Adapter.put_item(self.class.table_name, self.attributes)
17
- save_indexes
15
+ run_callbacks(:save) do
16
+ self.id = SecureRandom.uuid if self.id.nil? || self.id.blank?
17
+ Dynamoid::Adapter.put_item(self.class.table_name, self.attributes)
18
+ save_indexes
19
+ end
20
+ end
21
+
22
+ def destroy
23
+ run_callbacks(:destroy) do
24
+ self.delete
25
+ end
26
+ end
27
+
28
+ def delete
29
+ delete_indexes
30
+ Dynamoid::Adapter.delete_item(self.class.table_name, self.id)
18
31
  end
19
32
 
20
33
  module ClassMethods
@@ -50,5 +50,12 @@ describe "Dynamoid::Indexes" do
50
50
 
51
51
  Dynamoid::Adapter.get_item("dynamoid_tests_index_user_names", @user1.key_for_index([:name])).should == {@user1.class.index_key_name([:name]).to_sym => @user1.key_for_index([:name]), :ids => Set[@user2.id, @user1.id]}
52
52
  end
53
+
54
+ it 'deletes indexes when the object is destroyed' do
55
+ @user = User.create(:name => 'Josh')
56
+ @user.destroy
57
+
58
+ Dynamoid::Adapter.get_item("dynamoid_tests_index_user_names", @user.key_for_index([:name])).should == {@user.class.index_key_name([:name]).to_sym => @user.key_for_index([:name]), :ids => Set.new}
59
+ end
53
60
 
54
61
  end
@@ -51,5 +51,12 @@ describe "Dynamoid::Persistence" do
51
51
  @user.expects(:save_indexes).once.returns(true)
52
52
  @user.save
53
53
  end
54
+
55
+ it 'deletes an item completely' do
56
+ @user = User.create(:name => 'Josh')
57
+ @user.destroy
58
+
59
+ Dynamoid::Adapter.get_item("dynamoid_tests_users", @user.id).should be_nil
60
+ end
54
61
 
55
62
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dynamoid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-02-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activemodel
16
- requirement: &70109652211180 !ruby/object:Gem::Requirement
16
+ requirement: &70174244757120 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70109652211180
24
+ version_requirements: *70174244757120
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: tzinfo
27
- requirement: &70109652210660 !ruby/object:Gem::Requirement
27
+ requirement: &70174244756560 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70109652210660
35
+ version_requirements: *70174244756560
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: aws-sdk
38
- requirement: &70109652210160 !ruby/object:Gem::Requirement
38
+ requirement: &70174244755620 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70109652210160
46
+ version_requirements: *70174244755620
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: mocha
49
- requirement: &70109652209680 !ruby/object:Gem::Requirement
49
+ requirement: &70174244754780 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70109652209680
57
+ version_requirements: *70174244754780
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rake
60
- requirement: &70109652209180 !ruby/object:Gem::Requirement
60
+ requirement: &70174244770280 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70109652209180
68
+ version_requirements: *70174244770280
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
- requirement: &70109652208580 !ruby/object:Gem::Requirement
71
+ requirement: &70174244769680 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70109652208580
79
+ version_requirements: *70174244769680
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: bundler
82
- requirement: &70109652207900 !ruby/object:Gem::Requirement
82
+ requirement: &70174244769120 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70109652207900
90
+ version_requirements: *70174244769120
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: jeweler
93
- requirement: &70109652207400 !ruby/object:Gem::Requirement
93
+ requirement: &70174244768580 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *70109652207400
101
+ version_requirements: *70174244768580
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: rcov
104
- requirement: &70109652206680 !ruby/object:Gem::Requirement
104
+ requirement: &70174244768080 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,7 +109,7 @@ dependencies:
109
109
  version: '0'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *70109652206680
112
+ version_requirements: *70174244768080
113
113
  description: Dynamoid is an ORM for Amazon's DynamoDB that supports offline development,
114
114
  associations, querying, and everything else you'd expect from an ActiveRecord-style
115
115
  replacement.
@@ -193,7 +193,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
193
193
  version: '0'
194
194
  segments:
195
195
  - 0
196
- hash: -4494069043052382928
196
+ hash: -456596935797833583
197
197
  required_rubygems_version: !ruby/object:Gem::Requirement
198
198
  none: false
199
199
  requirements: