radon 0.1.6 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
data/bin/radon CHANGED
@@ -1,55 +1,55 @@
1
- #!/usr/bin/env ruby
2
- $LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib')))
3
-
4
- require 'core'
5
-
6
- Signal.trap("INT"){}
7
-
8
- ARGV << '-h' if ARGV.empty?
9
- options = {}
10
-
11
- OptionParser.new do |opts|
12
- opts.banner = "Generate starter code for different coding environments.\n\nUsage: #{File.basename($PROGRAM_NAME)} [options] [task] NewProjectName\nRadon version: #{Paint[VERSION, '#2ecc71']}"
13
- opts.separator Paint["\nGlobal Options: ", '#95a5a6']
14
-
15
-
16
- opts.on('--list-env', 'List all supported environments') do
17
- all = Radon::Environments.getAllNames
18
- puts "Supported environments are:"
19
- all.each do |e|
20
- puts " #{e}"
21
- end
22
- end
23
-
24
- opts.on('-q', '--quiet', 'Run with suppresed console output.') do
25
- $quiet = true
26
- end
27
-
28
- opts.on('--verbose', 'Run verbosely') do
29
- $verbose = true
30
- end
31
-
32
- opts.on('-v', '--version', 'Show the krypton version and exit') do
33
- puts "Krypton version: #{Paint[VERSION, '#2ecc71']}"
34
- exit 0
35
- end
36
-
37
- opts.on('-h', '--help', 'Show this help message') do
38
- puts opts
39
- exit
40
- end
41
-
42
-
43
- end.parse!(ARGV)
44
-
45
- while (opt = ARGV.shift) do
46
- Radon::Util.first_run
47
- if Radon::Environments.getAllNames.include? opt
48
- Radon::Environments.extract(opt, ARGV[0])
49
- puts Paint["Done! Your project is set up in #{File.expand_path(ARGV[0])}.", :bold, :bright]
50
- exit 0
51
- else
52
- error "#{opt} is not a supported environment!"
53
- exit 1
54
- end
55
- end
1
+ #!/usr/bin/env ruby
2
+ $LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib')))
3
+
4
+ require 'core'
5
+
6
+ Signal.trap("INT"){}
7
+
8
+ ARGV << '-h' if ARGV.empty?
9
+ options = {}
10
+
11
+ OptionParser.new do |opts|
12
+ opts.banner = "Generate starter code for different coding environments.\n\nUsage: #{File.basename($PROGRAM_NAME)} [options] [task] NewProjectName\nRadon version: #{Paint[VERSION, '#2ecc71']}"
13
+ opts.separator Paint["\nGlobal Options: ", '#95a5a6']
14
+
15
+
16
+ opts.on('--list-env', 'List all supported environments') do
17
+ all = Radon::Environments.getAllNames
18
+ puts "Supported environments are:"
19
+ all.each do |e|
20
+ puts " #{e}"
21
+ end
22
+ end
23
+
24
+ opts.on('-q', '--quiet', 'Run with suppresed console output.') do
25
+ $quiet = true
26
+ end
27
+
28
+ opts.on('--verbose', 'Run verbosely') do
29
+ $verbose = true
30
+ end
31
+
32
+ opts.on('-v', '--version', 'Show the krypton version and exit') do
33
+ puts "Krypton version: #{Paint[VERSION, '#2ecc71']}"
34
+ exit 0
35
+ end
36
+
37
+ opts.on('-h', '--help', 'Show this help message') do
38
+ puts opts
39
+ exit
40
+ end
41
+
42
+
43
+ end.parse!(ARGV)
44
+
45
+ while (opt = ARGV.shift) do
46
+ Radon::Util.first_run
47
+ if Radon::Environments.getAllNames.include? opt
48
+ Radon::Environments.extract(opt, ARGV[0])
49
+ puts Paint["Done! Your project is set up in #{File.expand_path(ARGV[0])}.", :bold, :bright]
50
+ exit 0
51
+ else
52
+ error "#{opt} is not a supported environment!"
53
+ exit 1
54
+ end
55
+ end
data/bin/setup CHANGED
@@ -1,8 +1,8 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
data/data/c.b64 CHANGED
@@ -1,15 +1,15 @@
1
- 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
- 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
- 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
- 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
- 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
- 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
- AAAAAAQAHABzcmMvVVQJAAMiBNJbMZHUW3V4CwABBOgDAAAE6AMAAFBLAwQUAAAACADqbVlNyEns
8
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
data/data/website.b64 ADDED
@@ -0,0 +1 @@
1
+ UEsDBAoAAAAAAC+IQk4AAAAAAAAAAAAAAAAHABwAYXNzZXRzL1VUCQADORNWXDkTVlx1eAsAAQToAwAABOgDAABQSwMECgAAAAAAXIhCTgAAAAAAAAAAAAAAAAQAHABjc3MvVVQJAAOPE1ZcjxNWXHV4CwABBOgDAAAE6AMAAFBLAwQKAAAAAABciEJOAAAAAAAAAAAAAAAADQAcAGNzcy9zdHlsZS5jc3NVVAkAA48TVlyPE1ZcdXgLAAEE6AMAAAToAwAAUEsDBBQAAAAIAFWIQk4oJnDEOAAAAE0AAAAKABwAaW5kZXguaHRtbFVUCQADgRNWXIETVlx1eAsAAQToAwAABOgDAACzUXTxdw6JDHBVyCjJzbHjsoFQXApAYJOUn1Jpx8Vpk2Fo55Gak5OvEJ5flJOiaKMPFEBWAdMFAFBLAwQKAAAAAABgiEJOAAAAAAAAAAAAAAAAAwAcAGpzL1VUCQADkxNWXJMTVlx1eAsAAQToAwAABOgDAABQSwMECgAAAAAAYIhCTgAAAAAAAAAAAAAAAAoAHABqcy9tYWluLmpzVVQJAAOTE1ZckxNWXHV4CwABBOgDAAAE6AMAAFBLAwQKAAAAAAAwiEJOAAAAAAAAAAAAAAAABwAcAHB1YmxpYy9VVAkAAzsTVlw7E1ZcdXgLAAEE6AMAAAToAwAAUEsBAh4DCgAAAAAAL4hCTgAAAAAAAAAAAAAAAAcAGAAAAAAAAAAQAP9BAAAAAGFzc2V0cy9VVAUAAzkTVlx1eAsAAQToAwAABOgDAABQSwECHgMKAAAAAABciEJOAAAAAAAAAAAAAAAABAAYAAAAAAAAABAA/0FBAAAAY3NzL1VUBQADjxNWXHV4CwABBOgDAAAE6AMAAFBLAQIeAwoAAAAAAFyIQk4AAAAAAAAAAAAAAAANABgAAAAAAAAAAAD/gX8AAABjc3Mvc3R5bGUuY3NzVVQFAAOPE1ZcdXgLAAEE6AMAAAToAwAAUEsBAh4DFAAAAAgAVYhCTigmcMQ4AAAATQAAAAoAGAAAAAAAAQAAAP+BxgAAAGluZGV4Lmh0bWxVVAUAA4ETVlx1eAsAAQToAwAABOgDAABQSwECHgMKAAAAAABgiEJOAAAAAAAAAAAAAAAAAwAYAAAAAAAAABAA/0FCAQAAanMvVVQFAAOTE1ZcdXgLAAEE6AMAAAToAwAAUEsBAh4DCgAAAAAAYIhCTgAAAAAAAAAAAAAAAAoAGAAAAAAAAAAAAP+BfwEAAGpzL21haW4uanNVVAUAA5MTVlx1eAsAAQToAwAABOgDAABQSwECHgMKAAAAAAAwiEJOAAAAAAAAAAAAAAAABwAYAAAAAAAAABAA/0HDAQAAcHVibGljL1VUBQADOxNWXHV4CwABBOgDAAAE6AMAAFBLBQYAAAAABwAHACACAAAEAgAAAAA=
data/data/website.zip ADDED
Binary file
@@ -1,5 +1,5 @@
1
1
  # The version
