lotusrb 0.3.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +20 -0
  3. data/FEATURES.md +17 -0
  4. data/README.md +16 -355
  5. data/lib/lotus.rb +0 -1
  6. data/lib/lotus/action/csrf_protection.rb +167 -0
  7. data/lib/lotus/application.rb +3 -1
  8. data/lib/lotus/cli.rb +14 -13
  9. data/lib/lotus/commands/console.rb +1 -1
  10. data/lib/lotus/commands/db.rb +102 -0
  11. data/lib/lotus/commands/db/abstract.rb +15 -0
  12. data/lib/lotus/commands/db/apply.rb +14 -0
  13. data/lib/lotus/commands/db/console.rb +1 -5
  14. data/lib/lotus/commands/db/create.rb +14 -0
  15. data/lib/lotus/commands/db/drop.rb +14 -0
  16. data/lib/lotus/commands/db/migrate.rb +19 -0
  17. data/lib/lotus/commands/db/prepare.rb +14 -0
  18. data/lib/lotus/commands/db/version.rb +14 -0
  19. data/lib/lotus/commands/generate.rb +20 -20
  20. data/lib/lotus/commands/new.rb +1 -0
  21. data/lib/lotus/commands/routes.rb +1 -2
  22. data/lib/lotus/configuration.rb +29 -0
  23. data/lib/lotus/container.rb +19 -3
  24. data/lib/lotus/environment.rb +62 -9
  25. data/lib/lotus/frameworks.rb +1 -0
  26. data/lib/lotus/generators/action.rb +46 -10
  27. data/lib/lotus/generators/action/action_spec.minitest.tt +1 -1
  28. data/lib/lotus/generators/action/action_spec.rspec.tt +1 -1
  29. data/lib/lotus/generators/action/view_spec.minitest.tt +2 -1
  30. data/lib/lotus/generators/action/view_spec.rspec.tt +2 -1
  31. data/lib/lotus/generators/app.rb +39 -0
  32. data/lib/lotus/generators/app/.gitkeep +1 -0
  33. data/lib/lotus/generators/application/app.rb +184 -0
  34. data/lib/lotus/generators/application/app/.env.development.tt +3 -0
  35. data/lib/lotus/generators/application/app/.env.test.tt +3 -0
  36. data/lib/lotus/generators/application/{container/config → app}/.env.tt +0 -0
  37. data/lib/lotus/generators/application/app/.gitkeep +1 -0
  38. data/lib/lotus/generators/application/app/Gemfile.tt +35 -0
  39. data/lib/lotus/generators/application/app/Rakefile.minitest.tt +10 -0
  40. data/lib/lotus/generators/application/app/Rakefile.rspec.tt +5 -0
  41. data/lib/lotus/generators/application/app/apps/.gitkeep.tt +1 -0
  42. data/lib/lotus/generators/application/app/capybara.rb.rspec.tt +8 -0
  43. data/lib/lotus/generators/application/app/config.ru.tt +3 -0
  44. data/lib/lotus/generators/application/app/config/application.rb.tt +227 -0
  45. data/lib/lotus/generators/application/app/config/environment.rb.tt +5 -0
  46. data/lib/lotus/generators/application/app/config/routes.rb.tt +2 -0
  47. data/lib/lotus/generators/application/app/db/.gitkeep +1 -0
  48. data/lib/lotus/generators/application/app/features_helper.rb.minitest.tt +11 -0
  49. data/lib/lotus/generators/application/app/features_helper.rb.rspec.tt +12 -0
  50. data/lib/lotus/generators/application/app/gitignore.tt +2 -0
  51. data/lib/lotus/generators/application/app/lib/app_name.rb.tt +47 -0
  52. data/lib/lotus/generators/application/app/lib/chirp/entities/.gitkeep +1 -0
  53. data/lib/lotus/generators/application/app/lib/chirp/repositories/.gitkeep +1 -0
  54. data/lib/lotus/generators/application/app/lib/config/mapping.rb.tt +7 -0
  55. data/lib/lotus/generators/application/app/lotusrc.tt +3 -0
  56. data/lib/lotus/generators/application/app/rspec.rspec.tt +2 -0
  57. data/lib/lotus/generators/application/app/schema.sql.tt +0 -0
  58. data/lib/lotus/generators/application/app/spec_helper.rb.minitest.tt +7 -0
  59. data/lib/lotus/generators/application/app/spec_helper.rb.rspec.tt +100 -0
  60. data/lib/lotus/generators/application/app/templates/application.html.erb.tt +9 -0
  61. data/lib/lotus/generators/application/app/views/application_layout.rb.tt +7 -0
  62. data/lib/lotus/generators/application/container.rb +37 -13
  63. data/lib/lotus/generators/application/container/{config/.env.development.tt → .env.development.tt} +0 -0
  64. data/lib/lotus/generators/application/container/{config/.env.test.tt → .env.test.tt} +0 -0
  65. data/lib/lotus/generators/application/container/.env.tt +1 -0
  66. data/lib/lotus/generators/application/container/lib/app_name.rb.tt +9 -0
  67. data/lib/lotus/generators/application/container/schema.sql.tt +0 -0
  68. data/lib/lotus/generators/migration.rb +58 -0
  69. data/lib/lotus/generators/migration/migration.rb.tt +4 -0
  70. data/lib/lotus/generators/model.rb +10 -7
  71. data/lib/lotus/generators/slice.rb +4 -12
  72. data/lib/lotus/generators/slice/application.rb.tt +3 -19
  73. data/lib/lotus/generators/slice/config/routes.rb.tt +1 -7
  74. data/lib/lotus/loader.rb +15 -1
  75. data/lib/lotus/lotusrc.rb +8 -3
  76. data/lib/lotus/templates/{welcome.html → welcome.html.erb} +4 -3
  77. data/lib/lotus/version.rb +1 -1
  78. data/lib/lotus/welcome.rb +20 -1
  79. data/lotusrb.gemspec +5 -5
  80. metadata +67 -18
  81. data/lib/lotus/generators/slice/action.rb.tt +0 -8
  82. data/lib/lotus/generators/slice/config/mapping.rb.tt +0 -13
  83. data/lib/lotus/generators/slice/templates/template.html.erb.tt +0 -2
  84. data/lib/lotus/generators/slice/view.rb.tt +0 -5
  85. data/lib/lotus/logger.rb +0 -141
