kakurenbo 0.1.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,96 @@
1
+ require 'spec_helper'
2
+
3
+ describe Kakurenbo::Core::Scopes do
4
+ create_temp_table(:paranoid_models){ |t| t.datetime :deleted_at }
5
+
6
+ let!(:existing_model) { ParanoidModel.create! }
7
+ let!(:deleted_model) { ParanoidModel.create!(deleted_at: Time.now) }
8
+
9
+ describe 'default_scope' do
10
+ subject do
11
+ ParanoidModel.find_by(id: model.id)
12
+ end
13
+
14
+ context 'when existing_model' do
15
+ let(:model) { existing_model }
16
+
17
+ it 'can get.' do
18
+ expect(subject).not_to be_nil
19
+ end
20
+ end
21
+
22
+ context 'when deleted_model' do
23
+ let(:model) { deleted_model }
24
+
25
+ it 'can not get.' do
26
+ expect(subject).to be_nil
27
+ end
28
+ end
29
+ end
30
+
31
+ describe 'only_deleted' do
32
+ subject do
33
+ ParanoidModel.only_deleted.find_by(id: model.id)
34
+ end
35
+
36
+ context 'when existing_model' do
37
+ let(:model) { existing_model }
38
+
39
+ it 'can not get.' do
40
+ expect(subject).to be_nil
41
+ end
42
+ end
43
+
44
+ context 'when deleted_model' do
45
+ let(:model) { deleted_model }
46
+
47
+ it 'can get.' do
48
+ expect(subject).not_to be_nil
49
+ end
50
+ end
51
+ end
52
+
53
+ describe 'with_deleted' do
54
+ subject do
55
+ ParanoidModel.with_deleted.find_by(id: model.id)
56
+ end
57
+
58
+ context 'when existing_model' do
59
+ let(:model) { existing_model }
60
+
61
+ it 'can get.' do
62
+ expect(subject).not_to be_nil
63
+ end
64
+ end
65
+
66
+ context 'when deleted_model' do
67
+ let(:model) { deleted_model }
68
+
69
+ it 'can get.' do
70
+ expect(subject).not_to be_nil
71
+ end
72
+ end
73
+ end
74
+
75
+ describe 'without_deleted' do
76
+ subject do
77
+ ParanoidModel.without_deleted.find_by(id: model.id)
78
+ end
79
+
80
+ context 'when existing_model' do
81
+ let(:model) { existing_model }
82
+
83
+ it 'can get.' do
84
+ expect(subject).not_to be_nil
85
+ end
86
+ end
87
+
88
+ context 'when deleted_model' do
89
+ let(:model) { deleted_model }
90
+
91
+ it 'can not get.' do
92
+ expect(subject).to be_nil
93
+ end
94
+ end
95
+ end
96
+ end
@@ -1,74 +1,93 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Kakurenbo::MixinARBase do
4
- create_temp_table(:hard_deletes) {}
5
- create_temp_table(:soft_deletes) {|t| t.datetime :deleted_at}
6
- create_temp_table(:other_columns){|t| t.datetime :destroyed_at}
7
- create_temp_table(:other_table_name) {|t| t.datetime :deleted_at}
8
-
9
- context 'when mixin ActiveRecord::Base' do
10
- it 'has paranoid? in class methods.'do
11
- expect(ActiveRecord::Base.methods).to include(:paranoid?)
12
- end
4
+ describe ActiveRecord::Base do
5
+ describe 'class_methods' do
6
+ subject { ActiveRecord::Base.methods }
7
+
8
+ it 'has #paranoid?' do
9
+ expect(subject).to include(:paranoid?)
10
+ end
13
11
 
14
- it 'has paranoid? in instance methods.' do
15
- expect(ActiveRecord::Base.instance_methods).to include(:paranoid?)
12
+ it 'has #acts_as_paranoid' do
13
+ expect(subject).to include(:acts_as_paranoid)
14
+ end
16
15
  end
17
16
 
