gratan 0.2.6 → 0.2.7

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1b39e23930b84b24557337302e39d8a4e3fb8051
4
- data.tar.gz: a1986c201ce5314e900edb5ba24a30a13891d0a1
3
+ metadata.gz: d7351dc27969d2d348085464822282e02791aaaf
4
+ data.tar.gz: 35721b2caab84b866744e7a0dc91f80db3812c7a
5
5
  SHA512:
6
- metadata.gz: d1879bf7c0fb932e9bded29a28373616da2877b1b9550016002ec0192f8ebad95c200ef47bb87fab405d8fa63f7ccaf4eda87886e9165663bda67140f4f0540f
7
- data.tar.gz: d6be4767694238c350c35bd0da8be087dedc6bab5aba1711d22afd8c3a7ab62179826d337438621eb0daaaed6d453610e148d6c7ef08108c5534ead183b55675
6
+ metadata.gz: 3e7aa3056a461b53bcbb3ffbf59edf097327b91e66f05a80051b174339f43ec31cfadf30ac93d6d04400dad37caa2045d11fb3d60d592254fdb2a1ee53293b22
7
+ data.tar.gz: 3219b8636ed500ca60e34c8bf85b65ac97a41037eb536e2ae37a09c06cba3ddb7bcff102bcf738c2df505d12e94ed8bce26c7637dba5310f492032bae70767b8
data/README.md CHANGED
@@ -53,6 +53,7 @@ Usage: gratan [options]
53
53
  -o, --output FILE
54
54
  --ignore-user REGEXP
55
55
  --target-user REGEXP
56
+ --ignore-object REGEXP
56
57
  --enable-expired
57
58
  --ignore-not-exist
58
59
  --no-color
data/bin/gratan CHANGED
@@ -42,6 +42,7 @@ ARGV.options do |opt|
42
42
  opt.on('-o', '--output FILE') {|v| output_file = v }
43
43
  opt.on('' , '--ignore-user REGEXP') {|v| options[:ignore_user] = Regexp.new(v) }
44
44
  opt.on('' , '--target-user REGEXP') {|v| options[:target_user] = Regexp.new(v) }
45
+ opt.on('' , '--ignore-object REGEXP') {|v| options[:ignore_object] = Regexp.new(v) }
45
46
  opt.on('' , '--enable-expired') { options[:enable_expired] = true }
46
47
  opt.on('' , '--ignore-not-exist') {|v| options[:ignore_not_exist] = true }
47
48
  opt.on('' , '--no-color') { options[:color] = false }
@@ -38,9 +38,13 @@ class Gratan::Driver
38
38
 
39
39
  def expand_object(object_or_regexp)
40
40
  if object_or_regexp.kind_of?(Regexp)
41
- show_all_tables.select {|i| i =~ object_or_regexp }
41
+ objects = show_all_tables.select {|i| i =~ object_or_regexp }
42
42
  else
43
- [object_or_regexp]
43
+ objects = [object_or_regexp]
44
+ end
45
+
46
+ objects.select do |object|
47
+ object !~ @options[:ignore_object]
44
48
  end
45
49
  end
46
50
 
@@ -38,7 +38,7 @@ end
38
38
  end
39
39
 
40
40
  def output_objects(objects)
