protective 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0dfc31d7a1219447cc46645f4b5c7d0dbe74ac64
4
+ data.tar.gz: c73c7eabbefbec37e5e6645538c4342cb97c5e88
5
+ SHA512:
6
+ metadata.gz: f2c97c8f6657b28630e4190a1a554a60d4378daacd938601dd19255054047c2eb1e296c957ce72b48c7f50e1f6d3c7535a7ff84f9188efbe6075786d2254e1eb
7
+ data.tar.gz: 9177fd36fc0980acc58680df79cb75e6e6a49709020a735e5c72c03511aa9317030f4b3f6a0ae12b6227b8f85f3b0e5fee442eddc25dc68bb8fe899d0a7e279e
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 2.4.1
data/Gemfile CHANGED
@@ -1,15 +1,14 @@
1
- source "http://rubygems.org"
2
- # Add dependencies required to use your gem here.
3
- # Example:
4
- # gem "activesupport", ">= 2.3.5"
1
+ source "https://rubygems.org"
5
2
 
6
3
  gem "activerecord"
7
4
 
8
5
  # Add dependencies to develop your gem here.
9
6
  # Include everything needed to run rake, tests, features, etc.
10
7
  group :development do
11
- gem "bundler", "~> 1.0.0"
12
- gem "jeweler", "~> 1.5.2"
13
- gem "rcov", ">= 0"
14
- gem "sqlite3"
8
+ gem "bundler"
9
+ gem "jeweler"
10
+ gem "simplecov"
11
+ gem 'sqlite3', :platforms => :ruby
12
+ gem 'jdbc-sqlite3', :platforms => :jruby
13
+ gem 'activerecord-jdbcsqlite3-adapter', :platforms => :jruby
15
14
  end
@@ -1,35 +1,90 @@
1
1
  GEM
2
- remote: http://rubygems.org/
2
+ remote: https://rubygems.org/
3
3
  specs:
4
- activemodel (3.0.3)
5
- activesupport (= 3.0.3)
6
- builder (~> 2.1.2)
7
- i18n (~> 0.4)
8
- activerecord (3.0.3)
9
- activemodel (= 3.0.3)
10
- activesupport (= 3.0.3)
11
- arel (~> 2.0.2)
12
- tzinfo (~> 0.3.23)
13
- activesupport (3.0.3)
14
- arel (2.0.7)
15
- builder (2.1.2)
16
- git (1.2.5)
17
- i18n (0.5.0)
18
- jeweler (1.5.2)
19
- bundler (~> 1.0.0)
4
+ activemodel (5.1.2)
5
+ activesupport (= 5.1.2)
6
+ activerecord (5.1.2)
7
+ activemodel (= 5.1.2)
8
+ activesupport (= 5.1.2)
9
+ arel (~> 8.0)
10
+ activesupport (5.1.2)
11
+ concurrent-ruby (~> 1.0, >= 1.0.2)
12
+ i18n (~> 0.7)
13
+ minitest (~> 5.1)
14
+ tzinfo (~> 1.1)
15
+ addressable (2.4.0)
16
+ arel (8.0.0)
17
+ builder (3.2.3)
18
+ concurrent-ruby (1.0.5)
19
+ descendants_tracker (0.0.4)
20
+ thread_safe (~> 0.3, >= 0.3.1)
21
+ docile (1.1.5)
22
+ faraday (0.9.2)
23
+ multipart-post (>= 1.2, < 3)
24
+ git (1.3.0)
25
+ github_api (0.16.0)
26
+ addressable (~> 2.4.0)
27
+ descendants_tracker (~> 0.0.4)
28
+ faraday (~> 0.8, < 0.10)
29
+ hashie (>= 3.4)
30
+ mime-types (>= 1.16, < 3.0)
31
+ oauth2 (~> 1.0)
32
+ hashie (3.5.5)
33
+ highline (1.7.8)
34
+ i18n (0.8.6)
35
+ jeweler (2.3.7)
36
+ builder
37
+ bundler (>= 1)
20
38
  git (>= 1.2.5)
39
+ github_api (~> 0.16.0)
40
+ highline (>= 1.6.15)
41
+ nokogiri (>= 1.5.10)
42
+ psych (~> 2.2)
21
43
  rake
