shoestrap 1.0.0.pre1 → 1.0.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +1 -2
  4. data/CHANGELOG.md +12 -1
  5. data/Guardfile +1 -0
  6. data/Rakefile +1 -1
  7. data/circle.yml +3 -0
  8. data/features/command_wrapper_helper.rb +94 -0
  9. data/features/custom_matcher.rb +23 -0
  10. data/features/features_helper.rb +76 -29
  11. data/features/postgres_helper.rb +69 -0
  12. data/features/shoestrap/commands/new_command_spec.rb +234 -0
  13. data/features/shoestrap/generators/{bdd_generator_feature.rb → bdd_generator_spec.rb} +7 -5
  14. data/features/shoestrap/generators/bootstrap_generator_spec.rb +21 -0
  15. data/features/shoestrap/generators/cms_generator_spec.rb +149 -0
  16. data/features/shoestrap/generators/{coffee_files_generator_feature.rb → coffee_files_generator_spec.rb} +0 -0
  17. data/features/shoestrap/generators/{foundation_generator_feature.rb → foundation_generator_spec.rb} +7 -0
  18. data/features/shoestrap/generators/kuhsaft_generator_spec.rb +57 -0
  19. data/features/shoestrap/generators/{smacss_files_generator_feature.rb → smacss_files_generator_spec.rb} +0 -0
  20. data/features/shoestrap/generators/view_files_generator_spec.rb +20 -0
  21. data/lib/generators/shoestrap/base_generator.rb +41 -0
  22. data/lib/generators/shoestrap/bdd_generator.rb +1 -5
  23. data/lib/generators/shoestrap/bootstrap_generator.rb +3 -0
  24. data/lib/generators/shoestrap/cms_generator.rb +59 -0
  25. data/lib/generators/shoestrap/coffee_files_generator.rb +1 -5
  26. data/lib/generators/shoestrap/foundation_generator.rb +5 -5
  27. data/lib/generators/shoestrap/kuhsaft_generator.rb +6 -5
  28. data/lib/generators/shoestrap/mailcatcher_generator.rb +12 -0
  29. data/lib/generators/shoestrap/simple_navigation_generator.rb +14 -0
  30. data/lib/generators/shoestrap/smacss_file_generator.rb +1 -5
  31. data/lib/generators/shoestrap/view_files_generator.rb +11 -0
  32. data/lib/shoestrap/application_generator.rb +14 -38
  33. data/lib/shoestrap/shell.rb +1 -0
  34. data/lib/shoestrap/version.rb +1 -1
  35. data/shoestrap.gemspec +12 -3
  36. data/spec/shoestrap/application_generator_spec.rb +37 -20
  37. data/spec/spec_helper.rb +1 -1
  38. data/templates/application_generator/_typekit.html.haml +4 -0
  39. data/templates/application_generator/application.html.haml +10 -10
  40. data/templates/application_generator/application_template.rb +19 -3
  41. data/templates/bdd_generator/active_record_spec_helper.rb +1 -1
  42. data/templates/cms_generator/base_controller.rb +2 -0
  43. data/templates/{coffee_generator → coffee_files_generator}/application.js.coffee +0 -0
  44. data/templates/simple_navigation_generator/navigation.rb +76 -0
  45. data/templates/{smacss_generator → smacss_files_generator}/application.css.sass +0 -0
  46. metadata +39 -21
  47. data/features/shoestrap/commands/new_command_feature.rb +0 -191
  48. data/features/shoestrap/generators/bootstrap_generator_feature.rb +0 -11
  49. data/features/shoestrap/generators/kuhsaft_generator_feature.rb +0 -38
@@ -1,11 +1,7 @@
1
1
  require 'rails/generators'
2
2
 
3
3
  module Shoestrap
4
- class FoundationGenerator < Rails::Generators::Base
5
-
6
- def source_paths
7
- [File.join(File.dirname(__FILE__), '../../../templates/foundation_generator')]
8
- end
4
+ class FoundationGenerator < BaseGenerator
9
5
 
10
6
  def copy_application_sass
11
7
  copy_file '_settings.css.sass', 'app/assets/stylesheets/_settings.css.sass', force: true
@@ -20,5 +16,9 @@ module Shoestrap
20
16
  inject_into_file 'app/assets/stylesheets/application.css.sass', "// Foundation\n@import foundation\n\n", after: "@import settings\n\n"
21
17
  inject_into_file 'app/assets/stylesheets/application.css.sass', "// IE8 Foundation Grid Fix\n@import ie8_grid\n\n", after: "@import foundation\n\n"
22
18
  end
19
+
20
+ def install_simple_form
21
+ generate 'simple_form:install --foundation'
22
+ end
23
23
  end
24
24
  end
@@ -1,11 +1,7 @@
1
1
  require 'rails/generators'
2
2
 
3
3
  module Shoestrap
4
- class KuhsaftGenerator < Rails::Generators::Base
5
-
6
- def source_paths
7
- [File.join(File.dirname(__FILE__), '../../../templates/kuhsaft_generator')]
8
- end
4
+ class KuhsaftGenerator < BaseGenerator
9
5
 
10
6
  def install_migrations
11
7
  rake 'kuhsaft:install:migrations'
@@ -30,5 +26,10 @@ module Shoestrap
30
26
  def add_default_image_size
31
27
  copy_file 'kuhsaft.rb', 'config/initializers/kuhsaft.rb'
32
28
  end
29
+
30
+ def add_translations
31
+ (I18n.available_locales - [:de, :en]).each {|l| generate "kuhsaft:translations:add #{l}" }
32
+ end
33
+
33
34
  end
34
35
  end
@@ -10,5 +10,17 @@ module Shoestrap
10
10
  "config.action_mailer.delivery_method = :smtp"
11
11
  end
12
12
  end
13
+
14
+ def add_mailcacher_notes_in_readme
15
+ readme = 'README.md'
16
+ create_file readme unless File.exists? readme
17
+ append_to_file readme, <<-DOCUMENTATION
18
+ # Mailcatcher
19
+ This application uses Mailcatcher in development mode.
20
+ MailCatcher runs a super simple SMTP server which catches any message sent to it to display in a web interface. Run mailcatcher, set your favourite app to deliver to smtp://127.0.0.1:1025 instead of your default SMTP server, then check out http://127.0.0.1:1080 to see the mail that's arrived so far.
21
+
22
+ For more information inquire http://mailcatcher.me/
23
+ DOCUMENTATION
24
+ end
13
25
  end
14
26
  end
@@ -0,0 +1,14 @@
1
+ require 'rails/generators'
2
+
3
+ module Shoestrap
4
+ class SimpleNavigationGenerator < BaseGenerator
5
+
6
+ def install_simple_navigation
7
+ generate 'navigation_config'
8
+ end
9
+
10
+ def copy_navigation_rb
11
+ copy_file 'navigation.rb', 'config/navigation.rb', force: true
12
+ end
13
+ end
14
+ end
@@ -2,11 +2,7 @@ require 'rails/generators'
2
2
  require_relative '../../shoestrap/shell'
3
3
 
4
4
  module Shoestrap
5
- class SmacssFilesGenerator < Rails::Generators::Base
6
-
7
- def source_paths
8
- [File.join(File.dirname(__FILE__), '../../../templates/smacss_generator')]
9
- end
5
+ class SmacssFilesGenerator < BaseGenerator
10
6
 
11
7
  def remove_application_css
12
8
  remove_file 'app/assets/stylesheets/application.css'
@@ -0,0 +1,11 @@
1
+ require 'rails/generators'
2
+
3
+ module Shoestrap
4
+ class ViewFilesGenerator < BaseGenerator
5
+ def copy_views
6
+ Dir[File.join(source_paths.first,'*')].each do |file|
7
+ directory File.basename(file), 'app/views/'
8
+ end
9
+ end
10
+ end
11
+ end
@@ -1,5 +1,6 @@
1
1
  require 'active_support/inflector'
2
2
  require_relative 'shell'
3
+ require_relative '../generators/shoestrap/base_generator'
3
4
  Dir[File.join(File.dirname(__FILE__), '../generators/shoestrap/*_generator.rb')].each{ |f| require f }
4
5
 
5
6
  module Shoestrap
@@ -26,13 +27,12 @@ module Shoestrap
26
27
  end
27
28
 
28
29
  install_gems(required_gems(options))
29
- setup_database
30
- setup_smacss_files
31
- setup_coffee_files
32
- setup_css_framework(options[:css])
33
- setup_bdd_environment
34
- setup_mailcatcher
35
- setup_kuhsaft
30
+ generators = [
31
+ 'database', 'smacss_files', 'coffee_files', options[:css],
32
+ 'bdd', 'mailcatcher', 'simple_navigation', 'view_files'
33
+ ]
34
+ generators << 'kuhsaft' if options[:kuhsaft]
35
+ generators.each{|name| call_generator name }
36
36
  end
37
37
  end
38
38
 
@@ -42,40 +42,16 @@ module Shoestrap
42
42
  reload_gemfile_for_application
43
43
  end
44
44
 
45
- def setup_database
46
- Shoestrap::DatabaseGenerator.start
47
- end
48
-
49
- def setup_smacss_files
50
- Shoestrap::SmacssFilesGenerator.start
51
- end
52
-
53
- def setup_coffee_files
54
- Shoestrap::CoffeeFilesGenerator.start
55
- end
56
-
57
- def setup_css_framework(framework)
58
- "Shoestrap::#{"#{framework}_generator".camelcase}".constantize.start
59
- end
60
-
61
- def setup_bdd_environment
62
- Shoestrap::BddGenerator.start
63
- end
64
-
65
- def setup_kuhsaft
66
- Shoestrap::KuhsaftGenerator.start
67
- end
68
-
69
- def setup_mailcatcher
70
- Shoestrap::MailcatcherGenerator.start
45
+ def call_generator(name)
46
+ "Shoestrap::#{"#{name}_generator".camelcase}".constantize.start
71
47
  end
72
48
 
73
49
  def required_gems(options)
74
- gems = []
75
- gems << 'kuhsaft' if options[:kuhsaft]
76
- gems << 'bootstrap-sass' if options[:css] == 'bootstrap'
77
- gems << 'zurb-foundation' if options[:css] == 'foundation'
78
- gems
50
+ Array.new.tap do |gems|
51
+ gems << 'kuhsaft' if options[:kuhsaft]
52
+ gems << 'bootstrap-sass' if options[:css] == 'bootstrap'
53
+ gems << 'zurb-foundation' if options[:css] == 'foundation'
54
+ end
79
55
  end
80
56
 
81
57
  def apply_special_sauce(application_name)
@@ -2,6 +2,7 @@ module Shoestrap
2
2
  module Shell
3
3
  extend self
4
4
 
5
+ # aa NOTE: do we really need a wrapper for a simple command like system?
5
6
  def self.exec(command)
6
7
  system "#{command}"
7
8
  end
@@ -1,3 +1,3 @@
1
1
  module Shoestrap
2
- VERSION = "1.0.0.pre1"
2
+ VERSION = "1.0.0.pre2"
3
3
  end
data/shoestrap.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["felipekaufmann@gmail.com"]
11
11
  spec.description = %q{SC Bootstrapper and Generators}
12
12
  spec.summary = %q{Rails App Bootstrapper and Generator used at Screen Concept}
13
- spec.homepage = ""
13
+ spec.homepage = "https://github.com/screenconcept/shoestrap"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
@@ -20,11 +20,20 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.3"
22
22
  spec.add_development_dependency "rake"
23
- spec.add_development_dependency "pry"
23
+ spec.add_development_dependency "pry-debugger"
24
24
  spec.add_development_dependency "rspec", '2.14.0.rc1'
25
25
  spec.add_development_dependency "guard"
26
26
  spec.add_development_dependency "guard-rspec"
27
- spec.add_development_dependency "ruby_gntp"
27
+ #spec.add_development_dependency "ruby_gntp"
28
+ spec.add_development_dependency "terminal-notifier-guard"
29
+
30
+ # we don't need these gems but perhaps travis resolves the gems on spawning time and prohibits
31
+ # other gems afterwards.
32
+ if ENV['TRAVIS'] || ENV['CI'] || ENV['CIRCLECI']
33
+ spec.add_development_dependency "bootstrap-sass"
34
+ spec.add_development_dependency "kuhsaft"
35
+ spec.add_development_dependency "zurb-foundation"
36
+ end
28
37
 
29
38
  spec.add_dependency 'rails', '4.0.0'
30
39
  spec.add_dependency 'airbrake'
@@ -5,6 +5,29 @@ module Shoestrap
5
5
  describe ApplicationGenerator do
6
6
 
7
7
  let(:default_options) { { css: 'bootstrap', database: 'postgresql', kuhsaft: true } }
8
+ let(:template) { (Pathname.new(__FILE__) + '../../../templates/application_generator/application_template.rb').realpath }
9
+
10
+ describe 'rails template' do
11
+ it 'should use current shoestrap version' do
12
+ tp = double(:template_processor)
13
+ tp.should_receive(:remove_file).with('app/views/layouts/application.html.erb')
14
+ tp.should_receive(:require).with(File.expand_path('../../lib/shoestrap/version'))
15
+ tp.should_receive(:inject_into_file)
16
+ tp.stub(:directory)
17
+ tp.stub(:copy_file)
18
+ tp.stub(:application)
19
+ tp.should_receive(:gem_group).twice
20
+ expected_gems = ['shoestrap']
21
+ tp.stub(:gem) {|*args|
22
+ expected_gems.delete(args[0])
23
+ if args[0] == 'shoestrap'
24
+ expect(args[1]).to eq(Shoestrap::VERSION)
25
+ end
26
+ }
27
+ tp.instance_eval template.read
28
+ expect(expected_gems).to eq []
29
+ end
30
+ end
8
31
 
9
32
  describe '#start' do
10
33
  it 'says it is going to generate an app' do
@@ -36,45 +59,39 @@ module Shoestrap
36
59
  describe '#shoestrap_generators' do
37
60
 
38
61
  before :each do
39
- ApplicationGenerator.stub(:setup_bdd_environment)
40
- ApplicationGenerator.stub(:setup_database)
41
- ApplicationGenerator.stub(:setup_css_framework)
42
- ApplicationGenerator.stub(:setup_smacss_files)
43
- ApplicationGenerator.stub(:setup_coffee_files)
44
- ApplicationGenerator.stub(:setup_kuhsaft)
62
+ ApplicationGenerator.stub(:call_generator)
45
63
  ApplicationGenerator.stub(:install_gems)
46
64
  ApplicationGenerator.stub(:apply_special_sauce)
47
- ApplicationGenerator.stub(:setup_mailcatcher)
48
65
  Dir.stub(:chdir).and_yield
49
66
  end
50
67
 
51
- it 'installs requried gems' do
68
+ it 'installs required gems' do
52
69
  expect(ApplicationGenerator).to receive(:install_gems)
53
70
  ApplicationGenerator.shoestrap_generators('test_app', default_options)
54
71
  end
55
72
 
56
73
  it 'sets up the css framework' do
57
- expect(ApplicationGenerator).to receive(:setup_css_framework)
74
+ expect(ApplicationGenerator).to receive(:call_generator)
58
75
  ApplicationGenerator.shoestrap_generators('test_app', default_options)
59
76
  end
60
77
 
61
78
  it 'sets up the smacss files' do
62
- expect(ApplicationGenerator).to receive(:setup_smacss_files)
79
+ expect(ApplicationGenerator).to receive(:call_generator)
63
80
  ApplicationGenerator.shoestrap_generators('test_app', default_options)
64
81
  end
65
82
 
66
83
  it 'sets up the coffee files' do
67
- expect(ApplicationGenerator).to receive(:setup_coffee_files)
84
+ expect(ApplicationGenerator).to receive(:call_generator)
68
85
  ApplicationGenerator.shoestrap_generators('test_app', default_options)
69
86
  end
70
87
 