41
- objects.map {|object, grant|
41
+ objects.sort_by {|k, v| k }.map {|object, grant|
42
42
  options = output_object_options(grant)
43
43
 
44
44
  <<-EOS
@@ -61,7 +61,7 @@ end
61
61
  end
62
62
 
63
63
  def output_grant(grant)
64
- grant[:privs].map {|priv|
64
+ grant[:privs].sort.map {|priv|
65
65
  <<-EOS
66
66
  grant #{priv.inspect}
67
67
  EOS
@@ -36,6 +36,7 @@ class Gratan::Exporter
36
36
  host = grant.delete(:host)
37
37
  user_host = [user, host]
38
38
  object = grant.delete(:object)
39
+ next if object =~ @options[:ignore_object]
39
40
  identified = grant.delete(:identified)
40
41
  required = grant.delete(:require)
41
42
 
@@ -1,3 +1,3 @@
1
1
  module Gratan
2
- VERSION = '0.2.6'
2
+ VERSION = '0.2.7'
3
3
  end
@@ -0,0 +1,131 @@
1
+ describe 'Gratan::Client#apply' do
2
+ before(:each) do
3
+ apply {
4
+ <<-RUBY
5
+ user 'scott', 'localhost', identified: 'tiger', required: 'SSL' do
6
+ on '*.*' do
7
+ grant 'SELECT'
8
+ grant 'INSERT'
9
+ end
10
+
11
+ on 'test.*' do
12
+ grant 'UPDATE'
13
+ grant 'DELETE'
14
+ end
15
+
16
+ on 'mysql.user' do
17
+ grant 'SELECT (user)'
18
+ end
19
+ end
20
+
21
+ user 'bob', 'localhost' do
22
+ on '*.*' do
23
+ grant 'USAGE'
24
+ end
25
+
26
+ on 'test.*' do
27
+ grant 'ALL PRIVILEGES'
28
+ end
29
+ end
30
+ RUBY
31
+ }
32
+ end
33
+
34
+ context 'when grant privs with ignore_object' do
35
+ subject { client(ignore_object: /user/) }
36
+
37
+ it do
38
+ apply(subject) {
39
+ <<-RUBY
40
+ user 'scott', 'localhost', identified: 'tiger', required: 'SSL' do
41
+ on '*.*' do
42
+ grant 'SELECT'
43
+ grant 'INSERT'
44
+ grant 'UPDATE'
45
+ grant 'DELETE'
46
+ end
47
+
48
+ on 'test.*' do
49
+ grant 'SELECT'
50
+ grant 'INSERT'
51
+ grant 'UPDATE'
52
+ grant 'DELETE'
53
+ end
54
+
55
+ on 'mysql.user' do
56
+ grant 'SELECT (user)'
57
+ grant 'UPDATE (host)' # ignore
58
+ end
59
+ end
60
+
61
+ user 'bob', 'localhost' do
62
+ on '*.*' do
63
+ grant 'USAGE'
64
+ end
65
+
66
+ on 'test.*' do
67
+ grant 'ALL PRIVILEGES'
68
+ end
69
+ end
70
+ RUBY
71
+ }
72
+
73
+ expect(show_grants).to match_array [
74
+ "GRANT ALL PRIVILEGES ON `test`.* TO 'bob'@'localhost'",
75
+ "GRANT SELECT (user) ON `mysql`.`user` TO 'scott'@'localhost'",
76
+ "GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO 'scott'@'localhost' IDENTIFIED BY PASSWORD '*F2F68D0BB27A773C1D944270E5FAFED515A3FA40' REQUIRE SSL",
77
+ "GRANT SELECT, INSERT, UPDATE, DELETE ON `test`.* TO 'scott'@'localhost'",
78
+ "GRANT USAGE ON *.* TO 'bob'@'localhost'",
79
+ ]
80
+ end
81
+ end
82
+
83
+ context 'when grant privs with ignore_object (2)' do
84
+ subject { client(ignore_object: /user2/) }
85
+
86
+ it do
87
+ apply(subject) {
88
+ <<-RUBY
89
+ user 'scott', 'localhost', identified: 'tiger', required: 'SSL' do
90
+ on '*.*' do
91
+ grant 'SELECT'
92
+ grant 'INSERT'
93
+ grant 'UPDATE'
94
+ grant 'DELETE'
95
+ end
96
+
97
+ on 'test.*' do
98
+ grant 'SELECT'
99
+ grant 'INSERT'
100
+ grant 'UPDATE'
101
+ grant 'DELETE'
102
+ end
103
+
104
+ on 'mysql.user' do
105
+ grant 'SELECT (user)'
106
+ grant 'UPDATE (host)'
107
+ end
108
+ end
109
+
110
+ user 'bob', 'localhost' do
111
+ on '*.*' do
112
+ grant 'USAGE'
113
+ end
114
+
115
+ on 'test.*' do
116
+ grant 'ALL PRIVILEGES'
117
+ end
118
+ end
119
+ RUBY
120
+ }
121
+
122
+ expect(show_grants).to match_array [
123
+ "GRANT ALL PRIVILEGES ON `test`.* TO 'bob'@'localhost'",
124
+ "GRANT SELECT (user), UPDATE (host) ON `mysql`.`user` TO 'scott'@'localhost'",
125
+ "GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO 'scott'@'localhost' IDENTIFIED BY PASSWORD '*F2F68D0BB27A773C1D944270E5FAFED515A3FA40' REQUIRE SSL",
126
+ "GRANT SELECT, INSERT, UPDATE, DELETE ON `test`.* TO 'scott'@'localhost'",
127
+ "GRANT USAGE ON *.* TO 'bob'@'localhost'",
128
+ ]
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,76 @@
1
+ describe 'Gratan::Client#apply' do
2
+ context 'when user does not exist' do
3
+ subject { client }
4
+
5
+ it do
6
+ result = apply(subject) { '' }
7
+ expect(result).to be_falsey
8
+ expect(show_grants).to match_array []
9
+ end
10
+ end
11
+
12
+ context 'when create user with ignore_object' do
13
+ subject { client(ignore_object: /test/) }
14
+
15
+ it do
16
+ result = apply(subject) {
17
+ <<-RUBY
18
+ user 'scott', 'localhost', identified: 'tiger' do
19
+ on '*.*' do
20
+ grant 'SELECT'
21
+ grant 'INSERT'
22
+ grant 'UPDATE'
23
+ grant 'DELETE'
24
+ end
25
+
26
+ on 'test.*' do
27
+ grant 'SELECT'
28
+ grant 'INSERT'
29
+ grant 'UPDATE'
30
+ grant 'DELETE'
31
+ end
32
+ end
33
+ RUBY
34
+ }
35
+
36
+ expect(result).to be_truthy
37
+
38
+ expect(show_grants).to match_array [
39
+ "GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO 'scott'@'localhost' IDENTIFIED BY PASSWORD '*F2F68D0BB27A773C1D944270E5FAFED515A3FA40'",
40
+ ]
41
+ end
42
+ end
43
+
44
+ context 'when create user with ignore_object (2)' do
45
+ subject { client(ignore_object: /test2/) }
46
+
47
+ it do
48
+ result = apply(subject) {
49
+ <<-RUBY
50
+ user 'scott', 'localhost', identified: 'tiger' do
51
+ on '*.*' do
52
+ grant 'SELECT'
53
+ grant 'INSERT'
54
+ grant 'UPDATE'
55
+ grant 'DELETE'
56
+ end
57
+
58
+ on 'test.*' do
59
+ grant 'SELECT'
60
+ grant 'INSERT'
61
+ grant 'UPDATE'
62
+ grant 'DELETE'
63
+ end
64
+ end
65
+ RUBY
66
+ }
67
+
68
+ expect(result).to be_truthy
69
+
70
+ expect(show_grants).to match_array [
71
+ "GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO 'scott'@'localhost' IDENTIFIED BY PASSWORD '*F2F68D0BB27A773C1D944270E5FAFED515A3FA40'",
72
+ "GRANT SELECT, INSERT, UPDATE, DELETE ON `test`.* TO 'scott'@'localhost'",
73
+ ]
74
+ end
75
+ end
76
+ end
@@ -47,14 +47,14 @@ user "scott", ["%", "localhost"] do
47
47
  grant "SELECT"
48
48
  end
49
49
 
50
- on "test3.*" do
51
- grant "UPDATE"
52
- grant "DELETE"
53
- end
54
-
55
50
  on "test2.*" do
56
51
  grant "INSERT"
57
52
  end
53
+
54
+ on "test3.*" do
55
+ grant "DELETE"
56
+ grant "UPDATE"
57
+ end
58
58
  end
59
59
  RUBY
60
60
  end
@@ -0,0 +1,109 @@
1
+ describe 'Gratan::Client#export' do
2
+ context 'when with ignore_object' do
3
+ let(:grantfile) {
4
+ <<-RUBY
5
+ user "scott", "%" do
6
+ on "*.*" do
7
+ grant "USAGE"
8
+ end
9
+
10
+ on "test.*" do
11
+ grant "SELECT"
12
+ end
13
+ end
14
+
15
+ user "bob", "localhost" do
16
+ on "*.*" do
17
+ grant "USAGE"
18
+ end
19
+
20
+ on "test.*" do
21
+ grant "SELECT"
22
+ end
23
+ end
24
+ RUBY
25
+ }
26
+
27
+ subject { client(ignore_object: /test/) }
28
+
29
+ before do
30
+ apply(subject) do
31
+ grantfile
32
+ end
33
+ end
34
+
35
+ it do
36
+ expect(subject.export.strip).to eq <<-RUBY.strip
37
+ user "scott", "%" do
38
+ on "*.*" do
39
+ grant "USAGE"
40
+ end
41
+ end
42
+
43
+ user "bob", "localhost" do
44
+ on "*.*" do
45
+ grant "USAGE"
46
+ end
47
+ end
48
+ RUBY
49
+ end
50
+ end
51
+
52
+ context 'when with ignore_object (2)' do
53
+ let(:grantfile) {
54
+ <<-RUBY
55
+ user "scott", "%" do
56
+ on "*.*" do
57
+ grant "USAGE"
58
+ end
59
+
60
+ on "test.*" do
61
+ grant "SELECT"
62
+ end
63
+ end
64
+
65
+ user "bob", "localhost" do
66
+ on "*.*" do
67
+ grant "USAGE"
68
+ end
69
+
70
+ on "test.*" do
71
+ grant "SELECT"
72
+ end
73
+ end
74
+ RUBY
75
+ }
76
+
77
+ subject { client(ignore_object: /bob/) }
78
+
79
+ before do
80
+ apply(subject) do
81
+ grantfile
82
+ end
83
+ end
84
+
85
+ it do
86
+ expect(subject.export.strip).to eq <<-RUBY.strip
87
+ user "scott", "%" do
88
+ on "*.*" do
89
+ grant "USAGE"
90
+ end
91
+
92
+ on "test.*" do
93
+ grant "SELECT"
94
+ end
95
+ end
96
+
97
+ user "bob", "localhost" do
98
+ on "*.*" do
99
+ grant "USAGE"
100
+ end
101
+
102
+ on "test.*" do
103
+ grant "SELECT"
104
+ end
105
+ end
106
+ RUBY
107
+ end
108
+ end
109
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gratan
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Sugawara
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-23 00:00:00.000000000 Z
11
+ date: 2014-11-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mysql2
@@ -166,17 +166,20 @@ files:
166
166
  - spec/change/change_grants_regexp_spec.rb
167
167
  - spec/change/change_grants_spec.rb
168
168
  - spec/change/change_grants_target_spec.rb
169
+ - spec/change/change_grants_with_ignore_object_spec.rb
169
170
  - spec/create/create_user_2_spec.rb
170
171
  - spec/create/create_user_3_spec.rb
171
172
  - spec/create/create_user_multi_hosts_spec.rb
172
173
  - spec/create/create_user_regexp_spec.rb
173
174
  - spec/create/create_user_spec.rb
174
175
  - spec/create/create_user_target_spec.rb
176
+ - spec/create/create_user_with_ignore_object_spec.rb
175
177
  - spec/drop/drop_user_2_spec.rb
176
178
  - spec/drop/drop_user_spec.rb
177
179
  - spec/drop/expire_user_spec.rb
178
180
  - spec/export/export_chunk_spec.rb
179
181
  - spec/export/export_spec.rb
182
+ - spec/export/export_with_ignore_object_spec.rb
180
183
  - spec/misc/misc_spec.rb
181
184
  - spec/misc/require_spec.rb
182
185
  - spec/spec_helper.rb
@@ -200,7 +203,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
200
203
  version: '0'
201
204
  requirements: []
202
205
  rubyforge_project:
203
- rubygems_version: 2.0.14
206
+ rubygems_version: 2.4.1
204
207
  signing_key:
205
208
  specification_version: 4
206
209
  summary: Gratan is a tool to manage MySQL permissions using Ruby DSL.
@@ -214,17 +217,20 @@ test_files:
214
217
  - spec/change/change_grants_regexp_spec.rb
215
218
  - spec/change/change_grants_spec.rb
216
219
  - spec/change/change_grants_target_spec.rb
220
+ - spec/change/change_grants_with_ignore_object_spec.rb
217
221
  - spec/create/create_user_2_spec.rb
218
222
  - spec/create/create_user_3_spec.rb
219
223
  - spec/create/create_user_multi_hosts_spec.rb
220
224
  - spec/create/create_user_regexp_spec.rb
221
225
  - spec/create/create_user_spec.rb
222
226
  - spec/create/create_user_target_spec.rb
227
+ - spec/create/create_user_with_ignore_object_spec.rb
223
228
  - spec/drop/drop_user_2_spec.rb
224
229
  - spec/drop/drop_user_spec.rb
225
230
  - spec/drop/expire_user_spec.rb
226
231
  - spec/export/export_chunk_spec.rb
227
232
  - spec/export/export_spec.rb
233
+ - spec/export/export_with_ignore_object_spec.rb
228
234
  - spec/misc/misc_spec.rb
229
235
  - spec/misc/require_spec.rb
230
236
  - spec/spec_helper.rb