22
- rake (0.8.7)
23
- rcov (0.9.9)
24
- sqlite3 (1.3.3)
25
- tzinfo (0.3.24)
44
+ rdoc
45
+ semver2
46
+ json (2.1.0)
47
+ jwt (1.5.6)
48
+ mime-types (2.99.3)
49
+ mini_portile2 (2.2.0)
50
+ minitest (5.10.2)
51
+ multi_json (1.12.1)
52
+ multi_xml (0.6.0)
53
+ multipart-post (2.0.0)
54
+ nokogiri (1.8.0)
55
+ mini_portile2 (~> 2.2.0)
56
+ oauth2 (1.4.0)
57
+ faraday (>= 0.8, < 0.13)
58
+ jwt (~> 1.0)
59
+ multi_json (~> 1.3)
60
+ multi_xml (~> 0.5)
61
+ rack (>= 1.2, < 3)
62
+ psych (2.2.4)
63
+ rack (2.0.3)
64
+ rake (12.0.0)
65
+ rdoc (5.1.0)
66
+ semver2 (3.4.2)
67
+ simplecov (0.14.1)
68
+ docile (~> 1.1.0)
69
+ json (>= 1.8, < 3)
70
+ simplecov-html (~> 0.10.0)
71
+ simplecov-html (0.10.1)
72
+ sqlite3 (1.3.13)
73
+ thread_safe (0.3.6)
74
+ tzinfo (1.2.3)
75
+ thread_safe (~> 0.1)
26
76
 
27
77
  PLATFORMS
28
78
  ruby
29
79
 
30
80
  DEPENDENCIES
31
81
  activerecord
32
- bundler (~> 1.0.0)
33
- jeweler (~> 1.5.2)
34
- rcov
82
+ activerecord-jdbcsqlite3-adapter
83
+ bundler
84
+ jdbc-sqlite3
85
+ jeweler
86
+ simplecov
35
87
  sqlite3
88
+
89
+ BUNDLED WITH
90
+ 1.15.1
@@ -1,4 +1,4 @@
1
- Copyright (c) 2011 Pascal Zumkehr
1
+ Copyright (c) 2011-2017 Pascal Zumkehr
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -1,12 +1,15 @@
1
1
  = protective
2
2
 
