lotusrb 0.5.0 → 0.6.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 (103) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +57 -14
  3. data/FEATURES.md +21 -0
  4. data/LICENSE.md +1 -1
  5. data/README.md +8 -7
  6. data/bin/lotus +1 -0
  7. data/lib/lotus.rb +6 -0
  8. data/lib/lotus/action/csrf_protection.rb +1 -1
  9. data/lib/lotus/application.rb +4 -4
  10. data/lib/lotus/application_name.rb +8 -6
  11. data/lib/lotus/cli.rb +75 -66
  12. data/lib/lotus/cli_sub_commands/assets.rb +29 -0
  13. data/lib/lotus/{commands → cli_sub_commands}/db.rb +24 -29
  14. data/lib/lotus/cli_sub_commands/destroy.rb +102 -0
  15. data/lib/lotus/cli_sub_commands/generate.rb +127 -0
  16. data/lib/lotus/commands/assets/precompile.rb +35 -0
  17. data/lib/lotus/commands/console.rb +28 -8
  18. data/lib/lotus/commands/db/abstract.rb +6 -2
  19. data/lib/lotus/commands/db/console.rb +5 -5
  20. data/lib/lotus/commands/generate/abstract.rb +63 -0
  21. data/lib/lotus/commands/generate/action.rb +262 -0
  22. data/lib/lotus/commands/generate/app.rb +116 -0
  23. data/lib/lotus/commands/generate/mailer.rb +118 -0
  24. data/lib/lotus/commands/generate/migration.rb +63 -0
  25. data/lib/lotus/commands/generate/model.rb +96 -0
  26. data/lib/lotus/commands/new/abstract.rb +128 -0
  27. data/lib/lotus/commands/new/app.rb +116 -0
  28. data/lib/lotus/commands/new/container.rb +102 -0
  29. data/lib/lotus/commands/routes.rb +19 -2
  30. data/lib/lotus/commands/server.rb +16 -2
  31. data/lib/lotus/config/framework_configuration.rb +13 -1
  32. data/lib/lotus/configuration.rb +24 -76
  33. data/lib/lotus/container.rb +15 -2
  34. data/lib/lotus/environment.rb +43 -4
  35. data/lib/lotus/frameworks.rb +1 -0
  36. data/lib/lotus/generators/action/action_spec.minitest.tt +1 -1
  37. data/lib/lotus/generators/action/action_spec.rspec.tt +1 -1
  38. data/lib/lotus/generators/action/view_spec.minitest.tt +1 -1
  39. data/lib/lotus/generators/action/view_spec.rspec.tt +1 -1
  40. data/lib/lotus/generators/{slice → app}/.gitkeep.tt +0 -0
  41. data/lib/lotus/generators/{slice → app}/application.rb.tt +61 -23
  42. data/lib/lotus/generators/app/config/initializers/.gitkeep +0 -0
  43. data/lib/lotus/generators/{slice → app}/config/routes.rb.tt +0 -0
  44. data/lib/lotus/generators/app/favicon.ico +0 -0
  45. data/lib/lotus/generators/{slice → app}/templates/application.html.erb.tt +2 -1
  46. data/lib/lotus/generators/app/views/application_layout.rb.tt +7 -0
  47. data/lib/lotus/generators/application/app/.env.development.tt +1 -0
  48. data/lib/lotus/generators/application/app/.env.test.tt +1 -0
  49. data/lib/lotus/generators/application/app/Gemfile.tt +1 -0
  50. data/lib/lotus/generators/application/app/Rakefile.minitest.tt +1 -0
  51. data/lib/lotus/generators/application/app/Rakefile.rspec.tt +1 -0
  52. data/lib/lotus/generators/application/app/config/application.rb.tt +56 -18
  53. data/lib/lotus/generators/application/app/config/initializers/.gitkeep +0 -0
  54. data/lib/lotus/generators/application/app/favicon.ico +0 -0
  55. data/lib/lotus/generators/application/app/gitignore.tt +2 -0
  56. data/lib/lotus/generators/application/app/lotusrc.tt +3 -3
  57. data/lib/lotus/generators/application/app/spec_helper.rb.rspec.tt +5 -1
  58. data/lib/lotus/generators/application/app/templates/application.html.erb.tt +1 -0
  59. data/lib/lotus/generators/application/container/.env.development.tt +1 -0
  60. data/lib/lotus/generators/application/container/.env.test.tt +1 -0
  61. data/lib/lotus/generators/application/container/Gemfile.tt +1 -1
  62. data/lib/lotus/generators/application/container/Rakefile.minitest.tt +1 -0
  63. data/lib/lotus/generators/application/container/Rakefile.rspec.tt +1 -0
  64. data/lib/lotus/generators/application/container/config/initializers/.gitkeep +0 -0
  65. data/lib/lotus/generators/application/container/gitignore.tt +2 -0
  66. data/lib/lotus/generators/application/container/lib/chirp/mailers/.gitkeep +0 -0
  67. data/lib/lotus/generators/application/container/lib/chirp/mailers/templates/.gitkeep +0 -0
  68. data/lib/lotus/generators/application/container/lotusrc.tt +3 -3
  69. data/lib/lotus/generators/application/container/spec_helper.rb.rspec.tt +5 -1
  70. data/lib/lotus/generators/database_config.rb +17 -4
  71. data/lib/lotus/generators/generatable.rb +51 -0
  72. data/lib/lotus/generators/generator.rb +35 -0
  73. data/lib/lotus/generators/test_framework.rb +42 -0
  74. data/lib/lotus/loader.rb +43 -0
  75. data/lib/lotus/lotusrc.rb +50 -49
  76. data/lib/lotus/middleware.rb +28 -10
  77. data/lib/lotus/rake_helper.rb +68 -0
  78. data/lib/lotus/rake_tasks.rb +2 -0
  79. data/lib/lotus/rendering_policy.rb +2 -2
  80. data/lib/lotus/repositories/car_repository.rb +3 -0
  81. data/lib/lotus/repositories/name_repository.rb +3 -0
  82. data/lib/lotus/setup.rb +1 -3
  83. data/lib/lotus/static.rb +77 -0
  84. data/lib/lotus/templates/welcome.html.erb +7 -4
  85. data/lib/lotus/version.rb +1 -1
  86. data/lib/lotus/views/default.rb +2 -1
  87. data/lib/lotus/views/default_template_finder.rb +4 -3
  88. data/lotusrb.gemspec +11 -9
  89. metadata +79 -60
  90. data/lib/lotus/commands/generate.rb +0 -97
  91. data/lib/lotus/commands/new.rb +0 -43
  92. data/lib/lotus/config/assets.rb +0 -81
  93. data/lib/lotus/generators/abstract.rb +0 -31
  94. data/lib/lotus/generators/action.rb +0 -235
  95. data/lib/lotus/generators/app.rb +0 -39
  96. data/lib/lotus/generators/app/.gitkeep +0 -1
  97. data/lib/lotus/generators/application/app.rb +0 -129
  98. data/lib/lotus/generators/application/container.rb +0 -111
  99. data/lib/lotus/generators/mailer.rb +0 -112
  100. data/lib/lotus/generators/migration.rb +0 -58
  101. data/lib/lotus/generators/model.rb +0 -90
  102. data/lib/lotus/generators/slice.rb +0 -94
  103. data/lib/lotus/generators/slice/views/application_layout.rb.tt +0 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b7c8e5cd99a779eb8d3a481262d6af49538a457e
