consul 1.0.2 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,11 +5,7 @@ module Consul
5
5
  base.send :include, InstanceMethods
6
6
  base.send :extend, ClassMethods
7
7
  if ensure_power_initializer_present?
8
- if Rails.version.to_i < 4
9
- base.before_filter :ensure_power_initializer_present
10
- else
11
- base.before_action :ensure_power_initializer_present
12
- end
8
+ Util.before_action(base, :ensure_power_initializer_present)
13
9
  end
14
10
  end
15
11
 
@@ -32,68 +28,35 @@ module Consul
32
28
  private
33
29
 
34
30
  def require_power_check(options = {})
35
- if Rails.version.to_i < 4
36
- before_filter :unchecked_power, options
37
- else
38
- before_action :unchecked_power, options
39
- end
31
+ Util.before_action(self, :unchecked_power, options)
40
32
  end
41
33
 
42
34
  # This is badly named, since it doesn't actually skip the :check_power filter
43
35
  def skip_power_check(options = {})
44
- if Rails.version.to_i < 4
45
- skip_before_filter :unchecked_power, options
46
- elsif Rails.version.to_i < 5
47
- skip_before_action :unchecked_power, options
48
- else
49
- # Every `power` in a controller will skip the power check filter. After the 1st time, Rails 5+ will raise
50
- # an error because there is no `unchecked_power` action to skip any more.
51
- # To avoid this, we add the following extra option. Note that it must not be added in Rails 4 to avoid errors.
52
- # See http://api.rubyonrails.org/classes/ActiveSupport/Callbacks/ClassMethods.html#method-i-skip_callback
53
- skip_before_action :unchecked_power, { :raise => false }.merge!(options)
54
- end
36
+ Util.skip_before_action(self, :unchecked_power, options)
55
37
  end
56
38
 
57
39
  def current_power(&initializer)
58
40
  self.current_power_initializer = initializer
59
- if Rails.version.to_i < 4
60
- around_filter :with_current_power
61
- else
62
- around_action :with_current_power
63
- end
41
+ Util.around_action(self, :with_current_power)
64
42
 
65
43
  if respond_to?(:helper_method)
66
44
  helper_method :current_power
67
45
  end
68
46
  end
69
47
 
70
- attr_writer :consul_guards
71
-
72
- def consul_guards
73
- unless @consul_guards_initialized
74
- if superclass && superclass.respond_to?(:consul_guards, true)
75
- @consul_guards = superclass.send(:consul_guards).dup
76
- else
77
- @consul_guards = []
78
- end
79
- @consul_guards_initialized = true
80
- end
81
- @consul_guards
82
- end
83
-
84
48
  def power(*args)
85
-
86
49
  guard = Consul::Guard.new(*args)
87
- consul_guards << guard
88
- skip_power_check guard.filter_options
50
+
51
+ # One .power directive will skip the check for all actions, even
52
+ # if that .power directive has :only or :except options.
53
+ skip_power_check
89
54
 
90
55
  # Store arguments for testing
91
- (@consul_power_args ||= []) << args
56
+ consul_power_args << args
92
57
 
93
- if Rails.version.to_i < 4
94
- before_filter :check_power, guard.filter_options
95
- else
96
- before_action :check_power, guard.filter_options
58
+ Util.before_action(self, guard.filter_options) do |controller|
59
+ guard.ensure!(controller, controller.action_name)
97
60
  end
98
61
 
99
62
  if guard.direct_access_method
@@ -105,18 +68,26 @@ module Consul
105
68
 
106
69
  end
107
70
 
71
+ # On first access we inherit .consul_power_args from our ancestor classes.
72
+ # We also copy inherited args so we don't change our parent's .consul_power_args
73
+ def consul_power_args
74
+ unless @consul_power_args_initialized
75
+ if superclass && superclass.respond_to?(:consul_power_args, true)
76
+ @consul_power_args = superclass.send(:consul_power_args).dup
77
+ else
78
+ @consul_power_args = []
79
+ end
80
+ @consul_power_args_initialized = true
81
+ end
82
+ @consul_power_args
83
+ end
84
+
108
85
  end