2
- VERSION = "0.1.6"
2
+ VERSION = "0.1.7"
3
3
 
4
4
  # The root of this project
5
5
  PROJECT_ROOT = File.absolute_path(File.join(File.dirname(__FILE__), "..", ".."))
@@ -1,38 +1,39 @@
1
- require "core/constants"
2
- module Radon
3
- class Environments
4
-
5
- # The list of all supported environments and their associeted data paths
6
- @@all = {
7
- 'gradle' => File.join(DATA_DIR, "gradle.zip"),
8
- 'java' => File.join(DATA_DIR, "java.zip"),
9
- 'maven' => File.join(DATA_DIR, "maven.zip"),
10
- 'python' => File.join(DATA_DIR, "python.zip"),
11
- 'c' => File.join(DATA_DIR, "c.zip"),
12
- 'ruby' => File.join(DATA_DIR, "ruby.zip"),
13
- 'crystal'=> File.join(DATA_DIR, "crystal_app.zip"),
14
- 'go_s' => File.join(DATA_DIR, "go_s.zip")
15
- }
16
-
17
- # Gets all environments as an array of strings
18
- def self.getAllNames
19
- @@all.keys
20
- end
21
-
22
- # Gets the value (corrosponding zip) of the key
23
- def self.getTargetOf(key)
24
- @@all[key]
25
- end
26
-
27
- # Extract the zip
28
- def self.extract(key, target)
29
- envs = self.getAllNames
30
- if envs.include? key
31
- send "extract_#{key}", target
32
- else
33
- error("#{key} is not a supported environment.\nYou can suggest it be added at https://github.com/cbrnrd/radon/issues")
34
- end
35
- end
36
-
37
- end
38
- end
1
+ require "core/constants"
2
+ module Radon
3
+ class Environments
4
+
5
+ # The list of all supported environments and their associeted data paths
6
+ @@all = {
7
+ 'gradle' => File.join(DATA_DIR, "gradle.zip"),
8
+ 'java' => File.join(DATA_DIR, "java.zip"),
9
+ 'maven' => File.join(DATA_DIR, "maven.zip"),
10
+ 'python' => File.join(DATA_DIR, "python.zip"),
11
+ 'c' => File.join(DATA_DIR, "c.zip"),
12
+ 'ruby' => File.join(DATA_DIR, "ruby.zip"),
13
+ 'crystal'=> File.join(DATA_DIR, "crystal_app.zip"),
14
+ 'go_s' => File.join(DATA_DIR, "go_s.zip"),
15
+ 'website'=> File.join(DATA_DIR, "website.zip")
16
+ }
17
+
18
+ # Gets all environments as an array of strings
19
+ def self.getAllNames
20
+ @@all.keys
21
+ end
22
+
23
+ # Gets the value (corrosponding zip) of the key
24
+ def self.getTargetOf(key)
25
+ @@all[key]
26
+ end
27
+
28
+ # Extract the zip
29
+ def self.extract(key, target)
30
+ envs = self.getAllNames
31
+ if envs.include? key
32
+ send "extract_#{key}", target
33
+ else
34
+ error("#{key} is not a supported environment.\nYou can suggest it be added at https://github.com/cbrnrd/radon/issues")
35
+ end
36
+ end
37
+
38
+ end
39
+ end
data/lib/core/extract.rb CHANGED
@@ -1,57 +1,61 @@
1
- require "base64"
2
- require "tempfile"
3
- require "zip"
4
-
5
- def extract_gradle(target)
6
- extract_zip(Radon::Environments.getTargetOf('gradle'), target)
7
- end
8
-
9
- def extract_java(target)
10
- extract_zip(Radon::Environments.getTargetOf('java'), target)
11
- end
12
-
13
- def extract_maven(target)
14
- extract_zip(Radon::Environments.getTargetOf('maven'), target)
15
- end
16
-
17
- def extract_python(target)
18
- extract_zip(Radon::Environments.getTargetOf('python'), target)
19
- end
20
-
21
- def extract_ruby(target)
22
- extract_zip(Radon::Environments.getTargetOf('ruby'), target)
23
- replace_all_tokens(target)
24
- end
25
-
26
- def extract_c(target)
27
- extract_zip(Radon::Environments.getTargetOf('c'), target)
28
- end
29
-
30
- def extract_crystal(target)
31
- extract_zip(Radon::Environments.getTargetOf('crystal'), target)
32
- replace_all_tokens(target)
33
- end
34
-
35
- def extract_go_s(target)
36
- extract_zip(Radon::Environments.getTargetOf('go_s'), target)
37
- end
38
-
39
- # Extracts some zip data to the passed destination
40
- def extract_zip(file, destination)
41
- puts "Creating project under #{File.expand_path(destination)}" unless $quiet
42
- create(destination)
43
- FileUtils.mkdir_p(destination)
44
-
45
- Zip::File.open(file) do |zip_file|
46
- zip_file.each do |f|
47
- fname = f.name.gsub('{{NAME}}', projectify(destination))
48
- fpath = File.join(destination, fname)
49
- if File.exists?(fpath)
50
- skip(fpath)
51
- else
52
- create(fpath)
53
- end
54
- zip_file.extract(f, fpath) unless File.exist?(fpath)
55
- end
56
- end
57
- end
1
+ require "base64"
2
+ require "tempfile"
3
+ require "zip"
4
+
5
+ def extract_gradle(target)
6
+ extract_zip(Radon::Environments.getTargetOf('gradle'), target)
7
+ end
8
+
9
+ def extract_java(target)
10
+ extract_zip(Radon::Environments.getTargetOf('java'), target)
11
+ end
12
+
13
+ def extract_maven(target)
14
+ extract_zip(Radon::Environments.getTargetOf('maven'), target)
15
+ end
16
+
17
+ def extract_python(target)
18
+ extract_zip(Radon::Environments.getTargetOf('python'), target)
19
+ end
20
+
21
+ def extract_ruby(target)
22
+ extract_zip(Radon::Environments.getTargetOf('ruby'), target)
23
+ replace_all_tokens(target)
24
+ end
25
+
26
+ def extract_c(target)
27
+ extract_zip(Radon::Environments.getTargetOf('c'), target)
28
+ end
29
+
30
+ def extract_crystal(target)
31
+ extract_zip(Radon::Environments.getTargetOf('crystal'), target)
32
+ replace_all_tokens(target)
33
+ end
34
+
35
+ def extract_go_s(target)
36
+ extract_zip(Radon::Environments.getTargetOf('go_s'), target)
37
+ end
38
+
39
+ def extract_website(target)
40
+ extract_zip(Radon::Environments.getTargetOf('website'), target)
41
+ end
42
+
43
+ # Extracts some zip data to the passed destination
44
+ def extract_zip(file, destination)
45
+ puts "Creating project under #{File.expand_path(destination)}" unless $quiet
46
+ create(destination)
47
+ FileUtils.mkdir_p(destination)
48
+
49
+ Zip::File.open(file) do |zip_file|
50
+ zip_file.each do |f|
51
+ fname = f.name.gsub('{{NAME}}', projectify(destination))
52
+ fpath = File.join(destination, fname)
53
+ if File.exists?(fpath)
54
+ skip(fpath)
55
+ else
56
+ create(fpath)
57
+ end
58
+ zip_file.extract(f, fpath) unless File.exist?(fpath)
59
+ end
60
+ end
61
+ end
data/lib/core/text.rb CHANGED
@@ -1,103 +1,103 @@
1
- require 'paint'
2
-
3
- def vprint(*args)
4
- puts args if $verbose && !$quiet
5
- end
6
-
7
- def error(*args)
8
- puts Paint["ERROR", '#e74c3c'] + " - #{args.join(' ')}"
9
- end
10
-
11
- def report_error_to_github(trace)
12
- commit_string = File.directory?(File.join(PROJECT_ROOT, '.git')) ? "Commit `#{File.read(File.join(PROJECT_ROOT, '.git', 'refs', 'heads', 'master')).strip}`" : nil
13
- puts %Q{
14
- :::::::::::::::::: COPY BELOW ::::::::::::::::::
15
- ### Ruby version
16
-
17
- `#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}`
18
-
19
- ### OS
20
-
21
- #{Gem::Platform.local.os}
22
-
23
- ### Radon Version
24
-
25
- `VERSION`
26
-
27
- ### Date Found
28
-
29
- #{Time.now.strftime("%d/%m/%Y %H:%M")}
30
-
31
- ### Backtrace
32
- ```
33
- #{trace}
34
- ```
35
-
36
- #{commit_string}
37
- :::::::::::::::::: COPY ABOVE ::::::::::::::::::
38
- #{Paint["Whoops! Looks like you've found a bug in radon. Please copy the text above and open a new issue at ", '#e74c3c'] + Paint['https://github.com/cbrnrd/radon/issues', :bold, :bright]}
39
- }
40
-
41
- end
42
-
43
- def create(fname)
44
- puts Paint[" create", '#2ecc71'] + " #{fname}" unless $quiet
45
- end
46
-
47
- def skip(fname)
48
- puts Paint[" skip", '#f1c40f'] + " #{fname}" unless $quiet
49
- end
50
-
51
- # Gets the project name in capitalized format. Eg: MyProjectName
52
- def projectify(name)
53
- # Name becomes frozen for some reason
54
- name = name.gsub(/(.)([A-Z])/,'\1-\2')
55
- name.downcase!
56
- name.gsub!('..', '')
57
- name.gsub!('/', '')
58
- name.gsub!('\\', '')
59
- name[0] = '' if name[0] == '-'
60
- name.gsub!('--', '-')
61
- name.gsub!('_-', '-')
62
- return name
63
- end
64
-
65
- # Prompts the user for input
66
- def ask(*args)
67
- print(*args)
68
- $stdin.gets.chomp
69
- end
70
-
71
- # Gets the project name in dash-seperated format. Eg: my-project-name
72
- def classify(name)
73
- name = name.gsub(/-[a-z]/) {|s| s.upcase }
74
- name.delete!('-')
75
- return name.slice(0,1).capitalize + name.slice(1..-1)
76
- end
77
-
78
- # Replaces 'find' with 'repl' in every file and directory
79
- def find_and_replace_all(target_dir, find, repl)
80
- files = Dir[File.join(target_dir,'**','*')]
81
- files.each do |file_name|
82
- next if File.directory?(file_name)
83
- begin
84
- text = File.read(file_name)
85
- # Do the find and replace
86
- new_contents = text.gsub(find, repl)
87
- File.open(file_name, 'w') {|f| f.puts new_contents}
88
- rescue Errno::ENOENT => e
89
- # Something weird happened (this shouldn't come up)
90
- error "ERROR GSUBING FILE #{file_name}"
91
- report_error_to_github(e.backtrace)
92
- next
93
- end
94
- end
95
- end
96
-
97
- # Replaces all tokens in all files in the target directory
98
- def replace_all_tokens(target)
99
- find_and_replace_all(target, '{{NAME}}', projectify(target))
100
- find_and_replace_all(target, '{{CAPSNAME}}', classify(target))
101
- find_and_replace_all(target, '{{EMAIL}}', Radon::Util.get_email)
102
- find_and_replace_all(target, '{{GHNAME}}', Radon::Util.get_github_username)
1
+ require 'paint'
2
+
3
+ def vprint(*args)
4
+ puts args if $verbose && !$quiet
5
+ end
6
+
7
+ def error(*args)
8
+ puts Paint["ERROR", '#e74c3c'] + " - #{args.join(' ')}"
9
+ end
10
+
11
+ def report_error_to_github(trace)
12
+ commit_string = File.directory?(File.join(PROJECT_ROOT, '.git')) ? "Commit `#{File.read(File.join(PROJECT_ROOT, '.git', 'refs', 'heads', 'master')).strip}`" : nil
13
+ puts %Q{
14
+ :::::::::::::::::: COPY BELOW ::::::::::::::::::
15
+ ### Ruby version
16
+
17
+ `#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}`
18
+
19
+ ### OS
20
+
21
+ #{Gem::Platform.local.os}
22
+
23
+ ### Radon Version
24
+
25
+ `VERSION`
26
+
27
+ ### Date Found
28
+
29
+ #{Time.now.strftime("%d/%m/%Y %H:%M")}
30
+
31
+ ### Backtrace
32
+ ```
33
+ #{trace}
34
+ ```
35
+
36
+ #{commit_string}
37
+ :::::::::::::::::: COPY ABOVE ::::::::::::::::::
38
+ #{Paint["Whoops! Looks like you've found a bug in radon. Please copy the text above and open a new issue at ", '#e74c3c'] + Paint['https://github.com/cbrnrd/radon/issues', :bold, :bright]}
39
+ }
40
+
41
+ end
42
+
43
+ def create(fname)
44
+ puts Paint[" create", '#2ecc71'] + " #{fname}" unless $quiet
45
+ end
46
+
47
+ def skip(fname)
48
+ puts Paint[" skip", '#f1c40f'] + " #{fname}" unless $quiet
49
+ end
50
+
51
+ # Gets the project name in capitalized format. Eg: MyProjectName
52
+ def projectify(name)
53
+ # Name becomes frozen for some reason
54
+ name = name.gsub(/(.)([A-Z])/,'\1-\2')
55
+ name.downcase!
56
+ name.gsub!('..', '')
57
+ name.gsub!('/', '')
58
+ name.gsub!('\\', '')
59
+ name[0] = '' if name[0] == '-'
60
+ name.gsub!('--', '-')
61
+ name.gsub!('_-', '-')
62
+ return name
63
+ end
64
+
65
+ # Prompts the user for input
66
+ def ask(*args)
67
+ print(*args)
68
+ $stdin.gets.chomp
69
+ end
70
+
71
+ # Gets the project name in dash-seperated format. Eg: my-project-name
72
+ def classify(name)
73
+ name = name.gsub(/-[a-z]/) {|s| s.upcase }
74
+ name.delete!('-')
75
+ return name.slice(0,1).capitalize + name.slice(1..-1)
76
+ end
77
+
78
+ # Replaces 'find' with 'repl' in every file and directory
79
+ def find_and_replace_all(target_dir, find, repl)
80
+ files = Dir[File.join(target_dir,'**','*')]
81
+ files.each do |file_name|
82
+ next if File.directory?(file_name)
83
+ begin
84
+ text = File.read(file_name)
85
+ # Do the find and replace
86
+ new_contents = text.gsub(find, repl)
87
+ File.open(file_name, 'w') {|f| f.puts new_contents}
88
+ rescue Errno::ENOENT => e
89
+ # Something weird happened (this shouldn't come up)
90
+ error "ERROR GSUBING FILE #{file_name}"
91
+ report_error_to_github(e.backtrace)
92
+ next
93
+ end
94
+ end
95
+ end
96
+
97
+ # Replaces all tokens in all files in the target directory
98
+ def replace_all_tokens(target)
99
+ find_and_replace_all(target, '{{NAME}}', projectify(target))
100
+ find_and_replace_all(target, '{{CAPSNAME}}', classify(target))
101
+ find_and_replace_all(target, '{{EMAIL}}', Radon::Util.get_email)
102
+ find_and_replace_all(target, '{{GHNAME}}', Radon::Util.get_github_username)
103
103
  end