4
- data.tar.gz: 5ea631568ee7e5fc205204e97c7d5daecaa8be5d
3
+ metadata.gz: 14dca86469ca5f5042c6bc2ea9e31ebaad01d19a
4
+ data.tar.gz: 0f6cbdd53e4f2c60a666fe1d691e4fda872a4f95
5
5
  SHA512:
6
- metadata.gz: ed2204a15910591470fbb00e31331180a2192bbf0b9b4871a6b7fb5c2cdd9a043e53ecbb2193e32531f27ed5b14229118af90a7d441a69679cb156f6a5f2b0ab
7
- data.tar.gz: e89361b9895b13d112f743e11ee83889be44561a6159429a24b9eb85c0297c20e9f8ed6e1ea386249776f094a6373417df5d7350e67351650a65f52022794523
6
+ metadata.gz: b134692103f23248c496e9f4bdac72c1cd3d1b8b31961c0aa1823da8c9d25e13351f57200ac81ebed0b66361e51990b1ab5497945b79529b9d0f65e887d262c7
7
+ data.tar.gz: d47a47dd5fa20eeb449c5ee48d0e3c712f3e4eeaa62929e2329e4fb413a31ed15a1b4562ad357f936d6e56a1eaeb17e122144261579b8f4a9fc7b9eb4add653c
data/CHANGELOG.md CHANGED
@@ -1,9 +1,52 @@
1
1
  # Lotus
2
2
  A complete web framework for Ruby
3
3
 
