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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 721ab02964e1d2364eba628fcfbbddfa5d4b6c7f
4
- data.tar.gz: d816c5b87f62cc18d95af24baa40d3b1340bc390
3
+ metadata.gz: fb29a37ff62006294c417ae6279632dde6732e35
4
+ data.tar.gz: fc8616025a0b1029543f30ce93e4b0a9f60e5967
5
5
  SHA512:
6
- metadata.gz: 36d92f03b191e9c8dd81c1c44d33fb05bf3ad2b8588af6af970192a67a2c5f0b402290f62920d8cafd6072ef8e298771065cf04145ca24f46aa54b913efb69cd
7
- data.tar.gz: 75b08c6a720730f1a7d02777d0db1f7ea248d629167dde1e86fd2a64936eaf3d563e628d85144b20fff546e518576f12928d0b51221801a9eb7c3d35d95524d7
6
+ metadata.gz: ad1b9af34a0f7b28820ebd5aa8e251a909ab20c3a0d2101722bc4fc5ab7e4dfa08dda42ea1871747c791b532801f548fd3ddcc1195431a36b4d84b3557497a4a
7
+ data.tar.gz: 723d08a3629ecbfd93dd21e01ff6e30658461549a506fffeada2c20a2ef5f261e02dcaf57cae5c9ecf81896149f7d04eae0e305dcf73d0e777b824a846f0660f
data/README.md CHANGED
@@ -12,6 +12,6 @@ Install it yourself as:
12
12
 
13
13
  ## Usage
14
14
 
15
- sinatragen app_name
15
+ sinatra new app_name
16
16
 
17
- eg: sinatragen my_blog
17
+ eg: sinatra new blog
data/Rakefile CHANGED
@@ -1,2 +1,8 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs << 'test'
6
+ t.pattern = "test/*_test.rb"
7
+ end
2
8
 
data/bin/sinatra ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'thor'
4
+
5
+ require_relative "../lib/sinatra_generator"
6
+
7
+ SinatraGenerator::CLI.start
8
+
9
+
10
+
@@ -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,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'sinatra'
@@ -0,0 +1 @@
1
+ web: bundle exec rackup config.ru -p $PORT
@@ -0,0 +1,11 @@
1
+ <%- if options[:modular] %>
2
+ require 'bundler'
3
+ Bundler.require
4
+ <% end %>
5
+
6
+ require './main'
7
+ <%- if options[:modular] %>
8
+ run HelloWorld
9
+ <% else %>
10
+ run Sinatra::Application
11
+ <% end %>
@@ -0,0 +1 @@
1
+ <h1>hello world</h1>
@@ -0,0 +1,11 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>Hello World</title>
6
+ </head>
7
+ <body>
8
+
9
+ <%= yield %>
10
+
11
+ </body>
@@ -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
+
@@ -1,3 +1,3 @@
1
1
  module SinatraGenerator
2
- VERSION = "0.0.2"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -1,53 +1,121 @@
1
- require "sinatra_generator/version"
2
- require 'fileutils'
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
- class Generator
8
+ end
6
9
 
7
- MAIN_RB = %{require 'sinatra'
8
10
 
9
- get '/' do
10
- erb :index
11
- end
12
- }
11
+ # MAIN_RB = %{require 'sinatra'
13
12
 
14
- LAYOUT_ERB = %{<!doctype html>
15
- <html lang="en">
16
- <head>
17
- <meta charset="UTF-8">
18
- <title>Hello World</title>
19
- </head>
20
- <body>
13
+ # get '/' do
14
+ # 'hello world'
15
+ # end
16
+ # }
21
17
 
22
- <%= yield %>
18
+ # MAIN_RB_MODULAR = %{require 'sinatra/base'
23
19
 
24
- </body>
25
- }
20
+ # class HelloWorld < Sinatra::Base
26
21
 
27
- INDEX_ERB = %{<h1>hello world</h1>
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
- File.write 'main.rb', MAIN_RB
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
- FileUtils.mkdir 'views'
38
- FileUtils.mkdir 'public'
38
+ # <%= yield %>
39
39
 
40
- FileUtils.chdir 'public' do
41
- FileUtils.mkdir 'stylesheets'
42
- FileUtils.mkdir 'javascripts'
43
- end
40
+ # </body>
41
+ # }
44
42
 
45
- FileUtils.chdir 'views' do
46
- File.write 'layout.erb', LAYOUT_ERB
47
- File.write 'index.erb', INDEX_ERB
48
- end
49
- end
43
+ # INDEX_ERB = %{<h1>hello world</h1>
44
+ # }
50
45
 
51
- end
52
- end
53
- end
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
@@ -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 = ['sinatragen']
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
@@ -0,0 +1,8 @@
1
+ require 'simplecov'
2
+ SimpleCov.start
3
+
4
+ require 'sinatra_generator'
5
+ require 'minitest/unit'
6
+ require 'minitest/autorun'
7
+ require 'minitest/pride'
8
+ require 'tmpdir'
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.2
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-06-17 00:00:00.000000000 Z
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: '0'
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
- - sinatragen
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/sinatragen
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
data/bin/sinatragen DELETED
@@ -1,12 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- if ARGV[0]
4
- require 'sinatra_generator'
5
-
6
- generator = SinatraGenerator::Generator.new
7
- generator.new_app ARGV[0]
8
- puts "new app generated."
9
- else
10
- puts "Usage: sinatragen [FOLDER_NAME]"
11
- end
12
-