stationed 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +20 -0
- data/README.md +136 -0
- data/Rakefile +27 -0
- data/app/helpers/crud_link_helper.rb +22 -0
- data/app/helpers/page_title_helper.rb +107 -0
- data/lib/generators/stationed/templates_generator.rb +24 -0
- data/lib/stationed/app_builder.rb +13 -0
- data/lib/stationed/crud_tag.rb +70 -0
- data/lib/stationed/engine.rb +8 -0
- data/lib/stationed/generators/app_generator.rb +52 -0
- data/lib/stationed/generators/plugins/capybara.rb +12 -0
- data/lib/stationed/generators/plugins/capybara_webkit.rb +14 -0
- data/lib/stationed/generators/plugins/database_cleaner.rb +13 -0
- data/lib/stationed/generators/plugins/devise.rb +43 -0
- data/lib/stationed/generators/plugins/draper.rb +14 -0
- data/lib/stationed/generators/plugins/factory_girl.rb +14 -0
- data/lib/stationed/generators/plugins/flashes.rb +12 -0
- data/lib/stationed/generators/plugins/foreman.rb +15 -0
- data/lib/stationed/generators/plugins/generators.rb +12 -0
- data/lib/stationed/generators/plugins/guard.rb +26 -0
- data/lib/stationed/generators/plugins/haml.rb +12 -0
- data/lib/stationed/generators/plugins/i18n_spec.rb +13 -0
- data/lib/stationed/generators/plugins/kaminari.rb +18 -0
- data/lib/stationed/generators/plugins/layout.rb +13 -0
- data/lib/stationed/generators/plugins/normalize.rb +12 -0
- data/lib/stationed/generators/plugins/pry.rb +19 -0
- data/lib/stationed/generators/plugins/pundit.rb +20 -0
- data/lib/stationed/generators/plugins/rack_deflater.rb +17 -0
- data/lib/stationed/generators/plugins/responders.rb +28 -0
- data/lib/stationed/generators/plugins/rspec.rb +21 -0
- data/lib/stationed/generators/plugins/rubocop.rb +14 -0
- data/lib/stationed/generators/plugins/simple_form.rb +32 -0
- data/lib/stationed/generators/plugins/simple_form_inputs.rb +13 -0
- data/lib/stationed/generators/plugins/spring.rb +13 -0
- data/lib/stationed/generators/plugins/stationed.rb +12 -0
- data/lib/stationed/generators/plugins/strong_parameters.rb +18 -0
- data/lib/stationed/generators/plugins/styles.rb +24 -0
- data/lib/stationed/generators/plugins/turbolinks.rb +13 -0
- data/lib/stationed/generators/plugins/webmock.rb +13 -0
- data/lib/stationed/generators/plugins/wiki.rb +20 -0
- data/lib/stationed/generators/plugins/yard.rb +14 -0
- data/lib/stationed/generators/plugins.rb +10 -0
- data/lib/stationed/generators/templates/Deployment.md +3 -0
- data/lib/stationed/generators/templates/Home.md +8 -0
- data/lib/stationed/generators/templates/Procfile +1 -0
- data/lib/stationed/generators/templates/README.md.erb +42 -0
- data/lib/stationed/generators/templates/Services.md +3 -0
- data/lib/stationed/generators/templates/Setup.md +58 -0
- data/lib/stationed/generators/templates/Testing.md +3 -0
- data/lib/stationed/generators/templates/application.html.haml +11 -0
- data/lib/stationed/generators/templates/application.scss +6 -0
- data/lib/stationed/generators/templates/application_decorator.rb +23 -0
- data/lib/stationed/generators/templates/application_responder.rb +6 -0
- data/lib/stationed/generators/templates/authorization.rb +11 -0
- data/lib/stationed/generators/templates/capybara_webkit.rb +1 -0
- data/lib/stationed/generators/templates/database_cleaner.rb +19 -0
- data/lib/stationed/generators/templates/devise.rb +3 -0
- data/lib/stationed/generators/templates/env.erb +3 -0
- data/lib/stationed/generators/templates/factories_spec.rb +10 -0
- data/lib/stationed/generators/templates/factory_girl.rb +3 -0
- data/lib/stationed/generators/templates/flashes.html.haml +5 -0
- data/lib/stationed/generators/templates/generators.rb +11 -0
- data/lib/stationed/generators/templates/gollum.rake +5 -0
- data/lib/stationed/generators/templates/gollum.rb +5 -0
- data/lib/stationed/generators/templates/i18n_spec.rb +10 -0
- data/lib/stationed/generators/templates/layout.scss +3 -0
- data/lib/stationed/generators/templates/normalize.css +425 -0
- data/lib/stationed/generators/templates/paginating_decorator.rb +7 -0
- data/lib/stationed/generators/templates/pundit.rb +1 -0
- data/lib/stationed/generators/templates/rubocop.rake +5 -0
- data/lib/stationed/generators/templates/rubocop.yml +38 -0
- data/lib/stationed/generators/templates/select2_input.rb +14 -0
- data/lib/stationed/generators/templates/simple_form.rb +65 -0
- data/lib/stationed/generators/templates/simplecov +6 -0
- data/lib/stationed/generators/templates/spec_helper.rb +27 -0
- data/lib/stationed/generators/templates/spring.rb +1 -0
- data/lib/stationed/generators/templates/static_input.rb +11 -0
- data/lib/stationed/generators/templates/webmock.rb +1 -0
- data/lib/stationed/generators/templates/yardopts +7 -0
- data/lib/stationed/version.rb +3 -0
- data/lib/stationed.rb +4 -0
- data/lib/tasks/stationed_tasks.rake +4 -0
- data/lib/templates/haml/scaffold/_form.html.haml +11 -0
- data/lib/templates/haml/scaffold/edit.html.haml +2 -0
- data/lib/templates/haml/scaffold/index.html.haml +24 -0
- data/lib/templates/haml/scaffold/new.html.haml +2 -0
- data/lib/templates/haml/scaffold/show.html.haml +9 -0
- data/lib/templates/rails/scaffold_controller/controller.rb +64 -0
- data/lib/templates/rspec/integration/request_spec.rb +10 -0
- data/lib/templates/rspec/model/model_spec.rb +6 -0
- data/lib/templates/rspec/scaffold/controller_spec.rb +224 -0
- data/lib/templates/rspec/scaffold/edit_spec.rb +20 -0
- data/lib/templates/rspec/scaffold/index_spec.rb +20 -0
- data/lib/templates/rspec/scaffold/new_spec.rb +20 -0
- data/lib/templates/rspec/scaffold/routing_spec.rb +17 -0
- data/lib/templates/rspec/scaffold/show_spec.rb +14 -0
- data/spec/dummy/README.rdoc +28 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/javascripts/application.js +13 -0
- data/spec/dummy/app/assets/stylesheets/application.css +13 -0
- data/spec/dummy/app/controllers/application_controller.rb +5 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/config/application.rb +23 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +29 -0
- data/spec/dummy/config/environments/production.rb +80 -0
- data/spec/dummy/config/environments/test.rb +36 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +12 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/routes.rb +56 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/log/development.log +0 -0
- data/spec/dummy/log/test.log +1418 -0
- data/spec/dummy/public/404.html +58 -0
- data/spec/dummy/public/422.html +58 -0
- data/spec/dummy/public/500.html +57 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/helpers/crud_link_helper_spec.rb +88 -0
- data/spec/helpers/page_title_helper_spec.rb +83 -0
- data/spec/spec_helper.rb +14 -0
- metadata +261 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 38bb78f102e4d35a45d2226d922a0f2c183aa54b
|
4
|
+
data.tar.gz: 312a9980d2168f891695ff3897863a7e69b49a44
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ee86970abab0e607e449ed93c2104579e1bd903769f53245e0b41c38b856c00b1deec5c663e99cd4fb38e715f04f35071a7e1f281b95b37a0bb8eb9d89f16d4e
|
7
|
+
data.tar.gz: d909f871bcbbffb800249f7924ad69ea19921b1ce279c99d931b73b03f162100d51fc4a646b1f2d8e57d65da98bd010e2f0207aa54896f77302a3b61607502cc
|
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2014 YOURNAME
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,136 @@
|
|
1
|
+
# Stationed
|
2
|
+
|
3
|
+
## Introduction
|
4
|
+
|
5
|
+
Stationed is an extensive Rails application generator, providing you with a
|
6
|
+
starter app full standard goodies such as testing, authentication,
|
7
|
+
authorization, decorators, tasks and styles. But as an engine it also provides
|
8
|
+
you with customized scaffold generators including proper tests. Finally, it
|
9
|
+
provides some basic view helpers that every project tends to need. All in all,
|
10
|
+
stationed is pretty sweet.
|
11
|
+
|
12
|
+
## Installation
|
13
|
+
|
14
|
+
In order to use Stationed to generate applications, install the gem:
|
15
|
+
|
16
|
+
% gem install stationed
|
17
|
+
|
18
|
+
To use it as an engine in your Rails application, include it in your Gemfile:
|
19
|
+
|
20
|
+
gem 'stationed'
|
21
|
+
|
22
|
+
Run `bundle install` and you're all set.
|
23
|
+
|
24
|
+
## Application generator
|
25
|
+
|
26
|
+
The application generator is invoked using the `stationed` command:
|
27
|
+
|
28
|
+
% stationed my_app
|
29
|
+
|
30
|
+
This will generate a default Rails application with the following additions:
|
31
|
+
|
32
|
+
* **Rubocop** for automated style guide testing.
|
33
|
+
* **Pry** for debugging.
|
34
|
+
* **Guard** for auto-running tests.
|
35
|
+
* **Rspec** with Simplecov for testing.
|
36
|
+
* **FactoryGirl** for object factories.
|
37
|
+
* **DatabaseCleaner** as transaction replacement.
|
38
|
+
* **Capybara** for feature testing.
|
39
|
+
* **CapybaraWebkit** for headless browser testing.
|
40
|
+
* **Pundit** for authorization.
|
41
|
+
* **Yard** for API documentation.
|
42
|
+
* **Foreman** for process management.
|
43
|
+
* **Bourbon, Neat and Bitters and normalize.css** for styling.
|
44
|
+
* **Draper** for decorators.
|
45
|
+
* **Gollum** for a built-in development wiki.
|
46
|
+
* **Devise** for authentication.
|
47
|
+
* **Turbolinks** removed.
|
48
|
+
* **Kaminari** for pagination.
|
49
|
+
* **SimpleForm** for awesome form markup.
|
50
|
+
* **Haml** for pretty view templates.
|
51
|
+
* **Webmock** to disallow external HTTP requests in tests.
|
52
|
+
* **I18nSpec** for automated validation of locale files.
|
53
|
+
* **Responders** for DRY controllers.
|
54
|
+
|
55
|
+
...and some other minor configurations and goodies.
|
56
|
+
|
57
|
+
All these additions are stand-alone "plugins" for the base application
|
58
|
+
generator, so it is easy to adapt them or add others. Have a look at
|
59
|
+
`lib/stationed/generators/plugins` to see all plugins.
|
60
|
+
|
61
|
+
## Helpers
|
62
|
+
|
63
|
+
### Page title
|
64
|
+
|
65
|
+
The page title helper allows you to set a page title based on a string,
|
66
|
+
translation key or by a resource. You can easily output it on your page and in
|
67
|
+
your layout.
|
68
|
+
|
69
|
+
* When given no argument, this will return the currently set page title or
|
70
|
+
the site-wide default.
|
71
|
+
* When given a string argument, that will be used in the formatted page
|
72
|
+
title (for example with a site-wide suffix).
|
73
|
+
* When given an ActiveModel-compliant object, its singular and plural human
|
74
|
+
names will be interpolated into the model-based title template, along
|
75
|
+
with the record's ID.
|
76
|
+
|
77
|
+
You can provide templates for page titles using `I18n` in three broad
|
78
|
+
categories: the `model`, `formatted` and `standard` keys. These will be used
|
79
|
+
when you set a page title via a model, string or nothing at all, respectively.
|
80
|
+
|
81
|
+
You can specify these translation keys on a global default level, per controller
|
82
|
+
or per controller action. The more specific key will take precedence.
|
83
|
+
|
84
|
+
### CRUD link helpers
|
85
|
+
|
86
|
+
A collection of helper methods to generate links to CRUD operations with labels
|
87
|
+
and URLs generated by resources.
|
88
|
+
|
89
|
+
For example:
|
90
|
+
|
91
|
+
link_to_new(Post) # => <a href="/posts/new">New Post</a>
|
92
|
+
link_to_edit(@product) # => <a href="/products/1/edit">Edit Product 1</a>
|
93
|
+
|
94
|
+
You can use I18n to fully customize the labels on these links. There are helper
|
95
|
+
methods for `new`, `edit`, `show`, `destroy` and `index`, in the variants
|
96
|
+
`link_to`, `button_to` and `button_link_to` (for links with a `button` class
|
97
|
+
name).
|
98
|
+
|
99
|
+
### Templates
|
100
|
+
|
101
|
+
Stationed includes customized scaffold templates for Haml, Rspec and
|
102
|
+
controllers. These work out of the box, but you can use a generator to install
|
103
|
+
the templates into your application for easy customization:
|
104
|
+
|
105
|
+
rails generate stationed:templates
|
106
|
+
|
107
|
+
## Other
|
108
|
+
|
109
|
+
### Note on Patches/Pull Requests
|
110
|
+
|
111
|
+
1. Fork the project.
|
112
|
+
2. Make your feature addition or bug fix.
|
113
|
+
3. Add tests for it. This is important so I don't break it in a future version
|
114
|
+
unintentionally.
|
115
|
+
4. Commit, do not mess with rakefile, version, or history. (if you want to have
|
116
|
+
your own version, that is fine but bump version in a commit by itself I can
|
117
|
+
ignore when I pull)
|
118
|
+
5. Send me a pull request. Bonus points for topic branches.
|
119
|
+
|
120
|
+
### Issues
|
121
|
+
|
122
|
+
Please report any issues, defects or suggestions in the [Github issue
|
123
|
+
tracker](https://github.com/avdgaag/stationed/issues).
|
124
|
+
|
125
|
+
### What has changed?
|
126
|
+
|
127
|
+
See the [HISTORY](https://github.com/avdgaag/stationed/blob/master/HISTORY.md) file for a detailed changelog.
|
128
|
+
|
129
|
+
### Credits
|
130
|
+
|
131
|
+
Created by: Arjan van der Gaag
|
132
|
+
URL: [http://arjanvandergaag.nl](http://arjanvandergaag.nl)
|
133
|
+
Project homepage:
|
134
|
+
[http://avdgaag.github.com/rpub](http://avdgaag.github.com/stationed)
|
135
|
+
Date: april 2014
|
136
|
+
License: [MIT-license](https://github.com/avdgaag/stationed/LICENSE) (same as Ruby)
|
data/Rakefile
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
begin
|
2
|
+
require 'bundler/setup'
|
3
|
+
rescue LoadError
|
4
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'rdoc/task'
|
8
|
+
|
9
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
10
|
+
rdoc.rdoc_dir = 'rdoc'
|
11
|
+
rdoc.title = 'Stationed'
|
12
|
+
rdoc.options << '--line-numbers'
|
13
|
+
rdoc.rdoc_files.include('README.rdoc')
|
14
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
|
+
end
|
16
|
+
|
17
|
+
APP_RAKEFILE = File.expand_path('../spec/dummy/Rakefile', __FILE__)
|
18
|
+
load 'rails/tasks/engine.rake'
|
19
|
+
|
20
|
+
Bundler::GemHelper.install_tasks
|
21
|
+
|
22
|
+
require 'rspec/core'
|
23
|
+
require 'rspec/core/rake_task'
|
24
|
+
|
25
|
+
desc 'Run all specs in spec directory (excluding plugin specs)'
|
26
|
+
RSpec::Core::RakeTask.new(spec: 'app:db:test:prepare')
|
27
|
+
task default: :spec
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'stationed/crud_tag'
|
2
|
+
|
3
|
+
# Provides links to CRUD-style operations for resources.
|
4
|
+
#
|
5
|
+
# @see CrudTag
|
6
|
+
module CrudLinkHelper
|
7
|
+
%i(new edit show index destroy).each do |action|
|
8
|
+
define_method :"link_to_#{action}" do |*args|
|
9
|
+
Stationed::CrudTag.new(self, :link_to, *args).send action
|
10
|
+
end
|
11
|
+
|
12
|
+
define_method :"button_to_#{action}" do |*args|
|
13
|
+
Stationed::CrudTag.new(self, :button_to, *args).send action
|
14
|
+
end
|
15
|
+
|
16
|
+
define_method :"button_link_to_#{action}" do |*args|
|
17
|
+
options = args.extract_options!
|
18
|
+
options.reverse_merge! class: 'button'
|
19
|
+
Stationed::CrudTag.new(self, :link_to, *args, options).send action
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
module PageTitleHelper
|
2
|
+
# Sets or retrieves the current page title.
|
3
|
+
#
|
4
|
+
# * When given no argument, this will return the currently set page title or
|
5
|
+
# the site-wide default.
|
6
|
+
# * When given a string argument, that will be used in the formatted page
|
7
|
+
# title (for example with a site-wide suffix).
|
8
|
+
# * When given an ActiveModel-compliant object, its singular and plural human
|
9
|
+
# names will be interpolated into the model-based title template, along
|
10
|
+
# with the record's ID.
|
11
|
+
#
|
12
|
+
# You can provide templates for page titles using `I18n` in three broad
|
13
|
+
# categories: the `model`, `formatted` and `standard` keys. These will be
|
14
|
+
# used when you set a page title via a model, string or nothing at all,
|
15
|
+
# respectively.
|
16
|
+
#
|
17
|
+
# You can specify these translation keys on a global default level, per
|
18
|
+
# controller or per controller action. The more specific key will take
|
19
|
+
# precedence.
|
20
|
+
#
|
21
|
+
# @example Set the page title to a string
|
22
|
+
# page_title 'Welcome'
|
23
|
+
# @example Set the page title based on a model name
|
24
|
+
# page_title Post.find(1)
|
25
|
+
# # example translation key: 'Editing %{singular} %{id}'
|
26
|
+
# @example Show the page title
|
27
|
+
# <title><%= title %></title>
|
28
|
+
#
|
29
|
+
# @param [String, #model_name] String or ActiveModel-compliant object
|
30
|
+
# @return [String] page title component or formatted page title
|
31
|
+
def page_title(new_title = nil)
|
32
|
+
if new_title
|
33
|
+
title_from_string_or_record_or_class(new_title).tap do |str|
|
34
|
+
content_for :page_title, str
|
35
|
+
end
|
36
|
+
elsif content_for? :page_title
|
37
|
+
formatted_title
|
38
|
+
else
|
39
|
+
standard_title
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def standard_title
|
46
|
+
I18n.translate(
|
47
|
+
standard_defaults.first,
|
48
|
+
default: standard_defaults.drop(1)
|
49
|
+
)
|
50
|
+
end
|
51
|
+
|
52
|
+
def formatted_title
|
53
|
+
I18n.translate(
|
54
|
+
formatted_defaults.first,
|
55
|
+
title: content_for(:page_title),
|
56
|
+
default: formatted_defaults.drop(1)
|
57
|
+
)
|
58
|
+
end
|
59
|
+
|
60
|
+
def title_for_class(klass, options = {})
|
61
|
+
options.reverse_merge!(
|
62
|
+
default: model_defaults.drop(1),
|
63
|
+
singular: klass.model_name.human,
|
64
|
+
plural: klass.model_name.human.pluralize
|
65
|
+
)
|
66
|
+
I18n.translate model_defaults.first, options
|
67
|
+
end
|
68
|
+
|
69
|
+
def title_from_string_or_record_or_class(object)
|
70
|
+
if object.respond_to?(:model_name)
|
71
|
+
title_for_class(object)
|
72
|
+
elsif object.class.respond_to?(:model_name)
|
73
|
+
title_for_class(object.class, id: object.to_param)
|
74
|
+
else
|
75
|
+
object
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def formatted_defaults
|
80
|
+
[
|
81
|
+
:"page_title.#{controller_name}.#{action_name}.formatted",
|
82
|
+
:"page_title.#{controller_name}.formatted",
|
83
|
+
:'page_title.default.formatted',
|
84
|
+
:'page_title.default.standard',
|
85
|
+
::Rails.application.class.parent_name
|
86
|
+
]
|
87
|
+
end
|
88
|
+
|
89
|
+
def standard_defaults
|
90
|
+
[
|
91
|
+
:"page_title.#{controller_name}.#{action_name}.standard",
|
92
|
+
:"page_title.#{controller_name}.standard",
|
93
|
+
:'page_title.default.standard',
|
94
|
+
::Rails.application.class.parent_name
|
95
|
+
]
|
96
|
+
end
|
97
|
+
|
98
|
+
def model_defaults
|
99
|
+
[
|
100
|
+
:"page_title.#{controller_name}.#{action_name}.model",
|
101
|
+
:"page_title.#{controller_name}.model",
|
102
|
+
:'page_title.default.model',
|
103
|
+
:'page_title.default.standard',
|
104
|
+
::Rails.application.class.parent_name
|
105
|
+
]
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Stationed
|
2
|
+
module Generators
|
3
|
+
class TemplatesGenerator < Rails::Generators::Base
|
4
|
+
source_root File.expand_path('../../../templates', __FILE__)
|
5
|
+
|
6
|
+
def self.banner
|
7
|
+
<<-BANNER.chomp
|
8
|
+
rails generate stationed:templates
|
9
|
+
|
10
|
+
Copies all generator templates from the Stationed gem into your project
|
11
|
+
directory for easy customisation.
|
12
|
+
BANNER
|
13
|
+
end
|
14
|
+
|
15
|
+
def copy_files
|
16
|
+
root = Pathname(self.class.source_root)
|
17
|
+
Pathname.glob(root.join('**', '*.{haml,rb}')).each do |path|
|
18
|
+
relpath = path.relative_path_from(root)
|
19
|
+
copy_file relpath, Pathname('lib/templates').join(relpath)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Stationed
|
2
|
+
class AppBuilder < Rails::AppBuilder
|
3
|
+
def readme
|
4
|
+
template 'README.md.erb', 'README.md'
|
5
|
+
end
|
6
|
+
|
7
|
+
def database_yml
|
8
|
+
super
|
9
|
+
append_to_file '.gitignore', "config/database.yml\n"
|
10
|
+
template "config/databases/#{options[:database]}.yml", "config/database.yml.example"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
module Stationed
|
2
|
+
# Base class for CRUD-style tags
|
3
|
+
class CrudTag
|
4
|
+
attr_reader :context, :method, :resource, :model
|
5
|
+
|
6
|
+
def initialize(context, method, resource, options = {})
|
7
|
+
@context = context
|
8
|
+
@method = method
|
9
|
+
@resource = resource
|
10
|
+
@model = Array(resource).last
|
11
|
+
@options = options
|
12
|
+
end
|
13
|
+
|
14
|
+
def index
|
15
|
+
context.send method, label(:index), model, options
|
16
|
+
end
|
17
|
+
|
18
|
+
def new
|
19
|
+
*nested_parts, _ = Array(resource)
|
20
|
+
context.send method, label(:new), [:new, *nested_parts, model_name.singular], options
|
21
|
+
end
|
22
|
+
|
23
|
+
def show
|
24
|
+
context.send method, label(:show), [*resource], options
|
25
|
+
end
|
26
|
+
|
27
|
+
def edit
|
28
|
+
context.send method, label(:edit), [:edit, *resource], options
|
29
|
+
end
|
30
|
+
|
31
|
+
def destroy
|
32
|
+
context.send method, label(:destroy), [*resource], options.merge(data: { method: :delete })
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def options
|
38
|
+
default_options.merge(@options)
|
39
|
+
end
|
40
|
+
|
41
|
+
def model_name
|
42
|
+
@model_name ||=
|
43
|
+
if @model.respond_to?(:model_name)
|
44
|
+
@model.model_name
|
45
|
+
elsif @model.class.respond_to?(:model_name)
|
46
|
+
@model.class.model_name
|
47
|
+
else
|
48
|
+
fail ArgumentError,
|
49
|
+
'Pass in an ActiveModel-compliant record or class'
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def default_options
|
54
|
+
{}
|
55
|
+
end
|
56
|
+
|
57
|
+
def label(action)
|
58
|
+
context.translate(
|
59
|
+
:"helpers.buttons.#{model_name.i18n_key}.#{action}",
|
60
|
+
default: [
|
61
|
+
:"helpers.buttons.defaults.#{action}",
|
62
|
+
"#{action.capitalize} %{model}"
|
63
|
+
],
|
64
|
+
model: model_name.human,
|
65
|
+
plural: model_name.human.pluralize,
|
66
|
+
id: model.to_param
|
67
|
+
)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require 'rails/generators/rails/app/app_generator'
|
3
|
+
require 'stationed/app_builder'
|
4
|
+
require 'stationed/generators/plugins'
|
5
|
+
|
6
|
+
module Stationed
|
7
|
+
module Generators
|
8
|
+
class AppGenerator < Rails::Generators::AppGenerator
|
9
|
+
source_root File.expand_path('../templates', __FILE__)
|
10
|
+
source_paths << Rails::Generators::AppGenerator.source_root
|
11
|
+
source_paths << source_root
|
12
|
+
|
13
|
+
prepend Plugins::Rubocop
|
14
|
+
prepend Plugins::Pry
|
15
|
+
prepend Plugins::Guard
|
16
|
+
prepend Plugins::Rspec
|
17
|
+
prepend Plugins::FactoryGirl
|
18
|
+
prepend Plugins::DatabaseCleaner
|
19
|
+
prepend Plugins::Capybara
|
20
|
+
prepend Plugins::CapybaraWebkit
|
21
|
+
prepend Plugins::Pundit
|
22
|
+
prepend Plugins::Yard
|
23
|
+
prepend Plugins::Foreman
|
24
|
+
prepend Plugins::Styles
|
25
|
+
prepend Plugins::Draper
|
26
|
+
prepend Plugins::Wiki
|
27
|
+
prepend Plugins::Generators
|
28
|
+
prepend Plugins::Devise
|
29
|
+
prepend Plugins::Turbolinks
|
30
|
+
prepend Plugins::Kaminari
|
31
|
+
prepend Plugins::SimpleForm
|
32
|
+
prepend Plugins::Haml
|
33
|
+
prepend Plugins::StrongParameters
|
34
|
+
prepend Plugins::RackDeflater
|
35
|
+
prepend Plugins::Flashes
|
36
|
+
prepend Plugins::Webmock
|
37
|
+
prepend Plugins::Layout
|
38
|
+
prepend Plugins::Normalize
|
39
|
+
prepend Plugins::I18nSpec
|
40
|
+
prepend Plugins::SimpleFormInputs
|
41
|
+
prepend Plugins::Spring
|
42
|
+
prepend Plugins::Stationed
|
43
|
+
prepend Plugins::Responders
|
44
|
+
|
45
|
+
protected
|
46
|
+
|
47
|
+
def get_builder_class
|
48
|
+
Stationed::AppBuilder
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Stationed
|
2
|
+
module Generators
|
3
|
+
module Plugins
|
4
|
+
module Devise
|
5
|
+
def finish_template
|
6
|
+
gem 'devise'
|
7
|
+
copy_file 'devise.rb', 'spec/support/devise.rb'
|
8
|
+
route "devise_scope :user do\n root to: 'devise/sessions#new'\n end\n"
|
9
|
+
environment nil, env: :test do
|
10
|
+
"config.action_mailer.default_url_options = { host: 'example.com' }"
|
11
|
+
end
|
12
|
+
environment nil, env: :development do
|
13
|
+
"config.action_mailer.default_url_options = { host: 'localhost:3000' }"
|
14
|
+
end
|
15
|
+
super
|
16
|
+
end
|
17
|
+
|
18
|
+
def run_bundle
|
19
|
+
super
|
20
|
+
generate 'devise:install'
|
21
|
+
generate 'devise user'
|
22
|
+
application do
|
23
|
+
<<-RUBY
|
24
|
+
# Let Pundit authorization or custom responders not influence the workings
|
25
|
+
# of Devise.
|
26
|
+
config.to_prepare do
|
27
|
+
[
|
28
|
+
Devise::SessionsController,
|
29
|
+
Devise::RegistrationsController,
|
30
|
+
Devise::PasswordsController
|
31
|
+
].each do |devise_controller_class|
|
32
|
+
devise_controller_class.skip_after_action :verify_authorized
|
33
|
+
devise_controller_class.skip_after_action :verify_policy_scoped
|
34
|
+
devise_controller_class.responder = ActionController::Responder
|
35
|
+
end
|
36
|
+
end
|
37
|
+
RUBY
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Stationed
|
2
|
+
module Generators
|
3
|
+
module Plugins
|
4
|
+
module Draper
|
5
|
+
def finish_template
|
6
|
+
gem 'draper'
|
7
|
+
copy_file 'application_decorator.rb', 'app/decorators/application_decorator.rb'
|
8
|
+
copy_file 'paginating_decorator.rb', 'app/decorators/paginating_decorator.rb'
|
9
|
+
super
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Stationed
|
2
|
+
module Generators
|
3
|
+
module Plugins
|
4
|
+
module FactoryGirl
|
5
|
+
def finish_template
|
6
|
+
gem 'factory_girl_rails', group: [:development, :test]
|
7
|
+
copy_file 'factory_girl.rb', 'spec/support/factory_girl.rb'
|
8
|
+
copy_file 'factories_spec.rb', 'spec/models/factories_spec.rb'
|
9
|
+
super
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Stationed
|
2
|
+
module Generators
|
3
|
+
module Plugins
|
4
|
+
module Foreman
|
5
|
+
def finish_template
|
6
|
+
gem 'foreman'
|
7
|
+
gem 'yard', require: false, group: :doc
|
8
|
+
copy_file 'Procfile', 'Procfile'
|
9
|
+
template 'env.erb', '.env'
|
10
|
+
super
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Stationed
|
2
|
+
module Generators
|
3
|
+
module Plugins
|
4
|
+
module Guard
|
5
|
+
def finish_template
|
6
|
+
gem_group :development do
|
7
|
+
gem 'guard'
|
8
|
+
gem 'guard-rspec'
|
9
|
+
gem 'guard-livereload'
|
10
|
+
gem 'terminal-notifier-guard'
|
11
|
+
end
|
12
|
+
super
|
13
|
+
end
|
14
|
+
|
15
|
+
def run_bundle
|
16
|
+
super
|
17
|
+
run 'bundle exec guard init rspec'
|
18
|
+
run 'bundle exec guard init livereload'
|
19
|
+
gsub_file 'Guardfile',
|
20
|
+
/guard :rspec do/,
|
21
|
+
"guard :rspec, cmd: 'spring rspec' do"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|