learn-generate 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +22 -0
- data/.rspec +2 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +54 -0
- data/Rakefile +1 -0
- data/bin/learn-generate +43 -0
- data/learn-generate.gemspec +23 -0
- data/lib/learn_generate/file_finder.rb +19 -0
- data/lib/learn_generate/helpers/dot-learn-helper.rb +12 -0
- data/lib/learn_generate/helpers/gemfile-helper.rb +48 -0
- data/lib/learn_generate/helpers/template-helper.rb +52 -0
- data/lib/learn_generate/template_loader.rb +96 -0
- data/lib/learn_generate/template_maker.rb +115 -0
- data/lib/learn_generate/version.rb +3 -0
- data/lib/learn_generate.rb +10 -0
- data/lib/templates/activerecord/.gitignore +0 -0
- data/lib/templates/activerecord/.rspec +3 -0
- data/lib/templates/activerecord/README.md +5 -0
- data/lib/templates/activerecord/Rakefile +22 -0
- data/lib/templates/activerecord/app/models/sample-class.rb +2 -0
- data/lib/templates/activerecord/config/environment.rb +26 -0
- data/lib/templates/activerecord/db/migrations/.keep +0 -0
- data/lib/templates/activerecord/lib/support/connection_adapter.rb +15 -0
- data/lib/templates/activerecord/lib/support/db_registry.rb +4 -0
- data/lib/templates/activerecord/spec/spec_helper.rb +21 -0
- data/lib/templates/command-line/.gitignore +0 -0
- data/lib/templates/command-line/.rspec +3 -0
- data/lib/templates/command-line/README.md +5 -0
- data/lib/templates/command-line/bin/runner.rb +4 -0
- data/lib/templates/command-line/lib/environment.rb +5 -0
- data/lib/templates/command-line/lib/lab-name/cli.rb +4 -0
- data/lib/templates/command-line/spec/spec_helper.rb +80 -0
- data/lib/templates/front-end/.gitignore +0 -0
- data/lib/templates/front-end/README.md +5 -0
- data/lib/templates/front-end/css/style.css +0 -0
- data/lib/templates/front-end/images/.keep +0 -0
- data/lib/templates/front-end/index.html +11 -0
- data/lib/templates/fundamental-ruby/.gitignore +0 -0
- data/lib/templates/fundamental-ruby/.rspec +3 -0
- data/lib/templates/fundamental-ruby/README.md +5 -0
- data/lib/templates/fundamental-ruby/lib/file.rb +0 -0
- data/lib/templates/fundamental-ruby/spec/spec_helper.rb +80 -0
- data/lib/templates/js/README.md +5 -0
- data/lib/templates/js/css/.keep +0 -0
- data/lib/templates/js/images/.keep +0 -0
- data/lib/templates/js/index.html +8 -0
- data/lib/templates/js/js/file.js +0 -0
- data/lib/templates/js/js/jquery-1.8.3.min.js +2 -0
- data/lib/templates/js/requires.yml +6 -0
- data/lib/templates/js/spec/.keep +0 -0
- data/lib/templates/kids/.DS_Store +0 -0
- data/lib/templates/kids/.rspec +3 -0
- data/lib/templates/kids/README.md +14 -0
- data/lib/templates/kids/lib/file.rb +0 -0
- data/lib/templates/kids/spec/spec_helper.rb +80 -0
- data/lib/templates/rack/.gitignore +0 -0
- data/lib/templates/rack/.rspec +3 -0
- data/lib/templates/rack/README.md +5 -0
- data/lib/templates/rack/app/application.rb +7 -0
- data/lib/templates/rack/app/controllers/erb_maker.rb +2 -0
- data/lib/templates/rack/config/environment.rb +8 -0
- data/lib/templates/rack/config.ru +4 -0
- data/lib/templates/rack/lib/templates/my_cool_response.html.erb +5 -0
- data/lib/templates/rack/spec/controllers/01_server_port_spec.rb +11 -0
- data/lib/templates/rack/spec/spec_helper.rb +12 -0
- data/lib/templates/rack/spec/support/an_ok_request.rb +5 -0
- data/lib/templates/rake/.gitignore +0 -0
- data/lib/templates/rake/.rspec +3 -0
- data/lib/templates/rake/README.md +5 -0
- data/lib/templates/rake/Rakefile +6 -0
- data/lib/templates/rake/bin/console +20 -0
- data/lib/templates/rake/config/environment.rb +1 -0
- data/lib/templates/rake/lib/file.rb +0 -0
- data/lib/templates/rake/spec/rakefile_spec.rb +5 -0
- data/lib/templates/rake/spec/spec_helper.rb +9 -0
- data/lib/templates/sinatra-classic/.gitignore +0 -0
- data/lib/templates/sinatra-classic/.rspec +3 -0
- data/lib/templates/sinatra-classic/README.md +5 -0
- data/lib/templates/sinatra-classic/Rakefile +9 -0
- data/lib/templates/sinatra-classic/app.rb +4 -0
- data/lib/templates/sinatra-classic/config/environment.rb +7 -0
- data/lib/templates/sinatra-classic/config.ru +3 -0
- data/lib/templates/sinatra-classic/models/.keep +0 -0
- data/lib/templates/sinatra-classic/public/images/.keep +0 -0
- data/lib/templates/sinatra-classic/public/javascripts/.keep +0 -0
- data/lib/templates/sinatra-classic/public/stylesheets/.keep +0 -0
- data/lib/templates/sinatra-classic/spec/spec_helper.rb +5 -0
- data/lib/templates/sinatra-classic/views/.keep +0 -0
- data/lib/templates/sinatra-mvc/.gitignore +0 -0
- data/lib/templates/sinatra-mvc/.rspec +3 -0
- data/lib/templates/sinatra-mvc/Gemfile +15 -0
- data/lib/templates/sinatra-mvc/README.md +5 -0
- data/lib/templates/sinatra-mvc/Rakefile +10 -0
- data/lib/templates/sinatra-mvc/app/controllers/application_controller.rb +5 -0
- data/lib/templates/sinatra-mvc/app/models/.keep +0 -0
- data/lib/templates/sinatra-mvc/app/views/layout.erb +10 -0
- data/lib/templates/sinatra-mvc/config/environment.rb +11 -0
- data/lib/templates/sinatra-mvc/config.ru +14 -0
- data/lib/templates/sinatra-mvc/db/migrate/.keep +0 -0
- data/lib/templates/sinatra-mvc/db/seeds.rb +1 -0
- data/lib/templates/sinatra-mvc/public/stylesheets/.keep +0 -0
- data/lib/templates/sinatra-mvc/spec/controllers/.keep +0 -0
- data/lib/templates/sinatra-mvc/spec/features/.keep +0 -0
- data/lib/templates/sinatra-mvc/spec/models/.keep +0 -0
- data/lib/templates/sinatra-mvc/spec/spec_helper.rb +33 -0
- data/lib/templates/sql/.gitignore +0 -0
- data/lib/templates/sql/.rspec +3 -0
- data/lib/templates/sql/README.md +5 -0
- data/lib/templates/sql/bin/environment.rb +5 -0
- data/lib/templates/sql/bin/run.rb +6 -0
- data/lib/templates/sql/bin/sql_runner.rb +23 -0
- data/lib/templates/sql/lib/sample.sql +0 -0
- data/lib/templates/sql/spec/spec_helper.rb +84 -0
- data/spec/flatiron-lab-generator_spec.rb +81 -0
- data/spec/spec_helper.rb +12 -0
- metadata +192 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7cd0170eb73ddeb9d7a50161cc2a887c0962bd3b
|
4
|
+
data.tar.gz: 7d985e95eeef7de156b5c87dce9e6e75fd183205
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e84575e41b5d07098e3bee1ec72d4e9d4f4560b6deb00935751f29dbce94afdc3d97632551e9b32e6828458ebab7621831fc1a280bac60a65cdbe5eb07904399
|
7
|
+
data.tar.gz: f756e2306be30f27087fba1652b3dd091ae581d5c736ac459accfc4d68148d08be055cd54eb4936c38429089c58e68b465e7d550495ddfb65de9e22969cefb22
|
data/.gitignore
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
.yardoc
|
6
|
+
Gemfile.lock
|
7
|
+
InstalledFiles
|
8
|
+
_yardoc
|
9
|
+
coverage
|
10
|
+
doc/
|
11
|
+
lib/bundler/man
|
12
|
+
pkg
|
13
|
+
rdoc
|
14
|
+
spec/reports
|
15
|
+
test/tmp
|
16
|
+
test/version_tmp
|
17
|
+
tmp
|
18
|
+
*.bundle
|
19
|
+
*.so
|
20
|
+
*.o
|
21
|
+
*.a
|
22
|
+
mkmf.log
|
data/.rspec
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014-2015 The Flatiron School
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
# Flatiron Lab Generator
|
2
|
+
|
3
|
+
A gem for generating labs in the format/style we use for making labs at the Flatiron School.
|
4
|
+
|
5
|
+
## Dependencies
|
6
|
+
|
7
|
+
Assumes installation of git.
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
Visit [http://gems.flatironschool.com/](http://gems.flatironschool.com/)
|
12
|
+
|
13
|
+
## Usage
|
14
|
+
|
15
|
+
`flatiron-lab-generator <lab-type> <lab-name>`
|
16
|
+
|
17
|
+
### With git
|
18
|
+
|
19
|
+
Execute as `flatiron-lab-generator <lab-type> <lab-name> -g` if you want your template to be created with an initialized git repository.
|
20
|
+
|
21
|
+
## Lab Types
|
22
|
+
|
23
|
+
Lab types have been outlined in the [Curriculum Style Guide](https://github.com/learn-co-curriculum/curriculum-style-guide/blob/master/lab-templates.md)
|
24
|
+
|
25
|
+
These are the Lab Types:
|
26
|
+
|
27
|
+
* fundamental-ruby
|
28
|
+
* command-line
|
29
|
+
* SQL
|
30
|
+
* activerecord
|
31
|
+
* rake
|
32
|
+
* rack
|
33
|
+
* sinatra-classic
|
34
|
+
* sinatra-mvc
|
35
|
+
* js
|
36
|
+
* front-end
|
37
|
+
* kids
|
38
|
+
|
39
|
+
We have the [flatiron-rails gem](https://github.com/flatiron-school/flatiron-rails) for generating Rails labs.
|
40
|
+
|
41
|
+
## Lab Name
|
42
|
+
|
43
|
+
The lab-name refers to the name of the lab (example: Sinatra-ORM-Halloween).
|
44
|
+
|
45
|
+
## Reposit
|
46
|
+
|
47
|
+
Logan made an awesome gem that creates a remote git repository from the command line. It's called [Reposit](https://github.com/loganhasson/reposit). After installing that and following the setup steps, run `reposit <lab name> -o learn-co-curriculum`.
|
48
|
+
|
49
|
+
## Contributing
|
50
|
+
|
51
|
+
1. Clone
|
52
|
+
2. Checkout a new feature branch
|
53
|
+
3. Be sure to run the tests
|
54
|
+
4. Open PR
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/bin/learn-generate
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'learn_generate'
|
4
|
+
|
5
|
+
|
6
|
+
options = {}
|
7
|
+
|
8
|
+
OptionParser.new do |opts|
|
9
|
+
opts.on('--list', 'List known templates') do |l|
|
10
|
+
options[:list] = true
|
11
|
+
end
|
12
|
+
|
13
|
+
opts.on('--internet', 'Perform actions with an internet connection') do |i|
|
14
|
+
options[:internet] = true
|
15
|
+
end
|
16
|
+
end.parse!
|
17
|
+
|
18
|
+
template_loader = LearnGenerate::TemplateLoader.new(options[:internet])
|
19
|
+
known_templates = template_loader.templates
|
20
|
+
templates_list = template_loader.printable_list
|
21
|
+
|
22
|
+
my_banner = <<-EOS
|
23
|
+
|
24
|
+
Usage: learn generate <lab-name> -t <template-name>
|
25
|
+
|
26
|
+
Available templates:
|
27
|
+
|
28
|
+
#{templates_list}
|
29
|
+
EOS
|
30
|
+
|
31
|
+
if options[:list]
|
32
|
+
puts <<-EOS
|
33
|
+
Available templates:
|
34
|
+
|
35
|
+
#{templates_list}
|
36
|
+
EOS
|
37
|
+
elsif !ARGV[0] || !ARGV[1]
|
38
|
+
puts my_banner
|
39
|
+
elsif !known_templates.include?(ARGV[0])
|
40
|
+
puts my_banner
|
41
|
+
else
|
42
|
+
LearnGenerate::TemplateMaker.run(ARGV[0], ARGV[1])
|
43
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'learn_generate/version.rb'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "learn-generate"
|
8
|
+
spec.version = LearnGenerate::VERSION
|
9
|
+
spec.authors = ["Flatiron School"]
|
10
|
+
spec.email = ["learn@flatironschool.com"]
|
11
|
+
spec.summary = %q{A lab generator}
|
12
|
+
spec.description = %q{Generates labs for Learn.co based on a set of lab templates}
|
13
|
+
spec.homepage = "https://learn.co"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib", "bin"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.6"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module LearnGenerate
|
2
|
+
class FileFinder
|
3
|
+
def self.location_to_dir(dir_name)
|
4
|
+
new.location_to_dir(dir_name)
|
5
|
+
end
|
6
|
+
|
7
|
+
def location_to_dir(dir_name)
|
8
|
+
File.join(File.dirname(File.expand_path(__FILE__)), "#{dir_name}")
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.location_to_file(file_name)
|
12
|
+
new.location_to_file(file_name)
|
13
|
+
end
|
14
|
+
|
15
|
+
def location_to_file(file_name)
|
16
|
+
File.join(File.dirname(File.expand_path(__FILE__)))
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module LearnGenerate
|
2
|
+
module Helpers
|
3
|
+
module GemfileHelper
|
4
|
+
def edit_mvc_gemfile
|
5
|
+
File.open("Gemfile", 'a') do |f|
|
6
|
+
f << "\ngem 'sinatra'
|
7
|
+
gem 'activerecord', :require => 'active_record'
|
8
|
+
gem 'sinatra-activerecord', :require => 'sinatra/activerecord'
|
9
|
+
gem 'rake'
|
10
|
+
gem 'require_all'
|
11
|
+
gem 'sqlite3'
|
12
|
+
gem 'thin'
|
13
|
+
gem 'shotgun'
|
14
|
+
gem 'pry'
|
15
|
+
\ngroup :test do
|
16
|
+
gem 'rspec'
|
17
|
+
gem 'capybara'
|
18
|
+
gem 'rack-test'
|
19
|
+
gem 'database_cleaner', git: 'https://github.com/bmabey/database_cleaner.git'
|
20
|
+
end"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def edit_classic_gemfile
|
25
|
+
File.open("Gemfile", 'a') do |f|
|
26
|
+
f << "\ngem 'sinatra'
|
27
|
+
gem 'rake'
|
28
|
+
gem 'thin'
|
29
|
+
gem 'shotgun'
|
30
|
+
gem 'pry'
|
31
|
+
gem 'require_all'
|
32
|
+
\ngroup :test do
|
33
|
+
gem 'rspec'
|
34
|
+
gem 'capybara'
|
35
|
+
gem 'rack-test'
|
36
|
+
end"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def edit_gemfile
|
41
|
+
File.open("Gemfile", 'a') do |f|
|
42
|
+
f << "\ngem 'rspec'
|
43
|
+
gem 'pry'"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module LearnGenerate
|
2
|
+
module Helpers
|
3
|
+
module TemplateHelper
|
4
|
+
def fundamental_helper
|
5
|
+
change_filename('lib/', 'file.rb', 'rb')
|
6
|
+
edit_file('spec/spec_helper.rb', formatted_lab_name)
|
7
|
+
edit_gemfile
|
8
|
+
end
|
9
|
+
|
10
|
+
def command_line_helper
|
11
|
+
edit_file("bin/runner.rb", formatted_lab_name)
|
12
|
+
edit_file("spec/spec_helper.rb", formatted_lab_name)
|
13
|
+
edit_file("lib/environment.rb", formatted_lab_name)
|
14
|
+
FileUtils.mv("lib/lab-name", "lib/#{lab_name}")
|
15
|
+
edit_gemfile
|
16
|
+
end
|
17
|
+
|
18
|
+
def sql_helper
|
19
|
+
change_filename('lib/', 'sample.sql', 'sql')
|
20
|
+
end
|
21
|
+
|
22
|
+
def rake_helper
|
23
|
+
change_filename('lib/', 'file.rb', 'rb')
|
24
|
+
edit_file("config/environment.rb", formatted_lab_name)
|
25
|
+
edit_gemfile
|
26
|
+
end
|
27
|
+
|
28
|
+
def sinatra_mvc_helper
|
29
|
+
edit_mvc_gemfile
|
30
|
+
end
|
31
|
+
|
32
|
+
def sinatra_classic_helper
|
33
|
+
edit_classic_gemfile
|
34
|
+
end
|
35
|
+
|
36
|
+
def js_helper
|
37
|
+
change_filename('js/', 'file.js', 'js')
|
38
|
+
end
|
39
|
+
|
40
|
+
def fe_helper
|
41
|
+
edit_file('index.html', formatted_name)
|
42
|
+
end
|
43
|
+
|
44
|
+
def kids_helper
|
45
|
+
change_filename('lib/', 'file.rb', 'rb')
|
46
|
+
edit_file('spec/spec_helper.rb', formatted_lab_name)
|
47
|
+
edit_spec("spec/#{formatted_lab_name}_spec.rb")
|
48
|
+
edit_gemfile
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
module LearnGenerate
|
2
|
+
class TemplateLoader
|
3
|
+
attr_reader :internet, :local_path, :local_dir
|
4
|
+
attr_accessor :templates
|
5
|
+
|
6
|
+
BASE_TEMPLATES = [
|
7
|
+
'fundamental-ruby',
|
8
|
+
'command-line',
|
9
|
+
'sql',
|
10
|
+
'activerecord',
|
11
|
+
'rake',
|
12
|
+
'erb-static-site',
|
13
|
+
'rack',
|
14
|
+
'sinatra-classic',
|
15
|
+
'sinatra-mvc',
|
16
|
+
'js',
|
17
|
+
'front-end',
|
18
|
+
'kids'
|
19
|
+
]
|
20
|
+
|
21
|
+
def initialize(internet)
|
22
|
+
@internet = internet
|
23
|
+
@local_dir = File.expand_path('~/.learn-generate')
|
24
|
+
@local_path = File.expand_path('~/.learn-generate/templates')
|
25
|
+
|
26
|
+
set_templates
|
27
|
+
end
|
28
|
+
|
29
|
+
def printable_list
|
30
|
+
templates.map.with_index do |template, index|
|
31
|
+
"#{index+1}. #{template}"
|
32
|
+
end.join("\n ")
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def set_templates
|
38
|
+
if internet
|
39
|
+
if has_local_copy?
|
40
|
+
get_and_update_templates
|
41
|
+
else
|
42
|
+
prep_local_copy
|
43
|
+
get_and_update_templates(silent: true)
|
44
|
+
end
|
45
|
+
elsif has_local_copy?
|
46
|
+
update_local_templates
|
47
|
+
else
|
48
|
+
set_base_templates
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def prep_local_copy
|
53
|
+
create_local_dir
|
54
|
+
clone_templates_repo
|
55
|
+
end
|
56
|
+
|
57
|
+
def create_local_dir
|
58
|
+
FileUtils.mkdir_p(local_dir)
|
59
|
+
end
|
60
|
+
|
61
|
+
def clone_templates_repo
|
62
|
+
puts 'Pulling list of known templates...'
|
63
|
+
system("cd #{local_dir} && git clone https://github.com/learn-co-curriculum/learn-generate-templates.git templates")
|
64
|
+
end
|
65
|
+
|
66
|
+
def get_and_update_templates(silent: false)
|
67
|
+
get_latest_templates(silent: silent)
|
68
|
+
update_local_templates
|
69
|
+
end
|
70
|
+
|
71
|
+
def get_latest_templates(silent: false)
|
72
|
+
puts 'Updating templates...' if !silent
|
73
|
+
system("cd #{local_path} && git pull --rebase --quiet")
|
74
|
+
end
|
75
|
+
|
76
|
+
def update_local_templates
|
77
|
+
self.templates = Dir.entries("#{local_path}/templates").reject {|f| f.start_with?('.') || !File.directory?("#{local_path}/templates/#{f}")}
|
78
|
+
end
|
79
|
+
|
80
|
+
def set_base_templates
|
81
|
+
self.templates = BASE_TEMPLATES
|
82
|
+
end
|
83
|
+
|
84
|
+
def has_local_copy?
|
85
|
+
has_templates_dir? && templates_dir_is_git_repo?
|
86
|
+
end
|
87
|
+
|
88
|
+
def has_templates_dir?
|
89
|
+
File.exists?(local_path) && File.directory?(local_path)
|
90
|
+
end
|
91
|
+
|
92
|
+
def templates_dir_is_git_repo?
|
93
|
+
File.exists?("#{local_path}/.git") && File.directory?("#{local_path}/.git")
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
module LearnGenerate
|
2
|
+
class TemplateMaker
|
3
|
+
include LearnGenerate::Helpers::TemplateHelper
|
4
|
+
include LearnGenerate::Helpers::GemfileHelper
|
5
|
+
include LearnGenerate::Helpers::DotLearnHelper
|
6
|
+
|
7
|
+
attr_reader :template_type, :lab_name, :has_templates_dir, :full_templates_path
|
8
|
+
|
9
|
+
def initialize(template_type, lab_name)
|
10
|
+
@template_type = template_type
|
11
|
+
@lab_name = lab_name
|
12
|
+
templates_path = File.expand_path('~/.learn-generate/templates')
|
13
|
+
templates_git_path = File.expand_path('~/.learn-generate/templates/.git')
|
14
|
+
@has_templates_dir = File.exists?(templates_path) && File.directory?(templates_path) && File.exists?(templates_git_path) && File.directory?(templates_git_path)
|
15
|
+
@full_templates_path = templates_path + '/templates'
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.run(template_type, lab_name)
|
19
|
+
new(template_type, lab_name).create
|
20
|
+
end
|
21
|
+
|
22
|
+
def create
|
23
|
+
copy
|
24
|
+
name_lab
|
25
|
+
FileUtils.cd("#{lab_name}") do
|
26
|
+
touch_spec unless template_type == "js" || template_type == "sinatra-mvc" || template_type == "front-end"
|
27
|
+
touch_dot_learn
|
28
|
+
build_dot_learn
|
29
|
+
git_init
|
30
|
+
bundle_init unless template_type == "js" || template_type == "front-end"
|
31
|
+
edit_readme
|
32
|
+
fundamental_helper if template_type == "fundamental-ruby"
|
33
|
+
command_line_helper if template_type == "command-line"
|
34
|
+
sql_helper if template_type == "SQL"
|
35
|
+
rake_helper if template_type == "rake"
|
36
|
+
sinatra_mvc_helper if template_type == "sinatra-mvc"
|
37
|
+
sinatra_classic_helper if template_type == "sinatra-classic"
|
38
|
+
js_helper if template_type == "js"
|
39
|
+
fe_helper if template_type == "front-end"
|
40
|
+
kids_helper if template_type == "kids"
|
41
|
+
end
|
42
|
+
success_message
|
43
|
+
end
|
44
|
+
|
45
|
+
def copy
|
46
|
+
if has_templates_dir
|
47
|
+
FileUtils.cp_r("#{full_templates_path}/#{template_type}", FileUtils.pwd)
|
48
|
+
else
|
49
|
+
FileUtils.cp_r(LearnGenerate::FileFinder.location_to_dir("../templates/#{template_type}"), FileUtils.pwd)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def name_lab
|
54
|
+
FileUtils.mv(template_type, lab_name)
|
55
|
+
end
|
56
|
+
|
57
|
+
def git_init
|
58
|
+
`git init`
|
59
|
+
end
|
60
|
+
|
61
|
+
def edit_readme
|
62
|
+
File.open("README.md", 'a') do |f|
|
63
|
+
f << "\n# #{formatted_name}"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def formatted_name
|
68
|
+
lab_name.gsub('-', ' ').split.map(&:capitalize).join(' ')
|
69
|
+
end
|
70
|
+
|
71
|
+
def formatted_lab_name
|
72
|
+
lab_name.gsub('-', '_')
|
73
|
+
end
|
74
|
+
|
75
|
+
def bundle_init
|
76
|
+
`bundle init`
|
77
|
+
end
|
78
|
+
|
79
|
+
def touch_spec
|
80
|
+
FileUtils.cd("spec/") do
|
81
|
+
`touch #{formatted_lab_name}_spec.rb`
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
def touch_dot_learn
|
86
|
+
`touch .learn`
|
87
|
+
end
|
88
|
+
|
89
|
+
def change_filename(path, filename, extension)
|
90
|
+
FileUtils.cd(path) do
|
91
|
+
File.rename(filename, "#{formatted_lab_name}.#{extension}")
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def edit_file(file, text)
|
96
|
+
new_rr = IO.read(file) % { file_name: text }
|
97
|
+
File.open(file, 'w') { |f| f.write(new_rr) }
|
98
|
+
end
|
99
|
+
|
100
|
+
def edit_spec(file)
|
101
|
+
File.open(file, 'w') { |f| f.write("require_relative './spec_helper'") }
|
102
|
+
end
|
103
|
+
|
104
|
+
def success_message
|
105
|
+
puts "\n#{formatted_name} Lab successfully created in #{FileUtils.pwd}\n"
|
106
|
+
FileUtils.cd("#{lab_name}") do
|
107
|
+
tree_output = `which tree 2>/dev/null`
|
108
|
+
|
109
|
+
if !tree_output.empty?
|
110
|
+
puts "#{`tree`}"
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'optparse'
|
3
|
+
|
4
|
+
require 'learn_generate/version.rb'
|
5
|
+
require 'learn_generate/helpers/template-helper'
|
6
|
+
require 'learn_generate/helpers/gemfile-helper'
|
7
|
+
require 'learn_generate/helpers/dot-learn-helper'
|
8
|
+
require 'learn_generate/file_finder'
|
9
|
+
require 'learn_generate/template_loader'
|
10
|
+
require 'learn_generate/template_maker'
|
File without changes
|
@@ -0,0 +1,22 @@
|
|
1
|
+
task :environment do
|
2
|
+
ENV["ACTIVE_RECORD_ENV"] ||= "development"
|
3
|
+
require_relative './config/environment'
|
4
|
+
end
|
5
|
+
|
6
|
+
namespace :db do
|
7
|
+
task :migrate => :environment do
|
8
|
+
DB.tables.each do |table|
|
9
|
+
DB.execute("DROP TABLE #{table}")
|
10
|
+
end
|
11
|
+
|
12
|
+
Dir[File.join(File.dirname(__FILE__), "db/migrations", "*.rb")].each do |f|
|
13
|
+
require f
|
14
|
+
migration = Kernel.const_get(f.split("/").last.split(".rb").first.gsub(/\d+/, "").split("_").collect{|w| w.strip.capitalize}.join())
|
15
|
+
migration.migrate(:up)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
task :console => "db:migrate" do
|
21
|
+
Pry.start
|
22
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
Bundler.require
|
3
|
+
|
4
|
+
require 'rake'
|
5
|
+
require 'active_record'
|
6
|
+
require 'yaml/store'
|
7
|
+
require 'ostruct'
|
8
|
+
|
9
|
+
DBNAME = "set_db_name"
|
10
|
+
|
11
|
+
Dir[File.join(File.dirname(__FILE__), "../app/models", "*.rb")].each {|f| require f}
|
12
|
+
Dir[File.join(File.dirname(__FILE__), "../lib/support", "*.rb")].each {|f| require f}
|
13
|
+
|
14
|
+
DBRegistry[ENV["ACTIVE_RECORD_ENV"]].connect!
|
15
|
+
DB = ActiveRecord::Base.connection
|
16
|
+
|
17
|
+
if ENV["ACTIVE_RECORD_ENV"] == "test"
|
18
|
+
ActiveRecord::Migration.verbose = false
|
19
|
+
end
|
20
|
+
|
21
|
+
RAKE_APP ||= begin
|
22
|
+
app = Rake.application
|
23
|
+
app.init
|
24
|
+
app.load_rakefile
|
25
|
+
app
|
26
|
+
end
|
File without changes
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class ConnectionAdapter
|
2
|
+
attr_reader :adapter, :database
|
3
|
+
|
4
|
+
def initialize(database, adapter="sqlite3")
|
5
|
+
@adapter = adapter
|
6
|
+
@database = database
|
7
|
+
end
|
8
|
+
|
9
|
+
def connect!
|
10
|
+
ActiveRecord::Base.establish_connection(
|
11
|
+
:adapter => self.adapter,
|
12
|
+
:database => self.database
|
13
|
+
)
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
ENV["ACTIVE_RECORD_ENV"] = "test"
|
2
|
+
|
3
|
+
require_relative '../config/environment'
|
4
|
+
|
5
|
+
RSpec.configure do |config|
|
6
|
+
|
7
|
+
config.before do
|
8
|
+
run_rake_task('db:migrate')
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def run_rake_task(task)
|
13
|
+
RAKE_APP[task].invoke
|
14
|
+
if task == 'db:migrate'
|
15
|
+
RAKE_APP[task].reenable
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def __
|
20
|
+
raise "Replace __ with test code."
|
21
|
+
end
|
File without changes
|