4
+ ## v0.6.0 - 2016-01-12
5
+ ### Added
6
+ - [Luca Guidi] Introduced configurable assets compressors
7
+ - [Luca Guidi] Introduced "CDN mode" in order to serve static assets via Content Distribution Networks
8
+ - [Luca Guidi] Introduced "Digest mode" in production in order to generate and serve assets with checksum suffix
9
+ - [Luca Guidi] Introduced `lotus assets precompile` command to precompile, minify and append checksum suffix to static assets
10
+ - [Luca Guidi] Send `Content-Cache` HTTP header when serving static assets in production mode
11
+ - [Luca Guidi] Support new env var `SERVE_STATIC_ASSETS="true"` in order to serve static assets for the entire project
12
+ - [Luca Guidi] Generate new applications by including `Web::Assets::Helpers` in `view.prepare` block
13
+ - [Luca Guidi] Introduced new Rake tasks `:preload` and `:environment`
14
+ - [Luca Guidi] Introduced new Rake tasks `db:migrate` and `assets:precompile` for Rails/Heroku compatibility
15
+ - [Tadeu Valentt & Lucas Allan Amorin] Added `lotus destroy` command for apps, models, actions, migrations and mailers
16
+ - [Lucas Allan Amorim] Custom initializers (`apps/web/config/initializers`) they are ran when the project is loaded and about to start
17
+ - [Trung Lê] Generate mailer templates directory for new projects (eg. `lib/bookshelf/mailers/templates`)
18
+ - [Tadeu Valentt] Alias `--database` as `-d` for `lotus new`
19
+ - [Tadeu Valentt] Alias `--arch` as `-a` for `lotus new`
20
+ - [Sean Collins] Let `lotus generate action` to guess HTTP method (`--method` arg) according to RESTful conventions
21
+ - [Gonzalo Rodríguez-Baltanás Díaz] Generate new applications with default favicon
22
+
23
+ ### Fixed
24
+ - [Neil Matatall] Use "secure compare" for CSRF tokens in order to prevent timing attacks
25
+ - [Bernardo Farah] Fix support for chunked response body (via `Rack::Chunked::Body`)
26
+ - [Lucas Allan Amorim] Add `bundler` as a runtime dependency
27
+ - [Lucas Allan Amorim] Ensure to load properly Bundler dependencies when starting the application
28
+ - [Luca Guidi] Ensure sessions to be always available for other middleware in Rack stack of single applications
29
+ - [Ken Gullaksen] Ensure to specify `LOTUS_PORT` env var from `.env`
30
+ - [Andrey Deryabin] Fix `lotus new .` and prevent to generate the project in a subdirectory of current one
31
+ - [Jason Charnes] Validate entity name for model generator
32
+ - [Caius Durling] Fixed generator for nested actions (eg. `lotus generate action web domains/certs#index`)
33
+ - [Tadeu Valentt] Prevent to generate migrations with the same name
34
+ - [Luca Guidi] Ensure RSpec examples to be generated with `RSpec.describe` instead of only `describe`
35
+ - [Andrey Deryabin] Avoid `lotus` command to generate unnecessary `.lotusrc` files
36
+ - [Jason Charnes] Convert camel case application name into snake case when generating actions (eg. `BeautifulBlossoms` to `beautiful_blossoms`)
37
+ - [Alfonso Uceda Pompa] Convert dasherized names into underscored names when generating projects (eg. `awesome-project` to `awesome_project`)
38
+
39
+ ### Changed
40
+ - [Sean Collins] Welcome page shows current year in copyright notes
41
+ - [Luca Guidi] Add `/public/assets*` to `.gitignore` of new projects
42
+ - [Luca Guidi] Removed support for `default_format` in favor of `default_request_format`
43
+ - [Luca Guidi] Removed support for `apps/web/public` in favor of `apps/web/assets` as assets sources for applications
44
+ - [Luca Guidi] Removed support for `serve_assets` for single applications in order to global static assets server enabled via `SERVE_STATIC_ASSETS` env var
45
+ - [Luca Guidi] `assets` configuration in `apps/web/application.rb` now accepts a block to configure sources and other settings
46
+
4
47
  ## v0.5.0 - 2015-09-30
5
48
  ### Added
6
- - [Ines Coelho & Rosa Faria] Mailers
49
+ - [Ines Coelho & Rosa Faria] Introduced mailers support
7
50
  - [Theo Felippe] Added configuration entries: `#default_request_format` and `default_response_format`
8
51
  - [Rodrigo Panachi] Introduced `logger` configuration for applications, to be used like this: `Web::Logger.debug`
9
52
  - [Ben Lovell] Simpler and less verbose RSpec tests
@@ -26,7 +69,7 @@ A complete web framework for Ruby
26
69
  ### Fixed
27
70
  - [Alfonso Uceda Pompa] Ensure to load correctly apps in `lotus console`
28
71
  - [Alfonso Uceda Pompa] Ensure to not duplicate prefix for Container mounted apps (eg `/admin/admin/dashboard`)
29
- - [Alfonso Uceda Pompa] Ensure generator for application arch to generate session secret
72
+ - [Alfonso Uceda Pompa] Ensure generator for "application" architecture to generate session secret
30
73
  - [Alfonso Uceda Pompa & Trung Lê & Hiếu Nguyễn] Exit unsuccessfully when `lotus generate model` doesn't receive a mandatory name for model
31
74
  - [Miguel Molina] Exit unsuccessfully when `lotus new --database` receives an unknown value
32
75
  - [Luca Guidi] Ensure to prepend sessions middleware, so other Rack components can have access to HTTP session
