sinatra_generator 0.0.2 → 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.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/Rakefile +6 -0
- data/bin/sinatra +10 -0
- data/lib/sinatra_generator/cli.rb +12 -0
- data/lib/sinatra_generator/generator.rb +67 -0
- data/lib/sinatra_generator/templates/Gemfile +3 -0
- data/lib/sinatra_generator/templates/Procfile +1 -0
- data/lib/sinatra_generator/templates/config.ru +11 -0
- data/lib/sinatra_generator/templates/index.erb +1 -0
- data/lib/sinatra_generator/templates/layout.erb +11 -0
- data/lib/sinatra_generator/templates/main.rb +23 -0
- data/lib/sinatra_generator/templates/public/javascripts/application.js +0 -0
- data/lib/sinatra_generator/templates/public/stylesheets/main.css +0 -0
- data/lib/sinatra_generator/version.rb +1 -1
- data/lib/sinatra_generator.rb +106 -38
- data/sinatra_generator.gemspec +6 -2
- data/test/cli_test.rb +61 -0
- data/test/test_helper.rb +8 -0
- metadata +65 -9
- data/bin/sinatragen +0 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fb29a37ff62006294c417ae6279632dde6732e35
|
4
|
+
data.tar.gz: fc8616025a0b1029543f30ce93e4b0a9f60e5967
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ad1b9af34a0f7b28820ebd5aa8e251a909ab20c3a0d2101722bc4fc5ab7e4dfa08dda42ea1871747c791b532801f548fd3ddcc1195431a36b4d84b3557497a4a
|
7
|
+
data.tar.gz: 723d08a3629ecbfd93dd21e01ff6e30658461549a506fffeada2c20a2ef5f261e02dcaf57cae5c9ecf81896149f7d04eae0e305dcf73d0e777b824a846f0660f
|
data/README.md
CHANGED
data/Rakefile
CHANGED
data/bin/sinatra
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'thor'
|
2
|
+
|
3
|
+
module SinatraGenerator
|
4
|
+
class CLI < Thor
|
5
|
+
|
6
|
+
# register(class_name, subcommand_alias, usage_list_string, description_string)
|
7
|
+
|
8
|
+
register SinatraGenerator::Generator, "new", "new [APP_NAME]", "Generate a basic hello world app", options
|
9
|
+
tasks["new"].options = SinatraGenerator::Generator.class_options
|
10
|
+
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'thor/group'
|
2
|
+
|
3
|
+
module SinatraGenerator
|
4
|
+
class Generator < Thor::Group
|
5
|
+
include Thor::Actions
|
6
|
+
|
7
|
+
desc "Generate a basic hello world application"
|
8
|
+
|
9
|
+
argument :folder_name, :type => :string
|
10
|
+
|
11
|
+
class_option :modular, aliases: "-m", desc: "modular style. Inherits from Sinatra::Base"
|
12
|
+
class_option :views, aliases: "-v", desc: "include views folder, index.erb and layout.erb"
|
13
|
+
class_option :assets, aliases: "-a", desc: "include public, javascripts and stylesheets folder"
|
14
|
+
class_option :procfile, aliases: "-p", desc: "include Procfile"
|
15
|
+
|
16
|
+
def self.source_root
|
17
|
+
File.dirname(__FILE__)
|
18
|
+
end
|
19
|
+
|
20
|
+
def create_root
|
21
|
+
empty_directory folder_name
|
22
|
+
#FileUtils.cd destination_root
|
23
|
+
end
|
24
|
+
|
25
|
+
def main_rb
|
26
|
+
template "#{Generator.source_root}/templates/main.rb", "#{folder_name}/main.rb"
|
27
|
+
end
|
28
|
+
|
29
|
+
def gemfile
|
30
|
+
template "#{Generator.source_root}/templates/Gemfile", "#{folder_name}/Gemfile"
|
31
|
+
end
|
32
|
+
|
33
|
+
def config_ru
|
34
|
+
template "#{Generator.source_root}/templates/config.ru", "#{folder_name}/config.ru"
|
35
|
+
end
|
36
|
+
|
37
|
+
def procfile
|
38
|
+
template "#{Generator.source_root}/templates/Procfile", "#{folder_name}/Procfile" if options[:procfile]
|
39
|
+
end
|
40
|
+
|
41
|
+
def views
|
42
|
+
if options[:views]
|
43
|
+
inside folder_name do
|
44
|
+
|
45
|
+
empty_directory 'views'
|
46
|
+
|
47
|
+
inside 'views' do
|
48
|
+
copy_file "#{Generator.source_root}/templates/layout.erb", "layout.erb"
|
49
|
+
copy_file "#{Generator.source_root}/templates/index.erb", "index.erb"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def public
|
56
|
+
if options[:assets]
|
57
|
+
directory "#{Generator.source_root}/templates/public", "#{folder_name}/public"
|
58
|
+
|
59
|
+
if options[:views]
|
60
|
+
insert_into_file "#{folder_name}/views/layout.erb", '<link rel="stylesheet" href="/stylesheets/main.css">',
|
61
|
+
:after => '<title>Hello World</title>'
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
web: bundle exec rackup config.ru -p $PORT
|
@@ -0,0 +1 @@
|
|
1
|
+
<h1>hello world</h1>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<% if options[:modular] %>
|
2
|
+
|
3
|
+
require 'sinatra/base'
|
4
|
+
|
5
|
+
class HelloWorld < Sinatra::Base
|
6
|
+
get '/' do
|
7
|
+
'hello world'
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
<% else %>
|
12
|
+
|
13
|
+
require 'sinatra'
|
14
|
+
|
15
|
+
get '/' do
|
16
|
+
'hello world'
|
17
|
+
end
|
18
|
+
|
19
|
+
<% end %>
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
|
File without changes
|
File without changes
|
data/lib/sinatra_generator.rb
CHANGED
@@ -1,53 +1,121 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require_relative "sinatra_generator/version"
|
2
|
+
require_relative "sinatra_generator/generator"
|
3
|
+
require_relative "sinatra_generator/cli"
|
4
|
+
|
5
|
+
#require 'fileutils'
|
3
6
|
|
4
7
|
module SinatraGenerator
|
5
|
-
|
8
|
+
end
|
6
9
|
|
7
|
-
MAIN_RB = %{require 'sinatra'
|
8
10
|
|
9
|
-
|
10
|
-
erb :index
|
11
|
-
end
|
12
|
-
}
|
11
|
+
# MAIN_RB = %{require 'sinatra'
|
13
12
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
<title>Hello World</title>
|
19
|
-
</head>
|
20
|
-
<body>
|
13
|
+
# get '/' do
|
14
|
+
# 'hello world'
|
15
|
+
# end
|
16
|
+
# }
|
21
17
|
|
22
|
-
|
18
|
+
# MAIN_RB_MODULAR = %{require 'sinatra/base'
|
23
19
|
|
24
|
-
|
25
|
-
}
|
20
|
+
# class HelloWorld < Sinatra::Base
|
26
21
|
|
27
|
-
|
28
|
-
|
22
|
+
# get '/' do
|
23
|
+
# 'hello world'
|
24
|
+
# end
|
29
25
|
|
26
|
+
# end
|
27
|
+
# }
|
30
28
|
|
31
|
-
def new_app(folder_name)
|
32
|
-
FileUtils.mkdir folder_name
|
33
|
-
FileUtils.chdir folder_name do
|
34
29
|
|
35
|
-
|
30
|
+
# LAYOUT_ERB = %{<!doctype html>
|
31
|
+
# <html lang="en">
|
32
|
+
# <head>
|
33
|
+
# <meta charset="UTF-8">
|
34
|
+
# <title>Hello World</title>
|
35
|
+
# </head>
|
36
|
+
# <body>
|
36
37
|
|
37
|
-
|
38
|
-
FileUtils.mkdir 'public'
|
38
|
+
# <%= yield %>
|
39
39
|
|
40
|
-
|
41
|
-
|
42
|
-
FileUtils.mkdir 'javascripts'
|
43
|
-
end
|
40
|
+
# </body>
|
41
|
+
# }
|
44
42
|
|
45
|
-
|
46
|
-
|
47
|
-
File.write 'index.erb', INDEX_ERB
|
48
|
-
end
|
49
|
-
end
|
43
|
+
# INDEX_ERB = %{<h1>hello world</h1>
|
44
|
+
# }
|
50
45
|
|
51
|
-
|
52
|
-
|
53
|
-
|
46
|
+
# CONFIG_RU_MODULAR = %{require 'bundler'
|
47
|
+
# Bundler.require
|
48
|
+
|
49
|
+
# require './main'
|
50
|
+
# run HelloWorld
|
51
|
+
# }
|
52
|
+
|
53
|
+
# CONFIG_RU = %{require './main'
|
54
|
+
# run Sinatra::Application
|
55
|
+
# }
|
56
|
+
|
57
|
+
# GEMFILE = %{source "https://rubygems.org"
|
58
|
+
|
59
|
+
# gem 'sinatra'
|
60
|
+
# }
|
61
|
+
|
62
|
+
# PROCFILE = %{web: bundle exec rackup config.ru -p $PORT
|
63
|
+
# }
|
64
|
+
|
65
|
+
# HOME_RC_FILE = "~/.sinatra_generator.json"
|
66
|
+
|
67
|
+
# def initialize(folder_name)
|
68
|
+
# @folder_name = folder_name
|
69
|
+
# config = load_config
|
70
|
+
# @css_dir = config['css_dir'] || 'stylesheets'
|
71
|
+
# @js_dir = config['js_dir'] || 'javascripts'
|
72
|
+
# end
|
73
|
+
|
74
|
+
# def load_config
|
75
|
+
# config = JSON File.read(File.expand_path(HOME_RC_FILE))
|
76
|
+
# rescue
|
77
|
+
# config = {}
|
78
|
+
# end
|
79
|
+
|
80
|
+
# def generate(options = {})
|
81
|
+
|
82
|
+
# begin
|
83
|
+
# FileUtils.mkdir folder_name
|
84
|
+
# rescue StandardError => e
|
85
|
+
# return "Error: #{e.message}"
|
86
|
+
# end
|
87
|
+
|
88
|
+
# FileUtils.chdir folder_name do
|
89
|
+
|
90
|
+
# if options[:modular]
|
91
|
+
# File.write 'config.ru', CONFIG_RU_MODULAR
|
92
|
+
# File.write 'main.rb', MAIN_RB_MODULAR
|
93
|
+
# else
|
94
|
+
# File.write 'config.ru', CONFIG_RU
|
95
|
+
# File.write 'main.rb', MAIN_RB
|
96
|
+
# end
|
97
|
+
|
98
|
+
# File.write 'Gemfile', GEMFILE
|
99
|
+
|
100
|
+
# File.write 'Procfile', PROCFILE if options[:procfile]
|
101
|
+
|
102
|
+
# FileUtils.mkdir 'public'
|
103
|
+
# FileUtils.chdir 'public' do
|
104
|
+
# FileUtils.mkdir css_dir
|
105
|
+
# FileUtils.mkdir js_dir
|
106
|
+
# end
|
107
|
+
|
108
|
+
# if options[:views]
|
109
|
+
# FileUtils.mkdir 'views'
|
110
|
+
# FileUtils.chdir 'views' do
|
111
|
+
# File.write 'layout.erb', LAYOUT_ERB
|
112
|
+
# File.write 'index.erb', INDEX_ERB
|
113
|
+
# end
|
114
|
+
# end
|
115
|
+
|
116
|
+
# end
|
117
|
+
# "app generated in #{folder_name}/"
|
118
|
+
# end
|
119
|
+
# end
|
120
|
+
|
121
|
+
# end
|
data/sinatra_generator.gemspec
CHANGED
@@ -14,10 +14,14 @@ Gem::Specification.new do |spec|
|
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
16
|
spec.files = `git ls-files -z`.split("\x0")
|
17
|
-
spec.executables = ['
|
17
|
+
spec.executables = ['sinatra']
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_development_dependency "bundler", "~> 1.6"
|
22
|
-
spec.add_development_dependency "rake"
|
22
|
+
spec.add_development_dependency "rake", "~> 0.9"
|
23
|
+
spec.add_development_dependency "minitest", "~> 5.3"
|
24
|
+
spec.add_development_dependency 'simplecov', '~> 0.7'
|
25
|
+
|
26
|
+
spec.add_runtime_dependency 'thor', '~> 0.19'
|
23
27
|
end
|
data/test/cli_test.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class CLI < MiniTest::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@templates_path = "#{File.dirname(__FILE__)}/../lib/sinatra_generator/templates"
|
7
|
+
@tmp_dir = Dir.mktmpdir
|
8
|
+
Dir.chdir @tmp_dir
|
9
|
+
end
|
10
|
+
|
11
|
+
def teardown
|
12
|
+
Dir.chdir('..')
|
13
|
+
FileUtils.remove_entry @tmp_dir
|
14
|
+
end
|
15
|
+
|
16
|
+
# sinatra new blog
|
17
|
+
def test_command_new
|
18
|
+
SinatraGenerator::CLI.start ['new','blog']
|
19
|
+
assert File.directory? "blog"
|
20
|
+
|
21
|
+
Dir.chdir 'blog' do
|
22
|
+
assert File.exist?('main.rb'), 'main.rb not found'
|
23
|
+
assert File.exist?('Gemfile'), 'Gemfile not found'
|
24
|
+
assert File.exist?('config.ru'), 'config.ru not found'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# sinatra new blog -p
|
29
|
+
def test_option_profile
|
30
|
+
SinatraGenerator::CLI.start ['new','blog', '-p']
|
31
|
+
Dir.chdir 'blog' do
|
32
|
+
assert_equal File.read('Procfile'), File.read("#{@templates_path}/Procfile")
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# sinatra new blog -v
|
37
|
+
def test_option_views
|
38
|
+
SinatraGenerator::CLI.start ['new','blog', '-v']
|
39
|
+
Dir.chdir 'blog' do
|
40
|
+
assert File.directory?('views'), 'views not found'
|
41
|
+
Dir.chdir 'views' do
|
42
|
+
assert_equal File.read('index.erb'), File.read("#{@templates_path}/index.erb")
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# sinatra new blog -av
|
48
|
+
def test_option_assets_with_views
|
49
|
+
SinatraGenerator::CLI.start ['new','blog', '-av']
|
50
|
+
Dir.chdir 'blog' do
|
51
|
+
assert File.directory?('public'), 'public not found'
|
52
|
+
assert File.directory?('views'), 'views not found'
|
53
|
+
|
54
|
+
Dir.chdir 'views' do
|
55
|
+
assert_match /<link rel="stylesheet" href="\/stylesheets\/main.css">/, File.read('layout.erb')
|
56
|
+
# assert_includes File.read('layout.erb'), '<link rel="stylesheet" href="/stylesheets/main.css">'
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
data/test/test_helper.rb
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sinatra_generator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Tsui
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-07-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -28,22 +28,64 @@ dependencies:
|
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.9'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.9'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '5.3'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
32
53
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
54
|
+
version: '5.3'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: simplecov
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0.7'
|
34
62
|
type: :development
|
35
63
|
prerelease: false
|
36
64
|
version_requirements: !ruby/object:Gem::Requirement
|
37
65
|
requirements:
|
38
|
-
- -
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0.7'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: thor
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.19'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
39
81
|
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
82
|
+
version: '0.19'
|
41
83
|
description: Intended as a quick demo on how to make a ruby gem. Generate a simple
|
42
84
|
hello world sinatra app
|
43
85
|
email:
|
44
86
|
- tsui.daniel@gmail.com
|
45
87
|
executables:
|
46
|
-
-
|
88
|
+
- sinatra
|
47
89
|
extensions: []
|
48
90
|
extra_rdoc_files: []
|
49
91
|
files:
|
@@ -52,10 +94,22 @@ files:
|
|
52
94
|
- LICENSE.txt
|
53
95
|
- README.md
|
54
96
|
- Rakefile
|
55
|
-
- bin/
|
97
|
+
- bin/sinatra
|
56
98
|
- lib/sinatra_generator.rb
|
99
|
+
- lib/sinatra_generator/cli.rb
|
100
|
+
- lib/sinatra_generator/generator.rb
|
101
|
+
- lib/sinatra_generator/templates/Gemfile
|
102
|
+
- lib/sinatra_generator/templates/Procfile
|
103
|
+
- lib/sinatra_generator/templates/config.ru
|
104
|
+
- lib/sinatra_generator/templates/index.erb
|
105
|
+
- lib/sinatra_generator/templates/layout.erb
|
106
|
+
- lib/sinatra_generator/templates/main.rb
|
107
|
+
- lib/sinatra_generator/templates/public/javascripts/application.js
|
108
|
+
- lib/sinatra_generator/templates/public/stylesheets/main.css
|
57
109
|
- lib/sinatra_generator/version.rb
|
58
110
|
- sinatra_generator.gemspec
|
111
|
+
- test/cli_test.rb
|
112
|
+
- test/test_helper.rb
|
59
113
|
homepage: ''
|
60
114
|
licenses:
|
61
115
|
- MIT
|
@@ -80,4 +134,6 @@ rubygems_version: 2.2.2
|
|
80
134
|
signing_key:
|
81
135
|
specification_version: 4
|
82
136
|
summary: Generate a simple hello world sinatra app
|
83
|
-
test_files:
|
137
|
+
test_files:
|
138
|
+
- test/cli_test.rb
|
139
|
+
- test/test_helper.rb
|