data/lib/core/util.rb CHANGED
@@ -1,35 +1,35 @@
1
- require 'fileutils'
2
- require 'json'
3
- module Radon
4
- class Util
5
- def self.first_run
6
- return if (File.directory?(SETTINGS_DIR) && File.exist?(SETTINGS_FILE))
7
- puts "Performing first time setup..."
8
-
9
- # Make settings dir
10
- FileUtils.mkdir_p(SETTINGS_DIR)
11
- vprint("Creating #{SETTINGS_DIR}")
12
-
13
- puts "Welcome to radon! It looks like it's your first time running radon."
14
- email = ask " Email: "
15
- gh_uname = ask " GitHub username: "
16
-
17
- data = {
18
- :email => email,
19
- :username => gh_uname
20
- }
21
-
22
- File.write(File.join(SETTINGS_DIR, 'settings.json'), JSON.pretty_generate(data))
23
- vprint "Writing settings to #{File.join(SETTINGS_DIR, 'settings.json')}"
24
- end
25
-
26
- def self.get_email
27
- JSON.parse(File.read(SETTINGS_FILE))['email']
28
- end
29
-
30
- def self.get_github_username
31
- JSON.parse(File.read(SETTINGS_FILE))['username']
32
- end
33
-
34
- end
35
- end
1
+ require 'fileutils'
2
+ require 'json'
3
+ module Radon
4
+ class Util
5
+ def self.first_run
6
+ return if (File.directory?(SETTINGS_DIR) && File.exist?(SETTINGS_FILE))
7
+ puts "Performing first time setup..."
8
+
9
+ # Make settings dir
10
+ FileUtils.mkdir_p(SETTINGS_DIR)
11
+ vprint("Creating #{SETTINGS_DIR}")
12
+
13
+ puts "Welcome to radon! It looks like it's your first time running radon."
14
+ email = ask " Email: "
15
+ gh_uname = ask " GitHub username: "
16
+
17
+ data = {
18
+ :email => email,
19
+ :username => gh_uname
20
+ }
21
+
22
+ File.write(File.join(SETTINGS_DIR, 'settings.json'), JSON.pretty_generate(data))
23
+ vprint "Writing settings to #{File.join(SETTINGS_DIR, 'settings.json')}"
24
+ end
25
+
26
+ def self.get_email
27
+ JSON.parse(File.read(SETTINGS_FILE))['email']
28
+ end
29
+
30
+ def self.get_github_username
31
+ JSON.parse(File.read(SETTINGS_FILE))['username']
32
+ end
33
+
34
+ end
35
+ end