71
88
  it 'sets up the bdd environment' do
72
- expect(ApplicationGenerator).to receive(:setup_bdd_environment)
89
+ expect(ApplicationGenerator).to receive(:call_generator)
73
90
  ApplicationGenerator.shoestrap_generators('test_app', default_options)
74
91
  end
75
92
 
76
93
  it 'sets up kuhsaft' do
77
- expect(ApplicationGenerator).to receive(:setup_kuhsaft)
94
+ expect(ApplicationGenerator).to receive(:call_generator)
78
95
  ApplicationGenerator.shoestrap_generators('test_app', default_options)
79
96
  end
80
97
 
@@ -99,13 +116,13 @@ module Shoestrap
99
116
  it 'delegates to the Gem Install Generator' do
100
117
  Shell.stub(:exec)
101
118
  expect(GemInstallGenerator).to receive(:start)
102
- ApplicationGenerator.install_gems([])
119
+ ApplicationGenerator.install_gems []
103
120
  end
104
121
 
105
122
  it 'delegates to the Gem Install Generator' do
106
123
  GemInstallGenerator.stub(:start)
107
124
  expect(Shell).to receive(:exec).with('bundle')
108
- ApplicationGenerator.install_gems([])
125
+ ApplicationGenerator.install_gems []
109
126
  end
110
127
  end
111
128
 
@@ -113,35 +130,35 @@ module Shoestrap
113
130
  it 'runs the generator it was called with' do
114
131
  DummyGenerator = double
115
132
  expect(DummyGenerator).to receive('start')
116
- ApplicationGenerator.setup_css_framework('dummy')
133
+ ApplicationGenerator.call_generator('dummy')
117
134
  end
118
135
  end
119
136
 
120
137
  describe '#setup_smacss_files' do
121
138
  it 'runs the smacss files generator' do
122
139
  expect(SmacssFilesGenerator).to receive('start')
123
- ApplicationGenerator.setup_smacss_files
140
+ ApplicationGenerator.call_generator('smacss_files')
124
141
  end
125
142
  end
126
143
 
127
144
  describe '#setup_coffee_files' do
128
145
  it 'runs the coffee files generator' do
129
146
  expect(CoffeeFilesGenerator).to receive('start')
130
- ApplicationGenerator.setup_coffee_files
147
+ ApplicationGenerator.call_generator('coffee_files')
131
148
  end
132
149
  end
133
150
 
134
151
  describe '#setup_bdd_environment' do
135
152
  it 'runs the rspec generator' do
136
153
  expect(BddGenerator).to receive('start')
137
- ApplicationGenerator.setup_bdd_environment
154
+ ApplicationGenerator.call_generator('bdd')
138
155
  end
139
156
  end
140
157
 
141
158
  describe '#setup_kuhsaft' do
142
159
  it 'delegates to the Gem Install Generator' do
143
160
  expect(KuhsaftGenerator).to receive(:start)
144
- ApplicationGenerator.setup_kuhsaft
161
+ ApplicationGenerator.call_generator('kuhsaft')
145
162
  end
146
163
  end
147
164
 
data/spec/spec_helper.rb CHANGED
@@ -18,7 +18,7 @@ module Shoestrap
18
18
  end
19
19
 
20
20
  #
21
- # Use capture to silece and capture stderr/stdout
21
+ # Use capture to silence and capture stderr/stdout
22
22
  # Useful to hide logged messages etc. in test run
23
23
  #
24
24
  def capture(*streams)
@@ -0,0 +1,4 @@
1
+ - if Rails.application.config.typekit_key.present?
2
+ = javascript_include_tag "//use.typekit.net/#{Rails.application.config.typekit_key}.js", :media => 'all'
3
+ :javascript
4
+ try{Typekit.load();}catch(e){}
@@ -1,15 +1,17 @@
1
1
  !!! 5
