netrcx 0.2.1
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 +7 -0
- data/.gitignore +2 -0
- data/.rubocop.yml +5 -0
- data/.travis.yml +8 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +53 -0
- data/README.md +21 -0
- data/Rakefile +9 -0
- data/lib/netrcx.rb +82 -0
- data/netrcx.gemspec +20 -0
- data/spec/netrcx_spec.rb +58 -0
- data/spec/spec_helper.rb +3 -0
- metadata +112 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 99e57ba09db815ea970ee451d06751e9498dd273d387c970cf4627d439644640
|
4
|
+
data.tar.gz: 0d052ccaf348c4e8b6a113c3f449531cf196993f04fa07cc0e5bcfd9a9d7fa15
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1144c4b76d527780dd45a5ce539ec6111f4acf0936c77c42be6c13fb27bb3b2e6161c717fa83de33ae529092890f980bf0de5b93b7e25dea15fb396906dca0c2
|
7
|
+
data.tar.gz: 1cb87d34137ff0f131ba9aaac1f8f95e6819d8e343ec3d6a261a009e306282a35e6ecfc23a754781d4f6cf253a24b9732b322ec9b51aad029f2b3abe27b2861c
|
data/.gitignore
ADDED
data/.rubocop.yml
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
netrcx (0.2.1)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: https://rubygems.org/
|
8
|
+
specs:
|
9
|
+
ast (2.4.0)
|
10
|
+
diff-lcs (1.3)
|
11
|
+
jaro_winkler (1.5.2)
|
12
|
+
parallel (1.17.0)
|
13
|
+
parser (2.6.2.0)
|
14
|
+
ast (~> 2.4.0)
|
15
|
+
psych (3.1.0)
|
16
|
+
rainbow (3.0.0)
|
17
|
+
rake (12.3.2)
|
18
|
+
rspec (3.8.0)
|
19
|
+
rspec-core (~> 3.8.0)
|
20
|
+
rspec-expectations (~> 3.8.0)
|
21
|
+
rspec-mocks (~> 3.8.0)
|
22
|
+
rspec-core (3.8.0)
|
23
|
+
rspec-support (~> 3.8.0)
|
24
|
+
rspec-expectations (3.8.2)
|
25
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
26
|
+
rspec-support (~> 3.8.0)
|
27
|
+
rspec-mocks (3.8.0)
|
28
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
29
|
+
rspec-support (~> 3.8.0)
|
30
|
+
rspec-support (3.8.0)
|
31
|
+
rubocop (0.66.0)
|
32
|
+
jaro_winkler (~> 1.5.1)
|
33
|
+
parallel (~> 1.10)
|
34
|
+
parser (>= 2.5, != 2.5.1.1)
|
35
|
+
psych (>= 3.1.0)
|
36
|
+
rainbow (>= 2.2.2, < 4.0)
|
37
|
+
ruby-progressbar (~> 1.7)
|
38
|
+
unicode-display_width (>= 1.4.0, < 1.6)
|
39
|
+
ruby-progressbar (1.10.0)
|
40
|
+
unicode-display_width (1.5.0)
|
41
|
+
|
42
|
+
PLATFORMS
|
43
|
+
ruby
|
44
|
+
|
45
|
+
DEPENDENCIES
|
46
|
+
bundler
|
47
|
+
netrcx!
|
48
|
+
rake
|
49
|
+
rspec
|
50
|
+
rubocop
|
51
|
+
|
52
|
+
BUNDLED WITH
|
53
|
+
2.0.1
|
data/README.md
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# netrcx
|
2
|
+
|
3
|
+
[](https://travis-ci.org/bsm/netrcx)
|
4
|
+
[](https://opensource.org/licenses/Apache-2.0)
|
5
|
+
|
6
|
+
A working netrc reader and parser for Ruby.
|
7
|
+
|
8
|
+
## Usage (Ruby)
|
9
|
+
|
10
|
+
```ruby
|
11
|
+
require 'netrcx'
|
12
|
+
|
13
|
+
# Read from default location
|
14
|
+
netrc = Netrcx.read
|
15
|
+
|
16
|
+
# Read the default entry (if set)
|
17
|
+
netrc.default # => #<Netrcx::Entry default=true, login="me">
|
18
|
+
|
19
|
+
# Find a specific entry
|
20
|
+
netrc['github.com'] # => #<Netrcx::Entry default=false, host=github.com, login="s3cret/t0ken">
|
21
|
+
```
|
data/Rakefile
ADDED
data/lib/netrcx.rb
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'shellwords'
|
2
|
+
require 'ostruct'
|
3
|
+
|
4
|
+
class Netrcx
|
5
|
+
class Entry < OpenStruct
|
6
|
+
def default?
|
7
|
+
default == true
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.default_path
|
12
|
+
home = ENV['NETRC']
|
13
|
+
home ||= Dir.home if Dir.respond_to?(:home)
|
14
|
+
home ||= ENV['HOME']
|
15
|
+
|
16
|
+
if /mswin|mingw/.match?(RbConfig::CONFIG['host_os'])
|
17
|
+
home ||= File.join(ENV['HOMEDRIVE'], ENV['HOMEPATH']) if ENV['HOMEDRIVE'] && ENV['HOMEPATH']
|
18
|
+
home ||= ENV['USERPROFILE']
|
19
|
+
File.join home, '_netrc'
|
20
|
+
else
|
21
|
+
File.join home, '.netrc'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# Read from a file path.
|
26
|
+
def self.read(path=default_path)
|
27
|
+
File.open(path) {|io| new(io) }
|
28
|
+
end
|
29
|
+
|
30
|
+
attr_reader :entries
|
31
|
+
|
32
|
+
def initialize(raw)
|
33
|
+
@entries = []
|
34
|
+
current = nil
|
35
|
+
lastword = nil
|
36
|
+
|
37
|
+
raw.each_line do |line|
|
38
|
+
Shellwords.split(line).each do |word|
|
39
|
+
break if word.start_with?('#')
|
40
|
+
|
41
|
+
if word == 'default'
|
42
|
+
@entries.push(current) if current
|
43
|
+
current = Entry.new(default: true)
|
44
|
+
elsif word == 'machine'
|
45
|
+
@entries.push(current) if current
|
46
|
+
current = Entry.new(default: false)
|
47
|
+
elsif !current.nil?
|
48
|
+
set_value(current, lastword, word)
|
49
|
+
end
|
50
|
+
|
51
|
+
lastword = word
|
52
|
+
end
|
53
|
+
end
|
54
|
+
@entries.push(current) if current
|
55
|
+
end
|
56
|
+
|
57
|
+
# @return [Netrcx::Entry] default entry
|
58
|
+
def default
|
59
|
+
entries.detect(&:default)
|
60
|
+
end
|
61
|
+
|
62
|
+
# @return [Netrcx::Entry] entry for the host
|
63
|
+
def [](host)
|
64
|
+
host = host.strip
|
65
|
+
entries.detect {|m| m.host == host }
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
def set_value(current, lastword, word)
|
71
|
+
case lastword
|
72
|
+
when 'machine'
|
73
|
+
current.host = word
|
74
|
+
when 'login'
|
75
|
+
current.login = word
|
76
|
+
when 'password'
|
77
|
+
current.password = word
|
78
|
+
when 'account'
|
79
|
+
current.account = word
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
data/netrcx.gemspec
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = 'netrcx'
|
3
|
+
s.version = '0.2.1'
|
4
|
+
s.authors = ['Black Square Media Ltd']
|
5
|
+
s.email = ['info@blacksquaremedia.com']
|
6
|
+
s.summary = %(Simple .netrc parser)
|
7
|
+
s.description = %()
|
8
|
+
s.homepage = 'https://github.com/bsm/netrcx'
|
9
|
+
s.license = 'Apache-2.0'
|
10
|
+
|
11
|
+
s.files = `git ls-files -z`.split("\x0").reject {|f| f.match(%r{^spec/}) }
|
12
|
+
s.test_files = `git ls-files -z -- spec/*`.split("\x0")
|
13
|
+
s.require_paths = ['lib']
|
14
|
+
s.required_ruby_version = '>= 2.4'
|
15
|
+
|
16
|
+
s.add_development_dependency 'bundler'
|
17
|
+
s.add_development_dependency 'rake'
|
18
|
+
s.add_development_dependency 'rspec'
|
19
|
+
s.add_development_dependency 'rubocop'
|
20
|
+
end
|
data/spec/netrcx_spec.rb
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe Netrcx do
|
4
|
+
let :fixture do
|
5
|
+
<<~TEXT
|
6
|
+
machine a.com
|
7
|
+
login s3cret
|
8
|
+
machine b.com
|
9
|
+
login userb
|
10
|
+
password passb
|
11
|
+
machine c.com
|
12
|
+
login 'domain\\user'
|
13
|
+
password passc
|
14
|
+
account workgroup
|
15
|
+
default
|
16
|
+
login me
|
17
|
+
TEXT
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should parse' do
|
21
|
+
netrc = Netrcx.new(fixture)
|
22
|
+
expect(netrc.default).to eq(Netrcx::Entry.new(default: true, login: 'me'))
|
23
|
+
expect(netrc.entries).to eq [
|
24
|
+
Netrcx::Entry.new(default: false, host: 'a.com', login: 's3cret'),
|
25
|
+
Netrcx::Entry.new(default: false, host: 'b.com', login: 'userb', password: 'passb'),
|
26
|
+
Netrcx::Entry.new(default: false, host: 'c.com', login: 'domain\\user', password: 'passc', account: 'workgroup'),
|
27
|
+
Netrcx::Entry.new(default: true, login: 'me'),
|
28
|
+
]
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should read from file' do
|
32
|
+
temp = Tempfile.new
|
33
|
+
temp.write fixture
|
34
|
+
temp.close
|
35
|
+
|
36
|
+
netrc = Netrcx.read(temp.path)
|
37
|
+
expect(netrc.entries.size).to eq(4)
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'should skip comments' do
|
41
|
+
data = <<~TEXT
|
42
|
+
machine a.com login x
|
43
|
+
# machine b.com login y
|
44
|
+
machine c.com
|
45
|
+
# login old
|
46
|
+
login z #password follows
|
47
|
+
password # next line
|
48
|
+
s3cret
|
49
|
+
TEXT
|
50
|
+
|
51
|
+
netrc = Netrcx.new(data)
|
52
|
+
expect(netrc.default).to be_nil
|
53
|
+
expect(netrc.entries).to eq [
|
54
|
+
Netrcx::Entry.new(default: false, host: 'a.com', login: 'x'),
|
55
|
+
Netrcx::Entry.new(default: false, host: 'c.com', login: 'z', password: 's3cret'),
|
56
|
+
]
|
57
|
+
end
|
58
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: netrcx
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Black Square Media Ltd
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-04-03 00:00:00.000000000 Z
|
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: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
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: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
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: rubocop
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
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
|
+
description: ''
|
70
|
+
email:
|
71
|
+
- info@blacksquaremedia.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- ".gitignore"
|
77
|
+
- ".rubocop.yml"
|
78
|
+
- ".travis.yml"
|
79
|
+
- Gemfile
|
80
|
+
- Gemfile.lock
|
81
|
+
- README.md
|
82
|
+
- Rakefile
|
83
|
+
- lib/netrcx.rb
|
84
|
+
- netrcx.gemspec
|
85
|
+
- spec/netrcx_spec.rb
|
86
|
+
- spec/spec_helper.rb
|
87
|
+
homepage: https://github.com/bsm/netrcx
|
88
|
+
licenses:
|
89
|
+
- Apache-2.0
|
90
|
+
metadata: {}
|
91
|
+
post_install_message:
|
92
|
+
rdoc_options: []
|
93
|
+
require_paths:
|
94
|
+
- lib
|
95
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '2.4'
|
100
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
requirements: []
|
106
|
+
rubygems_version: 3.0.3
|
107
|
+
signing_key:
|
108
|
+
specification_version: 4
|
109
|
+
summary: Simple .netrc parser
|
110
|
+
test_files:
|
111
|
+
- spec/netrcx_spec.rb
|
112
|
+
- spec/spec_helper.rb
|