skellington 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/.rspec +1 -0
  4. data/Guardfile +1 -1
  5. data/README.md +44 -24
  6. data/Rakefile +1 -3
  7. data/config/config.yaml +28 -4
  8. data/files +24 -0
  9. data/lib/skellington/template.rb +1 -1
  10. data/lib/skellington/version.rb +1 -1
  11. data/lib/templates/.rspec.eruby +3 -0
  12. data/lib/templates/Rakefile.eruby +6 -1
  13. data/lib/templates/config.ru.eruby +1 -2
  14. data/lib/templates/features/json.feature.eruby +9 -0
  15. data/lib/templates/features/support/env.rb.eruby +2 -1
  16. data/lib/templates/lib/app.rb.eruby +28 -8
  17. data/lib/templates/lib/app/helpers.rb.eruby +4 -0
  18. data/lib/templates/lib/app/racks.rb.eruby +24 -0
  19. data/lib/templates/public/assets/favicon.ico.eruby +0 -0
  20. data/lib/templates/public/css/styles.css.eruby +0 -0
  21. data/lib/templates/public/js/app.js.eruby +0 -0
  22. data/lib/templates/spec/app/app_spec.rb.eruby +7 -0
  23. data/lib/templates/spec/javascripts/appSpec.js.eruby +5 -0
  24. data/lib/templates/spec/javascripts/support/jasmine.yml.eruby +15 -0
  25. data/lib/templates/spec/javascripts/support/jasmine_helper.rb.eruby +0 -0
  26. data/lib/templates/spec/spec_helper.rb.eruby +16 -0
  27. data/lib/templates/views/default.erb.eruby +15 -0
  28. data/lib/templates/views/includes/header.erb.eruby +22 -0
  29. data/lib/templates/{lib/views → views}/index.erb.eruby +0 -0
  30. data/skellington.gemspec +0 -3
  31. data/spec/cli/app_spec.rb +85 -0
  32. data/{features/bootstrap.feature → spec/cli/bootstrap_spec.rb} +41 -27
  33. data/spec/cli/config_ru_spec.rb +18 -0
  34. data/spec/cli/cukes_spec.rb +66 -0
  35. data/spec/cli/gemfile_spec.rb +38 -0
  36. data/spec/cli/git_spec.rb +12 -0
  37. data/spec/cli/javascript_spec.rb +42 -0
  38. data/spec/cli/non_local_path_spec.rb +55 -0
  39. data/spec/cli/procfile_spec.rb +16 -0
  40. data/spec/cli/public_spec.rb +14 -0
  41. data/spec/cli/rakefile_spec.rb +30 -0
  42. data/spec/cli/rbenv_spec.rb +17 -0
  43. data/spec/cli/spec_spec.rb +51 -0
  44. data/spec/cli_spec.rb +32 -0
  45. data/spec/hyphens_spec.rb +36 -0
  46. data/spec/spec_helper.rb +39 -0
  47. metadata +49 -78
  48. data/features/app.feature +0 -21
  49. data/features/cli.feature +0 -29
  50. data/features/config.ru.feature +0 -12
  51. data/features/cukes.feature +0 -50
  52. data/features/gemfile.feature +0 -27
  53. data/features/git.feature +0 -5
  54. data/features/guardfile.feature +0 -16
  55. data/features/hyphens.feature +0 -27
  56. data/features/naming.feature +0 -6
  57. data/features/non-local-path.feature +0 -29
  58. data/features/procfile.feature +0 -9
  59. data/features/rakefile.feature +0 -18
  60. data/features/rbenv.feature +0 -6
  61. data/features/support/env.rb +0 -6
  62. data/lib/templates/Guardfile.eruby +0 -8
  63. data/lib/templates/lib/views/default.erb.eruby +0 -35
@@ -25,9 +25,6 @@ Gem::Specification.new do |spec|
25
25
  spec.add_development_dependency 'coveralls', '~> 0.7'
26
26
  spec.add_development_dependency 'bundler', '~> 1.7'
27
27
  spec.add_development_dependency 'rake', '~> 10.0'
28
- spec.add_development_dependency 'cucumber', '~> 1.3'
29
28
  spec.add_development_dependency 'rspec', '~> 3.1'