@@ -49,7 +92,7 @@ A complete web framework for Ruby
49
92
  - [Luca Guidi] `.env`, `.env.development` and `.env.test` are generated and expected to be placed at the root of the project.
50
93
  - [Luca Guidi] Remove database mapping from generated apps.
51
94
  - [Trung Lê & Luca Guidi] Remove default generated from new apps.
52
- - [Luca Guidi] New application should depend on `lotus-model ~> 0.4`
95
+ - [Luca Guidi] New projects should depend on `lotus-model ~> 0.4`
53
96
 
54
97
  ## v0.3.2 - 2015-05-22
55
98
  ### Added
@@ -79,9 +122,9 @@ A complete web framework for Ruby
79
122
  - [Luca Guidi] Introduced action generator. Eg. `bundle exec lotus generate action web dashboard#index`
80
123
  - [Alfonso Uceda Pompa] Allow to specify default coookies options in application configuration. Eg. `cookies true, { domain: 'lotusrb.org' }`
81
124
  - [Tom Kadwill] Include `Lotus::Helpers` in views.
82
- - [Linus Pettersson] Allow to specify `--database` CLI option when generate a new application. Eg. `lotus new bookshelf --database=postgresql`
83
- - [Linus Pettersson] Initialize a Git repository when generating a new application
84
- - [Alfonso Uceda Pompa] Produce `.lotusrc` when generating a new application
125
+ - [Linus Pettersson] Allow to specify `--database` CLI option when generate a new project. Eg. `lotus new bookshelf --database=postgresql`
126
+ - [Linus Pettersson] Initialize a Git repository when generating a new project
127
+ - [Alfonso Uceda Pompa] Produce `.lotusrc` when generating a new project
85
128
  - [Alfonso Uceda Pompa] Security HTTP headers. `X-Frame-Options` and `Content-Security-Policy` are now enabled by default.
86
129
  - [Linus Pettersson] Database console. Run with `bundle exec lotus db console`
87
130
  - [Luca Guidi] Dynamic finders for relative and absolute routes. It implements method missing: `Web::Routes.home_path` will resolve to `Web::Routes.path(:home)`.
@@ -95,21 +138,21 @@ A complete web framework for Ruby
95
138
  ### Added
96
139
  - [Huy Đỗ] Introduced `Lotus::Logger`
97
140
  - [Jimmy Zhang] `lotus new` accepts a `--path` argument
98
- - [Jimmy Zhang] Application generator for the current directory (`lotus new .`). This is useful to provide a web deliverable for existing Ruby gems.
99
- - [Trung Lê] Add example mapping file for application generator: `lib/config/mapping.rb`
100
- - [Hiếu Nguyễn] RSpec support for application generator: `--test=rspec` or `--test=minitest` (default)
141
+ - [Jimmy Zhang] Project generator for the current directory (`lotus new .`). This is useful to provide a web deliverable for existing Ruby gems.
142
+ - [Trung Lê] Add example mapping file for project generator: `lib/config/mapping.rb`
143
+ - [Hiếu Nguyễn] RSpec support for project generator: `--test=rspec` or `--test=minitest` (default)
101
144
 
102
145
  ### Fixed
103
146
  - [Luca Guidi] `lotus version` to previx `v` (eg `v0.2.1`)
104
- - [Rob Yurkowski] Ensure application name doesn't contain special or forbidden characters
147
+ - [Rob Yurkowski] Ensure project name doesn't contain special or forbidden characters
105
148
  - [Luca Guidi] Ensure all the applications are loaded in console
106
- - [Trung Lê] Container architecture: preload only `lib/<appname>/**/*.rb`
107
- - [Hiếu Nguyễn] Fixed `lotus new` to print usage when application name isn't provided
149
+ - [Trung Lê] Container architecture: preload only `lib/<projectname>/**/*.rb`
150
+ - [Hiếu Nguyễn] Fixed `lotus new` to print usage when project name isn't provided
108
151
 
109
152
  ## v0.2.0 - 2014-06-23
110
153
  ### Added
111
- - [Luca Guidi] Introduced `lotus new` as a command to generate applications. It supports "container" architecture for now.
112
- - [Luca Guidi] Show a welcome page when the application doesn't have routes
154
+ - [Luca Guidi] Introduced `lotus new` as a command to generate projects. It supports "container" architecture for now.
155
+ - [Luca Guidi] Show a welcome page when one mounted Lotus application doesn't have routes
113
156
  - [Luca Guidi] Introduced `Lotus::Application.preload!` to preload all the Lotus applications in a given Ruby process. (Bulk `Lotus::Application.load!`)
114
157
  - [Trung Lê] Allow browsers to fake non `GET`/`POST` requests via `Rack::MethodOverride`
115
158
  - [Josue Abreu] Allow to define body parses for non `GET` HTTP requests (`body_parsers` configuration)
data/FEATURES.md CHANGED
@@ -3,6 +3,27 @@
3
3
 
4
4
  ## Features
5
5
 
6
+ ## v0.6.0 - 2016-01-12
7
+
8
+ - Assets preprocessors support (eg. Sass, ES6, Opal, Less, CoffeScript..)
9
+ - Assets compressors (eg. YUI, UglifyJS2, Google Closure Compiler, Sass..)
10
+ - Assets helpers:
11
+ * `javascript`
12
+ * `stylesheet`
13
+ * `favicon`
14
+ * `image`
15
+ * `video`
16
+ * `audio`
17
+ * `asset_path`
18
+ * `asset_url`
19
+ - Content Delivery Network (CDN) support for static assets (CDN mode)
20
+ - Checksum suffix for static assets in production mode (Digest mode)
21
+ - Support for third party gems as assets distribution channel (eg. `lotus-jquery`)
22
+ - CLI: `lotus assets` command `precompile`: preprocess, minify and append checksum suffix
23
+ - CLI: `lotus destroy` destroy apps, models, actions, migrations and mailers
24
+ - Custom initializers (`apps/web/config/initializers`)
25
+ - Rake tasks `:preload` and `:environment`
26
+
6
27
  ## v0.5.0 - 2015-09-30
7
28
 
8
29
  - Mailers
