mongoid-suicide 0.3.0 → 0.5.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.
- checksums.yaml +4 -4
- data/.github/dependabot.yml +11 -0
- data/.github/workflows/ruby.yml +22 -0
- data/.rubocop.yml +14 -0
- data/.ruby-version +1 -0
- data/Gemfile +8 -2
- data/LICENSE.txt +1 -1
- data/README.md +3 -13
- data/lib/mongoid/suicide/version.rb +3 -1
- data/lib/mongoid/suicide.rb +29 -23
- data/lib/mongoid-suicide.rb +3 -1
- data/mongoid-suicide.gemspec +14 -13
- data/mongoid-suicide.png +0 -0
- data/spec/app/models/person.rb +3 -1
- data/spec/mongoid/suicide_spec.rb +277 -0
- data/spec/spec_helper.rb +6 -4
- metadata +18 -47
- data/.travis.yml +0 -13
- data/Rakefile +0 -37
- data/spec/mongoid_suicide_spec.rb +0 -308
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 43a5468e10b1358e3392f8ce47b892edd096050807e4d7cb6c1854590c15ed73
|
4
|
+
data.tar.gz: 6332bfa8904bf06d485a93e58fb1460ba611a0e546a5fb6da03e7b4bb6292178
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b7ea49b48455b92b9c6e280092abee0687749e184a4973fffabd1bf507cfada60dd1073561b44ea7c2e91108b5a322596f4d1c566038a2c5a84ce72599d0db5d
|
7
|
+
data.tar.gz: eeb8a7d4fad4bac82544eadb6f4e573c1b95672c44fe2d20ca63f6b9d8aacd0971b02be86ac50fdceaf4b580214b83ba0c8accecb98cc2a7da0fe3f6ae6410f7
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# To get started with Dependabot version updates, you'll need to specify which
|
2
|
+
# package ecosystems to update and where the package manifests are located.
|
3
|
+
# Please see the documentation for all configuration options:
|
4
|
+
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
5
|
+
|
6
|
+
version: 2
|
7
|
+
updates:
|
8
|
+
- package-ecosystem: "bundler" # See documentation for possible values
|
9
|
+
directory: "/" # Location of package manifests
|
10
|
+
schedule:
|
11
|
+
interval: "daily"
|
@@ -0,0 +1,22 @@
|
|
1
|
+
name: Ruby
|
2
|
+
|
3
|
+
on: [push, pull_request]
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
build:
|
7
|
+
name: build (${{ matrix.ruby }} / ${{ matrix.os }})
|
8
|
+
strategy:
|
9
|
+
matrix:
|
10
|
+
ruby: [3.1, 3.2, 3.3, head, jruby, jruby-head]
|
11
|
+
os: [ubuntu-latest, macos-latest]
|
12
|
+
runs-on: ${{ matrix.os }}
|
13
|
+
steps:
|
14
|
+
- uses: actions/checkout@master
|
15
|
+
- name: Set up Ruby
|
16
|
+
uses: ruby/setup-ruby@v1
|
17
|
+
with:
|
18
|
+
ruby-version: ${{ matrix.ruby }}
|
19
|
+
- name: Install dependencies
|
20
|
+
run: bundle install
|
21
|
+
- name: Run test
|
22
|
+
run: rspec
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require: rubocop-rspec
|
2
|
+
|
3
|
+
AllCops:
|
4
|
+
NewCops: enable
|
5
|
+
TargetRubyVersion: 3.1
|
6
|
+
Metrics/MethodLength:
|
7
|
+
Enabled: false
|
8
|
+
Metrics/ModuleLength:
|
9
|
+
Enabled: false
|
10
|
+
Metrics/AbcSize:
|
11
|
+
Enabled: false
|
12
|
+
Naming/FileName:
|
13
|
+
Exclude:
|
14
|
+
- 'lib/mongoid-suicide.rb'
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
3.3.1
|
data/Gemfile
CHANGED
@@ -1,11 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
source 'https://rubygems.org'
|
2
4
|
|
3
5
|
# Specify your gem's dependencies in mongoid-suicide.gemspec
|
4
6
|
gemspec
|
5
7
|
|
6
|
-
gem 'rake'
|
7
8
|
gem 'mongoid'
|
8
9
|
|
10
|
+
group :development do
|
11
|
+
gem 'rubocop', require: false
|
12
|
+
gem 'rubocop-rspec', require: false
|
13
|
+
end
|
14
|
+
|
9
15
|
group :test do
|
10
|
-
gem 'rspec'
|
16
|
+
gem 'rspec'
|
11
17
|
end
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|