30
29
  spec.add_development_dependency 'guard-rspec', '~> 4.5'
31
- spec.add_development_dependency 'guard-cucumber', '~> 1.5'
32
- spec.add_development_dependency 'aruba', '~> 0.6'
33
30
  end
@@ -0,0 +1,85 @@
1
+ module Skellington
2
+ describe CLI do
3
+ let :subject do
4
+ described_class.new
5
+ end
6
+
7
+ it 'generates an app file' do
8
+ subject.generate 'dummy_app'
9
+ expect('dummy_app/lib/dummy_app.rb').to contain (
10
+ """
11
+ require 'sinatra/base'
12
+ require 'tilt/erubis'
13
+
14
+ require_relative 'dummy_app/racks'
15
+ require_relative 'dummy_app/helpers'
16
+
17
+ module DummyApp
18
+ class App < Sinatra::Base
19
+ helpers do
20
+ include DummyApp::Helpers
21
+ end
22
+
23
+ get '/' do
24
+ respond_to do |wants|
25
+ wants.html do
26
+ @content = '<h1>Hello from DummyApp</h1>'
27
+ @title = 'DummyApp'
28
+ erb :index, layout: :default
29
+ end
30
+
31
+ wants.json do
32
+ {
33
+ app: 'DummyApp'
34
+ }.to_json
35
+ end
36
+ end
37
+ end
38
+
39
+ # start the server if ruby file executed directly
40
+ run! if app_file == $0
41
+ end
42
+ end
43
+ """
44
+ )
45
+
46
+ expect('dummy_app/lib/dummy_app/racks.rb').to contain (
47
+ """
48
+ require 'rack/conneg'
49
+
50
+ module DummyApp
51
+ class App < Sinatra::Base
52
+ set :public_folder, 'public'
53
+ set :views, 'views'
54
+
55
+ use Rack::Conneg do |conneg|
56
+ conneg.set :accept_all_extensions, false
57
+ conneg.set :fallback, :html
58
+ conneg.ignore_contents_of 'public'
59
+ conneg.provide [
60
+ :html,
61
+ :json
62
+ ]
63
+ end
64
+
65
+ before do
66
+ if negotiated?
67
+ content_type negotiated_type
68
+ end
69
+ end
70
+ end
71
+ end
72
+ """
73
+ )
74
+
75
+ expect('dummy_app/lib/dummy_app/helpers.rb').to contain (
76
+ """
77
+ module DummyApp
78
+ module Helpers
79
+ end
80
+ end
81
+ """
82
+ )
83
+ end
84
+ end
85
+ end
@@ -1,12 +1,33 @@
1
- Feature: Generate skellington
1
+ module Skellington
2
+ describe CLI do
3
+ let :subject do
4
+ described_class.new
5
+ end
2
6
 
3
- Scenario: generate Bootstrap templates
4
- When I successfully run `skellington generate dummy_app`
5
- Then a file named "dummy_app/lib/views/default.erb" should exist
6
- And the file "dummy_app/lib/views/default.erb" should contain:
7
- """
8
- <!DOCTYPE html>
9
- <html lang='en'>
7
+ it 'generates a bootstrap template' do
8
+ subject.generate 'dummy_app'
9
+ expect('dummy_app/views/default.erb').to contain (
10
+ """
11
+ <!DOCTYPE html>
12
+ <html lang='en'>
13
+ /erb.*'includes/header'/
14
+ <body>
15
+ <div class='container'>
16
+ <div class='row'>
17
+ <div class='col-md-2'></div>
18
+ <div class='col-md-8'>
19
+ <%= yield %>
20
+ </div>
21
+ <div class='col-md-2'></div>
22
+ </div>
23
+ </div>
24
+ </body>
25
+ </html>
26
+ """
27
+ )
28
+
29
+ expect('dummy_app/views/includes/header.erb').to contain (
30
+ """
10
31
  <head>
11
32
  <meta charset='utf-8' />
12
33
  <meta http-equiv='X-UA-Compatible' content='IE=edge' />
@@ -25,24 +46,17 @@ Feature: Generate skellington
25
46
  <script src='//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js'></script>
26
47
  <link rel='stylesheet' href='//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css' type='text/css' />
27
48
  <link rel='icon' type='image/png' href='/assets/favicon.ico' />