109
86
 
110
87
  module InstanceMethods
111
88
 
112
89
  private
113
90
 
114
- define_method :check_power do
115
- self.class.send(:consul_guards).each do |guard|
116
- guard.ensure!(self, action_name)
117
- end
118
- end
119
-
120
91
  def unchecked_power
121
92
  raise Consul::UncheckedPower, "This controller does not check against a power"
122
93
  end
@@ -10,7 +10,7 @@ module Consul
10
10
 
11
11
  def matches?(controller)
12
12
  @controller_class = controller.class
13
- @actual_args = @controller_class.instance_variable_get('@consul_power_args')
13
+ @actual_args = @controller_class.send(:consul_power_args)
14
14
  @actual_args.present? && @actual_args.include?(@expected_args)
15
15
  end
16
16
 
data/lib/consul/util.rb CHANGED
@@ -31,9 +31,9 @@ module Consul
31
31
  options = lambda.call(*args)
32
32
  klass.scoped(options.slice *EdgeRider::Scoped::VALID_FIND_OPTIONS)
33
33
  }
34
- end
34
+ end
35
35
  end
36
-
36
+
37
37
  # This method does not support dynamic default scopes via lambdas
38
38
  # (as does #define_scope), because it is currently not required.
39
39
  def define_default_scope(klass, conditions)
@@ -57,6 +57,36 @@ module Consul
57
57
  [adjective, record]
58
58
  end
59
59
 
60
+ def skip_before_action(controller_class, name, options)
61
+ if Rails.version.to_i < 4
62
+ controller_class.skip_before_filter name, options
63
+ elsif Rails.version.to_i < 5
64
+ controller_class.skip_before_action name, options
65
+ else
66
+ # Every `power` in a controller will skip the power check filter. After the 1st time, Rails 5+ will raise
67
+ # an error because there is no `unchecked_power` action to skip any more.
68
+ # To avoid this, we add the following extra option. Note that it must not be added in Rails 4 to avoid errors.
69
+ # See http://api.rubyonrails.org/classes/ActiveSupport/Callbacks/ClassMethods.html#method-i-skip_callback
70
+ controller_class.skip_before_action name, { :raise => false }.merge!(options)
71
+ end
72
+ end
73
+
74
+ def before_action(controller_class, *args, &block)
75
+ if Rails.version.to_i < 4
76
+ controller_class.before_filter *args, &block
77
+ else
78
+ controller_class.before_action *args, &block
79
+ end
80
+ end
81
+
82
+ def around_action(controller_class, *args, &block)
83
+ if Rails.version.to_i < 4
84
+ controller_class.around_filter *args, &block
85
+ else
86
+ controller_class.around_action *args, &block
87
+ end
88
+ end
89
+
60
90
  end
61
91
  end
62
92
 
@@ -1,3 +1,3 @@
1
1
  module Consul
2
- VERSION = '1.0.2'
2
+ VERSION = '1.1.1'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: consul
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henning Koch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-22 00:00:00.000000000 Z
11
+ date: 2022-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: memoized
@@ -25,7 +25,35 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: 1.0.2
27
27
  - !ruby/object:Gem::Dependency
28
- name: rails
28
+ name: activerecord
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '3.2'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '3.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: activesupport
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '3.2'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '3.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: railties
29
57
  requirement: !ruby/object:Gem::Requirement
30
58
  requirements:
31
59
  - - ">="
@@ -58,19 +86,17 @@ executables: []
58
86
  extensions: []
59
87
  extra_rdoc_files: []
60
88
  files:
89
+ - ".github/workflows/test.yml"
61
90
  - ".gitignore"
62
91
  - ".ruby-version"
63
- - ".travis.yml"
64
92
  - CHANGELOG.md
65
93
  - Gemfile