data/LICENSE.md CHANGED
@@ -1,4 +1,4 @@
1
- Copyright © 2014-2015 Luca Guidi
1
+ Copyright © 2014-2016 Luca Guidi
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -12,6 +12,7 @@ Lotus combines small yet powerful frameworks:
12
12
  * [**Lotus::Helpers**](https://github.com/lotus/helpers) - View helpers for Ruby applications
13
13
  * [**Lotus::Mailer**](https://github.com/lotus/mailer) - Mail for Ruby applications
14
14
  * [**Lotus::Model**](https://github.com/lotus/model) - Persistence with entities, repositories and data mapper
15
+ * [**Lotus::Assets**](https://github.com/lotus/assets) - Assets management for Ruby
15
16
  * [**Lotus::View**](https://github.com/lotus/view) - Presentation with a separation between views and templates
16
17
  * [**Lotus::Controller**](https://github.com/lotus/controller) - Full featured, fast and testable actions for Rack
17
18
 
@@ -20,12 +21,12 @@ If you aren't familiar with them, please take time to go through their READMEs.
20
21
 
21
22
  ## Status
22
23
 
23
- [![Gem Version](https://badge.fury.io/rb/lotusrb.png)](http://badge.fury.io/rb/lotusrb)
24
- [![Build Status](https://secure.travis-ci.org/lotus/lotus.png?branch=master)](http://travis-ci.org/lotus/lotus?branch=master)
25
- [![Coverage](https://coveralls.io/repos/lotus/lotus/badge.png?branch=master)](https://coveralls.io/r/lotus/lotus)
26
- [![Code Climate](https://codeclimate.com/github/lotus/lotus.png)](https://codeclimate.com/github/lotus/lotus)
27
- [![Dependencies](https://gemnasium.com/lotus/lotus.png)](https://gemnasium.com/lotus/lotus)
28
- [![Inline docs](http://inch-ci.org/github/lotus/lotus.png)](http://inch-ci.org/github/lotus/lotus)
24
+ [![Gem Version](https://badge.fury.io/rb/lotusrb.svg)](http://badge.fury.io/rb/lotusrb)
25
+ [![Build Status](https://secure.travis-ci.org/lotus/lotus.svg?branch=master)](http://travis-ci.org/lotus/lotus?branch=master)
26
+ [![Coverage](https://coveralls.io/repos/lotus/lotus/badge.svg?branch=master)](https://coveralls.io/r/lotus/lotus)
27
+ [![Code Climate](https://codeclimate.com/github/lotus/lotus.svg)](https://codeclimate.com/github/lotus/lotus)
28
+ [![Dependencies](https://gemnasium.com/lotus/lotus.svg)](https://gemnasium.com/lotus/lotus)
29
+ [![Inline docs](http://inch-ci.org/github/lotus/lotus.svg)](http://inch-ci.org/github/lotus/lotus)
29
30
 
30
31
  ## Contact
31
32
 
@@ -96,4 +97,4 @@ __Lotus__ uses [Semantic Versioning 2.0.0](http://semver.org)
96
97
 
97
98
  ## Copyright
98
99
 
99
- Copyright © 2014-2015 Luca Guidi – Released under MIT License
100
+ Copyright © 2014-2016 Luca Guidi – Released under MIT License
data/bin/lotus CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ require 'bundler'
3
4
  require 'lotus/cli'
4
5
  Lotus::Cli.start
data/lib/lotus.rb CHANGED
@@ -9,6 +9,8 @@ require 'lotus/environment'
9
9
  #
10
10
  # @see http://lotusrb.org
11
11
  module Lotus
12
+ DEFAULT_PUBLIC_DIRECTORY = 'public'.freeze
13
+
12
14
  # Return root of the project (top level directory).
13
15
  #
14
16
  # @return [Pathname] root path
@@ -21,6 +23,10 @@ module Lotus
21
23
  environment.root
22
24
  end
23
25
 
26
+ def self.public_directory
27
+ root.join(DEFAULT_PUBLIC_DIRECTORY)
28
+ end
29
+
24
30
  # Return the current environment
25
31
  #
26
32
  # @return [String] the current environment
@@ -129,7 +129,7 @@ module Lotus
129
129
  # @api private
130
130
  def invalid_csrf_token?
131
131
  verify_csrf_token? &&
132
- session[CSRF_TOKEN] != params[CSRF_TOKEN]
132
+ ! ::Rack::Utils.secure_compare(session[CSRF_TOKEN], params[CSRF_TOKEN])
133
133
  end
134
134
 
135
135
  # Generates a random CSRF Token
@@ -134,9 +134,9 @@ module Lotus
134
134
  # end
135
135
  #
136
136
  # module Controllers::Dashboard
137
- # include OneFile::Controller
137
+ # class Index
138
+ # include OneFile::Action
138
139
  #
139
- # action 'Index' do
140
140
  # def call(params)
141
141
  # self.body = 'Hello!'
142
142
  # end
@@ -211,10 +211,10 @@ module Lotus
211
211
  # @since 0.1.0
212
212
  #
213
213
  # @see http://rack.github.io
214
+ # @see Lotus::RenderingPolicy#render
214
215
  # @see Lotus::Application#middleware
215
216
  def call(env)
216
- renderer.render(env,
217
- middleware.call(env))
217
+ renderer.render(env, middleware.call(env))
218
218
  end
219
219
 
220
220
  # Rack middleware stack
@@ -9,7 +9,6 @@ module Lotus
9
9
  # @since 0.2.1
10
10
  RESERVED_WORDS = %w(lotus).freeze
11
11
 
12
-
13
12
  # Initialize and check against reserved words
14
13
  #
15
14
  # An application name needs to be translated in quite a few ways:
@@ -33,9 +32,10 @@ module Lotus
33
32
  ensure_validity!
34
33
  end
35
34
 
36
-
37
35
  # Returns the cleaned application name.
38
36
  #
37
+ # @return [String] the santized name
38
+ #
39
39
  # @example
40
40
  # ApplicationName.new("my-App ").to_s # => "my-app"
41
41
  #
@@ -44,10 +44,11 @@ module Lotus
44
44
  @name
45
45
  end
46
46
 
47
-
48
47
  # Returns the application name uppercased with non-alphanumeric characters
49
48
  # as underscores.
50
49
  #
50
+ # @return [String] the upcased name
51
+ #
51
52
  # @example
52
53
  # ApplicationName.new("my-app").to_env_s => "MY_APP"
53
54
  #
@@ -56,10 +57,12 @@ module Lotus
56
57
  @name.upcase.gsub(/\W/, '_')
57
58
  end
58
59
 
59
-
60
60
  # Returns true if a potential application name matches one of the reserved
61
61
  # words.
62
62
  #
63
+ # @param name [String] the application name
64
+ # @return [TrueClass, FalseClass] the result of the check
65
+ #
63
66
  # @example
64
67
  # Lotus::ApplicationName.invalid?("lotus") # => true
65
68
  #
@@ -68,7 +71,6 @@ module Lotus
68
71
  RESERVED_WORDS.include?(name)
69
72
  end
70
73
 
71
-
72
74
  private
73
75
 
74
76
  # Raises RuntimeError with explanation if the provided name is invalid.
@@ -83,7 +85,6 @@ module Lotus
83
85
  end
84
86
  end
85
87
 
86
-
87
88
  # Cleans a string to be a functioning application name.
88
89
  #
89
90
  # @api private
@@ -94,6 +95,7 @@ module Lotus
94
95
  .strip
95
96
  .gsub(/\s/, '_')
96
97
  .gsub(/_{2,}/, '_')
98
+ .gsub(/-/, '_')
97
99
  end
98
100
  end
99
101
  end
data/lib/lotus/cli.rb CHANGED
@@ -1,110 +1,119 @@
1
1
  require 'thor'
2
- require 'lotus/environment'
3
- require 'lotus/version'
2
+ require 'lotus/commands/console'
3
+ require 'lotus/commands/new/app'
4
+ require 'lotus/commands/new/container'
4
5
 
5
6
  module Lotus
6
7
  class Cli < Thor
7
- include Thor::Actions
8
+ # include Thor::Actions
8
9
 
9
10
  desc 'version', 'prints Lotus version'
11
+ long_desc <<-EOS
12
+ `lotus version` prints the version of the bundled lotus gem.
13
+ EOS
10
14
  def version
15
+ require 'lotus/version'
11
16
  puts "v#{ Lotus::VERSION }"
12
17
  end
13
18
 
14
19
  desc 'server', 'starts a lotus server'
15
- method_option :port, aliases: '-p', desc: 'The port to run the server on, '
16
- method_option :server, desc: 'choose a specific Rack::Handler, e.g. webrick, thin etc'
17
- method_option :rackup, desc: 'a rackup configuration file path to load (config.ru)'
18
- method_option :host, desc: 'the host address to bind to'
19
- method_option :debug, desc: 'turn on debug output'
20
- method_option :warn, desc: 'turn on warnings'
21
- method_option :daemonize, desc: 'if true, the server will daemonize itself (fork, detach, etc)'
22
- method_option :pid, desc: 'path to write a pid file after daemonize'
23
- method_option :environment, desc: 'path to environment configuration (config/environment.rb)'
24
- method_option :code_reloading, desc: 'code reloading', type: :boolean, default: true
25
- method_option :help, aliases: '-h', desc: 'displays the usage message'
20
+ long_desc <<-EOS
21
+ `lotus server` starts a server for the current lotus project.
26
22
 
23
+ $ > lotus server
24
+
25
+ $ > lotus server -p 4500
26
+ EOS
27
+ method_option :port, aliases: '-p', desc: 'The port to run the server on, '
28
+ method_option :server, desc: 'choose a specific Rack::Handler, e.g. webrick, thin etc'
29
+ method_option :rackup, desc: 'a rackup configuration file path to load (config.ru)'
30
+ method_option :host, desc: 'the host address to bind to'
31
+ method_option :debug, desc: 'turn on debug output'
32
+ method_option :warn, desc: 'turn on warnings'
33
+ method_option :daemonize, desc: 'if true, the server will daemonize itself (fork, detach, etc)'
34
+ method_option :pid, desc: 'path to write a pid file after daemonize'
35
+ method_option :environment, desc: 'path to environment configuration (config/environment.rb)'
36
+ method_option :code_reloading, desc: 'code reloading', type: :boolean, default: true
37
+ method_option :help, desc: 'displays the usage message'
27
38
  def server
28
39
  if options[:help]
29
40
  invoke :help, ['server']
30
41
  else
31
42
  require 'lotus/commands/server'
32
- Lotus::Commands::Server.new(environment).start
43
+ Lotus::Commands::Server.new(options).start
33
44
  end
34
45
  end
35
46
 
36
47
  desc 'console', 'starts a lotus console'
37
- method_option :environment, desc: 'path to environment configuration (config/environment.rb)'
38
- method_option :engine, desc: 'choose a specific console engine: irb/pry/ripl (irb)'
39
- method_option :help, aliases: '-h', desc: 'displays the usage method'
48
+ long_desc <<-EOS
49
+ `lotus console` starts the interactive lotus console.
40
50
 
51
+ $ > lotus console --engine=pry
52
+ EOS
53
+ method_option :environment, desc: 'path to environment configuration (config/environment.rb)'
54
+ method_option :engine, desc: "choose a specific console engine: (#{Lotus::Commands::Console::ENGINES.keys.join('/')})", default: Lotus::Commands::Console::DEFAULT_ENGINE
55
+ method_option :help, desc: 'displays the usage method'
41
56
  def console
42
57
  if options[:help]
43
58
  invoke :help, ['console']
44
59
  else
45
- require 'lotus/commands/console'
46
- Lotus::Commands::Console.new(environment).start
60
+ Lotus::Commands::Console.new(options).start
47
61
  end
48
62
  end
49
63
 
50
- desc 'routes', 'prints routes'
51
- method_option :environment, desc: 'path to environment configuration (config/environment.rb)'
52
- method_option :help, aliases: '-h', desc: 'displays the usage method'
64
+ desc 'new APPLICATION_NAME', 'generate a new lotus project'
65
+ long_desc <<-EOS
66
+ `lotus new` creates a new lotus project.
67
+ You can specify various options such as the database to be used as well as the path and architecture.
53
68
 
54
- def routes
55
- if options[:help]
56
- invoke :help, ['routes']
57
- else
58
- require 'lotus/commands/routes'
59
- Lotus::Commands::Routes.new(environment).start
60
- end
61
- end
69
+ $ > lotus new fancy_app --application_name=admin
62
70
 
63
- desc 'new', 'generates a new application'
64
- method_option :database, aliases: ['-d', '--db'], desc: 'application database (filesystem/memory/postgresql/sqlite3/mysql)', type: :string, default: 'filesystem'
65
- method_option :architecture, aliases: ['-a', '--arch'], desc: 'application architecture (container/app)', type: :string, default: 'container'
66
- method_option :application, desc: 'application name', type: :string, default: 'web'
67
- method_option :application_base_url, desc: 'application base url', type: :string, default: '/'
68
- method_option :path, desc: 'path', type: :string
69
- method_option :test, desc: 'application test framework (rspec/minitest)', type: :string, default: 'minitest'
70
- method_option :lotus_head, desc: 'use Lotus HEAD', type: :boolean, default: false
71
- method_option :help, aliases: '-h', desc: 'displays the usage method'
72
-
73
- def new(name = nil)
74
- if options[:help] || name.nil?
71
+ $ > lotus new fancy_app --arch=app
72
+
73
+ $ > lotus new fancy_app --lotus-head=true
74
+ EOS
75
+ method_option :database, aliases: ['-d', '--db'], desc: "application database (#{Lotus::Generators::DatabaseConfig::SUPPORTED_ENGINES.keys.join('/')})", default: Lotus::Generators::DatabaseConfig::DEFAULT_ENGINE
76
+ method_option :architecture, aliases: ['-a', '--arch'], desc: 'project architecture (container/app)', default: Lotus::Commands::New::Abstract::DEFAULT_ARCHITECTURE
77
+ method_option :application_name, desc: 'application name, only for container', default: Lotus::Commands::New::Container::DEFAULT_APPLICATION_NAME
78
+ method_option :application_base_url, desc: 'application base url', default: Lotus::Commands::New::Abstract::DEFAULT_APPLICATION_BASE_URL
79
+ method_option :test, desc: "project test framework (#{Lotus::Generators::TestFramework::VALID_FRAMEWORKS.join('/')})", default: Lotus::Lotusrc::DEFAULT_TEST_SUITE
80
+ method_option :lotus_head, desc: 'use Lotus HEAD (true/false)', type: :boolean, default: false
81
+ method_option :help, desc: 'displays the usage method'
82
+ def new(application_name)
83
+ if options[:help]
75
84
  invoke :help, ['new']
85
+ elsif options[:architecture] == 'app'
86
+ Lotus::Commands::New::App.new(options, application_name).start
76
87
  else
77
- require 'lotus/commands/new'
78
- Lotus::Commands::New.new(name, environment, self).start
88
+ Lotus::Commands::New::Container.new(options, application_name).start
79
89
  end
80
90
  end
81
91
 
82
- desc 'generate', 'generates app, action, model, mailer or migration'
83
- method_option :application_base_url, desc: 'application base url', type: :string
84
- method_option :path, desc: 'applications path', type: :string
85
- method_option :url, desc: 'relative URL for action', type: :string
86
- method_option :method, desc: "HTTP method for action. Upper/lower case is ignored. Must be one of GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS, TRACE.", type: :string, default: 'GET'
87
- method_option :skip_view, desc: 'skip the creation of view and templates (only for action)', type: :boolean, default: false
88
- method_option :help, aliases: '-h', desc: 'displays the usage method'
89
-
90
- # @since 0.3.0
91
- # @api private
92
- def generate(type = nil, app_name = nil, name = nil)
93
- if options[:help] || (type.nil? && app_name.nil? && name.nil?)
94
- invoke :help, ['generate']
92
+ desc 'routes', 'prints the routes'
93
+ long_desc <<-EOS
94
+ `lotus routes` outputs all the registered routes to the console.
95
+ EOS
96
+ method_option :environment, desc: 'path to environment configuration (config/environment.rb)'
97
+ method_option :help, desc: 'displays the usage method'
98
+ def routes
99
+ if options[:help]
100
+ invoke :help, ['routes']
95
101
  else
96
- require 'lotus/commands/generate'
97
- Lotus::Commands::Generate.new(type, app_name, name, environment, self).start
102
+ require 'lotus/commands/routes'
103
+ Lotus::Commands::Routes.new(options).start
98
104
  end
99
105
  end
100
106
 
101
- require 'lotus/commands/db'
102
- register Lotus::Commands::DB, 'db', 'db [SUBCOMMAND]', 'manage set of DB operations'
107
+ require 'lotus/cli_sub_commands/db'
108
+ register Lotus::CliSubCommands::DB, 'db', 'db [SUBCOMMAND]', 'manage set of DB operations'
103
109
 
104
- private
110
+ require 'lotus/cli_sub_commands/generate'
111
+ register Lotus::CliSubCommands::Generate, 'generate', 'generate [SUBCOMMAND]', 'generate lotus classes'
105
112
 
106
- def environment
107
- Lotus::Environment.new(options)
108
- end
113
+ require 'lotus/cli_sub_commands/destroy'
114
+ register Lotus::CliSubCommands::Destroy, 'destroy', 'destroy [SUBCOMMAND]', 'destroy lotus classes'
115
+
116
+ require 'lotus/cli_sub_commands/assets'
117
+ register Lotus::CliSubCommands::Assets, 'assets', 'assets [SUBCOMMAND]', 'manage assets'
109
118
  end
110
119
  end