18
- it 'has acts_as_paranoid in class methods.' do
19
- expect(ActiveRecord::Base.methods).to include(:acts_as_paranoid)
17
+ describe 'instance_methods' do
18
+ subject { ActiveRecord::Base.instance_methods }
19
+
20
+ it 'has #paranoid?' do
21
+ expect(subject).to include(:paranoid?)
22
+ end
20
23
  end
21
24
  end
22
25
 
23
- context 'when define class of HardDelete' do
24
- before :all do
25
- class HardDelete < ActiveRecord::Base; end
26
+
27
+ describe 'class of HardDelete' do
28
+ create_temp_table(:hard_deletes) {}
29
+ subject { HardDelete }
30
+
31
+ it '#paranoid? return falsey.' do
32
+ expect(subject.paranoid?).to be_falsey
26
33
  end
27
34
 
28
- it 'paranoid? return false.' do
29
- expect(HardDelete.paranoid?).to be_false
35
+ context 'when change SoftDelete into HardDelete' do
36
+ create_temp_table(:soft_deletes) {|t| t.datetime :deleted_at}
37
+ subject do
38
+ SoftDelete.tap do |c|
39
+ c.class_eval { self.table_name='hard_deletes' }
40
+ end
41
+ end
42
+
43
+ it '#paranoid? return falsey.' do
44
+ expect(subject.paranoid?).to be_falsey
45
+ end
30
46
  end
31
47
  end
32
48
 
33
- context 'when define class of SoftDelete' do
34
- before :all do
35
- class SoftDelete < ActiveRecord::Base; end
36
- end
37
49
 
38
- it 'paranoid? return true.' do
39
- expect(SoftDelete.paranoid?).to be_true
50
+ describe 'class of SoftDelete' do
51
+ create_temp_table(:soft_deletes) {|t| t.datetime :deleted_at}
52
+ subject { SoftDelete }
53
+
54
+ it '#paranoid? return truthy.' do
55
+ expect(subject.paranoid?).to be_truthy
40
56
  end
41
- end
42
57
 
43
- context 'when define class of OtherColumn' do
44
- before :all do
45
- class OtherColumn < ActiveRecord::Base
46
- acts_as_paranoid :column => :destroyed_at
58
+ context 'when set other column on kakurenbo_column' do
59
+ create_temp_table(:other_columns) {|t| t.datetime :destroyed_at}
60
+ subject do
61
+ OtherColumn.tap do |c|
62
+ c.class_eval { acts_as_paranoid :column => :destroyed_at }
63
+ end
47
64
  end
48
- end
49
65
 
50
- it 'paranoid? return true.' do
51
- expect(OtherColumn.paranoid?).to be_true
52
- end
66
+ it '#paranoid? return truthy.' do
67
+ expect(subject.paranoid?).to be_truthy
68
+ end
53
69
 
54
- it 'kakurenbo_column is `:destroyed_at`.' do
55
- expect(OtherColumn.kakurenbo_column).to eq(:destroyed_at)
70
+ it 'kakurenbo_column is `:destroyed_at`.' do
71
+ expect(subject.kakurenbo_column).to eq(:destroyed_at)
72
+ end
56
73
  end
57
- end
58
74
 
59
- context 'when define class of DiffTableName' do
60
- before :all do
61
- class DiffTableName < ActiveRecord::Base
62
- self.table_name='other_table_name'
75
+ context 'when set other table_name on table_name.' do
76
+ before :all do
77
+ class HaiyoreNyarukoSan < ActiveRecord::Base
78
+ self.table_name='soft_deletes'
79
+ end
63
80
  end
64
- end
65
81
 
66
- it 'table_name is right.' do
67
- expect(DiffTableName.table_name).to eq('other_table_name')
68
- end
82
+ subject { HaiyoreNyarukoSan }
69
83
 
70
- it 'paranoid? return true.' do
71
- expect(DiffTableName.paranoid?).to be_true
84
+ it '#table_name return soft_deletes' do
85
+ expect(subject.table_name).to eq('soft_deletes')
86
+ end
87
+
88
+ it '#paranoid? return truthy.' do
89
+ expect(subject.paranoid?).to be_truthy
90
+ end
72
91
  end
73
92
  end
74
93
  end
