kakurenbo 0.1.3 → 0.2.0

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.
@@ -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: