pah 0.0.14 → 0.0.15

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 (66) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +23 -0
  3. data/CONTRIBUTING.md +2 -3
  4. data/LICENSE.txt +1 -1
  5. data/README.md +0 -1
  6. data/features/bourbon.feature +23 -0
  7. data/features/bullet.feature +2 -1
  8. data/features/canonical_host.feature +2 -1
  9. data/features/capybara.feature +2 -1
  10. data/features/database.feature +2 -1
  11. data/features/env.feature +2 -1
  12. data/features/gemfile.feature +3 -2
  13. data/features/generators.feature +2 -1
  14. data/features/git.feature +2 -1
  15. data/features/heroku.feature +2 -1
  16. data/features/jumpup.feature +2 -1
  17. data/features/layout.feature +2 -2
  18. data/features/letter_opener.feature +2 -1
  19. data/features/locale.feature +4 -3
  20. data/features/newrelic.feature +2 -1
  21. data/features/public.feature +2 -1
  22. data/features/puma.feature +2 -1
  23. data/features/rack_deflater.feature +2 -1
  24. data/features/rack_timeout.feature +2 -1
  25. data/features/rails_works.feature +4 -2
  26. data/features/readme.feature +2 -1
  27. data/features/remove_unused_files.feature +2 -1
  28. data/features/rollbar.feature +3 -2
  29. data/features/rspec.feature +3 -1
  30. data/features/run_specs.feature +2 -1
  31. data/features/runner.feature +42 -4
  32. data/features/secret_token.feature +2 -1
  33. data/features/secure_headers.feature +2 -1
  34. data/features/sendgrid.feature +2 -1
  35. data/features/simple_form.feature +2 -1
  36. data/features/step_definitions/create_simple_app.rb +19 -9
  37. data/features/step_definitions/file_content.rb +5 -0
  38. data/features/support/env.rb +3 -0
  39. data/lib/pah/files/Gemfile +24 -25
  40. data/lib/pah/files/app/views/application/_flash_messages.html.slim +3 -4
  41. data/lib/pah/files/app/views/layouts/application.html.slim +4 -33
  42. data/lib/pah/files/config/initializers/rack_timeout.rb +3 -1
  43. data/lib/pah/files/spec/acceptance/dummy_spec.rb +2 -2
  44. data/lib/pah/files/spec/rails_helper.rb +19 -0
  45. data/lib/pah/files/spec/spec_helper.rb +10 -43
  46. data/lib/pah/pah.rb +64 -0
  47. data/lib/pah/partials/_bourbon.rb +25 -0
  48. data/lib/pah/partials/_heroku.rb +16 -9
  49. data/lib/pah/partials/_layout.rb +1 -2
  50. data/lib/pah/partials/_locale.rb +2 -2
  51. data/lib/pah/partials/_rack_deflater.rb +1 -1
  52. data/lib/pah/partials/_rollbar.rb +1 -1
  53. data/lib/pah/partials/_rspec.rb +1 -0
  54. data/lib/pah/template.rb +2 -58
  55. data/lib/pah/version.rb +2 -2
  56. metadata +9 -15
  57. data/features/assets.feature +0 -13
  58. data/lib/pah/files/app/assets/javascripts/application.js +0 -33
  59. data/lib/pah/files/app/assets/stylesheets/_variables.scss +0 -39
  60. data/lib/pah/files/app/assets/stylesheets/application.scss +0 -5
  61. data/lib/pah/files/app/assets/stylesheets/form.scss +0 -248
  62. data/lib/pah/files/app/assets/stylesheets/general.scss +0 -47
  63. data/lib/pah/files/app/assets/stylesheets/reset.scss +0 -75
  64. data/lib/pah/files/app/assets/stylesheets/responsive.scss +0 -97
  65. data/lib/pah/files/app/views/application/_error_messages.html.slim +0 -5
  66. data/lib/pah/partials/_assets.rb +0 -12