@@ -0,0 +1,117 @@
1
+ require 'spec_helper'
2
+
3
+ describe Kakurenbo::MixinARRelation do
4
+ create_temp_table(:paranoid_models){ |t| t.datetime :deleted_at }
5
+
6
+ subject :subject_hard_delete do
7
+ expect {
8
+ subject
9
+ }.to change {
10
+ model_class.with_deleted.find_by(:id => model.id)
11
+ }.to(nil)
12
+ end
13
+
14
+ subject :subject_soft_delete do
15
+ expect { subject }.to change { model.reload.destroyed? }.from(false).to(true)
16
+ end
17
+
18
+ subject :subject_restore do
19
+ expect { subject }.to change { model.reload.destroyed? }.from(true).to(false)
20
+ end
21
+
22
+ let! :model do
23
+ model_class.create!
24
+ end
25
+
26
+ let :model_class do
27
+ ParanoidModel
28
+ end
29
+
30
+ describe '.delete' do
31
+ subject { model_class.delete(model.id) }
32
+
33
+ it 'record will be soft-deleted.' do
34
+ subject_soft_delete
35
+ end
36
+
37
+ context 'when with hard-delete option' do
38
+ subject { model_class.delete(model.id, :hard => true) }
39
+
40
+ it 'record will be hard-deleted.' do
41
+ subject_hard_delete
42
+ end
43
+ end
44
+ end
45
+
46
+ describe '.delete_all' do
47
+ subject { model_class.delete_all }
48
+
49
+ it 'record will be soft-deleted.' do
50
+ subject_soft_delete
51
+ end
52
+
53
+ context 'when with hard-delete option' do
54
+ subject { model_class.delete_all(nil, :hard => true) }
55
+
56
+ it 'record will be hard-deleted' do
57
+ subject_hard_delete
58
+ end
59
+ end
60
+ end
61
+
62
+ describe '.destroy' do
63
+ subject { model_class.destroy(model.id) }
64
+
65
+ it 'record will be soft-deleted.' do
66
+ subject_soft_delete
67
+ end
68
+
69
+ context 'when with hard-delete option' do
70
+ subject { model_class.destroy(model.id, :hard => true) }
71
+
72
+ it 'record will be hard-deleted.' do
73
+ subject_hard_delete
74
+ end
75
+ end
76
+ end
77
+
78
+ describe '.destroy_all' do
79
+ subject { model_class.destroy_all }
80
+
81
+ it 'record will be soft-deleted.' do
82
+ subject_soft_delete
83
+ end
84
+
85
+ context 'when with hard-delete option' do
86
+ subject { model_class.destroy_all(nil, :hard => true) }
87
+
88
+ it 'record will be hard-deleted' do
89
+ subject_hard_delete
90
+ end
91
+ end
92
+ end
93
+
94
+ describe '.restore' do
95
+ before :each do
96
+ model.destroy
97
+ end
98
+
99
+ subject { model_class.restore(model.id) }
100
+
101
+ it 'record will be restored.' do
102
+ subject_restore
103
+ end
104
+ end
105
+
106
+ describe '.restore_all' do
107
+ before :each do
108
+ model.destroy
109
+ end
110
+
111
+ subject { model_class.restore_all }
112
+
113
+ it 'record will be restored.' do
114
+ subject_restore
115
+ end
116
+ end
117
+ end
@@ -5,11 +5,13 @@ require "kakurenbo"
5
5
  RSpec.configure do |config|
6
6
  config.mock_framework = :rspec
7
7
  config.before(:all) {
8
- Dir.mkdir('tmp') unless Dir.exists?('tmp')
9
- ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => 'tmp/rspec.sqlite')
8
+ ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:')
10
9
  }
11
10
  end
12
11
 
12
+ # Use ActiveSupport::Inflector#classify
13
+ Inflector = Class.new.extend(ActiveSupport::Inflector)
14
+
13
15
  # Create temp table for test.
14
16
  #
15
17
  # @param name [Symbol] Name of table.
@@ -17,15 +19,26 @@ end
17
19
  def create_temp_table(name, &block)
