ez_gen 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ed6ea2992b32e37c2518ab930edcd58d187af1bf43269c8d0871c6baac696a56
4
- data.tar.gz: 4574a72be283dd286a232cc104e26958f5b77a8a6ffb8c65b40288e754b78d76
3
+ metadata.gz: 44da2666456bc3dcf5c19f7d6acab572f84277b2513e1057ed3c5e094dbc5d90
4
+ data.tar.gz: 7b038b4838049cbdb87ddb235996f6bf999b06a16fd6e35e39d0a321721d88b6
5
5
  SHA512:
6
- metadata.gz: 29b60f219fa163832f63d43174aff96e2cfdd9f94ba7ac01bcb647fc3ec7f2d3e75d3e34f64dfd8eaaf2589a54314fda9d0163f6e639760e2032ff5ce8dc0d3b
7
- data.tar.gz: 7c15d909a61a1085fba52d4137cd9d6f91fc29526f53c6b48ed7e42e96264b08756b19492ffb990cfc4186d715ac328b946ae1506e84ec2fe84af35bc2affb4d
6
+ metadata.gz: e224af021133ba8d5ac044b3550f96e19a6ed9ae8d277a45a3052720c9659bc2b9acb2319cb3076947295c39d487c5d0a68df05c8e062f7dbe0c9228aaf979d0
7
+ data.tar.gz: c1b012bb8718d79559d34def434578f20ea894ad0d0e03e24006966f1e06dcf5e7f740e971a9e6c5e4202ce94ad89d6ec4fd34ae03e912254a0e12ff3a724f28
data/bin/ez_gen CHANGED
@@ -2,4 +2,4 @@
2
2
 
3
3
  require 'ez_gen'
4
4
 
5
- EzGen::Template.generate
5
+ EzGen::Generator.generate_basic_env
@@ -1,9 +1,10 @@
1
- require "ez_gen/version"
1
+ require 'ez_gen/version'
2
+ require 'ez_gen/basic_env.rb'
2
3
 
3
4
  module EzGen
4
- class Template
5
- def self.generate
6
- require 'ez_gen/generator.rb'
5
+ class Generator
6
+ def self.generate_basic_env
7
+ BasicEnv.new.generate
7
8
  end
8
9
  end
9
10
  end
@@ -0,0 +1,52 @@
1
+ require 'fileutils'
2
+ require_relative 'file_writer'
3
+ require_relative 'message_writer'
4
+
5
+ class BasicEnv
6
+ def initialize
7
+ @title = ARGV.first
8
+ @file_writer = FileWriter.new(ARGV)
9
+ end
10
+
11
+ def generate
12
+ create_directories
13
+ cd_new_directory
14
+ initialize_git
15
+ write_template_files
16
+ commit_and_checkout
17
+ run_test
18
+ confirmation_message
19
+ end
20
+
21
+ private
22
+
23
+ def create_directories
24
+ %w(lib test .scripts).each {|dir| FileUtils.mkdir_p "#{@title}/#{dir}"}
25
+ end
26
+
27
+ def cd_new_directory
28
+ Dir.chdir "#{@title}"
29
+ end
30
+
31
+ def initialize_git
32
+ `git init`
33
+ end
34
+
35
+ def write_template_files
36
+ @file_writer.write
37
+ end
38
+
39
+ def commit_and_checkout
40
+ `git add .`
41
+ system("git commit -m 'Initial commit'")
42
+ system("git checkout -b dev")
43
+ end
44
+
45
+ def run_test
46
+ require "./test/#{ARGV.last}_test.rb"
47
+ end
48
+
49
+ def confirmation_message
50
+ MessageWriter.new(@title).write
51
+ end
52
+ end
@@ -0,0 +1,70 @@
1
+ require_relative 'templatable'
2
+
3
+ class FileWriter
4
+ include Templatable
5
+ def initialize(args)
6
+ @lower_name = args.last
7
+ @upper_name = @lower_name.split('_').map(&:capitalize).join
8
+ end
9
+
10
+ def write
11
+ write_rake
12
+ write_test_helper
13
+ write_class_template
14
+ write_test_file
15
+ write_generator
16
+ write_readme
17
+ write_pr_template
18
+ write_gitignore
19
+ end
20
+
21
+ private
22
+
23
+ def write_rake
24
+ rake = File.open("Rakefile", "w")
25
+ rake.write(rake_template)
26
+ rake.close
27
+ end
28
+
29
+ def write_test_helper
30
+ test_helper = File.open("test/test_helper.rb", "w")
31
+ test_helper.write(test_helper_template)
32
+ test_helper.close
33
+ end
34
+
35
+ def write_class_template
36
+ class_file = File.open("lib/#{@lower_name}.rb", 'w')
37
+ class_file.write(class_template(@upper_name))
38
+ class_file.close
39
+ end
40
+
41
+ def write_test_file
42
+ test_file = File.open("test/#{@lower_name}_test.rb", 'w')
43
+ test_file.write(test_template(@lower_name, @upper_name))
44
+ test_file.close
45
+ end
46
+
47
+ def write_generator
48
+ generator = File.open("./.scripts/generate.rb", 'w')
49
+ generator.write(generator_template)
50
+ generator.close
51
+ end
52
+
53
+ def write_readme
54
+ readme = File.open("README.md", 'w')
55
+ readme.write(readme_template)
56
+ readme.close
57
+ end
58
+
59
+ def write_pr_template
60
+ pr = File.open("pull_request_template.md", "w")
61
+ pr.write(pr_template)
62
+ pr.close
63
+ end
64
+
65
+ def write_gitignore
66
+ ignore = File.open(".gitignore", "w")
67
+ ignore.write("coverage/")
68
+ ignore.close
69
+ end
70
+ end
@@ -0,0 +1,65 @@
1
+ require 'pastel'
2
+
3
+ class MessageWriter
4
+ PASTEL = Pastel.new
5
+ def initialize(title)
6
+ @title = title
7
+ @message = {}
8
+ end
9
+
10
+ def write
11
+ stylize
12
+ confirmation
13
+ end
14
+
15
+ private
16
+
17
+ def confirmation
18
+ puts "\n" * 4
19
+ puts spacing[:spacing1] + @message[:repo] + @message[:title],""
20
+ puts spacing[:spacing1] + @message[:branch] + @message[:dev],""
21
+ puts spacing[:spacing2] + @message[:instructions],""
22
+ puts spacing[:spacing1] + @message[:run] + @message[:cd],""
23
+ puts spacing[:spacing1] + @message[:then],""
24
+ puts spacing[:spacing1] + @message[:run] + @message[:rake] + @message[:options],""
25
+ puts "\n" * 4
26
+ end
27
+
28
+ def spacing
29
+ {
30
+ spacing1: " " * 10,
31
+ spacing2: " " * 15,
32
+ }
33
+ end
34
+
35
+ def cyan_italic
36
+ {
37
+ repo: "Created new repository: ",
38
+ branch: "Switched to new branch: ",
39
+ run: "Run: ",
40
+ options: "to see available rake tasks",
41
+ then: "then..."
42
+ }
43
+ end
44
+
45
+ def magenta_bold
46
+ {
47
+ title: @title,
48
+ dev: "dev",
49
+ cd: "cd #{@title}",
50
+ rake: "rake --tasks "
51
+ }
52
+ end
53
+
54
+ def cyan_bold
55
+ {
56
+ instructions: "INSTRUCTIONS:"
57
+ }
58
+ end
59
+
60
+ def stylize
61
+ cyan_italic.each { |k,v| @message[k] = PASTEL.italic.cyan(v) }
62
+ magenta_bold.each { |k,v| @message[k] = PASTEL.bold.magenta(v) }
63
+ cyan_bold.each { |k,v| @message[k] = PASTEL.bold.cyan(v) }
64
+ end
65
+ end
@@ -0,0 +1,138 @@
1
+ module Templatable
2
+ def rake_template
3
+ <<~HEREDOC
4
+ require "rake/testtask"
5
+
6
+ Rake::TestTask.new do |task|
7
+ task.pattern = "test/*_test.rb"
8
+ end
9
+
10
+ desc "Run single test file based on class name, ex: rake test_class person"
11
+ task :test_class do
12
+ ARGV.each { |arg| task arg.to_sym do ; end }
13
+ eval File.read("./test/\#{ARGV.last}_test.rb")
14
+ end
15
+
16
+ desc "Generate new class and test, ex: rake g person"
17
+ task :g do
18
+ ARGV.each { |arg| task arg.to_sym do ; end }
19
+ ruby "./.scripts/generate.rb \#{ARGV.last}"
20
+ end
21
+ HEREDOC
22
+ end
23
+
24
+ def test_helper_template
25
+ <<~HEREDOC
26
+ require 'simplecov'
27
+ SimpleCov.start
28
+ require 'minitest/autorun'
29
+ require 'minitest/pride'
30
+ require 'mocha/minitest'
31
+ HEREDOC
32
+ end
33
+
34
+ def class_template(class_name)
35
+ <<~HEREDOC
36
+ class #{class_name}
37
+
38
+ end
39
+ HEREDOC
40
+ end
41
+
42
+ def test_template(lower_name, upper_name)
43
+ <<~HEREDOC
44
+ require './test/test_helper.rb'
45
+ require './lib/#{lower_name}.rb'
46
+
47
+ class #{upper_name}Test < Minitest::Test
48
+ def setup
49
+ @#{lower_name} = #{upper_name}.new
50
+ end
51
+
52
+ def test_it_exists
53
+ assert_instance_of #{upper_name}, @#{lower_name}
54
+ end
55
+ end
56
+ HEREDOC
57
+ end
58
+
59
+ def generator_template
60
+ <<~'HEREDOC'
61
+ lower_name = ARGV.first
62
+ upper_name = lower_name.split("_").map{|word| word.capitalize}.join
63
+
64
+ class_file = File.open("lib/#{lower_name}.rb", "w")
65
+ class_file.write("class #{upper_name}\n\nend")
66
+ class_file.close
67
+
68
+ test_file = File.open("test/#{lower_name}_test.rb", "w")
69
+ test_file.write(
70
+ "require \'./test/test_helper.rb\'
71
+ require \'./lib/#{lower_name}.rb\'
72
+
73
+ class #{upper_name}Test < Minitest::Test
74
+ def setup
75
+ @#{lower_name} = #{upper_name}.new
76
+ end
77
+
78
+ def test_it_exists
79
+ assert_instance_of #{upper_name}, @#{lower_name}
80
+ end
81
+ end"
82
+ )
83
+ test_file.close
84
+ eval File.read(test_file)
85
+ puts ""
86
+ puts "Created \'lib/#{lower_name}.rb\' and \'test/#{lower_name}_test.rb\'"
87
+ puts ""
88
+ HEREDOC
89
+ end
90
+
91
+ def readme_template
92
+ <<~HEREDOC
93
+ # Title
94
+
95
+ *Description*
96
+
97
+ ## Table of Contents:
98
+ - [Running Locally](#running-locally)
99
+ - [Tech Stack](#tech-stack)
100
+ - [Contributors](#contributors)
101
+
102
+ ***
103
+ ## Running Locally
104
+ [top](#table-of-contents)
105
+ * Instructions to run locally
106
+
107
+ ***
108
+ ## Tech Stack
109
+ [top](#table-of-contents)
110
+ * Language version
111
+ * Framework, gems, etc.
112
+
113
+ ***
114
+ ## Contributors
115
+ [top](#table-of-contents)
116
+ * [<NAME HERE>](<LINK TO GITHUB>)
117
+ HEREDOC
118
+ end
119
+
120
+ def pr_template
121
+ <<~HEREDOC
122
+ ## Description
123
+
124
+ ## Type of change
125
+ - [ ] Bug fix (non-breaking change which fixes an issue)
126
+ - [ ] Refactor (non-breaking change which maintains existing functionality)
127
+ - [ ] New feature (non-breaking change which adds functionality)
128
+ - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
129
+ ## Notes
130
+
131
+ ## Test Results
132
+ ```
133
+
134
+ ```
135
+ HEREDOC
136
+
137
+ end
138
+ end
@@ -1,3 +1,3 @@
1
1
  module EzGen
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ez_gen
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tyler Porter
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-08-21 00:00:00.000000000 Z
11
+ date: 2020-09-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pastel
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.19'
41
+ - !ruby/object:Gem::Dependency
42
+ name: mocha
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.11'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.11'
41
55
  description: Enter a project name and the name of the class you'd like to create.
42
56
  EzGen will generate a new git repo, class template, corresponding test template,
43
57
  PR template, README template, and Rakefile.
@@ -50,7 +64,10 @@ extra_rdoc_files: []
50
64
  files:
51
65
  - bin/ez_gen
52
66
  - lib/ez_gen.rb
53
- - lib/ez_gen/generator.rb
67
+ - lib/ez_gen/basic_env.rb
68
+ - lib/ez_gen/file_writer.rb
69
+ - lib/ez_gen/message_writer.rb
70
+ - lib/ez_gen/templatable.rb
54
71
  - lib/ez_gen/version.rb
55
72
  homepage: https://github.com/tylerpporter/ez_gen
56
73
  licenses:
@@ -58,7 +75,7 @@ licenses:
58
75
  metadata:
59
76
  homepage_uri: https://github.com/tylerpporter/ez_gen
60
77
  source_code_uri: https://github.com/tylerpporter/ez_gen
61
- post_install_message:
78
+ post_install_message:
62
79
  rdoc_options: []
63
80
  require_paths:
64
81
  - lib
@@ -73,8 +90,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
73
90
  - !ruby/object:Gem::Version
74
91
  version: '0'
75
92
  requirements: []
76
- rubygems_version: 3.1.4
77
- signing_key:
93
+ rubyforge_project:
94
+ rubygems_version: 2.7.6
95
+ signing_key:
78
96
  specification_version: 4
79
97
  summary: Quickly create an environment to write and test Ruby code.
80
98
  test_files: []
@@ -1,207 +0,0 @@
1
- require 'fileutils'
2
- require 'pastel'
3
-
4
- # file/class name
5
- title = ARGV.first
6
- lower_name = ARGV.last
7
- upper_name = lower_name.split('_').map{|word| word.capitalize}.join
8
-
9
- # create the directories
10
- %w(lib test .scripts).each {|dir| FileUtils.mkdir_p "#{title}/#{dir}"}
11
-
12
- # cd into new directory
13
- Dir.chdir "#{title}"
14
-
15
- # initialize git
16
- `git init`
17
-
18
- #write Rakefile
19
- rake = File.open("Rakefile", "w")
20
- rake.write(
21
- 'require "rake/testtask"
22
-
23
- Rake::TestTask.new do |task|
24
- task.pattern = "test/*_test.rb"
25
- end
26
-
27
- desc "Run single test file based on class name, ex: rake test_class person"
28
- task :test_class do
29
- ARGV.each { |arg| task arg.to_sym do ; end }
30
- eval File.read("./test/#{ARGV.last}_test.rb")
31
- end
32
-
33
- desc "Generate new class and test, ex: rake g person"
34
- task :g do
35
- ARGV.each { |arg| task arg.to_sym do ; end }
36
- ruby "./.scripts/generate.rb #{ARGV.last}"
37
- end
38
- '
39
- )
40
- rake.close
41
-
42
- # write test helper
43
- test_helper = File.open("test/test_helper.rb", "w")
44
- test_helper.write(
45
- "require 'simplecov'
46
- SimpleCov.start
47
- require 'minitest/autorun'
48
- require 'minitest/pride'
49
- require 'mocha/minitest'
50
- "
51
- )
52
- test_helper.close
53
-
54
- # write class template
55
- class_file = File.open("lib/#{lower_name}.rb", 'w')
56
- class_file.write("class #{upper_name}\n\nend")
57
- class_file.close
58
-
59
- # write test template
60
- test_file = File.open("test/#{lower_name}_test.rb", 'w')
61
- test_file.write(
62
- "require './test/test_helper.rb'
63
- require './lib/#{lower_name}.rb'
64
-
65
- class #{upper_name}Test < Minitest::Test
66
- def setup
67
- @#{lower_name} = #{upper_name}.new
68
- end
69
-
70
- def test_it_exists
71
- assert_instance_of #{upper_name}, @#{lower_name}
72
- end
73
- end"
74
- )
75
- test_file.close
76
-
77
- # write generator
78
- generator = File.open("./.scripts/generate.rb", 'w')
79
- generator.write(
80
- 'lower_name = ARGV.first
81
- upper_name = lower_name.split("_").map{|word| word.capitalize}.join
82
-
83
- class_file = File.open("lib/#{lower_name}.rb", "w")
84
- class_file.write("class #{upper_name}\n\nend")
85
- class_file.close
86
-
87
- test_file = File.open("test/#{lower_name}_test.rb", "w")
88
- test_file.write(
89
- "require \'./test/test_helper.rb\'
90
- require \'./lib/#{lower_name}.rb\'
91
-
92
- class #{upper_name}Test < Minitest::Test
93
- def setup
94
- @#{lower_name} = #{upper_name}.new
95
- end
96
-
97
- def test_it_exists
98
- assert_instance_of #{upper_name}, @#{lower_name}
99
- end
100
- end"
101
- )
102
- test_file.close
103
- eval File.read(test_file)
104
- puts ""
105
- puts "Created \'lib/#{lower_name}.rb\' and \'test/#{lower_name}_test.rb\'"
106
- puts ""
107
- '
108
- )
109
- generator.close
110
-
111
- # write README
112
- readme = File.open("README.md", 'w')
113
- readme.write(
114
- '# Title
115
-
116
- *Description*
117
-
118
- ## Table of Contents:
119
- - [Running Locally](#running-locally)
120
- - [Tech Stack](#tech-stack)
121
- - [Contributors](#contributors)
122
-
123
- ***
124
- ## Running Locally
125
- [top](#table-of-contents)
126
- * Instructions to run locally
127
-
128
- ***
129
- ## Tech Stack
130
- [top](#table-of-contents)
131
- * Language version
132
- * Framework, gems, etc.
133
-
134
- ***
135
- ## Contributors
136
- [top](#table-of-contents)
137
- * [<NAME HERE>](<LINK TO GITHUB>)
138
- '
139
- )
140
- readme.close
141
-
142
- # write pr template
143
- pr = File.open("pull_request_template.md", "w")
144
- pr.write(
145
- "## Description
146
-
147
- ## Type of change
148
- - [ ] Bug fix (non-breaking change which fixes an issue)
149
- - [ ] Refactor (non-breaking change which maintains existing functionality)
150
- - [ ] New feature (non-breaking change which adds functionality)
151
- - [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
152
- ## Notes
153
-
154
- ## Test Results
155
- ```
156
-
157
- ```
158
- "
159
- )
160
- pr.close
161
-
162
- # write gitignore
163
- ignore = File.open(".gitignore", "w")
164
- ignore.write("coverage/")
165
- ignore.close
166
-
167
- # git
168
- `git add .`
169
- system("git commit -m 'Initial commit'")
170
- system("git checkout -b dev")
171
-
172
- # run the test
173
- eval File.read(test_file)
174
-
175
- # confirmation message
176
- pastel = Pastel.new
177
- message = {
178
- spacing1: " " * 10,
179
- spacing2: " " * 15,
180
- title: pastel.bold.magenta("#{title}"),
181
- repo: pastel.italic.cyan("Created new repository: "),
182
- branch: pastel.italic.cyan("Switched to new branch: "),
183
- dev: pastel.bold.magenta("dev"),
184
- run: pastel.italic.cyan("Run: "),
185
- cd: pastel.magenta.bold("cd #{title}"),
186
- rake: pastel.magenta.bold("rake --tasks "),
187
- options: pastel.italic.cyan("to see available rake tasks"),
188
- then: pastel.italic.cyan("then..."),
189
- instructions: pastel.cyan.bold("INSTRUCTIONS:")
190
- }
191
- 4.times do
192
- puts ""
193
- end
194
- puts message[:spacing1] + message[:repo] + message[:title]
195
- puts ""
196
- puts message[:spacing1] + message[:branch] + message[:dev]
197
- puts ""
198
- puts message[:spacing2] + message[:instructions]
199
- puts ""
200
- puts message[:spacing1] + message[:run] + message[:cd]
201
- puts ""
202
- puts message[:spacing1] + message[:then]
203
- puts ""
204
- puts message[:spacing1] + message[:run] + message[:rake] + message[:options]
205
- 4.times do
206
- puts ""
207
- end