@@ -1,6 +1,7 @@
1
+ @no-clobber
1
2
  Feature: Secure Headers
2
3
  Background:
3
- Given I have created a app with pah
4
+ Given I have created the app "myapp" with pah
4
5
 
5
6
  Scenario: Have correct files
6
7
  Then I have the file app/controllers/application_controller.rb and contents of this file should include:
@@ -1,6 +1,7 @@
1
+ @no-clobber
1
2
  Feature: SendGrid
2
3
  Background:
3
- Given I have created a app with pah
4
+ Given I have created the app "myapp" with pah
4
5
 
5
6
  Scenario: Have correct files
6
7
  Then I have the file config/environments/production.rb and contents of this file should include:
@@ -1,6 +1,7 @@
1
+ @no-clobber
1
2
  Feature: Simple Form
2
3
  Background:
3
- Given I have created a app with pah
4
+ Given I have created the app "myapp" with pah
4
5
 
5
6
  Scenario: Have correct files
6
7
  Then I have a config/locales/simple_form.pt-BR.yml
@@ -1,10 +1,20 @@
1
- Given(/^I have created a app with pah$/) do
2
- steps %Q{
3
- When I run `pah myapp` interactively
4
- And I type "n"
5
- Then the output should contain:
6
- """
7
- CONGRATS! INSTALLATION COMPLETE!
8
- """
9
- }
1
+ Given(/^I have created the app "(.*?)" with pah$/) do |app_name|
2
+ app_exists = File.directory?("tmp/aruba/#{app_name}")
3
+
4
+ if app_exists
5
+ steps %Q{
6
+ Then a directory named "#{app_name}" should exist
7
+ }
8
+ else
9
+ steps %Q{
10
+ When I run `rm -rf #{app_name}`
11
+ Then I run `pah #{app_name}` interactively
12
+ And I type "n"
13
+ Then the output should contain:
14
+ """
15
+ CONGRATS! INSTALLATION COMPLETE!
16
+ """
17
+ Then a directory named "#{app_name}" should exist
18
+ }
19
+ end
10
20
  end
@@ -8,6 +8,11 @@ Then(/^I have the file(.* )and contents of this file should include:$/) do |file
8
8
  expect(file_content).to include(content)
9
9
  end
10
10
 
11
+ Then(/^I have the file(.* )and contents of this file should not include:$/) do |file, content|
12
+ file_content = read_from_app(file.strip)
13
+ expect(file_content).to_not include(content)
14
+ end
15
+
11
16
  Then(/^I have the file(.* )and contents of this file should match:$/) do |file, content|
12
17
  file_content = read_from_app(file.strip)
