learn-config 0.0.1 → 0.0.2
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/bin/learn-config +10 -1
- data/lib/learn_config/cli.rb +47 -0
- data/lib/learn_config/learn_web_interactor.rb +35 -0
- data/lib/learn_config/me.rb +52 -0
- data/lib/learn_config/netrc_interactor.rb +34 -0
- data/lib/learn_config/setup.rb +87 -3
- data/lib/learn_config/version.rb +1 -1
- data/lib/learn_config.rb +4 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8c222608abd203ce1ed652817f6ffbc534634c53
|
4
|
+
data.tar.gz: 10aba38a717371ce7ac06a98b35706aa8635c45e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4e9fcd0b7a31a44a4ffc2a681f9e38a2e75444e07b7054b8ddcfe542faeb81054c6d174f87355034fc22bec3a9ae859809faf336753e0511226b051f61ffb4a5
|
7
|
+
data.tar.gz: a553829f22ecebcc82281f4c033c3eb5384b1663e49bac0e2a1d409fa81f9f4d8716b51df9143f287471611e98e23befc527e2fdda19608cc41ff0246ff76d6b
|
data/bin/learn-config
CHANGED
@@ -0,0 +1,47 @@
|
|
1
|
+
module LearnConfig
|
2
|
+
class CLI
|
3
|
+
attr_reader :github_username
|
4
|
+
attr_accessor :token
|
5
|
+
|
6
|
+
def initialize(github_username)
|
7
|
+
@github_username = github_username
|
8
|
+
end
|
9
|
+
|
10
|
+
def ask_for_oauth_token(short_text: false, retries_remaining: 5)
|
11
|
+
if !short_text
|
12
|
+
puts <<-LONG
|
13
|
+
To connect with the Learn web application, you will need to configure
|
14
|
+
the Learn gem with an OAuth token. You can find yours on your profile
|
15
|
+
page at: https://learn.co/#{github_username ? github_username : 'your-github-username'}.
|
16
|
+
|
17
|
+
LONG
|
18
|
+
|
19
|
+
print 'Once you have it, please come back here and paste it in: '
|
20
|
+
elsif retries_remaining > 0
|
21
|
+
print "Hmm...that token doesn't seem to be correct. Please try again: "
|
22
|
+
else
|
23
|
+
puts "Sorry, you've tried too many times. Please check your token and try again later."
|
24
|
+
exit
|
25
|
+
end
|
26
|
+
|
27
|
+
self.token = gets.chomp
|
28
|
+
|
29
|
+
verify_token_or_ask_again!(retries_remaining: retries_remaining)
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def verify_token_or_ask_again!(retries_remaining:)
|
35
|
+
if token_valid?
|
36
|
+
token
|
37
|
+
else
|
38
|
+
ask_for_oauth_token(short_text: true, retries_remaining: retries_remaining - 1)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def token_valid?
|
43
|
+
learn = LearnConfig::LearnWebInteractor.new(token, silent_output: true)
|
44
|
+
learn.valid_token?
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
|
3
|
+
module LearnConfig
|
4
|
+
class LearnWebInteractor
|
5
|
+
attr_reader :token, :conn, :silent_output
|
6
|
+
|
7
|
+
LEARN_URL = 'https://learn.co'
|
8
|
+
API_ROOT = '/api/v1'
|
9
|
+
|
10
|
+
def initialize(token, silent_output: false)
|
11
|
+
@token = token
|
12
|
+
@silent_output = silent_output
|
13
|
+
@conn = Faraday.new(url: LEARN_URL) do |faraday|
|
14
|
+
faraday.adapter Faraday.default_adapter
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def me_endpoint
|
19
|
+
"#{API_ROOT}/users/me"
|
20
|
+
end
|
21
|
+
|
22
|
+
def me
|
23
|
+
response = @conn.get do |req|
|
24
|
+
req.url me_endpoint
|
25
|
+
req.headers['Authorization'] = "Bearer #{token}"
|
26
|
+
end
|
27
|
+
|
28
|
+
LearnConfig::Me.new(response, silent_output: silent_output)
|
29
|
+
end
|
30
|
+
|
31
|
+
def valid_token?
|
32
|
+
!!me.data
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'oj'
|
2
|
+
|
3
|
+
module LearnConfig
|
4
|
+
class Me
|
5
|
+
attr_accessor :response, :id, :first_name, :last_name, :full_name,
|
6
|
+
:username, :email, :github_gravatar, :github_uid, :data,
|
7
|
+
:silent_output
|
8
|
+
|
9
|
+
def initialize(response, silent_output: false)
|
10
|
+
@response = response
|
11
|
+
@silent_output = silent_output
|
12
|
+
|
13
|
+
parse!
|
14
|
+
end
|
15
|
+
|
16
|
+
def parse!
|
17
|
+
if response.status == 200
|
18
|
+
self.data = Oj.load(response.body, symbol_keys: true)
|
19
|
+
|
20
|
+
populate_attributes!
|
21
|
+
elsif silent_output == false
|
22
|
+
case response.status
|
23
|
+
when 401
|
24
|
+
puts "It seems your OAuth token is incorrect. Please re-run config with: learn reset"
|
25
|
+
exit
|
26
|
+
when 500
|
27
|
+
puts "Something went wrong. Please try again."
|
28
|
+
exit
|
29
|
+
else
|
30
|
+
puts "Something went wrong. Please try again."
|
31
|
+
exit
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
self
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def populate_attributes!
|
41
|
+
data.each do |attribute, value|
|
42
|
+
if !self.respond_to?(attribute)
|
43
|
+
class << self
|
44
|
+
attr_accessor attribute
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
self.send("#{attribute}=", value)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'netrc'
|
2
|
+
|
3
|
+
module LearnConfig
|
4
|
+
class NetrcInteractor
|
5
|
+
attr_reader :login, :password, :netrc
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
ensure_proper_permissions!
|
9
|
+
end
|
10
|
+
|
11
|
+
def read(machine: 'learn-config')
|
12
|
+
@netrc = Netrc.read
|
13
|
+
@login, @password = netrc[machine]
|
14
|
+
end
|
15
|
+
|
16
|
+
def write(machine: 'learn-config', new_login:, new_password:)
|
17
|
+
netrc[machine] = new_login, new_password
|
18
|
+
netrc.save
|
19
|
+
end
|
20
|
+
|
21
|
+
def delete!(machine:)
|
22
|
+
@netrc = Netrc.read
|
23
|
+
|
24
|
+
netrc.delete(machine)
|
25
|
+
netrc.save
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def ensure_proper_permissions!
|
31
|
+
system('chmod 0600 ~/.netrc')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/learn_config/setup.rb
CHANGED
@@ -3,14 +3,98 @@ require 'oj'
|
|
3
3
|
|
4
4
|
module LearnConfig
|
5
5
|
class Setup
|
6
|
-
|
7
|
-
|
6
|
+
attr_reader :netrc, :args, :reset, :whoami
|
7
|
+
|
8
|
+
def self.run(args)
|
9
|
+
new(args).run
|
8
10
|
end
|
9
11
|
|
10
|
-
def initialize
|
12
|
+
def initialize(args)
|
13
|
+
@args = args
|
14
|
+
@netrc = LearnConfig::NetrcInteractor.new
|
15
|
+
@reset = !!args.include?('--reset')
|
16
|
+
@whoami = !!args.include?('--whoami')
|
11
17
|
end
|
12
18
|
|
13
19
|
def run
|
20
|
+
if reset
|
21
|
+
args.delete('--reset')
|
22
|
+
confirm_and_reset!
|
23
|
+
elsif whoami
|
24
|
+
args.delete('--whoami')
|
25
|
+
whoami?
|
26
|
+
else
|
27
|
+
setup_netrc
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def whoami?
|
34
|
+
_learn, token = netrc.read
|
35
|
+
me = LearnConfig::LearnWebInteractor.new(token).me
|
36
|
+
puts "Name: #{me.full_name}"
|
37
|
+
puts "Username: #{me.username}"
|
38
|
+
puts "Email: #{me.email}"
|
39
|
+
|
40
|
+
exit
|
41
|
+
end
|
42
|
+
|
43
|
+
def confirm_and_reset!
|
44
|
+
if confirm_reset?
|
45
|
+
netrc.delete!(machine: 'learn-config')
|
46
|
+
netrc.delete!(machine: 'flatiron-push')
|
47
|
+
|
48
|
+
setup_netrc
|
49
|
+
end
|
50
|
+
|
51
|
+
exit
|
52
|
+
end
|
53
|
+
|
54
|
+
def confirm_reset?
|
55
|
+
puts "This will remove your existing Learn login configuration and reset.\n"
|
56
|
+
print "Are you sure you want to do this? [yN]: "
|
57
|
+
|
58
|
+
response = gets.chomp.downcase
|
59
|
+
|
60
|
+
!!(response == 'yes' || response == 'y')
|
61
|
+
end
|
62
|
+
|
63
|
+
def setup_netrc
|
64
|
+
setup_learn_config_machine
|
65
|
+
setup_flatiron_push_config_machine
|
66
|
+
end
|
67
|
+
|
68
|
+
def setup_learn_config_machine
|
69
|
+
login, password = netrc.read
|
70
|
+
|
71
|
+
if (!login || !password) || !LearnConfig::LearnWebInteractor.new(password, silent_output: true).valid_token?
|
72
|
+
github_username, _uid = netrc.read(machine: 'flatiron-push')
|
73
|
+
oauth_token = LearnConfig::CLI.new(github_username).ask_for_oauth_token
|
74
|
+
netrc.write(new_login: 'learn', new_password: oauth_token)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def setup_flatiron_push_config_machine
|
79
|
+
learn_login, token = netrc.read(machine: 'learn-config')
|
80
|
+
|
81
|
+
if (!learn_login || !token) || !LearnConfig::LearnWebInteractor.new(token, silent_output: true).valid_token?
|
82
|
+
setup_learn_config_machine
|
83
|
+
else
|
84
|
+
ensure_correct_push_config(token)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def ensure_correct_push_config(token)
|
89
|
+
me = LearnConfig::LearnWebInteractor.new(token).me
|
90
|
+
github_username = me.username
|
91
|
+
github_user_id = me.github_uid
|
92
|
+
|
93
|
+
netrc.write(
|
94
|
+
machine: 'flatiron-push',
|
95
|
+
new_login: github_username,
|
96
|
+
new_password: github_user_id
|
97
|
+
)
|
14
98
|
end
|
15
99
|
end
|
16
100
|
end
|
data/lib/learn_config/version.rb
CHANGED
data/lib/learn_config.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: learn-config
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Flatiron School
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -96,6 +96,10 @@ files:
|
|
96
96
|
- bin/learn-config
|
97
97
|
- learn-config.gemspec
|
98
98
|
- lib/learn_config.rb
|
99
|
+
- lib/learn_config/cli.rb
|
100
|
+
- lib/learn_config/learn_web_interactor.rb
|
101
|
+
- lib/learn_config/me.rb
|
102
|
+
- lib/learn_config/netrc_interactor.rb
|
99
103
|
- lib/learn_config/setup.rb
|
100
104
|
- lib/learn_config/version.rb
|
101
105
|
homepage: https://learn.co
|