2
- /[if lt IE 7] <html class='no-js lt-ie9 lt-ie8 lt-ie7'>
3
- /[if IE 7] <html class='no-js lt-ie9 lt-ie8'>
4
- /[if IE 8] <html class='no-js lt-ie9'>
5
- /[if gt IE 8]><!
2
+ /[if lt IE 7]
3
+ %html.no-js.lt-ie9.lt-ie8.lt-ie7{ lang: I18n.locale }
4
+ /[if IE 7]
5
+ %html.no-js.lt-ie9.lt-ie8{ lang: I18n.locale }
6
+ /[if IE 8]
7
+ %html.no-js.lt-ie9{ lang: I18n.locale }
8
+ <!--[if gt IE 8]><!-->
6
9
  %html.no-js{ lang: I18n.locale }
7
- / <![endif]
10
+ <!--<![endif]-->
8
11
  %head
9
- %title= content_for?(:title) ? yield(:title) : 'Untitled'
10
-
11
12
  %meta{ charset: 'utf-8' }
12
13
  %meta{ 'http-equiv' => 'X-UA-Compatible', content: 'IE=edge,chrome=1' }
14
+ %title= content_for?(:title) ? yield(:title) : 'Untitled'
13
15
  %meta{ name: 'keywords', content: '' }
14
16
  %meta{ name: 'description', content: '' }
15
17
  %meta{ name: 'viewport', content: 'width=device-width, initial-scale=1.0' }
@@ -22,9 +24,7 @@
22
24
  <![endif]-->
23
25
 
24
26
  -# Typekit
25
- = javascript_include_tag '//use.typekit.net/XXXX.js', :media => 'all'
26
- :javascript
27
- try{Typekit.load();}catch(e){}
27
+ = render 'layouts/typekit'
28
28
 
29
29
  = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true
30
30
  = javascript_include_tag 'modernizr', 'data-turbolinks-track' => true
@@ -1,3 +1,5 @@
1
+ require File.expand_path('../../../lib/shoestrap/version', __FILE__)
2
+
1
3
  #
2
4
  # SC Rails Application Template
3
5
  #
@@ -13,6 +15,11 @@ application "config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '
13
15
  application "config.i18n.available_locales = [:de]"
14
16
  application "config.i18n.default_locale = :de"
15
17
 
18
+ #
19
+ # Miscellaneous
20
+ #
21
+ application "config.typekit_key = false"
22
+
16
23
  inject_into_file 'config/application.rb', :after => "Application < Rails::Application" do
17
24
  <<-eos
18
25
  # Customize generators
@@ -31,24 +38,32 @@ end
31
38
  #
32
39
  # Default Gems (others are added to gemfile by individual generators called after app generation)
33
40
  #
41
+ gem 'therubyracer', platforms: :ruby
34
42
  gem 'simple_form', '3.0.0.rc'
35
43
  gem 'haml'
36
44
  gem 'haml-rails'
37
45
  gem 'simple-navigation'
38
46
  gem 'mail'
39
47
  gem 'fabrication'
40
- gem 'shoestrap'
41
- gem 'kuhsaft'
48
+ gem 'inherited_resources'
49
+
50
+ if ENV['SHOESTRAP_PATH']
51
+ gem 'shoestrap', path: ENV['SHOESTRAP_PATH']
52
+ else
53
+ gem 'shoestrap', Shoestrap::VERSION
54
+ end
55
+
42
56
  gem 'selectivizr-rails'
43
57
  gem 'modernizr-rails'
44
58
  gem 'bourbon'
45
59
 
46
60
  gem_group :development, :test do
47
61
  gem 'pry'
48
- gem 'ruby_gntp'
62
+ gem 'terminal-notifier-guard'
49
63
  gem 'rspec-rails'
50
64
  gem 'guard-rspec'
51
65
  gem 'guard-spring'
66
+ gem 'mailcatcher'
52
67
  end
53
68
 
54
69
  gem_group :test do
@@ -60,6 +75,7 @@ end
60
75
  #
61
76
  remove_file "app/views/layouts/application.html.erb"
62
77
  copy_file "application.html.haml", "app/views/layouts/application.html.haml"
78
+ copy_file '_typekit.html.haml', 'app/views/layouts/_typekit.html.haml'
63
79
 
64
80
  #
65
81
  # Application helper