18
20
  raise 'No block given!' unless block_given?
19
21
 
22
+ class_name = Inflector.classify(name)
23
+
20
24
  before :all do
21
25
  migration = ActiveRecord::Migration.new
22
26
  migration.verbose = false
23
27
  migration.create_table name, &block
28
+
29
+ mock_class = Class.new(ActiveRecord::Base) do
30
+ define_singleton_method(:name){ class_name }
31
+ reset_table_name
32
+ end
33
+
34
+ Object.const_set class_name, mock_class
24
35
  end
25
36
 
26
37
  after :all do
27
38
  migration = ActiveRecord::Migration.new
28
39
  migration.verbose = false
29
40
  migration.drop_table name
41
+
42
+ Object.class_eval { remove_const class_name }
30
43
  end
31
44
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kakurenbo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - alfa-jpn
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-03 00:00:00.000000000 Z
11
+ date: 2014-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: 3.0.0
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: 3.0.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: yard
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -86,14 +86,14 @@ dependencies:
86
86
  requirements:
87
87
  - - ">="
88
88
  - !ruby/object:Gem::Version
89
- version: 3.2.0
89
+ version: 4.0.2
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
- version: 3.2.0
96
+ version: 4.0.2
97
97
  description: |2
98
98
  provides soft delete.
99
99
  Kakurenbo is a re-implementation of paranoia and acts_as_paranoid for Rails4 and 3.
@@ -115,14 +115,16 @@ files:
115
115
  - Rakefile
116
116
  - kakurenbo.gemspec
117
117
  - lib/kakurenbo.rb
118
+ - lib/kakurenbo/core.rb
118
119
  - lib/kakurenbo/mixin_ar_base.rb
119
- - lib/kakurenbo/soft_delete_core.rb
120
+ - lib/kakurenbo/mixin_ar_relation.rb
120
121
  - lib/kakurenbo/version.rb
122
+ - spec/kakurenbo/cores/associations_spec.rb
123
+ - spec/kakurenbo/cores/callbacks_spec.rb
124
+ - spec/kakurenbo/cores/core_spec.rb
125
+ - spec/kakurenbo/cores/scopes_spec.rb
121
126
  - spec/kakurenbo/mixin_ar_base_spec.rb
122
- - spec/kakurenbo/soft_delete_cores/associations_spec.rb
123
- - spec/kakurenbo/soft_delete_cores/callbacks_spec.rb
124
- - spec/kakurenbo/soft_delete_cores/core_spec.rb
125
- - spec/kakurenbo/soft_delete_cores/scopes_spec.rb
127
+ - spec/kakurenbo/mixin_ar_relation_spec.rb
126
128
  - spec/spec_helper.rb
127
129
  homepage: https://github.com/alfa-jpn/kakurenbo
128
130
  licenses:
@@ -144,16 +146,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
144
146
  version: '0'
145
147
  requirements: []
146
148
  rubyforge_project:
147
- rubygems_version: 2.2.0
149
+ rubygems_version: 2.2.2
148
150
  signing_key:
149
151
  specification_version: 4
150
152
  summary: provides soft delete. Kakurenbo is a re-implementation of paranoia and acts_as_paranoid
151
153
  for Rails4 and 3. implemented a function that other gems are not enough.
152
154
  test_files:
155
+ - spec/kakurenbo/cores/associations_spec.rb
156
+ - spec/kakurenbo/cores/callbacks_spec.rb
157
+ - spec/kakurenbo/cores/core_spec.rb
158
+ - spec/kakurenbo/cores/scopes_spec.rb
153
159
  - spec/kakurenbo/mixin_ar_base_spec.rb
154
- - spec/kakurenbo/soft_delete_cores/associations_spec.rb
155
- - spec/kakurenbo/soft_delete_cores/callbacks_spec.rb
156
- - spec/kakurenbo/soft_delete_cores/core_spec.rb
157
- - spec/kakurenbo/soft_delete_cores/scopes_spec.rb
160
+ - spec/kakurenbo/mixin_ar_relation_spec.rb
158
161
  - spec/spec_helper.rb
159
162
  has_rdoc: