lotusrb 0.2.1 → 0.3.0

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 (36) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +20 -3
  3. data/FEATURES.md +94 -0
  4. data/README.md +73 -22
  5. data/lib/lotus/cli.rb +24 -5
  6. data/lib/lotus/commands/db/console.rb +54 -0
  7. data/lib/lotus/commands/db.rb +27 -0
  8. data/lib/lotus/commands/generate.rb +70 -0
  9. data/lib/lotus/config/cookies.rb +47 -0
  10. data/lib/lotus/config/security.rb +58 -0
  11. data/lib/lotus/configuration.rb +65 -24
  12. data/lib/lotus/environment.rb +3 -1
  13. data/lib/lotus/generators/action/action.rb.tt +8 -0
  14. data/lib/lotus/generators/action/action_spec.minitest.tt +12 -0
  15. data/lib/lotus/generators/action/action_spec.rspec.tt +12 -0
  16. data/lib/lotus/generators/action/template.tt +0 -0
  17. data/lib/lotus/generators/action/view.rb.tt +5 -0
  18. data/lib/lotus/generators/action/view_spec.minitest.tt +12 -0
  19. data/lib/lotus/generators/action/view_spec.rspec.tt +12 -0
  20. data/lib/lotus/generators/action.rb +149 -0
  21. data/lib/lotus/generators/application/container/Gemfile.tt +7 -2
  22. data/lib/lotus/generators/application/container/config/.env.development.tt +1 -1
  23. data/lib/lotus/generators/application/container/config/.env.test.tt +1 -1
  24. data/lib/lotus/generators/application/container/gitignore.tt +2 -0
  25. data/lib/lotus/generators/application/container/lib/app_name.rb.tt +4 -2
  26. data/lib/lotus/generators/application/container/lotusrc.tt +3 -0
  27. data/lib/lotus/generators/application/container.rb +78 -8
  28. data/lib/lotus/generators/slice/application.rb.tt +63 -11
  29. data/lib/lotus/generators/slice/config/mapping.rb.tt +4 -1
  30. data/lib/lotus/loader.rb +10 -2
  31. data/lib/lotus/lotusrc.rb +146 -0
  32. data/lib/lotus/middleware.rb +2 -2
  33. data/lib/lotus/routes.rb +62 -6
  34. data/lib/lotus/version.rb +1 -1
  35. data/lotusrb.gemspec +6 -5
  36. metadata +41 -28
@@ -1,3 +1,5 @@
1
+ require 'lotus/helpers'
2
+
1
3
  module <%= config[:classified_slice_name] %>
2
4
  class Application < Lotus::Application
3
5
  configure do
@@ -6,12 +8,12 @@ module <%= config[:classified_slice_name] %>
6
8
  #
7
9
 
8
10
  # Define the root path of this application.
9
- # All the paths specified in this configuration are relative to this one.
11
+ # All paths specified in this configuration are relative to path below.
10
12
  #
11
13
  root __dir__
12
14
 
13
15
  # Relative load paths where this application will recursively load the code.
14
- # Remember to add directories here when you create new.
16
+ # When you add new directories, remember to add them here.
15
17
  #
16
18
  load_paths << [
17
19
  'controllers',
@@ -87,7 +89,7 @@ module <%= config[:classified_slice_name] %>
87
89
  # uri: String, 'file:///db/bookshelf'
88
90
  # 'memory://localhost/bookshelf'
89
91
  # 'sqlite:memory:'
90
- # 'sqlite://db/bookshelf.db'
92
+ # 'sqlite://db/bookshelf.sqlite3'
91
93
  # 'postgres://localhost/bookshelf'
92
94
  # 'mysql://localhost/bookshelf'
93
95
  #
@@ -102,13 +104,13 @@ module <%= config[:classified_slice_name] %>
102
104
  # TEMPLATES
103
105
  #
104
106
 
105
- # The layout to be used by all the views
107
+ # The layout to be used by all views
106
108
  #
107
109
  layout :application # It will load <%= config[:classified_slice_name] %>::Views::ApplicationLayout
108
110
 
109
- # The relative path where to find the templates
111
+ # The relative path to templates
110
112
  #
111
- # templates 'templates'
113
+ templates 'templates'
112
114
 
113
115
  ##
114
116
  # ASSETS
@@ -126,12 +128,62 @@ module <%= config[:classified_slice_name] %>
126
128
  #
127
129
  # serve_assets false
128
130
 
131
+ ##
132
+ # SECURITY
133
+ #
134
+
135
+ # X-Frame-Options is a HTTP header supported by modern browsers.
136
+ # It determines if a web page can or cannot be included via <frame> and
137
+ # <iframe> tags by untrusted domains.
138
+ #
139
+ # Web applications can send this header to prevent Clickjacking attacks.
140
+ #
141
+ # Read more at:
142
+ #
143
+ # * https://developer.mozilla.org/en-US/docs/Web/HTTP/X-Frame-Options
144
+ # * https://www.owasp.org/index.php/Clickjacking
145
+ #
146
+ security.x_frame_options "DENY"
147
+
148
+ # Content-Security-Policy (CSP) is a HTTP header supported by modern browsers.
149
+ # It determines trusted sources of execution for dynamic contents
150
+ # (JavaScript) or other web related assets: stylesheets, images, fonts,
151
+ # plugins, etc.
152
+ #
153
+ # Web applications can send this header to mitigate Cross Site Scripting
154
+ # (XSS) attacks.
155
+ #
156
+ # The default value allows images, scripts, AJAX, and CSS from the same
157
+ # origin, and does not allow any other resources to load (eg object,
158
+ # frame, media, etc).
159
+ #
160
+ # Inline JavaScript is NOT allowed. To enable it, please use:
161
+ # "script-src 'unsafe-inline'".
162
+ #
163
+ # Content Security Policy introduction:
164
+ #
165
+ # * http://www.html5rocks.com/en/tutorials/security/content-security-policy/
166
+ # * https://www.owasp.org/index.php/Content_Security_Policy
167
+ # * https://www.owasp.org/index.php/Cross-site_Scripting_%28XSS%29
168
+ #
169
+ # Inline and eval JavaScript risks:
170
+ #
171
+ # * http://www.html5rocks.com/en/tutorials/security/content-security-policy/#inline-code-considered-harmful
172
+ # * http://www.html5rocks.com/en/tutorials/security/content-security-policy/#eval-too
173
+ #
174
+ # Content Security Policy usage:
175
+ #
176
+ # * http://content-security-policy.com/
177
+ # * https://developer.mozilla.org/en-US/docs/Web/Security/CSP/Using_Content_Security_Policy
178
+ #
179
+ security.content_security_policy "default-src 'none'; script-src 'self'; connect-src 'self'; img-src 'self'; style-src 'self';"
180
+
129
181
  ##
130
182
  # FRAMEWORKS
131
183
  #
132
184
 
133
- # Configure the code to be yielded each time <%= config[:classified_slice_name] %>::Action will be included
134
- # This is useful for share common functionalities
185
+ # Configure the code that will yield each time <%= config[:classified_slice_name] %>::Action is included
186
+ # This is useful for sharing common functionality
135
187
  #
136
188
  # See: http://www.rubydoc.info/gems/lotus-controller#Configuration
137
189
  controller.prepare do
@@ -139,12 +191,12 @@ module <%= config[:classified_slice_name] %>
139
191
  # before :authenticate! # run an authentication before callback
140
192
  end
141
193
 
142
- # Configure the code to be yielded each time <%= config[:classified_slice_name] %>::View will be included
143
- # This is useful for share common functionalities
194
+ # Configure the code that will yield each time <%= config[:classified_slice_name] %>::View is included
195
+ # This is useful for sharing common functionality
144
196
  #
145
197
  # See: http://www.rubydoc.info/gems/lotus-view#Configuration
146
198
  view.prepare do
147
- # include MyRoutingHelpers # included in all the views
199
+ include Lotus::Helpers
148
200
  end
149
201
  end
150
202
 
@@ -1,4 +1,7 @@
1
- # Configure your database mapping here
1
+ # Configure your database mapping here.
2
+ #
3
+ # Intended for specifying specific slice mappings.
4
+ #
2
5
  # See: http://www.rubydoc.info/gems/lotus-model/#Usage
3
6
  #
4
7
  # collection :users do
data/lib/lotus/loader.rb CHANGED
@@ -5,6 +5,7 @@ require 'lotus/routes'
5
5
  require 'lotus/routing/default'
6
6
  require 'lotus/action/cookies'
7
7
  require 'lotus/action/session'
8
+ require 'lotus/config/security'
8
9
 
9
10
  module Lotus
10
11
  # Load an application
@@ -49,8 +50,15 @@ module Lotus
49
50
  controller = Lotus::Controller.duplicate(namespace) do
50
51
  handle_exceptions config.handle_exceptions
51
52
  default_format config.default_format
52
-
53
- prepare { include Lotus::Action::Cookies } if config.cookies
53
+ default_headers({
54
+ Lotus::Config::Security::X_FRAME_OPTIONS_HEADER => config.security.x_frame_options,
55
+ Lotus::Config::Security::CONTENT_SECURITY_POLICY_HEADER => config.security.content_security_policy
56
+ })
57
+
58
+ if config.cookies.enabled?
59
+ prepare { include Lotus::Action::Cookies }
60
+ cookies config.cookies.default_options
61
+ end
54
62
  prepare { include Lotus::Action::Session } if config.sessions.enabled?
55
63
 
56
64
  config.controller.__apply(self)
@@ -0,0 +1,146 @@
1
+ require 'pathname'
2
+ require 'dotenv'
3
+
4
+ module Lotus
5
+ # Create and read the .lotusrc file in the root of the application
6
+ #
7
+ # @since 0.3.0
8
+ # @api private
9
+ class Lotusrc
10
+ # Lotusrc name file
11
+ #
12
+ # @since 0.3.0
13
+ # @api private
14
+ #
15
+ # @see Lotus::Lotusrc#path_file
16
+ FILE_NAME = '.lotusrc'.freeze
17
+
18
+ # Architecture default value
19
+ #
20
+ # @since 0.3.0
21
+ # @api private
22
+ #
23
+ # @see Lotus::Lotusrc#read
24
+ DEFAULT_ARCHITECTURE = 'container'.freeze
25
+
26
+ # Architecture key for writing the lotusrc file
27
+ #
28
+ # @since 0.3.0
29
+ # @api private
30
+ #
31
+ # @see Lotus::Lotusrc#read
32
+ ARCHITECTURE_KEY = 'architecture'.freeze
33
+
34
+ # Test suite default value
35
+ #
36
+ # @since 0.3.0
37
+ # @api private
38
+ #
39
+ # @see Lotus::Lotusrc#read
40
+ DEFAULT_TEST_SUITE = 'minitest'.freeze
41
+
42
+ # Test suite key for writing the lotusrc file
43
+ #
44
+ # @since 0.3.0
45
+ # @api private
46
+ #
47
+ # @see Lotus::Lotusrc#read
48
+ TEST_KEY = 'test'.freeze
49
+
50
+ # Template default value
51
+ #
52
+ # @since 0.3.0
53
+ # @api private
54
+ #
55
+ # @see Lotus::Lotusrc#read
56
+ DEFAULT_TEMPLATE = 'erb'.freeze
57
+
58
+ # Template key for writing the lotusrc file
59
+ #
60
+ # @since 0.3.0
61
+ # @api private
62
+ #
63
+ # @see Lotus::Lotusrc#read
64
+ TEMPLATE_KEY = 'template'.freeze
65
+
66
+ # Initialize Lotusrc class with application's root and enviroment options.
67
+ # Create the lotusrc file if it doesn't exist in the root given.
68
+ #
69
+ # @param root [Pathname] Application's root
70
+ # @param options [Hash] Environment's options
71
+ #
72
+ # @see Lotus::Environment#initialize
73
+ def initialize(root, options = {})
74
+ @root = root
75
+ @options = options
76
+
77
+ # NOTE this line is here in order to auto-upgrade applications generated
78
+ # with lotusrb < 0.3.0. Consider to remove it in the future.
79
+ create
80
+ end
81
+
82
+ # Read lotusrc file and parse it's values.
83
+ #
84
+ # @return [Lotus::Utils::Hash] parsed values
85
+ #
86
+ # @example Default values if file doesn't exist
87
+ # Lotus::Lotusrc.new(Pathname.new(Dir.pwd)).read
88
+ # # => { architecture: 'container', test: 'minitest', template: 'erb' }
89
+ #
90
+ # @example Custom values if file doesn't exist
91
+ # options = { architect: 'application', test: 'rspec', template: 'slim' }
92
+ # Lotus::Lotusrc.new(Pathname.new(Dir.pwd), options).read
93
+ # # => { architecture: 'application', test: 'rspec', template: 'slim' }
94
+ def read
95
+ if exists?
96
+ lotusrc_options = Dotenv.load path_file
97
+ Utils::Hash.new(lotusrc_options).symbolize!
98
+ end
99
+ end
100
+
101
+ private
102
+
103
+ # Create lotusrc file if exists
104
+ #
105
+ # @since 0.3.0
106
+ # @api private
107
+ #
108
+ # @see Lotus::Lotusrc::DEFAULT_ARCHITECTURE
109
+ # @see Lotus::Lotusrc::ARCHITECTURE_KEY
110
+ # @see Lotus::Lotusrc::DEFAULT_TEST_SUITE
111
+ # @see Lotus::Lotusrc::TEST_KEY
112
+ # @see Lotus::Lotusrc::DEFAULT_TEMPLATE
113
+ # @see Lotus::Lotusrc::TEMPLATE_KEY
114
+ def create
115
+ unless exists?
116
+ rcfile = File.new(path_file, "w")
117
+ rcfile.puts "#{ ARCHITECTURE_KEY }=#{ @options.fetch(:architecture, DEFAULT_ARCHITECTURE) }"
118
+ rcfile.puts "#{ TEST_KEY }=#{ @options.fetch(:test, DEFAULT_TEST_SUITE) }"
119
+ rcfile.puts "#{ TEMPLATE_KEY }=#{ @options.fetch(:template, DEFAULT_TEMPLATE) }"
120
+ rcfile.close
121
+ end
122
+ end
123
+
124
+ # Check if lotusrc file exists
125
+ #
126
+ # @since 0.3.0
127
+ # @api private
128
+ #
129
+ # @return [Boolean] lotusrc file's path existing
130
+ def exists?
131
+ path_file.exist?
132
+ end
133
+
134
+ # Return the lotusrc file's path
135
+ #
136
+ # @since 0.3.0
137
+ # @api private
138
+ #
139
+ # @return [Pathname] lotusrc file's path
140
+ #
141
+ # @see Lotus::Lotusrc::FILE_NAME
142
+ def path_file
143
+ @root.join FILE_NAME
144
+ end
145
+ end
146
+ end
@@ -55,8 +55,8 @@ module Lotus
55
55
  # Add a middleware to the stack.
56
56
  #
57
57
  # @param middleware [Object] a Rack middleware
58
- # @param *args [Array] optional arguments to pass to the Rack middleware
59
- # @param &blk [Proc] an optional block to pass to the Rack middleware
58
+ # @param args [Array] optional arguments to pass to the Rack middleware
59
+ # @param blk [Proc] an optional block to pass to the Rack middleware
60
60
  #
61
61
  # @return [Array] the middleware that was added
62
62
  #
data/lib/lotus/routes.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require 'lotus/utils/escape'
2
+
1
3
  module Lotus
2
4
  # Routes factory
3
5
  #
@@ -23,7 +25,7 @@ module Lotus
23
25
  # @param args [Array,nil] an optional set of arguments that is passed down
24
26
  # to the wrapped route set.
25
27
  #
26
- # @return [String] the corresponding relative URL
28
+ # @return [Lotus::Utils::Escape::SafeString] the corresponding relative URL
27
29
  #
28
30
  # @raise Lotus::Routing::InvalidRouteException
29
31
  #
@@ -31,7 +33,7 @@ module Lotus
31
33
  #
32
34
  # @see http://rdoc.info/gems/lotus-router/Lotus/Router#path-instance_method
33
35
  #
34
- # @example
36
+ # @example Basic example
35
37
  # require 'lotus'
36
38
  #
37
39
  # module Bookshelf
@@ -49,8 +51,27 @@ module Lotus
49
51
  #
50
52
  # Bookshelf::Routes.path(:login, return_to: '/dashboard')
51
53
  # # => '/login?return_to=%2Fdashboard'
54
+ #
55
+ # @example Dynamic finders
56
+ # require 'lotus'
57
+ #
58
+ # module Bookshelf
59
+ # class Application < Lotus::Application
60
+ # configure do
61
+ # routes do
62
+ # get '/login', to: 'sessions#new', as: :login
63
+ # end
64
+ # end
65
+ # end
66
+ # end
67
+ #
68
+ # Bookshelf::Routes.login_path
69
+ # # => '/login'
70
+ #
71
+ # Bookshelf::Routes.login_path(return_to: '/dashboard')
72
+ # # => '/login?return_to=%2Fdashboard'
52
73
  def path(name, *args)
53
- @routes.path(name, *args)
74
+ Utils::Escape::SafeString.new(@routes.path(name, *args))
54
75
  end
55
76
 
56
77
  # Return an absolute path for the given route name
@@ -59,7 +80,7 @@ module Lotus
59
80
  # @param args [Array,nil] an optional set of arguments that is passed down
60
81
  # to the wrapped route set.
61
82
  #
62
- # @return [String] the corresponding absolute URL
83
+ # @return [Lotus::Utils::Escape::SafeString] the corresponding absolute URL
63
84
  #
64
85
  # @raise Lotus::Routing::InvalidRouteException
65
86
  #
@@ -67,7 +88,7 @@ module Lotus
67
88
  #
68
89
  # @see http://rdoc.info/gems/lotus-router/Lotus/Router#url-instance_method
69
90
  #
70
- # @example
91
+ # @example Basic example
71
92
  # require 'lotus'
72
93
  #
73
94
  # module Bookshelf
@@ -88,8 +109,43 @@ module Lotus
88
109
  #
89
110
  # Bookshelf::Routes.url(:login, return_to: '/dashboard')
90
111
  # # => 'https://bookshelf.org/login?return_to=%2Fdashboard'
112
+ #
113
+ # @example Dynamic finders
114
+ # require 'lotus'
115
+ #
116
+ # module Bookshelf
117
+ # class Application < Lotus::Application
118
+ # configure do
119
+ # routes do
120
+ # scheme 'https'
121
+ # host 'bookshelf.org'
122
+ #
123
+ # get '/login', to: 'sessions#new', as: :login
124
+ # end
125
+ # end
126
+ # end
127
+ # end
128
+ #
129
+ # Bookshelf::Routes.login_url
130
+ # # => 'https://bookshelf.org/login'
131
+ #
132
+ # Bookshelf::Routes.login_url(return_to: '/dashboard')
133
+ # # => 'https://bookshelf.org/login?return_to=%2Fdashboard'
91
134
  def url(name, *args)
92
- @routes.url(name, *args)
135
+ Utils::Escape::SafeString.new(@routes.url(name, *args))
136
+ end
137
+
138
+ protected
139
+ # @since 0.3.0
140
+ # @api private
141
+ def method_missing(m, *args)
142
+ named_route, type = m.to_s.split(/\_(path|url)\z/)
143
+
144
+ if type
145
+ public_send(type, named_route.to_sym, *args)
146
+ else
147
+ super
148
+ end
93
149
  end
94
150
  end
95
151
  end
data/lib/lotus/version.rb CHANGED
@@ -2,5 +2,5 @@ module Lotus
2
2
  # Defines the version
3
3
  #
4
4
  # @since 0.1.0
5
- VERSION = '0.2.1'.freeze
5
+ VERSION = '0.3.0'.freeze
6
6
  end
data/lotusrb.gemspec CHANGED
@@ -13,16 +13,17 @@ Gem::Specification.new do |spec|
13
13
  spec.homepage = 'http://lotusrb.org'
14
14
  spec.license = 'MIT'
15
15
 
16
- spec.files = `git ls-files -z -- lib/* bin/* LICENSE.md README.md CHANGELOG.md lotusrb.gemspec`.split("\x0")
16
+ spec.files = `git ls-files -z -- lib/* bin/* LICENSE.md README.md CHANGELOG.md FEATURES.md lotusrb.gemspec`.split("\x0")
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test)/})
19
19
  spec.require_paths = ['lib']
20
20
  spec.required_ruby_version = '>= 2.0.0'
21
21
 
22
- spec.add_dependency 'lotus-utils', '~> 0.3', '>= 0.3.4'
23
- spec.add_dependency 'lotus-router', '~> 0.2', '>= 0.2.1'
24
- spec.add_dependency 'lotus-controller', '~> 0.3', '>= 0.3.2'
25
- spec.add_dependency 'lotus-view', '~> 0.3'
22
+ spec.add_dependency 'lotus-utils', '~> 0.4'
23
+ spec.add_dependency 'lotus-router', '~> 0.3'
24
+ spec.add_dependency 'lotus-controller', '~> 0.4'
25
+ spec.add_dependency 'lotus-view', '~> 0.4'
26
+ spec.add_dependency 'lotus-helpers', '~> 0.1'
26
27
  spec.add_dependency 'shotgun', '~> 0.9'
27
28
  spec.add_dependency 'dotenv', '~> 1.0'
28
29
  spec.add_dependency 'thor', '~> 0.19'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lotusrb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Luca Guidi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-06 00:00:00.000000000 Z
11
+ date: 2015-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lotus-utils
@@ -16,74 +16,70 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.3'
20
- - - ">="
21
- - !ruby/object:Gem::Version
22
- version: 0.3.4
19
+ version: '0.4'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
24
  - - "~>"
28
25
  - !ruby/object:Gem::Version
29
- version: '0.3'
30
- - - ">="
31
- - !ruby/object:Gem::Version
32
- version: 0.3.4
26
+ version: '0.4'
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: lotus-router
35
29
  requirement: !ruby/object:Gem::Requirement
36
30
  requirements:
37
31
  - - "~>"
38
32
  - !ruby/object:Gem::Version
39
- version: '0.2'
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- version: 0.2.1
33
+ version: '0.3'
43
34
  type: :runtime
44
35
  prerelease: false
45
36
  version_requirements: !ruby/object:Gem::Requirement
46
37
  requirements:
47
38
  - - "~>"
48
39
  - !ruby/object:Gem::Version
49
- version: '0.2'
50
- - - ">="
51
- - !ruby/object:Gem::Version
52
- version: 0.2.1
40
+ version: '0.3'
53
41
  - !ruby/object:Gem::Dependency
54
42
  name: lotus-controller
55
43
  requirement: !ruby/object:Gem::Requirement
56
44
  requirements:
57
45
  - - "~>"
58
46
  - !ruby/object:Gem::Version
59
- version: '0.3'
60
- - - ">="
61
- - !ruby/object:Gem::Version
62
- version: 0.3.2
47
+ version: '0.4'
63
48
  type: :runtime
64
49
  prerelease: false
65
50
  version_requirements: !ruby/object:Gem::Requirement
66
51
  requirements:
67
52
  - - "~>"
68
53
  - !ruby/object:Gem::Version
69
- version: '0.3'
70
- - - ">="
71
- - !ruby/object:Gem::Version
72
- version: 0.3.2
54
+ version: '0.4'
73
55
  - !ruby/object:Gem::Dependency
74
56
  name: lotus-view
75
57
  requirement: !ruby/object:Gem::Requirement
76
58
  requirements:
77
59
  - - "~>"
78
60
  - !ruby/object:Gem::Version
79
- version: '0.3'
61
+ version: '0.4'
80
62
  type: :runtime
81
63
  prerelease: false
82
64
  version_requirements: !ruby/object:Gem::Requirement
83
65
  requirements:
84
66
  - - "~>"
85
67
  - !ruby/object:Gem::Version
86
- version: '0.3'
68
+ version: '0.4'
69
+ - !ruby/object:Gem::Dependency
70
+ name: lotus-helpers
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.1'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.1'
87
83
  - !ruby/object:Gem::Dependency
88
84
  name: shotgun
89
85
  requirement: !ruby/object:Gem::Requirement
@@ -191,6 +187,7 @@ extensions: []
191
187
  extra_rdoc_files: []
192
188
  files:
193
189
  - CHANGELOG.md
190
+ - FEATURES.md
194
191
  - LICENSE.md
195
192
  - README.md
196
193
  - bin/lotus
@@ -199,22 +196,35 @@ files:
199
196
  - lib/lotus/application_name.rb
200
197
  - lib/lotus/cli.rb
201
198
  - lib/lotus/commands/console.rb
199
+ - lib/lotus/commands/db.rb
200
+ - lib/lotus/commands/db/console.rb
201
+ - lib/lotus/commands/generate.rb
202
202
  - lib/lotus/commands/new.rb
203
203
  - lib/lotus/commands/routes.rb
204
204
  - lib/lotus/commands/server.rb
205
205
  - lib/lotus/config/assets.rb
206
206
  - lib/lotus/config/configure.rb
207
+ - lib/lotus/config/cookies.rb
207
208
  - lib/lotus/config/framework_configuration.rb
208
209
  - lib/lotus/config/load_paths.rb
209
210
  - lib/lotus/config/mapper.rb
210
211
  - lib/lotus/config/mapping.rb
211
212
  - lib/lotus/config/routes.rb
213
+ - lib/lotus/config/security.rb
212
214
  - lib/lotus/config/sessions.rb
213
215
  - lib/lotus/configuration.rb
214
216
  - lib/lotus/container.rb
215
217
  - lib/lotus/environment.rb
216
218
  - lib/lotus/frameworks.rb
217
219
  - lib/lotus/generators/abstract.rb
220
+ - lib/lotus/generators/action.rb
221
+ - lib/lotus/generators/action/action.rb.tt
222
+ - lib/lotus/generators/action/action_spec.minitest.tt
223
+ - lib/lotus/generators/action/action_spec.rspec.tt
224
+ - lib/lotus/generators/action/template.tt
225
+ - lib/lotus/generators/action/view.rb.tt
226
+ - lib/lotus/generators/action/view_spec.minitest.tt
227
+ - lib/lotus/generators/action/view_spec.rspec.tt
218
228
  - lib/lotus/generators/application/container.rb
219
229
  - lib/lotus/generators/application/container/.gitkeep
220
230
  - lib/lotus/generators/application/container/Gemfile.tt
@@ -229,10 +239,12 @@ files:
229
239
  - lib/lotus/generators/application/container/db/.gitkeep
230
240
  - lib/lotus/generators/application/container/features_helper.rb.minitest.tt
231
241
  - lib/lotus/generators/application/container/features_helper.rb.rspec.tt
242
+ - lib/lotus/generators/application/container/gitignore.tt
232
243
  - lib/lotus/generators/application/container/lib/app_name.rb.tt
233
244
  - lib/lotus/generators/application/container/lib/chirp/entities/.gitkeep
234
245
  - lib/lotus/generators/application/container/lib/chirp/repositories/.gitkeep
235
246
  - lib/lotus/generators/application/container/lib/config/mapping.rb.tt
247
+ - lib/lotus/generators/application/container/lotusrc.tt
236
248
  - lib/lotus/generators/application/container/rspec.rspec.tt
237
249
  - lib/lotus/generators/application/container/spec_helper.rb.minitest.tt
238
250
  - lib/lotus/generators/application/container/spec_helper.rb.rspec.tt
@@ -248,6 +260,7 @@ files:
248
260
  - lib/lotus/generators/slice/views/application_layout.rb.tt
249
261
  - lib/lotus/loader.rb
250
262
  - lib/lotus/logger.rb
263
+ - lib/lotus/lotusrc.rb
251
264
  - lib/lotus/middleware.rb
252
265
  - lib/lotus/rendering_policy.rb
253
266
  - lib/lotus/routes.rb