13
18
  expect(file_content).to match(%r{#{content}})
@@ -7,3 +7,6 @@ ENV['PATH'] = "#{root}/features/support/bin#{File::PATH_SEPARATOR}#{ENV['PATH']}
7
7
  Before do
8
8
  @aruba_timeout_seconds = 60 * 5
9
9
  end
10
+
11
+ # Remove old generated projects
12
+ system "rm -rf tmp/aruba"
@@ -1,58 +1,57 @@
1
1
  source 'https://rubygems.org'
2
2
  ruby '2.1.2'
3
3
 
4
- # See: https://github.com/rails/rails/issues/13164
5
- gem 'i18n', github: 'svenfuchs/i18n',
6
- ref: '8fc94e7e9ec20396e974b0549cf499662238bf56'
7
-
8
4
  gem 'rails', 'RAILS_VERSION'
9
5
  gem 'puma', '2.8.2'
10
- gem 'secure_headers', '1.1.1'
11
- gem 'jquery-rails', '3.1.0'
6
+ gem 'secure_headers', '1.2.0'
7
+ gem 'jquery-rails', '3.1.1'
12
8
  gem 'turbolinks', '2.2.2'
13
- gem 'jbuilder', '2.0.4'
14
- gem 'slim-rails', '2.1.4'
9
+ gem 'jbuilder', '2.1.1'
10
+ gem 'slim-rails', '2.1.5'
15
11
  gem 'pg', '0.17.1'
16
12
  gem 'sass-rails', '4.0.3'
17
13
  gem 'coffee-rails', '4.0.1'
18
- gem 'uglifier', '2.5.0'
19
- gem 'rack-canonical-host', '0.1.0'
20
- gem 'rack-timeout', github: 'kch/rack-timeout', ref: '83ca9f5141c1fdcb626820b1601c406e3a3a560a'
21
- gem 'bourbon', '3.1.8'
14
+ gem 'uglifier', '2.5.1'
22
15
  gem 'simple_form', '3.1.0.rc1'
23
16
  gem 'flutie', '2.0.0'
24
- gem 'newrelic_rpm', '3.8.0.218'
17
+ gem 'bourbon', '3.2.3'
18
+ gem 'neat', '1.5.1'
19
+ gem 'bitters', '0.10.0'
20
+ gem 'refills', '0.0.2'
25
21
 
26
- group :production do
22
+ group :production, :staging do
27
23
  gem 'rails_12factor', '0.0.2'
28
- gem 'rollbar', '0.12.17'
24
+ gem 'rack-canonical-host', '0.1.0'
25
+ gem 'rack-timeout', github: 'kch/rack-timeout', ref: '83ca9f5141c1fdcb626820b1601c406e3a3a560a'
26
+ gem 'newrelic_rpm', '3.9.0.229'
27
+ gem 'rollbar', '0.13.1'
29
28
  end
30
29
 
31
30
  group :development do
32
31
  gem 'spring', '1.1.3'
33
- gem 'foreman', '0.63.0'
32
+ gem 'foreman', '0.74.0'
34
33
  gem 'jumpup', '0.0.5'
35
34
  gem 'jumpup-heroku', '0.0.5'
36
35
  gem 'better_errors', '1.1.0'
37
36
  gem 'binding_of_caller', '0.7.2'
38
37
  gem 'letter_opener', '1.2.0'
39
- gem 'bullet', '4.8.0'
40
- gem 'quiet_assets', '1.0.2'
38
+ gem 'bullet', '4.11.3'
39
+ gem 'quiet_assets', '1.0.3'
41
40
  end
42
41
 
43
42
  group :test do
44
43
  gem 'shoulda-matchers', '2.6.1', require: false
45
44
  gem 'simplecov', '0.8.2', require: false
46
- gem 'email_spec', github: 'bmabey/email-spec', ref: '8f862c22413fe4cb220a8dac6b9206b8b46d1148'
47
- gem 'capybara', '2.2.1'
48
- gem 'poltergeist', '1.5.0'
49
- gem 'vcr', '2.9.0'
50
- gem 'webmock', '< 1.16' # VCR 2.8.0 requires Webmock >= 1.8.0, < 1.16
51
- gem 'database_cleaner', '1.2.0'
45
+ gem 'email_spec', '1.6.0'
46
+ gem 'capybara', '2.4.1'
47
+ gem 'poltergeist', '1.5.1'
48
+ gem 'vcr', '2.9.2'
49
+ gem 'webmock', '1.18.0'
50
+ gem 'database_cleaner', '1.3.0'
52
51
  end
53
52
 
54
53
  group :development, :test do
55
- gem 'rspec-rails', '3.0.0.rc1'
54
+ gem 'rspec-rails', '3.0.1'
56
55
  gem 'factory_girl_rails', '4.4.1'
57
56
  gem 'pry-rails', '0.3.2'
58
57
  gem 'dotenv-rails', '0.11.1'
@@ -1,4 +1,3 @@
1
- #flash-messages
2
- - flash.each do |key, value|
3
- div id="flash_#{key}"
4
- = value
1
+ - flash.each do |key, value|
2
+ div id="flash_#{key}"
3
+ = value
@@ -9,43 +9,14 @@ html lang="pt"
9
9
  = page_title(app_name: 'example')
10
10
 
11
11
  link href="/favicon.ico" rel=("shortcut icon")
12
- = yield(:header_tags)
13
12
 
14
- = stylesheet_link_tag "application", :type => nil, :media => "all"
15
- = javascript_include_tag "application", :type => nil, "data-turbolinks-track" => true
13
+ = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true
14
+ = javascript_include_tag 'application', 'data-turbolinks-track' => true
16
15
  = csrf_meta_tags
17
16
 
18
17
  /![if lt IE 9]
19
18
  script src="http://html5shim.googlecode.com/svn/trunk/html5.js"
20
19
 
21
- javascript:
22
- var _gaq = _gaq || [];
23
- _gaq.push(['_setAccount', 'XXXXX-XXXX']);
24
- _gaq.push(['_trackPageview']);
25
-
26
- (function() {
27
- var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
28
- ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
29
- var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
30
- })();
31
-
32
20
  body class=body_class
33
- #wrapper
34
- header
35
- .holder
36
- #logo
37
- = link_to "Logo", "/"
38
- = render 'flash_messages'
39
-
40
- #main-content
41
- .holder
42
- section role="main"
43
- = yield
44
-
45
- - if content_for?(:sidebar)
46
- aside
47
- = yield(:sidebar)
48
-
49
- footer
50
- .holder
51
- = "Copyright &copy; #{Time.zone.now.year} App".html_safe
21
+ = render 'flash_messages'
22
+ = yield
@@ -1 +1,3 @@
1
- Rack::Timeout.timeout = Integer(ENV['RACK_TIMEOUT'] || 10) # seconds
1
+ if defined? Rack::Timeout
2
+ Rack::Timeout.timeout = Integer(ENV['RACK_TIMEOUT'] || 10) # seconds
3
+ end
@@ -1,7 +1,7 @@
1
1
  # -*- encoding : utf-8 -*-
2
- require 'spec_helper'
2
+ require 'rails_helper'
3
3
 
4
- describe "Homepage", type: :request do
4
+ RSpec.describe "Homepage", type: :request do
5
5
  xit {
6
6
  visit root_path
7
7
  page.should have_content('Copyright &copy; 2012 App')
@@ -0,0 +1,19 @@
1
+ ENV["RAILS_ENV"] ||= 'test'
2
+ require 'spec_helper'
3
+ require File.expand_path("../../config/environment", __FILE__)
4
+ require 'rspec/rails'
5
+ require 'shoulda/matchers'
6
+ require "email_spec"
7
+
8
+ Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
9
+
10
+ ActiveRecord::Migration.maintain_test_schema!
11
+
12
+ RSpec.configure do |config|
13
+ config.use_transactional_fixtures = true
14
+ config.infer_spec_type_from_file_location!
15
+ config.render_views
16
+ config.include FactoryGirl::Syntax::Methods
17
+ config.include EmailSpec::Helpers
18
+ config.include EmailSpec::Matchers
19
+ end
@@ -1,5 +1,3 @@
1
- # This file is copied to spec/ when you run 'rails generate rspec:install'
2
-
3
1
  if ENV['coverage'] == 'on'
4
2
  require 'simplecov'
5
3
  SimpleCov.start 'rails' do
@@ -7,51 +5,20 @@ if ENV['coverage'] == 'on'
7
5
  end
8
6
  end
9
7
 
10
- ENV["RAILS_ENV"] ||= 'test'
11
- require File.expand_path("../../config/environment", __FILE__)
12
- require 'rspec/rails'
13
- require 'shoulda/matchers'
14
- require "email_spec"
15
-
16
- # Checks for pending migrations before tests are run.
17
- # If you are not using ActiveRecord, you can remove this line.
18
- ActiveRecord::Migration.maintain_test_schema!
19
-
20
- # Requires supporting ruby files with custom matchers and macros, etc,
21
- # in spec/support/ and its subdirectories.
22
- Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}
23
-
24
8
  RSpec.configure do |config|
25
- # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
26
- config.fixture_path = "#{::Rails.root}/spec/fixtures"
27
-
28
- # If you're not using ActiveRecord, or you'd prefer not to run each of your
29
- # examples within a transaction, remove the following line or assign false
30
- # instead of true.
31
- config.use_transactional_fixtures = true
32
-
33
- # Use the new rspec expect syntax
34
- config.expect_with :rspec do |c|
35
- c.syntax = :expect
9
+ config.disable_monkey_patching!
10
+ config.order = :random
11
+ Kernel.srand config.seed
12
+ config.filter_run focus: true
13
+ config.run_all_when_everything_filtered = true
14
+ config.expect_with :rspec do |expectations|
15
+ expectations.syntax = :expect
36
16
  end
37
-
38
17
  config.mock_with :rspec do |mocks|
39
18
  mocks.syntax = :expect
40
19
  mocks.verify_partial_doubles = true
41
20
  end
42
-
43
- config.infer_spec_type_from_file_location!
44
- config.order = "random"
45
- config.render_views
46
- config.include FactoryGirl::Syntax::Methods
47
- config.include EmailSpec::Helpers
48
- config.include EmailSpec::Matchers
49
-
50
- config.filter_run focus: true
51
- config.run_all_when_everything_filtered = true
52
-
53
- # If true, the base class of anonymous controllers will be inferred
54
- # automatically. This will be the default behavior in future versions of
55
- # rspec-rails.
56
- config.infer_base_class_for_anonymous_controllers = false
21
+ if config.files_to_run.one?
22
+ config.default_formatter = 'doc'
23
+ end
57
24
  end
@@ -0,0 +1,64 @@
1
+ require File.expand_path(File.join('..', 'pah', 'version.rb'), File.dirname(__FILE__))
2
+
3
+ %w{colored}.each do |component|
4
+ if Gem::Specification.find_all_by_name(component).empty?
5
+ run "gem install #{component}"
6
+ Gem.refresh
7
+ Gem::Specification.find_by_name(component).activate
8
+ end
9
+ end
10
+
11
+ require "rails"
12
+ require "colored"
13
+ require "bundler"
14
+
15
+ def template_root
16
+ File.expand_path(File.join('..', 'pah'), File.dirname(__FILE__))
17
+ end
18
+
19
+ def partials
20
+ File.join(template_root, 'partials')
21
+ end
22
+
23
+ def static_files
24
+ File.join(template_root, 'files')
25
+ end
26
+
27
+ # Copy a static file from the template into the new application
28
+ def copy_static_file(path)
29
+ remove_file path
30
+ file path, File.read(File.join(static_files, path))
31
+ end
32
+
33
+ def apply_n(partial_name, message='')
34
+ puts message.magenta
35
+
36
+ in_root do
37
+ Bundler.with_clean_env do
38
+ apply "#{partials}/_#{partial_name}.rb"
39
+ end
40
+ end
41
+
42
+ puts "\n"
43
+ end
44
+
45
+ def will_you_like_to?(question)
46
+ answer = ask("Will you like to #{question} [y,n]".red)
47
+ case answer.downcase
48
+ when "yes", "y"
49
+ true
50
+ when "no", "n"
51
+ false
52
+ else
53
+ will_you_like_to?(question)
54
+ end
55
+ end
56
+
57
+ def ask_unless_test(*params)
58
+ ask(*params)
59
+ end
60
+
61
+ def git_commit(message)
62
+ message = "#{message}\n\nGenerated by pah version #{Pah::VERSION}"
63
+ git commit: "-qm '#{message}'"
64
+ end
@@ -0,0 +1,25 @@
1
+ css_path = 'app/assets/stylesheets/'
2
+ application_css_path = "#{css_path}application.css"
3
+
4
+ prepend_to_file application_css_path do
5
+ <<IMPORTS
6
+ @import 'bourbon';
7
+ @import 'base/base';
8
+ @import 'neat';
9
+ IMPORTS
10
+ end
11
+
12
+ gsub_file application_css_path, /\*= require_tree \./, '*'
13
+
14
+ inside(css_path) do
15
+ system 'bundle exec bitters install'
16
+ end
17
+
18
+ gsub_file "#{css_path}base/_base.scss", %r{// @import 'grid-settings';}, "@import 'grid-settings';"
19
+
20
+ system "mv #{application_css_path} #{css_path}application.css.scss"
21
+
22
+ git rm: application_css_path
23
+ git add: css_path
24
+ git_commit 'Install bourbon.'
25
+
@@ -1,5 +1,6 @@
1
1
  class HerokuApp < Rails::Generators::AppGenerator
2
- DEFAULT_ADDONS = %w(heroku-postgresql:dev pgbackups:auto-month loggly:mole sendgrid:starter rollbar newrelic:stark)
2
+ DEFAULT_ADDONS = %w(heroku-postgresql:dev pgbackups:auto-month loggly:mole
3
+ sendgrid:starter rollbar newrelic:stark)
3
4
 
4
5
  attr_reader :name, :description, :config
5
6
 
@@ -22,41 +23,47 @@ class HerokuApp < Rails::Generators::AppGenerator
22
23
 
23
24
  def add_secret_token
24
25
  say "Creating SECRET_KEY_BASE for Heroku '#{name}.herokuapp.com'".magenta
25
- system "heroku config:set SECRET_KEY_BASE=#{SecureRandom::hex(60)} --app #{name}"
26
+ run "heroku config:set SECRET_KEY_BASE=#{SecureRandom::hex(60)} --app #{name}"
26
27
  end
27
28
 
28
29
  def add_heroku_git_remote
29
30
  say "Adding Heroku git remote for deploy to '#{name}'.".magenta
30
- system "git remote add heroku git@heroku.com:#{name}.git"
31
+ run "git remote add heroku git@heroku.com:#{name}.git"
31
32
  end
32
33
 
33
34
  def add_heroku_addon(addon)
34
35
  say "Adding heroku addon [#{addon}] to '#{name}'.".magenta
35
- system "heroku addons:add #{addon} --app #{name}"
36
+ run "heroku addons:add #{addon} --app #{name}"
36
37
  end
37
38
 
38
39
  def add_canonical_domain(domain)
39
- system "heroku domains:add #{domain} --app #{name}"
40
+ run "heroku domains:add #{domain} --app #{name}"
40
41
  end
41
42
 
42
43
  def add_collaborator(email)
43
- system "heroku sharing:add #{email} --app #{name}"
44
+ run "heroku sharing:add #{email} --app #{name}"
44
45
  end
45
46
 
46
47
  def add_timezone_config
47
48
  say "Adding timezone config on Heroku".magenta
48
- system "heroku config:set TZ=America/Sao_Paulo --app #{name}"
49
+ run "heroku config:set TZ=America/Sao_Paulo --app #{name}"
49
50
  end
50
51
 
51
52
  def open
52
53
  say "Pushing application to heroku...".magenta
53
54
 
54
- system "git push heroku master"
55
+ run "git push heroku master"
55
56
 
56
- system "heroku open --app #{name}"
57
+ run "heroku open --app #{name}"
57
58
  end
58
59
 
59
60
  private
61
+ def run(command)
62
+ unless system(command)
63
+ raise "Error while running #{command}"
64
+ end
65
+ end
66
+
60
67
  def check_canonical_domain
61
68
  domain = @config[:heroku][:domain]
62
69
  add_canonical_domain(domain) unless domain.blank?