envGen 0.1.0

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.
@@ -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: []