envGen 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/envGen +4 -0
- data/lib/envGen.rb +49 -0
- data/lib/envGen/add_file.rb +100 -0
- data/lib/envGen/add_gem.rb +77 -0
- data/lib/envGen/init.rb +66 -0
- metadata +106 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f38fb593fc1b25f7433ffadc996f260b5bd471d4
|
4
|
+
data.tar.gz: 71b3aa3c2a1023dea360e1cd33d22eb6a0929581
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f3ddb5ae959d2acb1442acdebb29c2b64c43dc26bf52166f6eb7c1fcac2d75202e3b59443e3512b0199a9ea22d0b64231f1315c3ae7388fc4018e23ff0f111cf
|
7
|
+
data.tar.gz: 3b30ca0528162626fc3716077cb11b8d4523acea19007daecff859fb02b7857c7bc78de4bc1175b7082e66b386ebfed32568b354f0e443b39ca46f1ac49de41e
|
data/bin/envGen
ADDED
data/lib/envGen.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
require_relative "envGen/add_file.rb"
|
2
|
+
require_relative "envGen/add_gem.rb"
|
3
|
+
require_relative "envGen/init.rb"
|
4
|
+
|
5
|
+
class EnvGen
|
6
|
+
@@options = ["init", "file", "dir", "gem", "help"] # all possible commands
|
7
|
+
|
8
|
+
def self.file
|
9
|
+
ARGV.delete_at(0) # gets rid of "file" to isolate files to add
|
10
|
+
AddFile.multiple(ARGV) # adds files individually
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.dir
|
14
|
+
ARGV.delete_at(0) # gets rid of "dir" to isolate dir to add
|
15
|
+
AddFile.dir(ARGV.first) # adds Ruby files in specified directory
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.newGem
|
19
|
+
ARGV.delete_at(0) # gets rid of "gem" to isolate gems to add
|
20
|
+
if ARGV[0] == "-s" # kicks off search
|
21
|
+
new_gem = AddGem.new(ARGV[1])
|
22
|
+
new_gem.gemSearch # searches for gem specified
|
23
|
+
else
|
24
|
+
ARGV.each do |arg|
|
25
|
+
new_gem = AddGem.new(arg) # creates objects for each gem
|
26
|
+
new_gem.gemEntry
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.parse(input) # handles user input from executable, ARGV[0]
|
32
|
+
if !@@options.include?(input)
|
33
|
+
puts "invalid command"
|
34
|
+
else
|
35
|
+
case input
|
36
|
+
when "init"
|
37
|
+
Init.init # handles environment creation
|
38
|
+
when "file"
|
39
|
+
file
|
40
|
+
when "dir"
|
41
|
+
dir
|
42
|
+
when "gem"
|
43
|
+
newGem
|
44
|
+
when "help"
|
45
|
+
Init.help # displays help message
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'pathname' # to generate relative path
|
2
|
+
require 'find' # to find ruby files within a directory
|
3
|
+
require 'pry'
|
4
|
+
|
5
|
+
class PrepareFile
|
6
|
+
attr_accessor :file, :fileName
|
7
|
+
|
8
|
+
def initialize(file)
|
9
|
+
@file = file
|
10
|
+
@fileName = File.basename(file)
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.createIfNotInConfig(file) # creates a files object if not exists
|
14
|
+
if !inConfig?(file)
|
15
|
+
PrepareFile.new(file)
|
16
|
+
else
|
17
|
+
puts "'#{File.basename(file)}' already added"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.inConfig?(file) # looks through environment for fileName; doesn't create an object/instance method because it may not be necessary
|
22
|
+
File.readlines("config/environment.rb").grep(/#{File.basename(file)}/).count > 0
|
23
|
+
end
|
24
|
+
|
25
|
+
def write # adds relative path of file to environment
|
26
|
+
File.open("config/environment.rb", "a") {|env|
|
27
|
+
env.puts "require_relative '#{relativePath}'"
|
28
|
+
}
|
29
|
+
puts "Added '#{fileName}'"
|
30
|
+
end
|
31
|
+
|
32
|
+
def isRuby?
|
33
|
+
File.extname(fileName) == ".rb"
|
34
|
+
end
|
35
|
+
|
36
|
+
def notRuby # handles non-Ruby files
|
37
|
+
puts "'#{fileName}' is not a Ruby (.rb) file. Continue? (Y/N)"
|
38
|
+
answer = gets.chomp.strip
|
39
|
+
if answer == "Y"
|
40
|
+
write
|
41
|
+
else
|
42
|
+
puts "'#{fileName}' not added"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def relativePath # finds file path relative to environment
|
47
|
+
dir = Pathname.new (Dir.pwd + "/config")
|
48
|
+
filePathname = Pathname.new File.absolute_path(file)
|
49
|
+
relative = (filePathname.relative_path_from dir).to_s
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
class AddFile
|
54
|
+
|
55
|
+
def self.single(input) # handles writing files
|
56
|
+
# binding.pry
|
57
|
+
new_file = PrepareFile.createIfNotInConfig(input)
|
58
|
+
if new_file # if not nil
|
59
|
+
# binding.pry
|
60
|
+
if File.file?(new_file.file) # check if file with full path of new_file
|
61
|
+
if new_file.isRuby?
|
62
|
+
new_file.write
|
63
|
+
else
|
64
|
+
new_file.notRuby
|
65
|
+
end
|
66
|
+
else
|
67
|
+
puts "'#{new_file.fileName}' not found"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.multiple(*input) # handles writing files
|
73
|
+
input.flatten.each do |f|
|
74
|
+
single(f)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.findRuby(dir) # find all of the Ruby files in the current dir/sub dirs
|
79
|
+
rubyFiles = []
|
80
|
+
Find.find(dir) do |path|
|
81
|
+
if File.extname(path) == ".rb"
|
82
|
+
rubyFiles << path # and compile a list
|
83
|
+
end
|
84
|
+
end
|
85
|
+
rubyFiles
|
86
|
+
end
|
87
|
+
|
88
|
+
def self.dir(dir) # takes in dir name, adds all Ruby files in dir
|
89
|
+
files = self.findRuby(dir)
|
90
|
+
# binding.pry
|
91
|
+
files.each do |file|
|
92
|
+
if file.include?(".rb") && File.file?(file)
|
93
|
+
self.single(file)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
f = PrepareFile.new("/Users/asiega/Development/immersive/personal-projects/envGen/lib/envGen.rb")
|
100
|
+
f.relativePath
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'pry'
|
2
|
+
|
3
|
+
class AddGem
|
4
|
+
attr_accessor :gemName, :gemsFound
|
5
|
+
|
6
|
+
@@gems = `gem list --remote`.split("\n") # gets updated list of all current RubyGems gems
|
7
|
+
|
8
|
+
def self.gems
|
9
|
+
@@gems
|
10
|
+
end
|
11
|
+
|
12
|
+
def initialize(input) # input is gem name, called with @gemName
|
13
|
+
@gemName = input
|
14
|
+
end
|
15
|
+
|
16
|
+
def inConfig? # looks through environment for gem
|
17
|
+
# binding.pry
|
18
|
+
File.readlines("config/environment.rb").grep("gem '#{gemName}'\n").count > 0
|
19
|
+
end
|
20
|
+
|
21
|
+
def exactGem?(gemString) # takes in a search term and a gem to match against
|
22
|
+
gemString.split(" ").first == gemName.downcase
|
23
|
+
end
|
24
|
+
|
25
|
+
def gemExists?
|
26
|
+
@@gems.select {|gem| gem.split(" ").first == gemName }.count > 0
|
27
|
+
end
|
28
|
+
|
29
|
+
def write
|
30
|
+
File.open("config/environment.rb", "a") {|env|
|
31
|
+
env.puts "gem '#{gemName}'"
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
def writeExactGem
|
36
|
+
write
|
37
|
+
puts "Added '#{gemName}'"
|
38
|
+
end
|
39
|
+
|
40
|
+
def noExactGem
|
41
|
+
puts "No exact match for '#{gemName}' found"
|
42
|
+
puts "Search for partial gem name with 'gem -s [gem]'"
|
43
|
+
end
|
44
|
+
|
45
|
+
def gemEntry # handles gem entry
|
46
|
+
if !inConfig? && gemExists?
|
47
|
+
writeExactGem
|
48
|
+
elsif inConfig? && gemExists? # add gem if doesn't exist
|
49
|
+
puts "'#{gemName}' already added"
|
50
|
+
else
|
51
|
+
noExactGem
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def findPartialNames # partial name search
|
56
|
+
gemsFound = []
|
57
|
+
puts "Searching through #{@@gems.count} gems..."
|
58
|
+
AddGem.gems.each do |gemString| # searching through gems + version numbers
|
59
|
+
if exactGem?(gemString)
|
60
|
+
gemsFound.unshift("** #{gemString}") # highlights exact match
|
61
|
+
elsif gemString.include?(gemName.downcase)
|
62
|
+
gemsFound << gemString
|
63
|
+
end
|
64
|
+
end
|
65
|
+
gemsFound
|
66
|
+
end
|
67
|
+
|
68
|
+
def gemSearch
|
69
|
+
gemsFound = findPartialNames
|
70
|
+
if gemsFound.count == 0
|
71
|
+
puts "No exact match for '#{gemName.downcase}' found"
|
72
|
+
else
|
73
|
+
puts "\nFound #{gemsFound.count} gems:"
|
74
|
+
gemsFound.each {|gem| puts gem}
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
data/lib/envGen/init.rb
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
class Init
|
2
|
+
|
3
|
+
attr_accessor :config
|
4
|
+
|
5
|
+
def self.usage
|
6
|
+
puts "\nUSAGE:\n envGen [option]"
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.help
|
10
|
+
usage
|
11
|
+
puts "\nOPTIONS:"
|
12
|
+
puts " init : Initialize environment.rb file"
|
13
|
+
puts " file [file], [file] : Add file to environment, e.g. 'lib/test1.rb'"
|
14
|
+
puts " dir [dir] : Add all .rb files in directory to environment"
|
15
|
+
puts " gem [gem], [gem] : Add gem to environment using exact name"
|
16
|
+
puts " gem -s [gem] : Search on partial gem name"
|
17
|
+
puts " help : Display this message \n"
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.init # if not exist: write config directory and environment file
|
21
|
+
puts "INITIALIZING CONFIG/ENVIRONMENT.RB..."
|
22
|
+
puts "\nChecking for 'config' directory:"
|
23
|
+
self.config
|
24
|
+
puts "\nChecking for 'config/environment.rb' file:"
|
25
|
+
self.environment
|
26
|
+
self.headers
|
27
|
+
`atom config/environment.rb`
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def self.config # checks for/creates config directory
|
34
|
+
config = Dir.pwd + "/config"
|
35
|
+
if Dir.exists?(config)
|
36
|
+
puts " Config directory already exists"
|
37
|
+
else
|
38
|
+
Dir.mkdir("config")
|
39
|
+
puts " Created directory '#{config}'"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.environment # checks for/creates environment file
|
44
|
+
env = Dir.pwd + "/config/environment.rb"
|
45
|
+
if File.exists?(env)
|
46
|
+
puts " Environment file already exists"
|
47
|
+
else
|
48
|
+
File.new(env, "w+")
|
49
|
+
puts " Created file '#{env}'"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.headers
|
54
|
+
File.open("config/environment.rb", "w+") {|file|
|
55
|
+
file.puts "# AUTO INSTALL GEMS VIA BUNDLER\nrequire 'bundler'\nBundler.require
|
56
|
+
\n\n# GEM DEPENDENCIES (require [gem])
|
57
|
+
\n\n# FILE DEPENDENCIES (require [file])
|
58
|
+
\n\n#! ACTION: Dependencies to sort"
|
59
|
+
}
|
60
|
+
puts "\nWriting 'environment.rb' file:
|
61
|
+
Added bundler
|
62
|
+
Added gem header
|
63
|
+
Added file header
|
64
|
+
Added to-sort header"
|
65
|
+
end
|
66
|
+
end
|
metadata
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: envGen
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Alex Siega
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-05-04 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: '1.11'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.11'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.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: '3.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry
|
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
|
+
- alexandra.siega@flatironschool.com
|
72
|
+
executables:
|
73
|
+
- envGen
|
74
|
+
extensions: []
|
75
|
+
extra_rdoc_files: []
|
76
|
+
files:
|
77
|
+
- bin/envGen
|
78
|
+
- lib/envGen.rb
|
79
|
+
- lib/envGen/add_file.rb
|
80
|
+
- lib/envGen/add_gem.rb
|
81
|
+
- lib/envGen/init.rb
|
82
|
+
homepage: https://github.com/alemosie/envGen
|
83
|
+
licenses:
|
84
|
+
- MIT
|
85
|
+
metadata: {}
|
86
|
+
post_install_message:
|
87
|
+
rdoc_options: []
|
88
|
+
require_paths:
|
89
|
+
- lib
|
90
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
100
|
+
requirements: []
|
101
|
+
rubyforge_project:
|
102
|
+
rubygems_version: 2.4.8
|
103
|
+
signing_key:
|
104
|
+
specification_version: 4
|
105
|
+
summary: Generates simple config/environment files for file and gem dependency handling
|
106
|
+
test_files: []
|