etcdv3 0.0.5 → 0.1.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/.travis.yml +4 -1
- data/README.md +45 -20
- data/lib/etcdv3/auth.rb +24 -35
- data/lib/etcdv3/kv.rb +6 -6
- data/lib/etcdv3/version.rb +1 -1
- data/lib/etcdv3.rb +36 -13
- data/spec/etcdv3/auth_spec.rb +66 -26
- data/spec/etcdv3/kv_spec.rb +7 -9
- metadata +2 -4
- data/.codeclimate.yml +0 -27
- data/.ruby-version +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6a62664451e058e0837e78b5ea583944532f596e
|
4
|
+
data.tar.gz: df7954ad160f76a260d297a8c13357f50ef15474
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: af31ea39606da03fed56cbfb723d1958feaec6507c1f13ee60dba9ab9c870bcdeaead2cec21ea79ea373a3eb9a4ece179684a3a9688ab86d659cfe9918b4fc8e
|
7
|
+
data.tar.gz: 1037364a45050545ab05b6dca88661fe9ecd6d6824a29ef9fcfe53abcd8a55044550f89a4e407708c558fbd57fe865735adc78349f57001238c1ae6527e185de
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Ruby client for Etcd V3
|
4
4
|
|
5
|
-
**
|
5
|
+
**Note: This is under active development and is not feature complete**
|
6
6
|
|
7
7
|
## Getting Started
|
8
8
|
|
@@ -11,7 +11,7 @@ To install etcdv3, run the following command:
|
|
11
11
|
gem install etcdv3
|
12
12
|
```
|
13
13
|
|
14
|
-
|
14
|
+
**Establishing a connection**
|
15
15
|
|
16
16
|
```
|
17
17
|
require 'etcdv3'
|
@@ -34,28 +34,53 @@ conn = Etcd.new(url: 'https://hostname:port', user: "gary", password: "secret")
|
|
34
34
|
# Put
|
35
35
|
conn.put("my", "value")
|
36
36
|
|
37
|
-
#
|
38
|
-
conn.
|
37
|
+
# Get
|
38
|
+
conn.get("my")
|
39
39
|
|
40
|
-
|
40
|
+
# Get Key Range
|
41
|
+
conn.get('my', 'myyyy')
|
41
42
|
|
42
|
-
|
43
|
-
|
43
|
+
**User Management**
|
44
|
+
```
|
45
|
+
# Add User
|
46
|
+
conn.add_user('admin', 'secret')
|
47
|
+
|
48
|
+
# Delete User
|
49
|
+
conn.delete_user('admin')
|
44
50
|
|
45
|
-
|
46
|
-
|
51
|
+
# List users
|
52
|
+
conn.user_list
|
53
|
+
```
|
47
54
|
|
48
|
-
|
49
|
-
|
55
|
+
**Role Management**
|
56
|
+
```
|
57
|
+
# Add Role
|
58
|
+
conn.add_role('rolename', 'readwrite', 'a', 'Z')
|
50
59
|
|
51
|
-
|
52
|
-
|
60
|
+
# Delete Role
|
61
|
+
conn.delete_role('rolename')
|
53
62
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
63
|
+
# List Roles
|
64
|
+
conn.role_list
|
65
|
+
```
|
66
|
+
|
67
|
+
**Authentication Management**
|
68
|
+
```
|
69
|
+
# Configure a root user
|
70
|
+
conn.add_user('root', 'mysecretpassword')
|
58
71
|
|
59
|
-
|
60
|
-
|
61
|
-
|
72
|
+
# Grant root user the root role
|
73
|
+
conn.grant_role_to_user('root', 'root')
|
74
|
+
|
75
|
+
# Enable Authentication
|
76
|
+
conn.enable_auth
|
77
|
+
```
|
78
|
+
After you enable authentication, you must authenticate.
|
79
|
+
```
|
80
|
+
# This will generate and assign an auth token that will be used in future requests.
|
81
|
+
conn.authenticate('root', 'mysecretpassword')
|
82
|
+
```
|
83
|
+
Disabling auth will clear the auth token and all previously attached user information
|
84
|
+
```
|
85
|
+
conn.disable_auth
|
86
|
+
```
|
data/lib/etcdv3/auth.rb
CHANGED
@@ -8,8 +8,9 @@ class Etcd
|
|
8
8
|
'readwrite' => Authpb::Permission::Type::READWRITE
|
9
9
|
}
|
10
10
|
|
11
|
-
def initialize(hostname, port, credentials)
|
11
|
+
def initialize(hostname, port, credentials, metadata = {})
|
12
12
|
@stub = Etcdserverpb::Auth::Stub.new("#{hostname}:#{port}", credentials)
|
13
|
+
@metadata = metadata
|
13
14
|
end
|
14
15
|
|
15
16
|
def generate_token(user, password)
|
@@ -19,69 +20,57 @@ class Etcd
|
|
19
20
|
response.token
|
20
21
|
rescue GRPC::FailedPrecondition => exception
|
21
22
|
puts exception.message
|
23
|
+
false
|
22
24
|
end
|
23
25
|
|
24
|
-
def user_list
|
25
|
-
@stub.user_list(Authpb::User.new, metadata: metadata).users
|
26
|
-
rescue GRPC::FailedPrecondition => exception
|
27
|
-
puts exception.message
|
26
|
+
def user_list
|
27
|
+
@stub.user_list(Authpb::User.new, metadata: @metadata).users
|
28
28
|
end
|
29
29
|
|
30
|
-
def add_user(user, password
|
30
|
+
def add_user(user, password)
|
31
31
|
@stub.user_add(
|
32
|
-
Authpb::User.new(name: user, password: password), metadata: metadata
|
32
|
+
Authpb::User.new(name: user, password: password), metadata: @metadata
|
33
33
|
)
|
34
|
-
rescue GRPC::FailedPrecondition => exception
|
35
|
-
puts exception.message
|
36
34
|
end
|
37
35
|
|
38
|
-
def delete_user(user
|
39
|
-
@stub.user_delete(Authpb::User.new(name: user)
|
40
|
-
rescue GRPC::FailedPrecondition => exception
|
41
|
-
puts exception.message
|
36
|
+
def delete_user(user)
|
37
|
+
@stub.user_delete(Authpb::User.new(name: user))
|
42
38
|
end
|
43
39
|
|
44
|
-
def add_role(name, permission, key, range_end
|
40
|
+
def add_role(name, permission, key, range_end)
|
45
41
|
permission = Authpb::Permission.new(
|
46
42
|
permType: Etcd::Auth::PERMISSIONS[permission], key: key, range_end: range_end
|
47
43
|
)
|
48
44
|
@stub.role_add(
|
49
45
|
Authpb::Role.new(name: name, keyPermission: [permission]),
|
50
|
-
metadata: metadata
|
46
|
+
metadata: @metadata
|
51
47
|
)
|
52
|
-
rescue GRPC::FailedPrecondition => exception
|
53
|
-
puts exception.message
|
54
48
|
end
|
55
49
|
|
56
|
-
def delete_role(name
|
57
|
-
@stub.role_delete(Authpb::Role.new(name: name), metadata: metadata)
|
58
|
-
rescue GRPC::FailedPrecondition => exception
|
59
|
-
puts exception.message
|
50
|
+
def delete_role(name)
|
51
|
+
@stub.role_delete(Authpb::Role.new(name: name), metadata: @metadata)
|
60
52
|
end
|
61
53
|
|
62
|
-
def grant_role_to_user(user, role
|
54
|
+
def grant_role_to_user(user, role)
|
63
55
|
request = Etcdserverpb::AuthUserGrantRoleRequest.new(user: user, role: role)
|
64
|
-
@stub.user_grant_role(request)
|
65
|
-
rescue GRPC::FailedPrecondition => exception
|
66
|
-
puts exception.message
|
56
|
+
@stub.user_grant_role(request, metadata: @metadata)
|
67
57
|
end
|
68
58
|
|
69
|
-
def
|
70
|
-
|
71
|
-
|
72
|
-
|
59
|
+
def revoke_role_from_user(user, role)
|
60
|
+
request = Etcdserverpb::AuthUserRevokeRoleRequest.new(name: user, role: role)
|
61
|
+
@stub.user_revoke_role(request, metadata: @metadata)
|
62
|
+
end
|
63
|
+
|
64
|
+
def role_list
|
65
|
+
@stub.role_list(Authpb::Role.new, metadata: @metadata)
|
73
66
|
end
|
74
67
|
|
75
68
|
def enable_auth
|
76
69
|
@stub.auth_enable(Authpb::User.new)
|
77
|
-
rescue GRPC::FailedPrecondition => exception
|
78
|
-
puts exception.message
|
79
70
|
end
|
80
71
|
|
81
|
-
def disable_auth
|
82
|
-
@stub.auth_disable(Authpb::User.new, metadata: metadata)
|
83
|
-
rescue GRPC::FailedPrecondition => exception
|
84
|
-
puts exception.message
|
72
|
+
def disable_auth
|
73
|
+
@stub.auth_disable(Authpb::User.new, metadata: @metadata)
|
85
74
|
end
|
86
75
|
|
87
76
|
end
|
data/lib/etcdv3/kv.rb
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
|
2
2
|
class Etcd
|
3
3
|
class KV
|
4
|
-
def initialize(hostname, port, credentials)
|
4
|
+
def initialize(hostname, port, credentials, metadata={})
|
5
5
|
@stub = Etcdserverpb::KV::Stub.new("#{hostname}:#{port}", credentials)
|
6
|
+
@metadata = metadata
|
6
7
|
end
|
7
8
|
|
8
|
-
def put(key, value
|
9
|
+
def put(key, value)
|
9
10
|
kv = Etcdserverpb::PutRequest.new(key: key, value: value)
|
10
|
-
@stub.put(kv, metadata: metadata)
|
11
|
+
@stub.put(kv, metadata: @metadata)
|
11
12
|
end
|
12
13
|
|
13
|
-
def
|
14
|
+
def get(key, range_end="")
|
14
15
|
kv = Etcdserverpb::RangeRequest.new(key: key, range_end: range_end)
|
15
|
-
|
16
|
-
result.kvs
|
16
|
+
@stub.range(kv, metadata: @metadata).kvs
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
data/lib/etcdv3/version.rb
CHANGED
data/lib/etcdv3.rb
CHANGED
@@ -46,39 +46,56 @@ class Etcd
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def put(key, value)
|
49
|
-
kv.put(key, value
|
49
|
+
kv.put(key, value)
|
50
50
|
end
|
51
51
|
|
52
|
-
def
|
53
|
-
kv.
|
52
|
+
def get(key, range_end='')
|
53
|
+
kv.get(key, range_end)
|
54
54
|
end
|
55
55
|
|
56
56
|
def add_user(user, password)
|
57
|
-
auth.add_user(user, password
|
57
|
+
auth.add_user(user, password)
|
58
58
|
end
|
59
59
|
|
60
60
|
def delete_user(user)
|
61
|
-
auth.delete_user(user
|
61
|
+
auth.delete_user(user)
|
62
62
|
end
|
63
63
|
|
64
64
|
def user_list
|
65
|
-
auth.user_list
|
65
|
+
auth.user_list
|
66
|
+
end
|
67
|
+
|
68
|
+
def authenticate(user, password)
|
69
|
+
token = auth.generate_token(user, password)
|
70
|
+
if token
|
71
|
+
@metadata[:token] = token
|
72
|
+
@options[:user] = user
|
73
|
+
@options[:password] = password
|
74
|
+
return true
|
75
|
+
end
|
76
|
+
rescue GRPC::InvalidArgument => exception
|
77
|
+
print exception.message
|
78
|
+
return false
|
66
79
|
end
|
67
80
|
|
68
81
|
def role_list
|
69
|
-
auth.role_list
|
82
|
+
auth.role_list
|
70
83
|
end
|
71
84
|
|
72
85
|
def add_role(name, permission, key, range_end='')
|
73
|
-
auth.add_role(name, permission, key, range_end
|
86
|
+
auth.add_role(name, permission, key, range_end)
|
74
87
|
end
|
75
88
|
|
76
89
|
def delete_role(name)
|
77
|
-
auth.delete_role(name
|
90
|
+
auth.delete_role(name)
|
78
91
|
end
|
79
92
|
|
80
93
|
def grant_role_to_user(user, role)
|
81
|
-
auth.grant_role_to_user(user, role
|
94
|
+
auth.grant_role_to_user(user, role)
|
95
|
+
end
|
96
|
+
|
97
|
+
def revoke_role_from_user(user, role)
|
98
|
+
auth.revoke_role_from_user(user, role)
|
82
99
|
end
|
83
100
|
|
84
101
|
def enable_auth
|
@@ -86,17 +103,23 @@ class Etcd
|
|
86
103
|
end
|
87
104
|
|
88
105
|
def disable_auth
|
89
|
-
auth.disable_auth
|
106
|
+
response = auth.disable_auth
|
107
|
+
if response
|
108
|
+
@metadata.delete(:token)
|
109
|
+
@options[:user] = nil
|
110
|
+
@options[:password] = nil
|
111
|
+
end
|
112
|
+
response
|
90
113
|
end
|
91
114
|
|
92
115
|
private
|
93
116
|
|
94
117
|
def auth
|
95
|
-
Etcd::Auth.new(hostname, port, @credentials)
|
118
|
+
Etcd::Auth.new(hostname, port, @credentials, @metadata)
|
96
119
|
end
|
97
120
|
|
98
121
|
def kv
|
99
|
-
Etcd::KV.new(hostname, port, @credentials)
|
122
|
+
Etcd::KV.new(hostname, port, @credentials, @metadata)
|
100
123
|
end
|
101
124
|
|
102
125
|
def resolve_credentials
|
data/spec/etcdv3/auth_spec.rb
CHANGED
@@ -2,13 +2,13 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Etcd::Auth do
|
4
4
|
|
5
|
-
let(:
|
6
|
-
Etcd
|
5
|
+
let(:conn) do
|
6
|
+
Etcd.new(url: 'http://127.0.0.1:2379')
|
7
7
|
end
|
8
8
|
|
9
9
|
describe '#add_user' do
|
10
10
|
it 'returns AuthUserAddResponse' do
|
11
|
-
expect(
|
11
|
+
expect(conn.add_user("boom", 'test')).to \
|
12
12
|
be_an_instance_of(Etcdserverpb::AuthUserAddResponse)
|
13
13
|
end
|
14
14
|
end
|
@@ -16,88 +16,128 @@ describe Etcd::Auth do
|
|
16
16
|
describe '#user_list' do
|
17
17
|
|
18
18
|
it 'returns Protobuf' do
|
19
|
-
expect(
|
19
|
+
expect(conn.user_list).to \
|
20
20
|
be_an_instance_of(Google::Protobuf::RepeatedField)
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'returns listme user' do
|
24
|
-
|
25
|
-
expect(
|
24
|
+
conn.add_user('listme', 'test')
|
25
|
+
expect(conn.user_list).to include('listme')
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
29
|
describe '#delete_user' do
|
30
30
|
before do
|
31
|
-
|
31
|
+
conn.add_user('testuser', 'test')
|
32
32
|
end
|
33
33
|
it 'returns AuthUserDeleteResponse' do
|
34
|
-
expect(
|
34
|
+
expect(conn.delete_user('testuser')).to \
|
35
35
|
be_an_instance_of(Etcdserverpb::AuthUserDeleteResponse)
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
39
|
describe '#grant_role_to_user' do
|
40
40
|
before do
|
41
|
-
|
41
|
+
conn.add_user('root', 'password')
|
42
42
|
end
|
43
43
|
after do
|
44
|
-
|
44
|
+
conn.delete_user('root')
|
45
45
|
end
|
46
46
|
it 'returns AuthUserGrantRoleResponse' do
|
47
|
-
expect(
|
47
|
+
expect(conn.grant_role_to_user("root", 'root')).to \
|
48
48
|
be_an_instance_of(Etcdserverpb::AuthUserGrantRoleResponse)
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
+
describe '#revoke_role_from_user' do
|
53
|
+
before do
|
54
|
+
conn.add_user('test_user', 'password')
|
55
|
+
conn.grant_role_to_user('test_user', 'root')
|
56
|
+
end
|
57
|
+
after do
|
58
|
+
conn.delete_user('test_user')
|
59
|
+
end
|
60
|
+
it 'returns AuthUserGrantRoleResponse' do
|
61
|
+
expect(conn.revoke_role_from_user("test_user", 'root')).to \
|
62
|
+
be_an_instance_of(Etcdserverpb::AuthUserRevokeRoleResponse)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
52
66
|
describe '#add_role' do
|
53
67
|
it 'returns AuthRoleAddResponse' do
|
54
|
-
expect(
|
68
|
+
expect(conn.add_role('testRole', 'readwrite', 'a', 'Z')).to \
|
55
69
|
be_an_instance_of(Etcdserverpb::AuthRoleAddResponse)
|
56
70
|
end
|
57
71
|
end
|
58
72
|
|
59
73
|
describe '#add_delete' do
|
60
74
|
it 'returns AuthRoleAddResponse' do
|
61
|
-
expect(
|
75
|
+
expect(conn.delete_role('testRole')).to \
|
62
76
|
be_an_instance_of(Etcdserverpb::AuthRoleDeleteResponse)
|
63
77
|
end
|
64
78
|
end
|
65
79
|
|
66
80
|
describe '#role_list' do
|
67
81
|
it 'returns AuthRoleListResponse' do
|
68
|
-
expect(
|
82
|
+
expect(conn.role_list).to \
|
69
83
|
be_an_instance_of(Etcdserverpb::AuthRoleListResponse)
|
70
84
|
end
|
71
85
|
end
|
72
86
|
|
73
87
|
describe '#disable_auth' do
|
74
88
|
before do
|
75
|
-
|
76
|
-
|
77
|
-
|
89
|
+
conn.add_user('root', 'test')
|
90
|
+
conn.grant_role_to_user('root', 'root')
|
91
|
+
conn.enable_auth
|
92
|
+
conn.authenticate('root', 'test')
|
78
93
|
end
|
79
94
|
after do
|
80
|
-
|
95
|
+
conn.delete_user('root')
|
81
96
|
end
|
82
97
|
it 'returns AuthDisableResponse' do
|
83
|
-
|
84
|
-
expect(stub.disable_auth(token: token)).to \
|
98
|
+
expect(conn.disable_auth).to \
|
85
99
|
be_an_instance_of(Etcdserverpb::AuthDisableResponse)
|
86
100
|
end
|
87
101
|
end
|
88
102
|
|
89
103
|
describe '#enable_auth' do
|
90
104
|
before do
|
91
|
-
|
92
|
-
|
105
|
+
conn.add_user('root', 'test')
|
106
|
+
conn.grant_role_to_user('root', 'root')
|
93
107
|
end
|
94
108
|
after do
|
95
|
-
|
96
|
-
|
97
|
-
|
109
|
+
conn.authenticate('root', 'test')
|
110
|
+
conn.disable_auth
|
111
|
+
conn.delete_user('root')
|
98
112
|
end
|
99
113
|
it 'returns AuthEnableResponse' do
|
100
|
-
expect(
|
114
|
+
expect(conn.enable_auth).to be_an_instance_of(Etcdserverpb::AuthEnableResponse)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
describe "#authenticate" do
|
119
|
+
context "auth enabled" do
|
120
|
+
before do
|
121
|
+
conn.add_user('root', 'test')
|
122
|
+
conn.grant_role_to_user('root', 'root')
|
123
|
+
conn.enable_auth
|
124
|
+
conn.authenticate('root', 'test')
|
125
|
+
end
|
126
|
+
after do
|
127
|
+
conn.disable_auth
|
128
|
+
conn.delete_user('root')
|
129
|
+
end
|
130
|
+
it 'properly reconfigures token + user + password' do
|
131
|
+
expect(conn.token).to_not be_nil
|
132
|
+
expect(conn.user).to eq('root')
|
133
|
+
expect(conn.password).to eq('test')
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
context 'auth disabled' do
|
138
|
+
it 'returns false when authenticating with auth disabled' do
|
139
|
+
expect(conn.authenticate('root', 'root')).to eq(false)
|
140
|
+
end
|
101
141
|
end
|
102
142
|
end
|
103
143
|
end
|
data/spec/etcdv3/kv_spec.rb
CHANGED
@@ -2,30 +2,28 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Etcd::KV do
|
4
4
|
|
5
|
-
let(:
|
6
|
-
Etcd
|
5
|
+
let(:conn) do
|
6
|
+
Etcd.new(url: 'http://127.0.0.1:2379')
|
7
7
|
end
|
8
8
|
|
9
9
|
describe '#put' do
|
10
10
|
it 'returns PutResponse' do
|
11
|
-
expect(
|
11
|
+
expect(conn.put('test', 'test')).to \
|
12
12
|
be_an_instance_of(Etcdserverpb::PutResponse)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
-
describe '#
|
16
|
+
describe '#get' do
|
17
17
|
before do
|
18
|
-
|
18
|
+
conn.put('test', "zoom")
|
19
19
|
end
|
20
20
|
it 'returns protobuf' do
|
21
|
-
expect(
|
21
|
+
expect(conn.get('test')).to \
|
22
22
|
be_an_instance_of(Google::Protobuf::RepeatedField)
|
23
23
|
end
|
24
24
|
|
25
25
|
it 'returns correct result' do
|
26
|
-
expect(
|
26
|
+
expect(conn.get('test').first.key).to eq('test')
|
27
27
|
end
|
28
28
|
end
|
29
|
-
|
30
|
-
|
31
29
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: etcdv3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shaun Davis
|
@@ -44,10 +44,8 @@ executables: []
|
|
44
44
|
extensions: []
|
45
45
|
extra_rdoc_files: []
|
46
46
|
files:
|
47
|
-
- ".codeclimate.yml"
|
48
47
|
- ".gitignore"
|
49
48
|
- ".rspec"
|
50
|
-
- ".ruby-version"
|
51
49
|
- ".travis.yml"
|
52
50
|
- Gemfile
|
53
51
|
- README.md
|
@@ -92,7 +90,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
92
90
|
version: '0'
|
93
91
|
requirements: []
|
94
92
|
rubyforge_project:
|
95
|
-
rubygems_version: 2.6.
|
93
|
+
rubygems_version: 2.6.8
|
96
94
|
signing_key:
|
97
95
|
specification_version: 4
|
98
96
|
summary: A Etcd client library for Version 3
|
data/.codeclimate.yml
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
engines:
|
2
|
-
duplication:
|
3
|
-
enabled: true
|
4
|
-
config:
|
5
|
-
languages:
|
6
|
-
- ruby
|
7
|
-
fixme:
|
8
|
-
enabled: true
|
9
|
-
rubocop:
|
10
|
-
enabled: true
|
11
|
-
ratings:
|
12
|
-
paths:
|
13
|
-
- "**.rb"
|
14
|
-
exclude_paths:
|
15
|
-
- spec/
|
16
|
-
engines:
|
17
|
-
rubocop:
|
18
|
-
enabled: true
|
19
|
-
duplication:
|
20
|
-
enabled: true
|
21
|
-
ratings:
|
22
|
-
paths:
|
23
|
-
- lib/**
|
24
|
-
- "**.rb"
|
25
|
-
exclude_paths:
|
26
|
-
- "lib/etcdv3/protos/*"
|
27
|
-
- "lib/etcdv3/etcdrpc/*"
|
data/.ruby-version
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
2.4.1
|