49
+ <link rel='stylesheet' href='/css/styles.css' />
50
+ <script src='/js/template.js'></script>
28
51
  <title><%= @title %></title>
29
52
  </head>
30
-
31
- <body>
32
- <div class='container'>
33
- <div class='row'>
34
- <div class='col-md-2'></div>
35
- <div class='col-md-8'>
36
- <%= yield %>
37
- </div>
38
- <div class='col-md-2'></div>
39
- </div>
40
- </div>
41
- </body>
42
- </html>
43
- """
44
- And a file named "dummy_app/lib/views/index.erb" should exist
45
- And the file "dummy_app/lib/views/index.erb" should contain:
46
- """
47
- <%= @content %>
48
- """
53
+ """
54
+ )
55
+ expect('dummy_app/views/index.erb').to contain (
56
+ """
57
+ <%= @content %>
58
+ """
59
+ )
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,18 @@
1
+ module Skellington
2
+ describe CLI do
3
+ let :subject do
4
+ described_class.new
5
+ end
6
+
7
+ it 'generates a config.ru file' do
8
+ subject.generate 'dummy_app'
9
+ expect('dummy_app/config.ru').to contain (
10
+ """
11
+ require File.join(File.dirname(__FILE__), 'lib/dummy_app.rb')
12
+
13
+ run DummyApp::App
14
+ """
15
+ )
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,66 @@
1
+ module Skellington
2
+ describe CLI do
3
+ let :subject do
4
+ described_class.new
5
+ end
6
+
7
+ it 'generates some cucumber file' do
8
+ subject.generate 'dummy_app'
9
+ expect('dummy_app/features/dummy_app.feature').to contain (
10
+ """
11
+ Feature: Make sure DummyApp is plumbed in correctly
12
+
13
+ Scenario: Get root
14
+ When I send a GET request to \"/\"
15
+ Then the response status should be \"200\"
16
+ """
17
+ )
18
+
19
+ expect('dummy_app/features/json.feature').to contain (
20
+ """
21
+ Feature: Get JSON
22
+
23
+ Background:
24
+ Given I send and accept JSON
25
+
26
+ Scenario: Get JSON for a repo
27
+ When I send a GET request to \"/\"
28
+ Then the response status should be \"200\"
29
+ And the JSON response should have \"$app\" with the text \"DummyApp\"
30
+ """
31
+ )
32
+
33
+ expect('dummy_app/features/support/env.rb').to contain (
34
+ """
35
+ ENV['RACK_ENV'] = 'test'
36
+
37
+ require File.join(File.dirname(__FILE__), '..', '..', 'lib/dummy_app.rb')
38
+
39
+ require 'capybara'
40
+ require 'capybara/cucumber'
41
+ require 'rspec'
42
+ require 'cucumber/api_steps'
43
+ require 'active_support/core_ext/object/blank'
44
+
45
+ Capybara.app = DummyApp
46
+
47
+ class DummyAppWorld
48
+ include Capybara::DSL
49
+ include RSpec::Expectations
50
+ include RSpec::Matchers
51
+
52
+ def app
53
+ DummyApp::App
54
+ end
55
+ end
56
+
57
+ World do
58
+ DummyAppWorld.new
59
+ end
60
+ """
61
+ )
62
+
63
+ expect(File).to exist 'dummy_app/features/step_definitions/dummy_app_steps.rb'
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,38 @@
1
+ module Skellington
2
+ describe CLI do
3
+ let :subject do
4
+ described_class.new
5
+ end
6
+
7
+ it 'generates a Gemfile' do
8
+ subject.generate 'dummy_app'
9
+ expect('dummy_app/Gemfile').to contain (
10
+ """
11
+ source 'https://rubygems.org'
12
+
13
+ /ruby [0-9]*\.[0-9]*\.[0-9]*/
14
+
15
+ gem 'sinatra'
16
+ gem 'puma'
17
+ gem 'rake'
18
+ gem 'rack-conneg'
19
+
20
+ group :test do
21
+ gem 'cucumber'
22
+ gem 'capybara'
23
+ gem 'coveralls'
24
+ gem 'jasmine'
25
+ gem 'rspec'
26
+ gem 'guard-rspec'
27
+ gem 'guard-jasmine'
28
+ gem 'guard'
29
+ gem 'guard-cucumber'
30
+ gem 'pry'
31
+ gem 'actionpack'
32
+ gem 'cucumber-api-steps', require: false
33
+ end
34
+ """
35
+ )
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,12 @@
1
+ module Skellington
2
+ describe CLI do
3
+ let :subject do
4
+ described_class.new
5
+ end
6
+
7
+ it 'generates a Gemfile' do
8
+ subject.generate 'dummy_app'
9
+ expect(Dir).to exist 'dummy_app/.git'
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,42 @@
1
+ module Skellington
2
+ describe CLI do
3
+ let :subject do
4
+ described_class.new
5
+ end
6
+
7
+ it 'generates javascript files' do
8
+ subject.generate 'dummy_app'
9
+ expect('dummy_app/spec/javascripts/support/jasmine.yml').to contain (
10
+ """
11
+ src_files:
12
+ - public/js/**/*.js
13
+ stylesheets:
14
+ - stylesheets/**/*.css
15
+ helpers:
16
+ - helpers/**/*.js
17
+ spec_files:
18
+ - '**/*[sS]pec.js'
19
+ src_dir:
20
+ spec_dir:
21
+ spec_helper: spec/javascripts/support/jasmine_helper.rb
22
+ boot_dir:
23
+ boot_files:
24
+ server: 'puma'
25
+ random: true
26
+ """
27
+ )
28
+
29
+ expect(File).to exist 'dummy_app/spec/javascripts/support/jasmine_helper.rb'
30
+
31
+ expect('dummy_app/spec/javascripts/dummy_appSpec.js').to contain (
32
+ """
33
+ describe('DummyApp', function() {
34
+ it('knows the truth', function() {
35
+ expect(true).toEqual(true)
36
+ })
37
+ })
38
+ """
39
+ )
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,55 @@
1
+ module Skellington
2
+ describe CLI do
3
+ let :subject do
4
+ described_class.new
5
+ end
6
+
7
+ it 'generates an app at a non-local path' do
8
+ subject.generate 'subdir/some_app'
9
+ expect('subdir/some_app/lib/some_app.rb').to contain (
10
+ """
11
+ require 'sinatra/base'
12
+ require 'tilt/erubis'
13
+
14
+ require_relative 'some_app/racks'
15
+ require_relative 'some_app/helpers'
16
+
17
+ module SomeApp
18
+ class App < Sinatra::Base
19
+ helpers do
20
+ include SomeApp::Helpers
21
+ end
22
+
23
+ get '/' do
24
+ respond_to do |wants|
25
+ wants.html do
26
+ @content = '<h1>Hello from SomeApp</h1>'
27
+ @title = 'SomeApp'
28
+ erb :index, layout: :default
29
+ end
30
+
31
+ wants.json do
32
+ {
33
+ app: 'SomeApp'
34
+ }.to_json
35
+ end
36
+ end
37
+ end
38
+
39
+ # start the server if ruby file executed directly
40
+ run! if app_file == $0
41
+ end
42
+ end
43
+ """
44
+ )
45
+
46
+ expect('subdir/some_app/config.ru').to contain (
47
+ """
48
+ require File.join(File.dirname(__FILE__), 'lib/some_app.rb')
49
+
50
+ run SomeApp::App
51
+ """
52
+ )
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,16 @@
1
+ module Skellington
2
+ describe CLI do
3
+ let :subject do
4
+ described_class.new
5
+ end
6
+
7
+ it 'generates a Procfile' do
8
+ subject.generate 'dummy_app'
9
+ expect('dummy_app/Procfile').to contain (
10
+ """
11
+ web: bundle exec ruby lib/dummy_app.rb
12
+ """
13
+ )
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,14 @@
1
+ module Skellington
2
+ describe CLI do
3
+ let :subject do
4
+ described_class.new
5
+ end
6
+
7
+ it 'generates placeholders for static files' do
8
+ subject.generate 'dummy_app'
9
+ expect(File).to exist 'dummy_app/public/css/styles.css'
10
+ expect(File).to exist 'dummy_app/public/js/dummy_app.js'
11
+ expect(File).to exist 'dummy_app/public/assets/favicon.ico'
12
+ end
13
+ end
14
+ end