3
+ {<img src="https://secure.travis-ci.org/codez/protective.png" />}[http://travis-ci.org/codez/protective]
4
+
3
5
  In your ActiveRecord models, you used to protect the instances from being destroyed as follows:
4
6
 
5
7
  before_destroy :protect_if_has_attachments
6
-
8
+
7
9
  def protect_if_has_attachments
8
10
  unless attachments.empty?
9
11
  errors.add(:base, "Record has attachments and cannot be destroyed")
12
+ false
10
13
  end
11
14
  end
12
15
 
@@ -14,7 +17,7 @@ With +protective+, this is reduced to:
14
17
 
15
18
  protect_if :attachments, "Record has attachments and cannot be destroyed"
16
19
 
17
- Of course, you may pass the name of any defined method. If its result evaluates to +present?+, the record is not going to be destroyed. No exception is thrown, but a message is added to the +errors+ object of your model. This may then be used further on.
20
+ Of course, you may pass the name of any defined method. If its result evaluates to <tt>present?</tt>, the record is not going to be destroyed. No exception is thrown, but a message is added to the +errors+ object of your model. This may then be used further on.
18
21
 
19
22
  To use protective, simply add it to your +Gemfile+:
20
23
 
@@ -23,6 +26,5 @@ To use protective, simply add it to your +Gemfile+:
23
26
 
24
27
  == Copyright
25
28
 
26
- Copyright (c) 2011 Pascal Zumkehr. See LICENSE.txt for
29
+ Copyright (c) 2011-2017 Pascal Zumkehr. See LICENSE.txt for
27
30
  further details.
28
-
data/Rakefile CHANGED
@@ -9,6 +9,8 @@ rescue Bundler::BundlerError => e
9
9
  end
10
10
  require 'rake'
11
11
 
12
+ task :default => :test
13
+
12
14
  require 'jeweler'
13
15
  Jeweler::Tasks.new do |gem|
14
16
  # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
@@ -21,7 +23,7 @@ Jeweler::Tasks.new do |gem|
21
23
  gem.authors = ["Pascal Zumkehr"]
22
24
  # Include your dependencies below. Runtime dependencies are required when using your gem,
23
25
  # and development dependencies are only needed for development (ie running rake tasks, tests, etc)
24
- gem.add_runtime_dependency 'activerecord'
26
+ # gem.add_runtime_dependency 'activerecord'
25
27
  # gem.add_development_dependency 'rspec', '> 1.2.3'
26
28
  end
27
29
  Jeweler::RubygemsDotOrgTasks.new
@@ -33,16 +35,9 @@ Rake::TestTask.new(:test) do |test|
33
35
  test.verbose = true
34
36
  end
35
37
 
36
- require 'rcov/rcovtask'
37
- Rcov::RcovTask.new do |test|
38
- test.libs << 'test'
39
- test.pattern = 'test/**/*_test.rb'
40
- test.verbose = true
41
- end
42
-
43
38
  task :default => :test
44
39
 
45
- require 'rake/rdoctask'
40
+ require 'rdoc/task'
46
41
  Rake::RDocTask.new do |rdoc|
47
42
  version = File.exist?('VERSION') ? File.read('VERSION') : ""
48
43
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
@@ -6,7 +6,7 @@ module Protective
6
6
  def self.included(base)
7
7
  base.send :extend, ClassMethods
8
8
  end
9
-
9
+
10
10
  module ClassMethods
11
11
  # Protects a record from being destroyed if the passed method
12
12
  # evaluates to #present? upon destruction. If a messag is given,
@@ -16,36 +16,38 @@ module Protective
16
16
  class_attribute :protect_if_methods
17
17
  self.protect_if_methods = {}
18
18
 
19
- before_destroy :destruction_allowed?
19
+ before_destroy :destruction_allowed?
20
20
  send :include, InstanceMethods
21
21
  end
22
-
22
+
23
23
  protect_if_methods[method] = message
24
24
  end
25
25
  end
26
-
26
+
27
27
  module InstanceMethods
28
-
28
+
29
29
  # Returns true if this record cannot be destroyed.
30
30
  def protected?
31
31
  protect_if_methods.keys.any? do |method|
32
32
  !protect_method_allows_destruction(method)
33
33
  end
34
34
  end
35
-
35
+
36
36
  # Returns true if this record may be destroyed or
37
37
  # adds possible error messages to the #errors object otherwise.
38
38
  def destruction_allowed?
39
- protect_if_methods.all? do |method, message|
40
- unless allowed = protect_method_allows_destruction(method)
41
- errors.add(:base, message) if message
42
- end
39
+ success = protect_if_methods.all? do |method, message|
40
+ allowed = protect_method_allows_destruction(method)
41
+ errors.add(:base, message) if !allowed && message
43
42
  allowed
44
43
  end
44
+
45
+ throw(:abort) if !success && ActiveRecord::VERSION::MAJOR >= 5
46
+ success
45
47
  end
46
-
48
+
47
49
  private
48
-
50
+
49
51
  def protect_method_allows_destruction(method)
50
52
  value = send(method)
51
53
  if value.respond_to?(:empty?) # ar *_many association
@@ -58,4 +60,4 @@ module Protective
58
60
 
59
61
  end
60
62
 
61
- ActiveRecord::Base.send :include, Protective
63
+ ActiveRecord::Base.send :include, Protective
@@ -7,20 +7,22 @@ rescue Bundler::BundlerError => e
7
7
  $stderr.puts "Run `bundle install` to install missing gems"
8
8
  exit e.status_code
9
9
  end
10
- require 'test/unit'
10
+ if RUBY_VERSION =~ /\A1\.9/ && !defined?(JRUBY_VERSION)
11
+ require 'simplecov'
12
+ SimpleCov.start
13
+ end
14
+
15
+ require 'minitest'
16
+ require 'minitest/autorun'
11
17
 
12
18
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
13
19
  $LOAD_PATH.unshift(File.dirname(__FILE__))
14
20
  require 'protective'
15
21
 
22
+ DB_CONFIG = { :adapter => (defined?(JRUBY_VERSION) ? 'jdbcsqlite3' : 'sqlite3'),
23
+ :database => File.join('test', 'protective_plugin.sqlite3.db')}
16
24
 
17
25
  def load_schema
18
- config = YAML::load(IO.read(File.dirname(__FILE__) + '/database.yml'))
19
-
20
- ActiveRecord::Base.establish_connection(config['sqlite3'])
21
- load(File.dirname(__FILE__) + "/schema.rb")
22
- end
23
-
24
-
25
- class Test::Unit::TestCase
26
+ ActiveRecord::Base.establish_connection(DB_CONFIG)
27
+ load(File.join(File.dirname(__FILE__), "schema.rb"))
26
28
  end
@@ -1,37 +1,37 @@
1
1
  require 'helper'
2
2
 
3
- class ProtectiveTest < Test::Unit::TestCase
3
+ class ProtectiveTest < Minitest::Test
4
4
  load_schema
5
-
5
+
6
6
  class Subject < ActiveRecord::Base
7
7
  has_many :attachments
8
-
8
+
9
9
  protect_if :attachments, "Still has attachments"
10
10
  protect_if :marked
11
11
  end
12
-
12
+
13
13
  class Attachment < ActiveRecord::Base
14
14
  belongs_to :subjects
15
15
  end
16
-
16
+
17
17
  def test_setup
18
18
  assert_equal [], Subject.all
19
19
  assert_equal 2, Subject.protect_if_methods.size
20
20
  end
21
-
21
+
22
22
  def test_empty_subject_may_be_destroyed
23
23
  s = Subject.create! :name => 'test'
24
24
  assert !s.protected?
25
25
  assert s.destroy
26
26
  end
27
-
27
+
28
28
  def test_marked_subject_may_not_be_destroyed
29
29
  s = Subject.create! :name => 'test', :marked => true
30
30
  assert s.protected?
31
31
  assert !s.destroy
32
32
  assert_equal 0, s.errors.count
33
33
  end
34
-
34
+
35
35
  def test_subject_may_not_be_destroyed_with_attachements
36
36
  s = Subject.create! :name => 'test'
37
37
  s.attachments.create! :name => 'att'
@@ -39,13 +39,12 @@ class ProtectiveTest < Test::Unit::TestCase
39
39
  assert_equal 1, s.attachments.count
40
40
  assert s.protected?
41
41
  assert !s.destroy
42
- assert_equal ["Still has attachments"], s.errors[:base]
43
- assert !s.destruction_allowed?
42
+ assert_equal ["Still has attachments"], Array(s.errors[:base])
44
43
  end
45
-
44
+
46
45
  def teardown
47
46
  Subject.delete_all
48
47
  Attachment.delete_all
49
48
  end
50
-
49
+
51
50
  end
metadata CHANGED
@@ -1,122 +1,126 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: protective
3
- version: !ruby/object:Gem::Version
4
- hash: 27
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 1
9
- - 0
10
- version: 0.1.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Pascal Zumkehr
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2011-02-07 00:00:00 +01:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
22
- requirement: &id001 !ruby/object:Gem::Requirement
23
- none: false
24
- requirements:
11
+ date: 2017-07-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activerecord
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
25
17
  - - ">="
26
- - !ruby/object:Gem::Version
27
- hash: 3
28
- segments:
29
- - 0
30
- version: "0"
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
31
20
  type: :runtime
32
- name: activerecord
33
21
  prerelease: false
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
36
- requirement: &id002 !ruby/object:Gem::Requirement
37
- none: false
38
- requirements:
39
- - - ~>
40
- - !ruby/object:Gem::Version
41
- hash: 23
42
- segments:
43
- - 1
44
- - 0
45
- - 0
46
- version: 1.0.0
47
- type: :development
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
48
28
  name: bundler
49
- prerelease: false
50
- version_requirements: *id002
51
- - !ruby/object:Gem::Dependency
52
- requirement: &id003 !ruby/object:Gem::Requirement
53
- none: false
54
- requirements:
55
- - - ~>
56
- - !ruby/object:Gem::Version
57
- hash: 7
58
- segments:
59
- - 1
60
- - 5
61
- - 2
62
- version: 1.5.2
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
63
34
  type: :development
64
- name: jeweler
65
35
  prerelease: false
66
- version_requirements: *id003
67
- - !ruby/object:Gem::Dependency
68
- requirement: &id004 !ruby/object:Gem::Requirement
69
- none: false
70
- requirements:
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: jeweler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
71
45
  - - ">="
72
- - !ruby/object:Gem::Version
73
- hash: 3
74
- segments:
75
- - 0
76
- version: "0"
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
77
48
  type: :development
78
- name: rcov
79
49
  prerelease: false
80
- version_requirements: *id004
81
- - !ruby/object:Gem::Dependency
82
- requirement: &id005 !ruby/object:Gem::Requirement
83
- none: false
84
- requirements:
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
85
59
  - - ">="
86
- - !ruby/object:Gem::Version
87
- hash: 3
88
- segments:
89
- - 0
90
- version: "0"
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
91
62
  type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
92
70
  name: sqlite3
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
93
77
  prerelease: false
94
- version_requirements: *id005
95
- - !ruby/object:Gem::Dependency
96
- requirement: &id006 !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
99
80
  - - ">="
100
- - !ruby/object:Gem::Version
101
- hash: 3
102
- segments:
103
- - 0
104
- version: "0"
105
- type: :runtime
106
- name: activerecord
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: jdbc-sqlite3
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
107
91
  prerelease: false
108
- version_requirements: *id006
109
- description: Protect records from being destroyed in a declarative way. Simply add 'protect_if :dont_delete, "Record is marked as not deletable"' to your ActiveRecord model. Your record will no be destroyed and the given message is added to the errors object.
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: activerecord-jdbcsqlite3-adapter
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: Protect records from being destroyed in a declarative way. Simply add
112
+ 'protect_if :dont_delete, "Record is marked as not deletable"' to your ActiveRecord
113
+ model. Your record will no be destroyed and the given message is added to the errors
114
+ object.
110
115
  email: spam@codez.ch
111
116
  executables: []
112
-
113
117
  extensions: []
114
-
115
- extra_rdoc_files:
118
+ extra_rdoc_files:
116
119
  - LICENSE.txt
117
120
  - README.rdoc
118
- files:
119
- - .document
121
+ files:
122
+ - ".document"
123
+ - ".travis.yml"
120
124
  - Gemfile
121
125
  - Gemfile.lock
122
126
  - LICENSE.txt
@@ -124,46 +128,31 @@ files:
124
128
  - Rakefile
125
129
  - VERSION
126
130
  - lib/protective.rb
127
- - rails/init.rb
128
- - test/database.yml
129
131
  - test/helper.rb
130
132
  - test/protective_test.rb
131
133
  - test/schema.rb
132
- has_rdoc: true
133
134
  homepage: http://github.com/codez/protective
134
- licenses:
135
+ licenses:
135
136
  - MIT
137
+ metadata: {}
136
138
  post_install_message:
137
139
  rdoc_options: []
138
-
139
- require_paths:
140
+ require_paths:
140
141
  - lib
141
- required_ruby_version: !ruby/object:Gem::Requirement
142
- none: false
143
- requirements:
142
+ required_ruby_version: !ruby/object:Gem::Requirement
143
+ requirements:
144
144
  - - ">="
145
- - !ruby/object:Gem::Version
146
- hash: 3
147
- segments:
148
- - 0
149
- version: "0"
150
- required_rubygems_version: !ruby/object:Gem::Requirement
151
- none: false
152
- requirements:
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ required_rubygems_version: !ruby/object:Gem::Requirement
148
+ requirements:
153
149
  - - ">="
154
- - !ruby/object:Gem::Version
155
- hash: 3
156
- segments:
157
- - 0
158
- version: "0"
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
159
152
  requirements: []
160
-
161
153
  rubyforge_project:
162
- rubygems_version: 1.3.7
154
+ rubygems_version: 2.4.8
163
155
  signing_key:
164
- specification_version: 3
156
+ specification_version: 4
165
157
  summary: Protect records from being destroyed in a declarative way
166
- test_files:
167
- - test/helper.rb
168
- - test/protective_test.rb
169
- - test/schema.rb
158
+ test_files: []
@@ -1 +0,0 @@
1
- require 'protective'
@@ -1,3 +0,0 @@
1
- sqlite3:
2
- adapter: sqlite3
3
- database: test/protective_plugin.sqlite3.db