66
- - Gemfile.3-2
67
- - Gemfile.3-2.lock
68
- - Gemfile.4-2
69
- - Gemfile.4-2.lock
70
94
  - Gemfile.5-2
71
95
  - Gemfile.5-2.lock
72
- - Gemfile.6-0
73
- - Gemfile.6-0.lock
96
+ - Gemfile.6-1
97
+ - Gemfile.6-1.lock
98
+ - Gemfile.7-0
99
+ - Gemfile.7-0.lock
74
100
  - Gemfile.lock
75
101
  - LICENSE
76
102
  - README.md
@@ -90,8 +116,10 @@ homepage: https://github.com/makandra/consul
90
116
  licenses:
91
117
  - MIT
92
118
  metadata:
119
+ source_code_uri: https://github.com/makandra/consul
93
120
  bug_tracker_uri: https://github.com/makandra/consul/issues
94
121
  changelog_uri: https://github.com/makandra/consul/blob/master/CHANGELOG.md
122
+ rubygems_mfa_required: 'true'
95
123
  post_install_message:
96
124
  rdoc_options: []
97
125
  require_paths:
@@ -107,8 +135,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
107
135
  - !ruby/object:Gem::Version
108
136
  version: '0'
109
137
  requirements: []
110
- rubyforge_project:
111
- rubygems_version: 2.5.2.3
138
+ rubygems_version: 3.2.22
112
139
  signing_key:
113
140
  specification_version: 4
114
141
  summary: A scope-based authorization solution for Ruby on Rails.