|
2
2
|
|
3
|
-
[![
|
4
|
-
[![Gem Version]
|
5
|
-
[![Code Climate][codeclimate_badge]][codeclimate]
|
3
|
+
[](https://github.com/mamantoha/mongoid-suicide/actions/workflows/ruby.yml)
|
4
|
+
[](https://badge.fury.io/rb/mongoid-suicide)
|
6
5
|
|
7
6
|
Provides methods to remove fields from Mongoid models
|
8
7
|
|
@@ -61,13 +60,4 @@ p.username
|
|
61
60
|
|
62
61
|
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
63
62
|
|
64
|
-
Copyright (c) 2015-
|
65
|
-
|
66
|
-
[travis_badge]: http://img.shields.io/travis/mamantoha/mongoid-suicide.svg?style=flat
|
67
|
-
[travis]: https://travis-ci.org/mamantoha/mongoid-suicide
|
68
|
-
|
69
|
-
[rubygems_badge]: http://img.shields.io/gem/v/mongoid-suicide.svg?style=flat
|
70
|
-
[rubygems]: http://rubygems.org/gems/mongoid-suicide
|
71
|
-
|
72
|
-
[codeclimate_badge]: http://img.shields.io/codeclimate/github/mamantoha/mongoid-suicide.svg?style=flat
|
73
|
-
[codeclimate]: https://codeclimate.com/github/mamantoha/mongoid-suicide
|
63
|
+
Copyright (c) 2015-2024 by Anton Maminov
|
data/lib/mongoid/suicide.rb
CHANGED
@@ -1,12 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'mongoid'
|
2
|
-
require
|
4
|
+
require 'mongoid/suicide/version'
|
3
5
|
|
6
|
+
# :nodoc:
|
4
7
|
module Mongoid
|
5
|
-
|
6
8
|
# This module allows remove fields.
|
7
9
|
module Suicide
|
8
10
|
extend ActiveSupport::Concern
|
9
11
|
|
12
|
+
# :nodoc:
|
10
13
|
module ClassMethods
|
11
14
|
# Removes the field from the Document.
|
12
15
|
# A getter and setter will be removed.
|
@@ -19,22 +22,23 @@ module Mongoid
|
|
19
22
|
# @return [ Field ] The removed field
|
20
23
|
def remove_field(name)
|
21
24
|
name = name.to_s
|
22
|
-
if fields[name]
|
23
|
-
aliased = fields[name].options[:as]
|
24
25
|
|
25
|
-
|
26
|
-
remove_accessors(name, aliased) if aliased
|
27
|
-
remove_dirty_methods(name, name)
|
28
|
-
remove_dirty_methods(name, aliased) if aliased
|
26
|
+
return unless fields[name]
|
29
27
|
|
30
|
-
|
28
|
+
aliased = fields[name].options[:as]
|
31
29
|
|
32
|
-
|
33
|
-
|
30
|
+
remove_accessors(name, name)
|
31
|
+
remove_accessors(name, aliased) if aliased
|
32
|
+
remove_dirty_methods(name)
|
33
|
+
remove_dirty_methods(aliased) if aliased
|
34
34
|
|
35
|
-
|
36
|
-
|
37
|
-
|
35
|
+
remove_defaults(name)
|
36
|
+
|
37
|
+
remove_field_in_descendants(name)
|
38
|
+
remove_validations_for(name)
|
39
|
+
|
40
|
+
aliased_fields.delete(aliased.to_s) if aliased
|
41
|
+
fields.delete(name)
|
38
42
|
end
|
39
43
|
|
40
44
|
# Remove the field accessors.
|
@@ -60,11 +64,11 @@ module Mongoid
|
|
60
64
|
remove_field_setter(meth)
|
61
65
|
remove_field_check(meth)
|
62
66
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
67
|
+
return unless field.options[:localize]
|
68
|
+
|
69
|
+
remove_translations_getter(meth)
|
70
|
+
remove_translations_setter(meth)
|
71
|
+
localized_fields.delete(name)
|
68
72
|
end
|
69
73
|
|
70
74
|
# Removes the dirty change methods.
|
@@ -81,7 +85,7 @@ module Mongoid
|
|
81
85
|
#
|
82
86
|
# @param [ Symbol ] name The attribute name.
|
83
87
|
# @param [ String ] meth The name of the accessor.
|
84
|
-
def remove_dirty_methods(
|
88
|
+
def remove_dirty_methods(meth)
|
85
89
|
remove_dirty_change_accessor(meth)
|
86
90
|
remove_dirty_change_check(meth)
|
87
91
|
remove_dirty_change_flag(meth)
|
@@ -108,7 +112,7 @@ module Mongoid
|
|
108
112
|
name = name.to_sym
|
109
113
|
a_name = [name]
|
110
114
|
|
111
|
-
_validators.reject!{ |key, _| key == name }
|
115
|
+
_validators.reject! { |key, _| key == name }
|
112
116
|
remove_validate_callbacks a_name
|
113
117
|
end
|
114
118
|
|
@@ -120,12 +124,14 @@ module Mongoid
|
|
120
124
|
# @param [ Array<Symbol> ] a_name The attribute name.
|
121
125
|
def remove_validate_callbacks(a_name)
|
122
126
|
chain = _validate_callbacks.dup.reject do |callback|
|
123
|
-
f = callback.
|
127
|
+
f = callback.filter
|
124
128
|
f.respond_to?(:attributes) && f.attributes == a_name
|
125
129
|
end
|
130
|
+
|
126
131
|
reset_callbacks(:validate)
|
132
|
+
|
127
133
|
chain.each do |callback|
|
128
|
-
set_callback 'validate', callback.
|
134
|
+
set_callback 'validate', callback.filter
|
129
135
|
end
|
130
136
|
end
|
131
137
|
|
data/lib/mongoid-suicide.rb
CHANGED
data/mongoid-suicide.gemspec
CHANGED
@@ -1,23 +1,24 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
2
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
5
|
require 'mongoid/suicide/version'
|
4
6
|
|
5
7
|
Gem::Specification.new do |spec|
|
6
|
-
spec.name =
|
8
|
+
spec.name = 'mongoid-suicide'
|
7
9
|
spec.version = Mongoid::Suicide::VERSION
|
8
|
-
spec.authors = [
|
9
|
-
spec.email = [
|
10
|
-
spec.summary =
|
11
|
-
spec.description =
|
12
|
-
spec.homepage =
|
13
|
-
spec.license =
|
10
|
+
spec.authors = ['Anton Maminov']
|
11
|
+
spec.email = ['anton.linux@gmail.com']
|
12
|
+
spec.summary = 'Hacks to support Mongoid remove field'
|
13
|
+
spec.description = 'Hacks to support Mongoid remove field. Including associations and validations'
|
14
|
+
spec.homepage = 'https://github.com/mamantoha/mongoid-suicide'
|
15
|
+
spec.license = 'MIT'
|
14
16
|
|
15
17
|
spec.files = `git ls-files -z`.split("\x0")
|
16
18
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
|
-
spec.
|
18
|
-
spec.require_paths = ["lib"]
|
19
|
+
spec.require_paths = ['lib']
|
19
20
|
|
20
|
-
spec.
|
21
|
-
spec.
|
22
|
-
spec.
|
21
|
+
spec.required_ruby_version = '>= 3.1.0'
|
22
|
+
spec.add_dependency 'mongoid', '> 4.0', '< 11.0'
|
23
|
+
spec.metadata['rubygems_mfa_required'] = 'true'
|
23
24
|
end
|
data/mongoid-suicide.png
CHANGED
Binary file
|
data/spec/app/models/person.rb
CHANGED
@@ -0,0 +1,277 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Mongoid::Suicide do
|
6
|
+
describe '#remove_field' do
|
7
|
+
context 'when remove accessors' do
|
8
|
+
before do
|
9
|
+
Person.field(:remove_testing, type: String)
|
10
|
+
Person.remove_field(:remove_testing)
|
11
|
+
end
|
12
|
+
|
13
|
+
let(:person) do
|
14
|
+
Person.new
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'removes field getter' do
|
18
|
+
expect do
|
19
|
+
person.remove_testing
|
20
|
+
end.to raise_error(NoMethodError)
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'removes field setter' do
|
24
|
+
expect do
|
25
|
+
person.remove_testing = 'test'
|
26
|
+
end.to raise_error(NoMethodError)
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'removes field _before_type_cast getter' do
|
30
|
+
expect do
|
31
|
+
person.remove_testing_before_type_cast
|
32
|
+
end.to raise_error(NoMethodError)
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'removes field check method' do
|
36
|
+
expect do
|
37
|
+
person.remove_testing?
|
38
|
+
end.to raise_error(NoMethodError)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'removes field from fields' do
|
42
|
+
expect(Person.fields).not_to include('remove_testing')
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'when remove accessors for aliasing field' do
|
47
|
+
before do
|
48
|
+
Person.field(:remove_testing, type: String, as: :rt)
|
49
|
+
Person.remove_field(:remove_testing)
|
50
|
+
end
|
51
|
+
|
52
|
+
let(:person) do
|
53
|
+
Person.new
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'removes field getter' do
|
57
|
+
expect do
|
58
|
+
person.rt
|
59
|
+
end.to raise_error(NoMethodError)
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'removes field setter' do
|
63
|
+
expect do
|
64
|
+
person.rt = 'test'
|
65
|
+
end.to raise_error(NoMethodError)
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'removes field _before_type_cast getter' do
|
69
|
+
expect do
|
70
|
+
person.rt_before_type_cast
|
71
|
+
end.to raise_error(NoMethodError)
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'removes field check method' do
|
75
|
+
expect do
|
76
|
+
person.rt?
|
77
|
+
end.to raise_error(NoMethodError)
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'removes field from aliased_fields' do
|
81
|
+
expect(Person.aliased_fields).not_to include('rt')
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
context 'when remove translations' do
|
86
|
+
before do
|
87
|
+
Person.field(:remove_testing, type: String, localize: true)
|
88
|
+
Person.remove_field(:remove_testing)
|
89
|
+
end
|
90
|
+
|
91
|
+
let(:person) do
|
92
|
+
Person.new
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'removes field translation getter' do
|
96
|
+
expect do
|
97
|
+
person.remove_testing_translations
|
98
|
+
end.to raise_error(NoMethodError)
|
99
|
+
end
|
100
|
+
|
101
|
+
it 'removes field translation setter' do
|
102
|
+
expect do
|
103
|
+
person.remove_testing_translations = { de: 'test' }
|
104
|
+
end.to raise_error(NoMethodError)
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'removes field translation getter alias' do
|
108
|
+
expect do
|
109
|
+
person.remove_testing_t
|
110
|
+
end.to raise_error(NoMethodError)
|
111
|
+
end
|
112
|
+
|
113
|
+
it 'removes field translation setter alias' do
|
114
|
+
expect do
|
115
|
+
person.remove_testing_t = { de: 'test' }
|
116
|
+
end.to raise_error(NoMethodError)
|
117
|
+
end
|
118
|
+
|
119
|
+
it 'localized_fields should not have removed field' do
|
120
|
+
expect(person.localized_fields).not_to include('remove_testing')
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
context 'when remove translations for aliasing field' do
|
125
|
+
before do
|
126
|
+
Person.field(:remove_testing, type: String, localize: true, as: :rt)
|
127
|
+
Person.remove_field(:remove_testing)
|
128
|
+
end
|
129
|
+
|
130
|
+
let(:person) do
|
131
|
+
Person.new
|
132
|
+
end
|
133
|
+
|
134
|
+
it 'removes field translation getter' do
|
135
|
+
expect do
|
136
|
+
person.rt_translations
|
137
|
+
end.to raise_error(NoMethodError)
|
138
|
+
end
|
139
|
+
|
140
|
+
it 'removes field translation setter' do
|
141
|
+
expect do
|
142
|
+
person.rt_translations = { de: 'test' }
|
143
|
+
end.to raise_error(NoMethodError)
|
144
|
+
end
|
145
|
+
|
146
|
+
it 'removes field translation getter alias' do
|
147
|
+
expect do
|
148
|
+
person.rt_t
|
149
|
+
end.to raise_error(NoMethodError)
|
150
|
+
end
|
151
|
+
|
152
|
+
it 'removes field translation setter alias' do
|
153
|
+
expect do
|
154
|
+
person.rt_t = { de: 'test' }
|
155
|
+
end.to raise_error(NoMethodError)
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
context 'when remove dirty change methods' do
|
160
|
+
before do
|
161
|
+
Person.field(:remove_testing, type: String)
|
162
|
+
Person.remove_field(:remove_testing)
|
163
|
+
end
|
164
|
+
|
165
|
+
let(:person) do
|
166
|
+
Person.new
|
167
|
+
end
|
168
|
+
|
169
|
+
it 'removes the dirty change accessor' do
|
170
|
+
expect do
|
171
|
+
person.remove_testing_change
|
172
|
+
end.to raise_error(NoMethodError)
|
173
|
+
end
|
174
|
+
|
175
|
+
it 'removes the dirty change check' do
|
176
|
+
expect do
|
177
|
+
person.remove_testing_changed?
|
178
|
+
end.to raise_error(NoMethodError)
|
179
|
+
end
|
180
|
+
|
181
|
+
it 'removes the dirty change flag' do
|
182
|
+
expect do
|
183
|
+
person.remove_testing_will_change!
|
184
|
+
end.to raise_error(NoMethodError)
|
185
|
+
end
|
186
|
+
|
187
|
+
it 'removes the dirty default change check' do
|
188
|
+
expect do
|
189
|
+
person.remove_testing_changed_from_default?
|
190
|
+
end.to raise_error(NoMethodError)
|
191
|
+
end
|
192
|
+
|
193
|
+
it 'removes the dirty change previous value accessor' do
|
194
|
+
expect do
|
195
|
+
person.remove_testing_was
|
196
|
+
end.to raise_error(NoMethodError)
|
197
|
+
end
|
198
|
+
|
199
|
+
it 'removes the dirty change reset' do
|
200
|
+
expect do
|
201
|
+
person.reset_remove_testing!
|
202
|
+
end.to raise_error(NoMethodError)
|
203
|
+
end
|
204
|
+
|
205
|
+
it 'removes the dirty change reset to default' do
|
206
|
+
expect do
|
207
|
+
person.reset_remove_testing_to_default!
|
208
|
+
end.to raise_error(NoMethodError)
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
context 'when remove dirty change methods for aliasing field' do
|
213
|
+
before do
|
214
|
+
Person.field(:remove_testing, type: String, as: :rt)
|
215
|
+
Person.remove_field(:remove_testing)
|
216
|
+
end
|
217
|
+
|
218
|
+
let(:person) do
|
219
|
+
Person.new
|
220
|
+
end
|
221
|
+
|
222
|
+
it 'removes the dirty change accessor' do
|
223
|
+
expect do
|
224
|
+
person.rt_change
|
225
|
+
end.to raise_error(NoMethodError)
|
226
|
+
end
|
227
|
+
|
228
|
+
it 'removes the dirty change check' do
|
229
|
+
expect do
|
230
|
+
person.rt_changed?
|
231
|
+
end.to raise_error(NoMethodError)
|
232
|
+
end
|
233
|
+
|
234
|
+
it 'removes the dirty change flag' do
|
235
|
+
expect do
|
236
|
+
person.rt_will_change!
|
237
|
+
end.to raise_error(NoMethodError)
|
238
|
+
end
|
239
|
+
|
240
|
+
it 'removes the dirty default change check' do
|
241
|
+
expect do
|
242
|
+
person.rt_changed_from_default?
|
243
|
+
end.to raise_error(NoMethodError)
|
244
|
+
end
|
245
|
+
|
246
|
+
it 'removes the dirty change previous value accessor' do
|
247
|
+
expect do
|
248
|
+
person.rt_was
|
249
|
+
end.to raise_error(NoMethodError)
|
250
|
+
end
|
251
|
+
|
252
|
+
it 'removes the dirty change reset' do
|
253
|
+
expect do
|
254
|
+
person.reset_rt!
|
255
|
+
end.to raise_error(NoMethodError)
|
256
|
+
end
|
257
|
+
|
258
|
+
it 'removes the dirty change reset to default' do
|
259
|
+
expect do
|
260
|
+
person.reset_rt_to_default!
|
261
|
+
end.to raise_error(NoMethodError)
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
265
|
+
context 'when remove validators' do
|
266
|
+
before do
|
267
|
+
Person.field(:remove_testing, type: String)
|
268
|
+
Person.validates(:remove_testing, uniqueness: true)
|
269
|
+
Person.remove_field(:remove_testing)
|
270
|
+
end
|
271
|
+
|
272
|
+
it 'validators should not have removed field' do
|
273
|
+
expect(Person._validators).not_to include(:remove_testing)
|
274
|
+
end
|
275
|
+
end
|
276
|
+
end
|
277
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__),
|
4
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
5
|
|
4
|
-
MODELS = File.join(File.dirname(__FILE__),
|
6
|
+
MODELS = File.join(File.dirname(__FILE__), 'app/models')
|
5
7
|
$LOAD_PATH.unshift(MODELS)
|
6
8
|
|
7
9
|
require 'mongoid'
|
@@ -12,7 +14,7 @@ require 'rspec'
|
|
12
14
|
# Mongoid.logger.level = Logger::DEBUG
|
13
15
|
|
14
16
|
# Autoload every model for the test suite that sits in spec/app/models.
|
15
|
-
Dir[
|
16
|
-
name = File.basename(file,
|
17
|
+
Dir[File.join(MODELS, '*.rb')].each do |file|
|
18
|
+
name = File.basename(file, '.rb')
|
17
19
|
autoload name.camelize.to_sym, name
|
18
20
|
end
|
metadata
CHANGED
@@ -1,43 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid-suicide
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anton Maminov
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-07-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: bundler
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.7'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '1.7'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rake
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '10.0'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '10.0'
|
41
13
|
- !ruby/object:Gem::Dependency
|
42
14
|
name: mongoid
|
43
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -47,8 +19,8 @@ dependencies:
|
|
47
19
|
version: '4.0'
|
48
20
|
- - "<"
|
49
21
|
- !ruby/object:Gem::Version
|
50
|
-
version: '
|
51
|
-
type: :
|
22
|
+
version: '11.0'
|
23
|
+
type: :runtime
|
52
24
|
prerelease: false
|
53
25
|
version_requirements: !ruby/object:Gem::Requirement
|
54
26
|
requirements:
|
@@ -57,7 +29,7 @@ dependencies:
|
|
57
29
|
version: '4.0'
|
58
30
|
- - "<"
|
59
31
|
- !ruby/object:Gem::Version
|
60
|
-
version: '
|
32
|
+
version: '11.0'
|
61
33
|
description: Hacks to support Mongoid remove field. Including associations and validations
|
62
34
|
email:
|
63
35
|
- anton.linux@gmail.com
|
@@ -65,26 +37,29 @@ executables: []
|
|
65
37
|
extensions: []
|
66
38
|
extra_rdoc_files: []
|
67
39
|
files:
|
40
|
+
- ".github/dependabot.yml"
|
41
|
+
- ".github/workflows/ruby.yml"
|
68
42
|
- ".gitignore"
|
69
43
|
- ".rspec"
|
70
|
-
- ".
|
44
|
+
- ".rubocop.yml"
|
45
|
+
- ".ruby-version"
|
71
46
|
- Gemfile
|
72
47
|
- LICENSE.txt
|
73
48
|
- README.md
|
74
|
-
- Rakefile
|
75
49
|
- lib/mongoid-suicide.rb
|
76
50
|
- lib/mongoid/suicide.rb
|
77
51
|
- lib/mongoid/suicide/version.rb
|
78
52
|
- mongoid-suicide.gemspec
|
79
53
|
- mongoid-suicide.png
|
80
54
|
- spec/app/models/person.rb
|
81
|
-
- spec/
|
55
|
+
- spec/mongoid/suicide_spec.rb
|
82
56
|
- spec/spec_helper.rb
|
83
57
|
homepage: https://github.com/mamantoha/mongoid-suicide
|
84
58
|
licenses:
|
85
59
|
- MIT
|
86
|
-
metadata:
|
87
|
-
|
60
|
+
metadata:
|
61
|
+
rubygems_mfa_required: 'true'
|
62
|
+
post_install_message:
|
88
63
|
rdoc_options: []
|
89
64
|
require_paths:
|
90
65
|
- lib
|
@@ -92,19 +67,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
92
67
|
requirements:
|
93
68
|
- - ">="
|
94
69
|
- !ruby/object:Gem::Version
|
95
|
-
version:
|
70
|
+
version: 3.1.0
|
96
71
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
72
|
requirements:
|
98
73
|
- - ">="
|
99
74
|
- !ruby/object:Gem::Version
|
100
75
|
version: '0'
|
101
76
|
requirements: []
|
102
|
-
|
103
|
-
|
104
|
-
signing_key:
|
77
|
+
rubygems_version: 3.5.9
|
78
|
+
signing_key:
|
105
79
|
specification_version: 4
|
106
80
|
summary: Hacks to support Mongoid remove field
|
107
|
-
test_files:
|
108
|
-
- spec/app/models/person.rb
|
109
|
-
- spec/mongoid_suicide_spec.rb
|
110
|
-
- spec/spec_helper.rb
|
81
|
+
test_files: []
|
data/.travis.yml
DELETED
data/Rakefile
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
require "bundler/gem_tasks"
|
2
|
-
|
3
|
-
require "bundler"
|
4
|
-
Bundler.setup
|
5
|
-
|
6
|
-
require "rake"
|
7
|
-
require "rspec/core/rake_task"
|
8
|
-
|
9
|
-
$LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
10
|
-
require "mongoid/suicide/version"
|
11
|
-
|
12
|
-
task :gem => :build
|
13
|
-
task :build do
|
14
|
-
system "gem build mongoid-suicide.gemspec"
|
15
|
-
end
|
16
|
-
|
17
|
-
task :install => :build do
|
18
|
-
system "gem install mongoid-suicide-#{Mongoid::VERSION}.gem"
|
19
|
-
end
|
20
|
-
|
21
|
-
task :release => :build do
|
22
|
-
system "git tag -a v#{Mongoid::Suicide::VERSION} -m 'Tagging #{Mongoid::Suicide::VERSION}'"
|
23
|
-
system "git push --tags"
|
24
|
-
system "gem push mongoid-#{Mongoid::Suicide::VERSION}.gem"
|
25
|
-
system "rm mongoid-#{Mongoid::Suicide::VERSION}.gem"
|
26
|
-
end
|
27
|
-
|
28
|
-
RSpec::Core::RakeTask.new("spec") do |spec|
|
29
|
-
spec.pattern = "spec/**/*_spec.rb"
|
30
|
-
end
|
31
|
-
|
32
|
-
RSpec::Core::RakeTask.new('spec:progress') do |spec|
|
33
|
-
spec.rspec_opts = %w(--format progress)
|
34
|
-
spec.pattern = "spec/**/*_spec.rb"
|
35
|
-
end
|
36
|
-
|
37
|
-
task :default => :spec
|
@@ -1,308 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe Mongoid::Suicide do
|
4
|
-
describe "#remove_field" do
|
5
|
-
context "remove accessors" do
|
6
|
-
|
7
|
-
before do
|
8
|
-
Person.field(:remove_testing, type: String)
|
9
|
-
end
|
10
|
-
|
11
|
-
let(:person) do
|
12
|
-
Person.new
|
13
|
-
end
|
14
|
-
|
15
|
-
before(:each) do
|
16
|
-
Person.remove_field(:remove_testing)
|
17
|
-
end
|
18
|
-
|
19
|
-
it "removes field getter" do
|
20
|
-
expect {
|
21
|
-
person.remove_testing
|
22
|
-
}.to raise_error(NoMethodError)
|
23
|
-
end
|
24
|
-
|
25
|
-
it "removes field setter" do
|
26
|
-
expect {
|
27
|
-
person.remove_testing = 'test'
|
28
|
-
}.to raise_error(NoMethodError)
|
29
|
-
end
|
30
|
-
|
31
|
-
it "removes field _before_type_cast getter" do
|
32
|
-
expect {
|
33
|
-
person.remove_testing_before_type_cast
|
34
|
-
}.to raise_error(NoMethodError)
|
35
|
-
end
|
36
|
-
|
37
|
-
it "removes field check method" do
|
38
|
-
expect {
|
39
|
-
person.remove_testing?
|
40
|
-
}.to raise_error(NoMethodError)
|
41
|
-
end
|
42
|
-
|
43
|
-
it "removes field from fields" do
|
44
|
-
expect(Person.fields).to_not include("remove_testing")
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
context "remove accessors for aliasing field" do
|
49
|
-
|
50
|
-
before do
|
51
|
-
Person.field(:remove_testing, type: String, as: :rt)
|
52
|
-
end
|
53
|
-
|
54
|
-
let(:person) do
|
55
|
-
Person.new
|
56
|
-
end
|
57
|
-
|
58
|
-
before(:each) do
|
59
|
-
Person.remove_field(:remove_testing)
|
60
|
-
end
|
61
|
-
|
62
|
-
it "removes field getter" do
|
63
|
-
expect {
|
64
|
-
person.rt
|
65
|
-
}.to raise_error(NoMethodError)
|
66
|
-
end
|
67
|
-
|
68
|
-
it "removes field setter" do
|
69
|
-
expect {
|
70
|
-
person.rt = 'test'
|
71
|
-
}.to raise_error(NoMethodError)
|
72
|
-
end
|
73
|
-
|
74
|
-
it "removes field _before_type_cast getter" do
|
75
|
-
expect {
|
76
|
-
person.rt_before_type_cast
|
77
|
-
}.to raise_error(NoMethodError)
|
78
|
-
end
|
79
|
-
|
80
|
-
it "removes field check method" do
|
81
|
-
expect {
|
82
|
-
person.rt?
|
83
|
-
}.to raise_error(NoMethodError)
|
84
|
-
end
|
85
|
-
|
86
|
-
it "removes field from aliased_fields" do
|
87
|
-
expect(Person.aliased_fields).to_not include("rt")
|
88
|
-
end
|
89
|
-
|
90
|
-
end
|
91
|
-
|
92
|
-
context "remove translations" do
|
93
|
-
|
94
|
-
before do
|
95
|
-
Person.field(:remove_testing, type: String, localize: true)
|
96
|
-
end
|
97
|
-
|
98
|
-
let(:person) do
|
99
|
-
Person.new
|
100
|
-
end
|
101
|
-
|
102
|
-
before(:each) do
|
103
|
-
Person.remove_field(:remove_testing)
|
104
|
-
end
|
105
|
-
|
106
|
-
it "removes field translation getter" do
|
107
|
-
expect {
|
108
|
-
person.remove_testing_translations
|
109
|
-
}.to raise_error(NoMethodError)
|
110
|
-
end
|
111
|
-
|
112
|
-
it "removes field translation setter" do
|
113
|
-
expect {
|
114
|
-
person.remove_testing_translations = { de: 'test' }
|
115
|
-
}.to raise_error(NoMethodError)
|
116
|
-
end
|
117
|
-
|
118
|
-
it "removes field translation getter alias" do
|
119
|
-
expect {
|
120
|
-
person.remove_testing_t
|
121
|
-
}.to raise_error(NoMethodError)
|
122
|
-
end
|
123
|
-
|
124
|
-
it "removes field translation setter alias" do
|
125
|
-
expect {
|
126
|
-
person.remove_testing_t = { de: 'test' }
|
127
|
-
}.to raise_error(NoMethodError)
|
128
|
-
end
|
129
|
-
|
130
|
-
it "localized_fields should not have removed field" do
|
131
|
-
expect(person.localized_fields).to_not include('remove_testing')
|
132
|
-
end
|
133
|
-
|
134
|
-
end
|
135
|
-
|
136
|
-
context "remove translations for aliasing field" do
|
137
|
-
|
138
|
-
before do
|
139
|
-
Person.field(:remove_testing, type: String, localize: true, as: :rt)
|
140
|
-
end
|
141
|
-
|
142
|
-
let(:person) do
|
143
|
-
Person.new
|
144
|
-
end
|
145
|
-
|
146
|
-
before(:each) do
|
147
|
-
Person.remove_field(:remove_testing)
|
148
|
-
end
|
149
|
-
|
150
|
-
it "removes field translation getter" do
|
151
|
-
expect {
|
152
|
-
person.rt_translations
|
153
|
-
}.to raise_error(NoMethodError)
|
154
|
-
end
|
155
|
-
|
156
|
-
it "removes field translation setter" do
|
157
|
-
expect {
|
158
|
-
person.rt_translations = { de: 'test' }
|
159
|
-
}.to raise_error(NoMethodError)
|
160
|
-
end
|
161
|
-
|
162
|
-
it "removes field translation getter alias" do
|
163
|
-
expect {
|
164
|
-
person.rt_t
|
165
|
-
}.to raise_error(NoMethodError)
|
166
|
-
end
|
167
|
-
|
168
|
-
it "removes field translation setter alias" do
|
169
|
-
expect {
|
170
|
-
person.rt_t = { de: 'test' }
|
171
|
-
}.to raise_error(NoMethodError)
|
172
|
-
end
|
173
|
-
|
174
|
-
end
|
175
|
-
|
176
|
-
context "remove dirty change methods" do
|
177
|
-
|
178
|
-
before do
|
179
|
-
Person.field(:remove_testing, type: String)
|
180
|
-
end
|
181
|
-
|
182
|
-
let(:person) do
|
183
|
-
Person.new
|
184
|
-
end
|
185
|
-
|
186
|
-
before(:each) do
|
187
|
-
Person.remove_field(:remove_testing)
|
188
|
-
end
|
189
|
-
|
190
|
-
it "removes the dirty change accessor" do
|
191
|
-
expect {
|
192
|
-
person.remove_testing_change
|
193
|
-
}.to raise_error(NoMethodError)
|
194
|
-
end
|
195
|
-
|
196
|
-
it "removes the dirty change check" do
|
197
|
-
expect {
|
198
|
-
person.remove_testing_changed?
|
199
|
-
}.to raise_error(NoMethodError)
|
200
|
-
end
|
201
|
-
|
202
|
-
it "removes the dirty change flag" do
|
203
|
-
expect {
|
204
|
-
person.remove_testing_will_change!
|
205
|
-
}.to raise_error(NoMethodError)
|
206
|
-
end
|
207
|
-
|
208
|
-
it "removes the dirty default change check" do
|
209
|
-
expect {
|
210
|
-
person.remove_testing_changed_from_default?
|
211
|
-
}.to raise_error(NoMethodError)
|
212
|
-
end
|
213
|
-
|
214
|
-
it "removes the dirty change previous value accessor" do
|
215
|
-
expect {
|
216
|
-
person.remove_testing_was
|
217
|
-
}.to raise_error(NoMethodError)
|
218
|
-
end
|
219
|
-
|
220
|
-
it "removes the dirty change reset" do
|
221
|
-
expect {
|
222
|
-
person.reset_remove_testing!
|
223
|
-
}.to raise_error(NoMethodError)
|
224
|
-
end
|
225
|
-
|
226
|
-
it "removes the dirty change reset to default" do
|
227
|
-
expect {
|
228
|
-
person.reset_remove_testing_to_default!
|
229
|
-
}.to raise_error(NoMethodError)
|
230
|
-
end
|
231
|
-
|
232
|
-
end
|
233
|
-
|
234
|
-
context "remove dirty change methods for aliasing field" do
|
235
|
-
|
236
|
-
before do
|
237
|
-
Person.field(:remove_testing, type: String, as: :rt)
|
238
|
-
end
|
239
|
-
|
240
|
-
let(:person) do
|
241
|
-
Person.new
|
242
|
-
end
|
243
|
-
|
244
|
-
before(:each) do
|
245
|
-
Person.remove_field(:remove_testing)
|
246
|
-
end
|
247
|
-
|
248
|
-
it "removes the dirty change accessor" do
|
249
|
-
expect {
|
250
|
-
person.rt_change
|
251
|
-
}.to raise_error(NoMethodError)
|
252
|
-
end
|
253
|
-
|
254
|
-
it "removes the dirty change check" do
|
255
|
-
expect {
|
256
|
-
person.rt_changed?
|
257
|
-
}.to raise_error(NoMethodError)
|
258
|
-
end
|
259
|
-
|
260
|
-
it "removes the dirty change flag" do
|
261
|
-
expect {
|
262
|
-
person.rt_will_change!
|
263
|
-
}.to raise_error(NoMethodError)
|
264
|
-
end
|
265
|
-
|
266
|
-
it "removes the dirty default change check" do
|
267
|
-
expect {
|
268
|
-
person.rt_changed_from_default?
|
269
|
-
}.to raise_error(NoMethodError)
|
270
|
-
end
|
271
|
-
|
272
|
-
it "removes the dirty change previous value accessor" do
|
273
|
-
expect {
|
274
|
-
person.rt_was
|
275
|
-
}.to raise_error(NoMethodError)
|
276
|
-
end
|
277
|
-
|
278
|
-
it "removes the dirty change reset" do
|
279
|
-
expect {
|
280
|
-
person.reset_rt!
|
281
|
-
}.to raise_error(NoMethodError)
|
282
|
-
end
|
283
|
-
|
284
|
-
it "removes the dirty change reset to default" do
|
285
|
-
expect {
|
286
|
-
person.reset_rt_to_default!
|
287
|
-
}.to raise_error(NoMethodError)
|
288
|
-
end
|
289
|
-
|
290
|
-
end
|
291
|
-
|
292
|
-
context "remove validators" do
|
293
|
-
before do
|
294
|
-
Person.field(:remove_testing, type: String)
|
295
|
-
Person.validates(:remove_testing, uniqueness: true)
|
296
|
-
end
|
297
|
-
|
298
|
-
before(:each) do
|
299
|
-
Person.remove_field(:remove_testing)
|
300
|
-
end
|
301
|
-
|
302
|
-
it "validators should not have removed field" do
|
303
|
-
expect(Person._validators).to_not include(:remove_testing)
|
304
|
-
end
|
305
|
-
end
|
306
|
-
end
|
307
|
-
|
308
|
-
end
|