envGen 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require_relative "../lib/envGen.rb"
3
+
4
+ EnvGen.parse(ARGV[0])
@@ -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
@@ -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: []