data/.travis.yml DELETED
@@ -1,40 +0,0 @@
1
- language: ruby
2
-
3
- sudo: false
4
-
5
- cache: bundler
6
-
7
- rvm:
8
- - 2.3.8
9
- - 2.4.5
10
- - 2.5.3
11
-
12
- gemfile:
13
- - Gemfile.3-2
14
- - Gemfile.4-2
15
- - Gemfile.5-2
16
- - Gemfile.6-0
17
-
18
- matrix:
19
- exclude:
20
- - gemfile: Gemfile.3-2
21
- rvm: 2.4.5
22
- - gemfile: Gemfile.3-2
23
- rvm: 2.5.3
24
- - gemfile: Gemfile.4-2
25
- rvm: 2.5.3
26
- - gemfile: Gemfile.6-0
27
- rvm: 2.3.8
28
- - gemfile: Gemfile.6-0
29
- rvm: 2.4.5
30
-
31
- install:
32
- # Replace default Travis CI bundler script with a version that doesn't
33
- # explode when lockfile doesn't match recently bumped version
34
- - bundle install --no-deployment --jobs=3 --retry=3 --path=${BUNDLE_PATH:-vendor/bundle}
35
-
36
- script: bundle exec rake current_rspec
37
-
38
- notifications:
39
- email:
40
- - fail@makandra.de
data/Gemfile.3-2 DELETED
@@ -1,20 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Runtime dependencies
4
- gem 'assignable_values'
5
- gem 'rails', '~> 3.2.22.5'
6
- gem 'rake', '~>10.5.0'
7
- gem 'rack-cache', '~>1.2.0'
8
-
9
- # Development dependencies
10
- gem 'rspec', '~>3.4'
11
- gem 'rspec-rails'
12
- gem 'test-unit', '~> 3.0'
13
- gem 'shoulda-matchers', '<2'
14
- gem 'sqlite3'
15
- gem 'rspec_candy'
16
- gem 'database_cleaner', '~>1.4.1'
17
- gem 'gemika'
18
-
19
- # Gem under test
20
- gem 'consul', :path => '.'
data/Gemfile.3-2.lock DELETED
@@ -1,156 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- consul (1.0.1)
5
- edge_rider (>= 0.3.0)
6
- memoized (>= 1.0.2)
7
- rails (>= 3.2)
8
-
9
- GEM
10
- remote: https://rubygems.org/
11
- specs:
12
- actionmailer (3.2.22.5)
13
- actionpack (= 3.2.22.5)
14
- mail (~> 2.5.4)
15
- actionpack (3.2.22.5)
16
- activemodel (= 3.2.22.5)
17
- activesupport (= 3.2.22.5)
18
- builder (~> 3.0.0)
19
- erubis (~> 2.7.0)
20
- journey (~> 1.0.4)
21
- rack (~> 1.4.5)
22
- rack-cache (~> 1.2)
23
- rack-test (~> 0.6.1)
24
- sprockets (~> 2.2.1)
25
- activemodel (3.2.22.5)
26
- activesupport (= 3.2.22.5)
27
- builder (~> 3.0.0)
28
- activerecord (3.2.22.5)
29
- activemodel (= 3.2.22.5)
30
- activesupport (= 3.2.22.5)
31
- arel (~> 3.0.2)
32
- tzinfo (~> 0.3.29)
33
- activeresource (3.2.22.5)
34
- activemodel (= 3.2.22.5)
35
- activesupport (= 3.2.22.5)
36
- activesupport (3.2.22.5)
37
- i18n (~> 0.6, >= 0.6.4)
38
- multi_json (~> 1.0)
39
- arel (3.0.3)
40
- assignable_values (0.7.1)
41
- activerecord
42
- bourne (1.4.0)
43
- mocha (~> 0.13.2)
44
- builder (3.0.4)
45
- concurrent-ruby (1.1.4)
46
- database_cleaner (1.4.1)
47
- diff-lcs (1.3)
48
- edge_rider (0.3.3)
49
- activerecord
50
- erubis (2.7.0)
51
- gemika (0.3.4)
52
- hike (1.2.3)
53
- i18n (0.9.5)
54
- concurrent-ruby (~> 1.0)
55
- journey (1.0.4)
56
- json (1.8.6)
57
- mail (2.5.5)
58
- mime-types (~> 1.16)
59
- treetop (~> 1.4.8)
60
- memoized (1.0.2)
61
- metaclass (0.0.1)
62
- mime-types (1.25.1)
63
- mocha (0.13.3)
64
- metaclass (~> 0.0.1)
65
- multi_json (1.13.1)
66
- polyglot (0.3.5)
67
- power_assert (1.1.3)
68
- rack (1.4.7)
69
- rack-cache (1.2)
70
- rack (>= 0.4)
71
- rack-ssl (1.3.4)
72
- rack
73
- rack-test (0.6.3)
74
- rack (>= 1.0)
75
- rails (3.2.22.5)
76
- actionmailer (= 3.2.22.5)
77
- actionpack (= 3.2.22.5)
78
- activerecord (= 3.2.22.5)
79
- activeresource (= 3.2.22.5)
80
- activesupport (= 3.2.22.5)
81
- bundler (~> 1.0)
82
- railties (= 3.2.22.5)
83
- railties (3.2.22.5)
84
- actionpack (= 3.2.22.5)
85
- activesupport (= 3.2.22.5)
86
- rack-ssl (~> 1.3.2)
87
- rake (>= 0.8.7)
88
- rdoc (~> 3.4)
89
- thor (>= 0.14.6, < 2.0)
90
- rake (10.5.0)
91
- rdoc (3.12.2)
92
- json (~> 1.4)
93
- rspec (3.8.0)
94
- rspec-core (~> 3.8.0)
95
- rspec-expectations (~> 3.8.0)
96
- rspec-mocks (~> 3.8.0)
97
- rspec-core (3.8.0)
98
- rspec-support (~> 3.8.0)
99
- rspec-expectations (3.8.1)
100
- diff-lcs (>= 1.2.0, < 2.0)
101
- rspec-support (~> 3.8.0)
102
- rspec-mocks (3.8.0)
103
- diff-lcs (>= 1.2.0, < 2.0)
104
- rspec-support (~> 3.8.0)
105
- rspec-rails (3.8.0)
106
- actionpack (>= 3.0)
107
- activesupport (>= 3.0)
108
- railties (>= 3.0)
109
- rspec-core (~> 3.8.0)
110
- rspec-expectations (~> 3.8.0)
111
- rspec-mocks (~> 3.8.0)
112
- rspec-support (~> 3.8.0)
113
- rspec-support (3.8.0)
114
- rspec_candy (0.2.9)
115
- rspec
116
- sneaky-save
117
- shoulda-matchers (1.5.6)
118
- activesupport (>= 3.0.0)
119
- bourne (~> 1.3)
120
- sneaky-save (0.0.4)
121
- activerecord (>= 3.2.0)
122
- sprockets (2.2.3)
123
- hike (~> 1.2)
124
- multi_json (~> 1.0)
125
- rack (~> 1.0)
126
- tilt (~> 1.1, != 1.3.0)
127
- sqlite3 (1.3.13)
128
- test-unit (3.3.0)
129
- power_assert
130
- thor (0.20.3)
131
- tilt (1.4.1)
132
- treetop (1.4.15)
133
- polyglot
134
- polyglot (>= 0.3.1)
135
- tzinfo (0.3.55)
136
-
137
- PLATFORMS
138
- ruby
139
-
140
- DEPENDENCIES
141
- assignable_values
142
- consul!
143
- database_cleaner (~> 1.4.1)
144
- gemika
145
- rack-cache (~> 1.2.0)
146
- rails (~> 3.2.22.5)
147
- rake (~> 10.5.0)
148
- rspec (~> 3.4)
149
- rspec-rails
150
- rspec_candy
151
- shoulda-matchers (< 2)
152
- sqlite3
153
- test-unit (~> 3.0)
154
-
155
- BUNDLED WITH
156
- 1.17.3
data/Gemfile.4-2.lock DELETED
@@ -1,158 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- consul (1.0.1)
5
- edge_rider (>= 0.3.0)
6
- memoized (>= 1.0.2)
7
- rails (>= 3.2)
8
-
9
- GEM
10
- remote: https://rubygems.org/
11
- specs:
12
- actionmailer (4.2.11)
13
- actionpack (= 4.2.11)
14
- actionview (= 4.2.11)
15
- activejob (= 4.2.11)
16
- mail (~> 2.5, >= 2.5.4)
17
- rails-dom-testing (~> 1.0, >= 1.0.5)
18
- actionpack (4.2.11)
19
- actionview (= 4.2.11)
20
- activesupport (= 4.2.11)
21
- rack (~> 1.6)
22
- rack-test (~> 0.6.2)
23
- rails-dom-testing (~> 1.0, >= 1.0.5)
24
- rails-html-sanitizer (~> 1.0, >= 1.0.2)
25
- actionview (4.2.11)
26
- activesupport (= 4.2.11)
27
- builder (~> 3.1)
28
- erubis (~> 2.7.0)
29
- rails-dom-testing (~> 1.0, >= 1.0.5)
30
- rails-html-sanitizer (~> 1.0, >= 1.0.3)
31
- activejob (4.2.11)
32
- activesupport (= 4.2.11)
33
- globalid (>= 0.3.0)
34
- activemodel (4.2.11)
35
- activesupport (= 4.2.11)
36
- builder (~> 3.1)
37
- activerecord (4.2.11)
38
- activemodel (= 4.2.11)
39
- activesupport (= 4.2.11)
40
- arel (~> 6.0)
41
- activesupport (4.2.11)
42
- i18n (~> 0.7)
43
- minitest (~> 5.1)
44
- thread_safe (~> 0.3, >= 0.3.4)
45
- tzinfo (~> 1.1)
46
- arel (6.0.4)
47
- assignable_values (0.12.1)
48
- activerecord (>= 2.3)
49
- builder (3.2.3)
50
- concurrent-ruby (1.1.4)
51
- crass (1.0.4)
52
- database_cleaner (1.7.0)
53
- diff-lcs (1.2.5)
54
- edge_rider (0.3.3)
55
- activerecord
56
- erubis (2.7.0)
57
- gemika (0.3.4)
58
- globalid (0.4.2)
59
- activesupport (>= 4.2.0)
60
- i18n (0.9.5)
61
- concurrent-ruby (~> 1.0)
62
- loofah (2.2.3)
63
- crass (~> 1.0.2)
64
- nokogiri (>= 1.5.9)
65
- mail (2.7.1)
66
- mini_mime (>= 0.1.1)
67
- memoized (1.0.2)
68
- mini_mime (1.0.1)
69
- mini_portile2 (2.4.0)
70
- minitest (5.11.3)
71
- nokogiri (1.10.1)
72
- mini_portile2 (~> 2.4.0)
73
- rack (1.6.11)
74
- rack-test (0.6.3)
75
- rack (>= 1.0)
76
- rails (4.2.11)
77
- actionmailer (= 4.2.11)
78
- actionpack (= 4.2.11)
79
- actionview (= 4.2.11)
80
- activejob (= 4.2.11)
81
- activemodel (= 4.2.11)
82
- activerecord (= 4.2.11)
83
- activesupport (= 4.2.11)
84
- bundler (>= 1.3.0, < 2.0)
85
- railties (= 4.2.11)
86
- sprockets-rails
87
- rails-deprecated_sanitizer (1.0.3)
88
- activesupport (>= 4.2.0.alpha)
89
- rails-dom-testing (1.0.9)
90
- activesupport (>= 4.2.0, < 5.0)
91
- nokogiri (~> 1.6)
92
- rails-deprecated_sanitizer (>= 1.0.1)
93
- rails-html-sanitizer (1.0.4)
94
- loofah (~> 2.2, >= 2.2.2)
95
- railties (4.2.11)
96
- actionpack (= 4.2.11)
97
- activesupport (= 4.2.11)
98
- rake (>= 0.8.7)
99
- thor (>= 0.18.1, < 2.0)
100
- rake (12.3.2)
101
- rspec (3.5.0)
102
- rspec-core (~> 3.5.0)
103
- rspec-expectations (~> 3.5.0)
104
- rspec-mocks (~> 3.5.0)
105
- rspec-core (3.5.4)
106
- rspec-support (~> 3.5.0)
107
- rspec-expectations (3.5.0)
108
- diff-lcs (>= 1.2.0, < 2.0)
109
- rspec-support (~> 3.5.0)
110
- rspec-mocks (3.5.0)
111
- diff-lcs (>= 1.2.0, < 2.0)
112
- rspec-support (~> 3.5.0)
113
- rspec-rails (3.5.2)
114
- actionpack (>= 3.0)
115
- activesupport (>= 3.0)
116
- railties (>= 3.0)
117
- rspec-core (~> 3.5.0)
118
- rspec-expectations (~> 3.5.0)
119
- rspec-mocks (~> 3.5.0)
120
- rspec-support (~> 3.5.0)
121
- rspec-support (3.5.0)
122
- rspec_candy (0.4.1)
123
- rspec
124
- sneaky-save
125
- shoulda-matchers (3.1.1)
126
- activesupport (>= 4.0.0)
127
- sneaky-save (0.1.2)
128
- activerecord (>= 3.2.0)
129
- sprockets (3.7.2)
130
- concurrent-ruby (~> 1.0)
131
- rack (> 1, < 3)
132
- sprockets-rails (3.2.1)
133
- actionpack (>= 4.0)
134
- activesupport (>= 4.0)
135
- sprockets (>= 3.0.0)
136
- sqlite3 (1.3.12)
137
- thor (0.20.3)
138
- thread_safe (0.3.6)
139
- tzinfo (1.2.5)
140
- thread_safe (~> 0.1)
141
-
142
- PLATFORMS
143
- ruby
144
-
145
- DEPENDENCIES
146
- assignable_values
147
- consul!
148
- database_cleaner
149
- gemika
150
- rails (~> 4.2.7)
151
- rspec
152
- rspec-rails
153
- rspec_candy
154
- shoulda-matchers
155
- sqlite3
156
-
157
- BUNDLED WITH
158
- 1.17.3