@@ -1,10 +1,11 @@
1
1
  require 'spec_helper'
2
- require_relative '../../../../<%= config[:view_path] %>'
2
+ require_relative '<%= config[:relative_view_path] %>'
3
3
 
4
4
  describe <%= config[:app] %>::Views::<%= config[:controller] %>::<%= config[:action] %> do
5
5
  let(:exposures) { Hash[foo: 'bar'] }
6
6
  let(:template) { Lotus::View::Template.new('<%= config[:template_path] %>') }
7
7
  let(:view) { <%= config[:app] %>::Views::<%= config[:controller] %>::<%= config[:action] %>.new(template, exposures) }
8
+ let(:rendered) { view.render }
8
9
 
9
10
  it "exposes #foo" do
10
11
  view.foo.must_equal exposures.fetch(:foo)
@@ -1,10 +1,11 @@
1
1
  require 'spec_helper'
2
- require_relative '../../../../<%= config[:view_path] %>'
2
+ require_relative '<%= config[:relative_view_path] %>'
3
3
 
4
4
  describe <%= config[:app] %>::Views::<%= config[:controller] %>::<%= config[:action] %> do
5
5
  let(:exposures) { Hash[foo: 'bar'] }
6
6
  let(:template) { Lotus::View::Template.new('<%= config[:template_path] %>') }
7
7
  let(:view) { <%= config[:app] %>::Views::<%= config[:controller] %>::<%= config[:action] %>.new(template, exposures) }
8
+ let(:rendered) { view.render }
8
9
 
9
10
  it "exposes #foo" do
10
11
  expect(view.foo).to eq exposures.fetch(:foo)
@@ -0,0 +1,39 @@
1
+ require 'shellwords'
2
+ require 'lotus/generators/abstract'
3
+ require 'lotus/generators/slice'
4
+
5
+ module Lotus
6
+ module Generators
7
+ class App < Abstract
8
+ def initialize(command)
9
+ super
10
+
11
+ options.merge!(app_name_options)
12
+ @slice_generator = Slice.new(command)
13
+
14
+ cli.class.source_root(source)
15
+ end
16
+
17
+ def start
18
+ @slice_generator.start
19
+ end
20
+
21
+ private
22
+
23
+ # @since 0.4.0
24
+ # @api private
25
+ def app_name_options
26
+ {
27
+ application: app_name,
28
+ application_base_url: application_base_url
29
+ }
30
+ end
31
+
32
+ # @since 0.4.0
33
+ # @api private
34
+ def application_base_url
35
+ options[:application_base_url] || "/#{app_name}"
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1 @@
1
+ #
@@ -0,0 +1,184 @@
1
+ require 'shellwords'
2
+ require 'lotus/generators/abstract'
3
+
4
+ module Lotus
5
+ module Generators
6
+ module Application
7
+ class App < Abstract
8
+ def initialize(command)
9
+ super
10
+
11
+ @upcase_app_name = app_name.to_env_s
12
+ @classified_app_name = Utils::String.new(app_name).classify
13
+ @lotus_head = options.fetch(:lotus_head)
14
+ @test = options[:test]
15
+ @database = options[:database]
16
+ @application_base_url = options[:application_base_url]
17
+ @lotus_model_version = '~> 0.4'
18
+
19
+ cli.class.source_root(source)
20
+ end
21
+
22
+ def start
23
+
24
+ opts = {
25
+ app_name: app_name,
26
+ upcase_app_name: @upcase_app_name,
27
+ classified_app_name: @classified_app_name,
28
+ application_base_url: @application_base_url,
29
+ lotus_head: @lotus_head,
30
+ test: @test,
31
+ database: @database,
32
+ database_config: database_config,
33
+ lotus_model_version: @lotus_model_version,
34
+ }
35
+
36
+ templates = {
37
+ 'lotusrc.tt' => '.lotusrc',
38
+ '.env.tt' => '.env',
39
+ '.env.development.tt' => '.env.development',
40
+ '.env.test.tt' => '.env.test',
41
+ 'Gemfile.tt' => 'Gemfile',
42
+ 'config.ru.tt' => 'config.ru',
43
+ 'config/environment.rb.tt' => 'config/environment.rb',
44
+ 'lib/app_name.rb.tt' => "lib/#{ app_name }.rb",
45
+ 'lib/config/mapping.rb.tt' => 'lib/config/mapping.rb',
46
+ 'config/application.rb.tt' => 'config/application.rb',
47
+ 'config/routes.rb.tt' => 'config/routes.rb',
48
+ 'views/application_layout.rb.tt' => 'app/views/application_layout.rb',
49
+ 'templates/application.html.erb.tt' => 'app/templates/application.html.erb',
50
+ }
51
+
52
+ empty_directories = [
53
+ "app/controllers",
54
+ "app/views",
55
+ "lib/#{ app_name }/entities",
56
+ "lib/#{ app_name }/repositories",
57
+ "public/javascripts",
58
+ "public/stylesheets"
59
+ ]
60
+
61
+ empty_directories << if sql_database?
62
+ "db/migrations"
63
+ else
64
+ "db"
65
+ end
66
+
67
+ # Add testing directories (spec/ is the default for both MiniTest and RSpec)
68
+ empty_directories << [
69
+ "spec/features",
70
+ "spec/controllers",
71
+ "spec/views"
72
+ ]
73
+
74
+ case options[:test]
75
+ when 'rspec'
76
+ templates.merge!(
77
+ 'Rakefile.rspec.tt' => 'Rakefile',
78
+ 'rspec.rspec.tt' => '.rspec',
79
+ 'spec_helper.rb.rspec.tt' => 'spec/spec_helper.rb',
80
+ 'features_helper.rb.rspec.tt' => 'spec/features_helper.rb',
81
+ 'capybara.rb.rspec.tt' => 'spec/support/capybara.rb'
82
+ )
83
+ else # minitest (default)
84
+ templates.merge!(
85
+ 'Rakefile.minitest.tt' => 'Rakefile',
86
+ 'spec_helper.rb.minitest.tt' => 'spec/spec_helper.rb',
87
+ 'features_helper.rb.minitest.tt' => 'spec/features_helper.rb'
88
+ )
89
+ end
90
+
91
+ empty_directories << [
92
+ "spec/#{ app_name }/entities",
93
+ "spec/#{ app_name }/repositories",
94
+ "spec/support"
95
+ ]
96
+
97
+ if sql_database?
98
+ templates.merge!(
99
+ 'schema.sql.tt' => 'db/schema.sql'
100
+ )
101
+ end
102
+
103
+ templates.each do |src, dst|
104
+ cli.template(source.join(src), target.join(dst), opts)
105
+ end
106
+
107
+ empty_directories.flatten.each do |dir|
108
+ gitkeep = '.gitkeep'
109
+ cli.template(source.join(gitkeep), target.join(dir, gitkeep), opts)
110
+ end
111
+
112
+ unless git_dir_present?
113
+ cli.template(source.join('gitignore.tt'), target.join('.gitignore'), opts)
114
+ cli.run("git init #{Shellwords.escape(target)}", capture: true)
115
+ end
116
+ end
117
+
118
+ private
119
+
120
+ def git_dir_present?
121
+ File.directory?(source.join('.git'))
122
+ end
123
+
124
+ def database_config
125
+ {
126
+ gem: database_gem,
127
+ uri: database_uri,
128
+ type: database_type
129
+ }
130
+ end
131
+
132
+ def database_gem
133
+ {
134
+ 'mysql' => 'mysql',
135
+ 'mysql2' => 'mysql2',
136
+ 'postgresql' => 'pg',
137
+ 'postgres' => 'pg',
138
+ 'sqlite' => 'sqlite3',
139
+ 'sqlite3' => 'sqlite3'
140
+ }[@database]
141
+ end
142
+
143
+ def sql_database?
144
+ database_type == :sql
145
+ end
146
+
147
+ def database_type
148
+ case @database
149
+ when 'mysql', 'mysql2', 'postgresql', 'postgres', 'sqlite', 'sqlite3'
150
+ :sql
151
+ when 'filesystem'
152
+ :file_system
153
+ when 'memory'
154
+ :memory
155
+ end
156
+ end
157
+
158
+ def database_uri
159
+ {
160
+ development: "#{database_base_uri}_development",
161
+ test: "#{database_base_uri}_test"
162
+ }
163
+ end
164
+
165
+ def database_base_uri
166
+ case @database
167
+ when 'mysql'
168
+ "mysql://localhost/#{app_name}"
169
+ when 'mysql2'
170
+ "mysql2://localhost/#{app_name}"
171
+ when 'postgresql', 'postgres'
172
+ "postgres://localhost/#{app_name}"
173
+ when 'sqlite', 'sqlite3'
174
+ "sqlite://db/#{Shellwords.escape(app_name)}"
175
+ when 'memory'
176
+ "memory://localhost/#{app_name}"
177
+ else
178
+ "file:///db/#{app_name}"
179
+ end
180
+ end
181
+ end
182
+ end
183
+ end
184
+ end
@@ -0,0 +1,3 @@
1
+ # Define ENV variables for development environment
2
+ <%= config[:upcase_app_name] %>_DATABASE_URL="<%= config[:database_config][:uri][:development] %>"
3
+ <%= config[:upcase_app_name] %>_SESSIONS_SECRET="<% SecureRandom.hex(32) %>"
@@ -0,0 +1,3 @@
1
+ # Define ENV variables for test environment
2
+ <%= config[:app_name].to_env_s %>_DATABASE_URL="<%= config[:database_config][:uri][:test] %>"
3
+ <%= config[:upcase_app_name] %>_SESSIONS_SECRET="<% SecureRandom.hex(32) %>"
@@ -0,0 +1,35 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'bundler'
4
+ gem 'rake'
5
+
6
+ <%- if config[:lotus_head] -%>
7
+ gem 'lotus-utils', require: false, github: 'lotus/utils'
8
+ gem 'lotus-router', require: false, github: 'lotus/router'
9
+ gem 'lotus-validations', require: false, github: 'lotus/validations'
10
+ gem 'lotus-helpers', require: false, github: 'lotus/helpers'
11
+ gem 'lotus-controller', require: false, github: 'lotus/controller'
12
+ gem 'lotus-view', require: false, github: 'lotus/view'
13
+ gem 'lotus-model', require: false, github: 'lotus/model'
14
+ gem 'lotusrb', github: 'lotus/lotus'
15
+ <%- else -%>
16
+ gem 'lotusrb', '<%= Lotus::VERSION %>'
17
+ gem 'lotus-model', '<%= config[:lotus_model_version] %>'
18
+ <%- end -%>
19
+
20
+ <%- if config[:database_config][:gem] %>
21
+ gem '<%= config[:database_config][:gem] %>'
22
+ <%- end -%>
23
+
24
+ group :test do
25
+ <%- if config[:test] == 'rspec' -%>
26
+ gem 'rspec'
27
+ <%- else -%>
28
+ gem 'minitest'
29
+ <%- end -%>
30
+ gem 'capybara'
31
+ end
32
+
33
+ group :production do
34
+ # gem 'puma'
35
+ end
@@ -0,0 +1,10 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.pattern = 'spec/**/*_spec.rb'
6
+ t.libs << 'spec'
7
+ end
8
+
9
+ task default: :test
10
+ task spec: :test
@@ -0,0 +1,5 @@
1
+ require 'rake'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+ task default: :spec
@@ -0,0 +1,8 @@
1
+ module RSpec
2
+ module FeatureExampleGroup
3
+ def self.included(group)
4
+ group.metadata[:type] = :feature
5
+ Capybara.app = <%= config[:classified_app_name] %>::Application.new
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ require './config/environment'
2
+
3
+ run <%= config[:classified_app_name] %>::Application.new
@@ -0,0 +1,227 @@
1
+ require 'lotus/helpers'
2
+
3
+ module <%= config[:classified_app_name] %>
4
+ class Application < Lotus::Application
5
+ configure do
6
+ ##
7
+ # BASIC
8
+ #
9
+
10
+ # Define the root path of this application.
11
+ # All paths specified in this configuration are relative to path below.
12
+ #
13
+ root "#{ __dir__ }/.."
14
+
15
+ # Relative load paths where this application will recursively load the code.
16
+ # When you add new directories, remember to add them here.
17
+ #
18
+ load_paths << [
19
+ 'app/controllers',
20
+ 'app/views'
21
+ ]
22
+
23
+ # Handle exceptions with HTTP statuses (true) or don't catch them (false).
24
+ # Defaults to true.
25
+ # See: http://www.rubydoc.info/gems/lotus-controller/
26
+
27
+ # Exceptions_management
28
+ #
29
+ # handle_exceptions true
30
+
31
+ ##
32
+ # HTTP
33
+ #
34
+
35
+ # Routes definitions for this application
36
+ # See: http://www.rubydoc.info/gems/lotus-router#Usage
37
+ #
38
+ routes 'config/routes'
39
+
40
+ # URI scheme used by the routing system to generate absolute URLs
41
+ # Defaults to "http"
42
+ #
43
+ # scheme 'https'
44
+
45
+ # URI host used by the routing system to generate absolute URLs
46
+ # Defaults to "localhost"
47
+ #
48
+ # host 'example.org'
49
+
50
+ # URI port used by the routing system to generate absolute URLs
51
+ # Argument: An object coercible to integer, default to 80 if the scheme is http and 443 if it's https
52
+ # This SHOULD be configured only in case the application listens to that non standard ports
53
+ #
54
+ # port 443
55
+
56
+ # Enable cookies
57
+ # Argument: boolean to toggle the feature
58
+ # A Hash with options
59
+ #
60
+ # Options: :domain - The domain (String - nil by default, not required)
61
+ # :path - Restrict cookies to a relative URI (String - nil by default)
62
+ # :max_age - Cookies expiration expressed in seconds (Integer - nil by default)
63
+ # :secure - Restrict cookies to secure connections
64
+ # (Boolean - Automatically set on true if currenlty using a secure connection)
65
+ # See #scheme and #ssl?
66
+ # :httponly - Prevent JavaScript access (Boolean - true by default)
67
+ #
68
+ # cookies true
69
+ # or
70
+ # cookies max_age: 300
71
+
72
+ # Enable sessions
73
+ # Argument: Symbol the Rack session adapter
74
+ # A Hash with options
75
+ #
76
+ # See: http://www.rubydoc.info/gems/rack/Rack/Session/Cookie
77
+ #
78
+ # sessions :cookie, secret: ENV['<%= config[:upcase_app_name] %>_SESSIONS_SECRET']
79
+
80
+ # Configure Rack middleware for this application
81
+ #
82
+ # middleware.use Rack::Protection
83
+
84
+ # Default format for the requests that don't specify an HTTP_ACCEPT header
85
+ # Argument: A symbol representation of a mime type, default to :html
86
+ #
87
+ # default_format :html
88
+
89
+ # HTTP Body parsers
90
+ # Parse non GET responses body for a specific mime type
91
+ # Argument: Symbol, which represent the format of the mime type (only `:json` is supported)
92
+ # Object, the parser
93
+ #
94
+ # body_parsers :json
95
+
96
+ ##
97
+ # TEMPLATES
98
+ #
99
+
100
+ # The layout to be used by all views
101
+ #
102
+ layout :application # It will load <%= config[:classified_app_name] %>::Views::ApplicationLayout
103
+
104
+ # The relative path to templates
105
+ #
106
+ templates 'app/templates'
107
+
108
+ ##
109
+ # ASSETS
110
+ #
111
+
112
+ # Specify sources for assets
113
+ # The directory `public/` is added by default
114
+ #
115
+ # assets << [
116
+ # 'vendor/javascripts'
117
+ # ]
118
+
119
+ # Enabling serving assets
120
+ # Defaults to false
121
+ #
122
+ # serve_assets false
123
+
124
+ ##
125
+ # SECURITY
126
+ #
127
+
128
+ # X-Frame-Options is a HTTP header supported by modern browsers.
129
+ # It determines if a web page can or cannot be included via <frame> and
130
+ # <iframe> tags by untrusted domains.
131
+ #
132
+ # Web applications can send this header to prevent Clickjacking attacks.
133
+ #
134
+ # Read more at:
135
+ #
136
+ # * https://developer.mozilla.org/en-US/docs/Web/HTTP/X-Frame-Options
137
+ # * https://www.owasp.org/index.php/Clickjacking
138
+ #
139
+ security.x_frame_options "DENY"
140
+
141
+ # Content-Security-Policy (CSP) is a HTTP header supported by modern browsers.
142
+ # It determines trusted sources of execution for dynamic contents
143
+ # (JavaScript) or other web related assets: stylesheets, images, fonts,
144
+ # plugins, etc.
145
+ #
146
+ # Web applications can send this header to mitigate Cross Site Scripting
147
+ # (XSS) attacks.
148
+ #
149
+ # The default value allows images, scripts, AJAX, and CSS from the same
150
+ # origin, and does not allow any other resources to load (eg object,
151
+ # frame, media, etc).
152
+ #
153
+ # Inline JavaScript is NOT allowed. To enable it, please use:
154
+ # "script-src 'unsafe-inline'".
155
+ #
156
+ # Content Security Policy introduction:
157
+ #
158
+ # * http://www.html5rocks.com/en/tutorials/security/content-security-policy/
159
+ # * https://www.owasp.org/index.php/Content_Security_Policy
160
+ # * https://www.owasp.org/index.php/Cross-site_Scripting_%28XSS%29
161
+ #
162
+ # Inline and eval JavaScript risks:
163
+ #
164
+ # * http://www.html5rocks.com/en/tutorials/security/content-security-policy/#inline-code-considered-harmful
165
+ # * http://www.html5rocks.com/en/tutorials/security/content-security-policy/#eval-too
166
+ #
167
+ # Content Security Policy usage:
168
+ #
169
+ # * http://content-security-policy.com/
170
+ # * https://developer.mozilla.org/en-US/docs/Web/Security/CSP/Using_Content_Security_Policy
171
+ #
172
+ security.content_security_policy "default-src 'none'; script-src 'self'; connect-src 'self'; img-src 'self'; style-src 'self';"
173
+
174
+ ##
175
+ # FRAMEWORKS
176
+ #
177
+
178
+ # Configure the code that will yield each time <%= config[:classified_app_name] %>::Action is included
179
+ # This is useful for sharing common functionality
180
+ #
181
+ # See: http://www.rubydoc.info/gems/lotus-controller#Configuration
182
+ controller.prepare do
183
+ # include MyAuthentication # included in all the actions
184
+ # before :authenticate! # run an authentication before callback
185
+ end
186
+
187
+ # Configure the code that will yield each time <%= config[:classified_app_name] %>::View is included
188
+ # This is useful for sharing common functionality
189
+ #
190
+ # See: http://www.rubydoc.info/gems/lotus-view#Configuration
191
+ view.prepare do
192
+ include Lotus::Helpers
193
+ end
194
+ end
195
+
196
+ ##
197
+ # DEVELOPMENT
198
+ #
199
+ configure :development do
200
+ # Don't handle exceptions, render the stack trace
201
+ handle_exceptions false
202
+
203
+ # Serve static assets during development
204
+ serve_assets true
205
+ end
206
+
207
+ ##
208
+ # TEST
209
+ #
210
+ configure :test do
211
+ # Don't handle exceptions, render the stack trace
212
+ handle_exceptions false
213
+
214
+ # Serve static assets during development
215
+ serve_assets true
216
+ end
217
+
218
+ ##
219
+ # PRODUCTION
220
+ #
221
+ configure :production do
222
+ # scheme 'https'
223
+ # host 'example.org'
224
+ # port 443
225
+ end
226
+ end
227
+ end