suspenders 1.0.0 → 1.0.1
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.
- data/NEWS.md +15 -9
- data/bin/suspenders +3 -3
- data/lib/suspenders/app_builder.rb +70 -71
- data/lib/suspenders/generators/app_generator.rb +58 -60
- data/lib/suspenders/version.rb +1 -1
- data/templates/suspenders_gitignore +0 -1
- data/templates/suspenders_layout.html.erb.erb +2 -2
- metadata +2 -10
- data/templates/factory_girl_steps.rb +0 -1
- data/templates/factory_girl_syntax_cucumber.rb +0 -1
data/NEWS.md
CHANGED
@@ -1,4 +1,10 @@
|
|
1
|
-
|
1
|
+
1.0.1 (August 2, 2012)
|
2
|
+
|
3
|
+
* Fix broken install on Ruby 1.8.
|
4
|
+
* Remove db/schema.rb from .gitignore.
|
5
|
+
* Remove Factory Girl step definitions.
|
6
|
+
|
7
|
+
1.0.0 (June 29, 2012)
|
2
8
|
|
3
9
|
* Ignore `bin/`, `.rake_tasks`, `.bundle/`, and `.gem/`.
|
4
10
|
* Create a root route only with `--clearance`.
|
@@ -6,12 +12,12 @@ New for 1.0.0:
|
|
6
12
|
* Style static error pages.
|
7
13
|
* Cucumber requires everything under `features/`, regardless of pwd.
|
8
14
|
* Added gems:
|
9
|
-
* foreman
|
10
|
-
* therubyracer
|
15
|
+
* `foreman`
|
16
|
+
* `therubyracer`
|
11
17
|
* Removed gems:
|
12
|
-
* copycopter_client
|
13
|
-
* heroku
|
14
|
-
* ruby-debug
|
15
|
-
* sass
|
16
|
-
* sprockets-redirect
|
17
|
-
* email_spec
|
18
|
+
* `copycopter_client`
|
19
|
+
* `heroku`
|
20
|
+
* `ruby-debug`
|
21
|
+
* `sass`
|
22
|
+
* `sprockets-redirect`
|
23
|
+
* `email_spec`
|
data/bin/suspenders
CHANGED
@@ -10,7 +10,7 @@ if ['create', '--create'].include? ARGV[0]
|
|
10
10
|
end
|
11
11
|
|
12
12
|
templates_root = File.expand_path(File.join("..", "templates"), File.dirname(__FILE__))
|
13
|
-
Suspenders::
|
14
|
-
Suspenders::
|
13
|
+
Suspenders::AppGenerator.source_root templates_root
|
14
|
+
Suspenders::AppGenerator.source_paths << Rails::Generators::AppGenerator.source_root << templates_root
|
15
15
|
|
16
|
-
Suspenders::
|
16
|
+
Suspenders::AppGenerator.start
|
@@ -3,7 +3,7 @@ module Suspenders
|
|
3
3
|
include Suspenders::Actions
|
4
4
|
|
5
5
|
def readme
|
6
|
-
template
|
6
|
+
template 'README.md.erb', 'README.md'
|
7
7
|
end
|
8
8
|
|
9
9
|
def remove_public_index
|
@@ -15,56 +15,57 @@ module Suspenders
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def raise_delivery_errors
|
18
|
-
replace_in_file
|
18
|
+
replace_in_file 'config/environments/development.rb',
|
19
|
+
'raise_delivery_errors = false', 'raise_delivery_errors = true'
|
19
20
|
end
|
20
21
|
|
21
22
|
def enable_factory_girl_syntax
|
22
|
-
copy_file
|
23
|
-
copy_file "factory_girl_syntax_cucumber.rb", "features/support/factory_girl.rb"
|
23
|
+
copy_file 'factory_girl_syntax_rspec.rb', 'spec/support/factory_girl.rb'
|
24
24
|
end
|
25
25
|
|
26
26
|
def setup_staging_environment
|
27
|
-
run
|
27
|
+
run 'cp config/environments/production.rb config/environments/staging.rb'
|
28
28
|
end
|
29
29
|
|
30
|
-
def
|
31
|
-
empty_directory
|
30
|
+
def create_partials_directory
|
31
|
+
empty_directory 'app/views/application'
|
32
32
|
end
|
33
33
|
|
34
34
|
def create_shared_flashes
|
35
|
-
copy_file
|
35
|
+
copy_file '_flashes.html.erb', 'app/views/application/_flashes.html.erb'
|
36
36
|
end
|
37
37
|
|
38
38
|
def create_shared_javascripts
|
39
|
-
copy_file
|
39
|
+
copy_file '_javascript.html.erb', 'app/views/application/_javascript.html.erb'
|
40
40
|
end
|
41
41
|
|
42
42
|
def create_application_layout
|
43
|
-
template
|
44
|
-
|
45
|
-
|
43
|
+
template 'suspenders_layout.html.erb.erb',
|
44
|
+
'app/views/layouts/application.html.erb',
|
45
|
+
:force => true
|
46
46
|
end
|
47
47
|
|
48
48
|
def create_common_javascripts
|
49
|
-
directory
|
49
|
+
directory 'javascripts', 'app/assets/javascripts'
|
50
50
|
end
|
51
51
|
|
52
52
|
def add_jquery_ui
|
53
|
-
inject_into_file
|
53
|
+
inject_into_file 'app/assets/javascripts/application.js',
|
54
|
+
'//= require jquery-ui\n', :before => '//= require_tree .'
|
54
55
|
end
|
55
56
|
|
56
57
|
def use_postgres_config_template
|
57
|
-
template
|
58
|
+
template 'postgresql_database.yml.erb', 'config/database.yml', :force => true
|
58
59
|
end
|
59
60
|
|
60
61
|
def create_database
|
61
|
-
bundle_command
|
62
|
+
bundle_command 'exec rake db:create'
|
62
63
|
end
|
63
64
|
|
64
65
|
def include_custom_gems
|
65
66
|
additions_path = find_in_source_paths 'Gemfile_additions'
|
66
67
|
new_gems = File.open(additions_path).read
|
67
|
-
inject_into_file
|
68
|
+
inject_into_file 'Gemfile', "\n#{new_gems}", :after => /gem 'jquery-rails'/
|
68
69
|
end
|
69
70
|
|
70
71
|
def configure_rspec
|
@@ -73,68 +74,66 @@ module Suspenders
|
|
73
74
|
generate.test_framework :rspec
|
74
75
|
end
|
75
76
|
RUBY
|
76
|
-
inject_into_class
|
77
|
+
inject_into_class 'config/application.rb', 'Application', generators_config
|
77
78
|
end
|
78
79
|
|
79
80
|
def configure_action_mailer
|
80
|
-
action_mailer_host
|
81
|
-
action_mailer_host
|
82
|
-
action_mailer_host
|
83
|
-
action_mailer_host
|
81
|
+
action_mailer_host 'development', "#{app_name}.local"
|
82
|
+
action_mailer_host 'test', 'example.com'
|
83
|
+
action_mailer_host 'staging', "staging.#{app_name}.com"
|
84
|
+
action_mailer_host 'production', "#{app_name}.com"
|
84
85
|
end
|
85
86
|
|
86
87
|
def generate_rspec
|
87
|
-
generate
|
88
|
-
replace_in_file
|
88
|
+
generate 'rspec:install'
|
89
|
+
replace_in_file 'spec/spec_helper.rb',
|
90
|
+
'# config.mock_with :mocha', 'config.mock_with :mocha'
|
89
91
|
end
|
90
92
|
|
91
93
|
def generate_cucumber
|
92
|
-
generate
|
93
|
-
inject_into_file
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
inject_into_file 'config/cucumber.yml',
|
94
|
+
generate 'cucumber:install', '--rspec', '--capybara'
|
95
|
+
inject_into_file 'features/support/env.rb',
|
96
|
+
%{Capybara.save_and_open_page_path = 'tmp'\n} +
|
97
|
+
%{Capybara.javascript_driver = :webkit\n},
|
98
|
+
:before => %{Capybara.default_selector = :css}
|
99
|
+
inject_into_file 'config/cucumber.yml',
|
100
|
+
' -r features', :after => %{default: <%= std_opts %> features}
|
98
101
|
end
|
99
102
|
|
100
103
|
def generate_clearance
|
101
|
-
generate
|
102
|
-
generate
|
103
|
-
end
|
104
|
-
|
105
|
-
def install_factory_girl_steps
|
106
|
-
copy_file "factory_girl_steps.rb", "features/step_definitions/factory_girl_steps.rb"
|
104
|
+
generate 'clearance:install'
|
105
|
+
generate 'clearance:features'
|
107
106
|
end
|
108
107
|
|
109
108
|
def setup_stylesheets
|
110
|
-
copy_file
|
111
|
-
remove_file
|
112
|
-
concat_file
|
113
|
-
create_file
|
109
|
+
copy_file 'app/assets/stylesheets/application.css', 'app/assets/stylesheets/application.css.scss'
|
110
|
+
remove_file 'app/assets/stylesheets/application.css'
|
111
|
+
concat_file 'import_scss_styles', 'app/assets/stylesheets/application.css.scss'
|
112
|
+
create_file 'app/assets/stylesheets/_screen.scss'
|
114
113
|
end
|
115
114
|
|
116
115
|
def gitignore_files
|
117
|
-
concat_file
|
118
|
-
[
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
116
|
+
concat_file 'suspenders_gitignore', '.gitignore'
|
117
|
+
['app/models',
|
118
|
+
'app/assets/images',
|
119
|
+
'app/views/pages',
|
120
|
+
'db/migrate',
|
121
|
+
'log',
|
122
|
+
'spec/support',
|
123
|
+
'spec/lib',
|
124
|
+
'spec/models',
|
125
|
+
'spec/views',
|
126
|
+
'spec/controllers',
|
127
|
+
'spec/helpers',
|
128
|
+
'spec/support/matchers',
|
129
|
+
'spec/support/mixins',
|
130
|
+
'spec/support/shared_examples'].each do |dir|
|
132
131
|
empty_directory_with_gitkeep dir
|
133
132
|
end
|
134
133
|
end
|
135
134
|
|
136
135
|
def init_git
|
137
|
-
run
|
136
|
+
run 'git init'
|
138
137
|
end
|
139
138
|
|
140
139
|
def create_heroku_apps
|
@@ -150,25 +149,25 @@ module Suspenders
|
|
150
149
|
def document_heroku
|
151
150
|
heroku_readme_path = find_in_source_paths 'HEROKU_README.md'
|
152
151
|
documentation = File.open(heroku_readme_path).read
|
153
|
-
inject_into_file(
|
152
|
+
inject_into_file('README.md', "#{documentation}\n", :before => 'Most importantly')
|
154
153
|
end
|
155
154
|
|
156
155
|
def copy_miscellaneous_files
|
157
|
-
copy_file
|
158
|
-
copy_file
|
159
|
-
copy_file
|
156
|
+
copy_file 'errors.rb', 'config/initializers/errors.rb'
|
157
|
+
copy_file 'time_formats.rb', 'config/initializers/time_formats.rb'
|
158
|
+
copy_file 'Procfile'
|
160
159
|
end
|
161
160
|
|
162
161
|
def customize_error_pages
|
163
162
|
meta_tags =<<-EOS
|
164
|
-
<meta charset=
|
165
|
-
<meta name=
|
163
|
+
<meta charset='utf-8' />
|
164
|
+
<meta name='ROBOTS' content='NOODP' />
|
166
165
|
EOS
|
167
166
|
style_tags =<<-EOS
|
168
|
-
<link href=
|
167
|
+
<link href='/assets/application.css' media='all' rel='stylesheet' type='text/css' />
|
169
168
|
EOS
|
170
169
|
%w(500 404 422).each do |page|
|
171
|
-
inject_into_file "public/#{page}.html", meta_tags, :after =>
|
170
|
+
inject_into_file "public/#{page}.html", meta_tags, :after => '<head>\n'
|
172
171
|
replace_in_file "public/#{page}.html", /<style.+>.+<\/style>/mi, style_tags.strip
|
173
172
|
replace_in_file "public/#{page}.html", /<!--.+-->\n/, ''
|
174
173
|
end
|
@@ -179,27 +178,27 @@ module Suspenders
|
|
179
178
|
end
|
180
179
|
|
181
180
|
def set_attr_accessibles_on_user
|
182
|
-
inject_into_file
|
183
|
-
|
181
|
+
inject_into_file 'app/models/user.rb',
|
182
|
+
' attr_accessible :email, :password\n',
|
184
183
|
:after => /include Clearance::User\n/
|
185
184
|
end
|
186
185
|
|
187
186
|
def add_email_validator
|
188
|
-
copy_file
|
187
|
+
copy_file 'email_validator.rb', 'app/validators/email_validator.rb'
|
189
188
|
end
|
190
189
|
|
191
190
|
def include_clearance_matchers
|
192
|
-
create_file
|
191
|
+
create_file 'spec/support/clearance.rb', "require 'clearance/testing'"
|
193
192
|
end
|
194
193
|
|
195
194
|
def setup_default_rake_task
|
196
|
-
append_file
|
197
|
-
|
195
|
+
append_file 'Rakefile' do
|
196
|
+
'task(:default).clear\ntask :default => [:spec, :cucumber]'
|
198
197
|
end
|
199
198
|
end
|
200
199
|
|
201
200
|
def add_clearance_gem
|
202
|
-
inject_into_file
|
201
|
+
inject_into_file 'Gemfile', "\ngem 'clearance'", :after => /gem 'jquery-rails'/
|
203
202
|
end
|
204
203
|
end
|
205
204
|
end
|
@@ -2,19 +2,18 @@ require 'rails/generators'
|
|
2
2
|
require 'rails/generators/rails/app/app_generator'
|
3
3
|
|
4
4
|
module Suspenders
|
5
|
-
class
|
6
|
-
|
7
|
-
|
8
|
-
:desc => "Preconfigure for selected database (options: #{DATABASES.join('/')})"
|
9
|
-
# no Test::Unit by default
|
10
|
-
class_option :skip_test_unit, :type => :boolean, :aliases => "-T", :default => true,
|
11
|
-
:desc => "Skip Test::Unit files"
|
5
|
+
class AppGenerator < Rails::Generators::AppGenerator
|
6
|
+
class_option :database, :type => :string, :aliases => '-d', :default => 'postgresql',
|
7
|
+
:desc => "Preconfigure for selected database (options: #{DATABASES.join('/')})"
|
12
8
|
|
13
|
-
class_option :
|
14
|
-
|
9
|
+
class_option :skip_test_unit, :type => :boolean, :aliases => '-T', :default => true,
|
10
|
+
:desc => 'Skip Test::Unit files'
|
15
11
|
|
16
|
-
class_option :
|
17
|
-
|
12
|
+
class_option :heroku, :type => :boolean, :aliases => '-H', :default => false,
|
13
|
+
:desc => 'Create staging and production heroku apps'
|
14
|
+
|
15
|
+
class_option :clearance, :type => :boolean, :aliases => '-C', :default => true,
|
16
|
+
:desc => 'Add the clearance Rails authentication library'
|
18
17
|
|
19
18
|
def finish_template
|
20
19
|
invoke :suspenders_customization
|
@@ -41,123 +40,122 @@ module Suspenders
|
|
41
40
|
end
|
42
41
|
|
43
42
|
def remove_files_we_dont_need
|
44
|
-
build
|
45
|
-
build
|
43
|
+
build :remove_public_index
|
44
|
+
build :remove_rails_logo_image
|
46
45
|
end
|
47
46
|
|
48
47
|
def setup_development_environment
|
49
|
-
say
|
50
|
-
build
|
51
|
-
build
|
48
|
+
say 'Setting up the development environment'
|
49
|
+
build :raise_delivery_errors
|
50
|
+
build :enable_factory_girl_syntax
|
52
51
|
end
|
53
52
|
|
54
53
|
def setup_staging_environment
|
55
|
-
say
|
56
|
-
build
|
54
|
+
say 'Setting up the staging environment'
|
55
|
+
build :setup_staging_environment
|
57
56
|
end
|
58
57
|
|
59
58
|
def create_suspenders_views
|
60
|
-
say
|
61
|
-
build
|
62
|
-
build
|
63
|
-
build
|
64
|
-
build
|
59
|
+
say 'Creating suspenders views'
|
60
|
+
build :create_partials_directory
|
61
|
+
build :create_shared_flashes
|
62
|
+
build :create_shared_javascripts
|
63
|
+
build :create_application_layout
|
65
64
|
end
|
66
65
|
|
67
66
|
def create_common_javascripts
|
68
|
-
say
|
69
|
-
build
|
67
|
+
say 'Pulling in some common javascripts'
|
68
|
+
build :create_common_javascripts
|
70
69
|
end
|
71
70
|
|
72
71
|
def add_jquery_ui
|
73
|
-
say
|
74
|
-
build
|
72
|
+
say 'Add jQuery ui to the standard application.js'
|
73
|
+
build :add_jquery_ui
|
75
74
|
end
|
76
75
|
|
77
76
|
def customize_gemfile
|
78
|
-
build
|
77
|
+
build :include_custom_gems
|
79
78
|
if options[:clearance]
|
80
|
-
build
|
79
|
+
build :add_clearance_gem
|
81
80
|
end
|
82
|
-
bundle_command
|
81
|
+
bundle_command 'install'
|
83
82
|
end
|
84
83
|
|
85
84
|
def setup_database
|
86
|
-
say
|
85
|
+
say 'Setting up database'
|
87
86
|
if 'postgresql' == options[:database]
|
88
|
-
build
|
87
|
+
build :use_postgres_config_template
|
89
88
|
end
|
90
|
-
build
|
89
|
+
build :create_database
|
91
90
|
end
|
92
91
|
|
93
92
|
def configure_app
|
94
|
-
say
|
95
|
-
build
|
96
|
-
build
|
97
|
-
build
|
98
|
-
build
|
99
|
-
build
|
100
|
-
build
|
101
|
-
build
|
102
|
-
build(:setup_clearance)
|
93
|
+
say 'Configuring app'
|
94
|
+
build :configure_rspec
|
95
|
+
build :configure_action_mailer
|
96
|
+
build :generate_rspec
|
97
|
+
build :generate_cucumber
|
98
|
+
build :add_email_validator
|
99
|
+
build :setup_default_rake_task
|
100
|
+
build :setup_clearance
|
103
101
|
end
|
104
102
|
|
105
103
|
def setup_clearance
|
106
104
|
if options[:clearance]
|
107
|
-
build
|
108
|
-
build
|
105
|
+
build :generate_clearance
|
106
|
+
build :include_clearance_matchers
|
109
107
|
if using_active_record?
|
110
|
-
build
|
108
|
+
build :set_attr_accessibles_on_user
|
111
109
|
end
|
112
110
|
end
|
113
111
|
end
|
114
112
|
|
115
113
|
def setup_stylesheets
|
116
|
-
say
|
117
|
-
build
|
114
|
+
say 'Set up stylesheets'
|
115
|
+
build :setup_stylesheets
|
118
116
|
end
|
119
117
|
|
120
118
|
def setup_git
|
121
|
-
say
|
119
|
+
say 'Initializing git'
|
122
120
|
invoke :setup_gitignore
|
123
121
|
invoke :init_git
|
124
122
|
end
|
125
123
|
|
126
124
|
def create_heroku_apps
|
127
125
|
if options['heroku']
|
128
|
-
say
|
129
|
-
build
|
130
|
-
build
|
126
|
+
say 'Creating heroku apps'
|
127
|
+
build :create_heroku_apps
|
128
|
+
build :document_heroku
|
131
129
|
end
|
132
130
|
end
|
133
131
|
|
134
132
|
def setup_gitignore
|
135
|
-
build
|
133
|
+
build :gitignore_files
|
136
134
|
end
|
137
135
|
|
138
136
|
def init_git
|
139
|
-
build
|
137
|
+
build :init_git
|
140
138
|
end
|
141
139
|
|
142
140
|
def copy_miscellaneous_files
|
143
|
-
say
|
144
|
-
build
|
141
|
+
say 'Copying miscellaneous support files'
|
142
|
+
build :copy_miscellaneous_files
|
145
143
|
end
|
146
144
|
|
147
145
|
def customize_error_pages
|
148
|
-
say
|
149
|
-
build
|
146
|
+
say 'Customizing the 500/404/422 pages'
|
147
|
+
build :customize_error_pages
|
150
148
|
end
|
151
149
|
|
152
150
|
def setup_root_route
|
153
151
|
if options[:clearance]
|
154
|
-
say
|
155
|
-
build
|
152
|
+
say 'Setting up a root route'
|
153
|
+
build :setup_root_route
|
156
154
|
end
|
157
155
|
end
|
158
156
|
|
159
157
|
def outro
|
160
|
-
say
|
158
|
+
say 'Congratulations! You just pulled our suspenders.'
|
161
159
|
say "Remember to run 'rails generate airbrake' with your API key."
|
162
160
|
end
|
163
161
|
|
data/lib/suspenders/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: suspenders
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-08-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -122,8 +122,6 @@ files:
|
|
122
122
|
- templates/_javascript.html.erb
|
123
123
|
- templates/email_validator.rb
|
124
124
|
- templates/errors.rb
|
125
|
-
- templates/factory_girl_steps.rb
|
126
|
-
- templates/factory_girl_syntax_cucumber.rb
|
127
125
|
- templates/factory_girl_syntax_rspec.rb
|
128
126
|
- templates/import_scss_styles
|
129
127
|
- templates/javascripts/prefilled_input.js
|
@@ -144,18 +142,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
144
142
|
- - ! '>='
|
145
143
|
- !ruby/object:Gem::Version
|
146
144
|
version: '0'
|
147
|
-
segments:
|
148
|
-
- 0
|
149
|
-
hash: 1021739957831646571
|
150
145
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
151
146
|
none: false
|
152
147
|
requirements:
|
153
148
|
- - ! '>='
|
154
149
|
- !ruby/object:Gem::Version
|
155
150
|
version: '0'
|
156
|
-
segments:
|
157
|
-
- 0
|
158
|
-
hash: 1021739957831646571
|
159
151
|
requirements: []
|
160
152
|
rubyforge_project:
|
161
153
|
rubygems_version: 1.8.24
|
@@ -1 +0,0 @@
|
|
1
|
-
require 'factory_girl/step_definitions'
|
@@ -1 +0,0 @@
|
|
1
|
-
World(FactoryGirl::Syntax::Methods)
|