shoestrap 1.0.0.pre1 → 1.0.0.pre2

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.
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