middleman-apps 0.1.0 → 0.2.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.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/.rubocop.yml +2 -1
- data/Gemfile +4 -0
- data/{LICENSE.txt → LICENSE} +0 -0
- data/README.md +166 -40
- data/features/e_asset_hash.feature +17 -0
- data/features/{directory_indexes.feature → e_directory_indexes.feature} +14 -16
- data/features/e_relative_assets.feature +17 -0
- data/features/f_code_reloading.feature +134 -0
- data/features/f_metadata.feature +25 -0
- data/features/{not_found_rack.feature → f_not_found.feature} +12 -22
- data/features/f_options.feature +39 -0
- data/features/step_definitions/capybara_steps.rb +18 -0
- data/features/step_definitions/mechanize_steps.rb +19 -0
- data/features/step_definitions/rack_app_steps.rb +4 -2
- data/features/support/aruba.rb +22 -0
- data/features/support/env.rb +0 -14
- data/features/support/helpers.rb +11 -0
- data/features/support/mechanize.rb +32 -0
- data/features/support/poltegeist.rb +35 -0
- data/features/v_activating.feature +74 -0
- data/features/v_building.feature +31 -0
- data/features/v_inheriting_from.feature +38 -0
- data/fixtures/asset_hash/apps/ignored_app.rb +10 -0
- data/fixtures/asset_hash/apps/test_app.rb +11 -0
- data/fixtures/asset_hash/config.rb +2 -0
- data/fixtures/asset_hash/source/error.html.erb +2 -0
- data/fixtures/{complex-app → asset_hash}/source/index.html.erb +0 -0
- data/fixtures/asset_hash/source/layouts/layout.erb +12 -0
- data/fixtures/asset_hash/source/layouts/page.erb +6 -0
- data/fixtures/asset_hash/source/stylesheets/style.css.scss.erb +5 -0
- data/fixtures/dir_index/apps/ignored_app.rb +10 -0
- data/fixtures/dir_index/apps/test_app.rb +10 -0
- data/fixtures/dir_index/config.rb +2 -0
- data/fixtures/{simple-app → dir_index}/source/index.html.erb +0 -0
- data/fixtures/mount_path/apps/test_app.rb +10 -0
- data/fixtures/mount_path/config.rb +1 -0
- data/fixtures/{complex-app/build/index.html → mount_path/source/index.html.erb} +0 -0
- data/fixtures/real_world/apps/awesome_api.rb +40 -0
- data/fixtures/{complex-app → real_world}/apps/child_app.rb +15 -2
- data/fixtures/{complex-app/apps/test_app.rb → real_world/apps/ignored_app.rb} +2 -2
- data/fixtures/real_world/apps/no_namespace.rb +8 -0
- data/fixtures/real_world/apps/test_app.rb +16 -0
- data/fixtures/real_world/config.rb +13 -0
- data/fixtures/real_world/source/apps.html.erb +14 -0
- data/fixtures/real_world/source/custom.html.erb +1 -0
- data/fixtures/{simple-app/build/index.html → real_world/source/index.html.erb} +0 -0
- data/fixtures/real_world/source/layouts/_partial.erb +1 -0
- data/fixtures/real_world/source/layouts/layout.erb +11 -0
- data/fixtures/real_world/source/layouts/page.erb +6 -0
- data/fixtures/real_world/source/layouts/test.html.markdown.erb +3 -0
- data/fixtures/relative_assets/apps/ignored_app.rb +10 -0
- data/fixtures/relative_assets/apps/test_app.rb +11 -0
- data/fixtures/relative_assets/config.rb +2 -0
- data/fixtures/relative_assets/source/error.html.erb +2 -0
- data/fixtures/relative_assets/source/index.html.erb +2 -0
- data/fixtures/relative_assets/source/layouts/layout.erb +12 -0
- data/fixtures/relative_assets/source/layouts/page.erb +6 -0
- data/fixtures/relative_assets/source/stylesheets/style.css.scss.erb +5 -0
- data/fixtures/simple/apps/ignored_app.rb +10 -0
- data/fixtures/simple/apps/test_app.rb +10 -0
- data/fixtures/simple/config.rb +1 -0
- data/fixtures/simple/source/index.html.erb +2 -0
- data/lib/middleman/apps.rb +26 -7
- data/lib/middleman/apps/base.rb +71 -15
- data/lib/middleman/apps/extension.rb +34 -158
- data/lib/middleman/apps/version.rb +2 -1
- data/lib/middleman/sitemap/app_collection.rb +225 -0
- data/lib/middleman/sitemap/app_resource.rb +61 -0
- metadata +77 -31
- data/features/activation.feature +0 -53
- data/features/build.feature +0 -20
- data/features/child_app.feature +0 -18
- data/features/complex_app.feature +0 -66
- data/features/not_found_server.feature +0 -8
- data/features/verbose.feature +0 -23
- data/fixtures/complex-app/apps/awesome_api.rb +0 -11
- data/fixtures/complex-app/build/error.html +0 -1
- data/fixtures/complex-app/config.rb +0 -1
- data/fixtures/simple-app/apps/test_app.rb +0 -8
- data/fixtures/simple-app/build/error.html +0 -1
- data/fixtures/simple-app/config.rb +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6a213786e26254de55227a6665424f7e292a309d
|
4
|
+
data.tar.gz: ee7f03b33678750f48025f9d1175066aaa89a9b1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 39fc434b08df657f9e5784dd146e03808808ed51a068dbfa45433776a0b2c44aea81ceee060a1535f0847eddbe86df50dc1c299a95edcb27b7af7b46b9d3c231
|
7
|
+
data.tar.gz: 9581a50b7a073eff04dbf89fd8797ddb3d2324d2279a2bd6e65d6ec0f31482382e5abedbd80ac162afc8e2540dcbffdac059e423e6e28f11be67f984218f815b
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/Gemfile
CHANGED
@@ -6,6 +6,7 @@ source 'https://rubygems.org'
|
|
6
6
|
gemspec
|
7
7
|
|
8
8
|
group :development do
|
9
|
+
gem 'pry'
|
9
10
|
gem 'rake'
|
10
11
|
gem 'rdoc'
|
11
12
|
gem 'yard'
|
@@ -14,6 +15,9 @@ end
|
|
14
15
|
group :test do
|
15
16
|
gem 'aruba'
|
16
17
|
gem 'capybara'
|
18
|
+
gem 'capybara-mechanize'
|
17
19
|
gem 'cucumber'
|
20
|
+
gem 'poltergeist'
|
21
|
+
gem 'redcarpet', '~> 3.3', '>= 3.3.3'
|
18
22
|
gem 'rspec'
|
19
23
|
end
|
data/{LICENSE.txt → LICENSE}
RENAMED
File without changes
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
## Middleman Apps
|
1
|
+
## Middleman Apps [](https://travis-ci.org/nikhgupta/middleman-apps)
|
2
2
|
|
3
3
|
`middleman-apps` is an extension for the [Middleman] static site
|
4
4
|
generator that allows you to run truly dynamic pages within your static
|
@@ -12,21 +12,26 @@ You can create dynamic pages using this extension. Maybe you want to:
|
|
12
12
|
- Display a dynamic Gallery of your most recent timeline from Flickr?
|
13
13
|
- ... suggest one? ...
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
15
|
+
## Installation
|
16
|
+
|
17
|
+
If you're just getting started, install the `middleman` gem and generate
|
18
|
+
a new project:
|
19
|
+
|
20
|
+
```
|
21
|
+
gem install middleman
|
22
|
+
middleman init MY_PROJECT
|
23
|
+
```
|
24
|
+
|
25
|
+
If you already have a Middleman project: Add `gem "middleman-apps"`
|
26
|
+
to your `Gemfile` and run `bundle install`.
|
27
|
+
|
28
|
+
## Getting Started
|
29
|
+
|
30
|
+
To get started with this extension, you only need to place a rack app
|
31
|
+
inside `MM_ROOT/apps` directory. Now, run `middleman build` or
|
32
|
+
`middleman server`, and your rack app will be mounted for you.
|
33
|
+
|
34
|
+
The app should be visible in `/__middleman/sitemap`, as well.
|
30
35
|
|
31
36
|
### Example
|
32
37
|
|
@@ -55,21 +60,51 @@ Run/Build your Middleman site now, and visit:
|
|
55
60
|
`/base64-api/encode/somestring`. Voila! It just works!
|
56
61
|
|
57
62
|
A `config.ru` is, also, generated for you, so that you can keep
|
58
|
-
using these
|
59
|
-
`rackup`, and visiting the above endpoint on
|
63
|
+
using these child apps/endpoints in production mode, e.g. via `puma`,
|
64
|
+
`rackup`, etc.. Try running `rackup`, and visiting the above endpoint on
|
65
|
+
that server.
|
60
66
|
|
61
|
-
##
|
67
|
+
## Features
|
62
68
|
|
63
|
-
|
64
|
-
|
69
|
+
Consider a real world example, where you have a Middleman website
|
70
|
+
running at `/`. Now, everything is static at this point. Lets, provide
|
71
|
+
a page on this website, which redirects the user to a random blog entry
|
72
|
+
from the last year. Lets assume this isn't possible without Javascript,
|
73
|
+
or maybe you need to do some server-side processing before you redirect.
|
65
74
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
```
|
75
|
+
Well, we can write down a succint Sinatra application that queries
|
76
|
+
Middleman's sitemap in the realtime, and redirect to a random article
|
77
|
+
from there. Let's call this a `child app`.
|
70
78
|
|
71
|
-
|
72
|
-
|
79
|
+
Using this extension, you can place this `child app` inside your
|
80
|
+
Middleman directory, and have it mounted at a specific path, and add
|
81
|
+
other niceties, and so on.
|
82
|
+
|
83
|
+
- Creates an `umbrella` rack-app that mounts Middleman to `/` and all
|
84
|
+
other child apps inside itseslf. You can run this umbrella application
|
85
|
+
in development mode using `middleman server`.
|
86
|
+
|
87
|
+
- A `config.ru` is generated for you, so that you can run this
|
88
|
+
`umbrella` application in production using `rackup`, `puma`, etc. What
|
89
|
+
you see in development is what you get in production (nearly).
|
90
|
+
|
91
|
+
- Use a specific `404` error page that is used across `middleman`
|
92
|
+
application and `child apps` in production mode.
|
93
|
+
|
94
|
+
- Automatic reloading of code for child apps in development mode.
|
95
|
+
|
96
|
+
- Specify `url` where a given `child-app` should be mounted.
|
97
|
+
|
98
|
+
- Use Middleman layouts in the HTML rendered by child apps. Requires
|
99
|
+
child apps to be inherited from `Middleman::Apps::Base`, which in turn
|
100
|
+
inherits from `Sinatra::Base`.
|
101
|
+
|
102
|
+
Inheriting from this class, also, provides you with several other
|
103
|
+
goodies, such as specifying title and description for your child apps,
|
104
|
+
so that they can be listed on some page with some overview of what
|
105
|
+
they do. It is recommended to inherit from this class, when possible.
|
106
|
+
|
107
|
+
- Works well with `DirectoryIndexes`, and `AssetHash` extensions.
|
73
108
|
|
74
109
|
## Configuration
|
75
110
|
|
@@ -78,18 +113,11 @@ activate :apps,
|
|
78
113
|
map: {}, # Mappings for custom URL and Class for child apps
|
79
114
|
verbose: false, # Display warnings if any when building main app
|
80
115
|
not_found: "404.html", # Render this page for 404 errors, if it exists
|
81
|
-
namespace: nil
|
82
|
-
|
116
|
+
namespace: nil, # Use a namespace for Class of a child app
|
117
|
+
mount_path: '/', # Prefix all child apps URLs with this path
|
118
|
+
app_dir: 'apps' # Child apps are placed in this directory.
|
83
119
|
```
|
84
120
|
|
85
|
-
A `config.ru` will be generated for you (if one does not exist already),
|
86
|
-
when you preview/build your MM site. Your child apps will be mounted in
|
87
|
-
both development (preview) mode (e.g. via `middleman server`) as well in
|
88
|
-
production (build) mode of MM (e.g. running the built app using `puma`
|
89
|
-
or `rackup`).
|
90
|
-
|
91
|
-
## Options
|
92
|
-
|
93
121
|
### `not_found: '404.html'`
|
94
122
|
|
95
123
|
This option defines a custom HTML page to use for 404 errors. By
|
@@ -100,11 +128,14 @@ A warning is generated in `verbose` mode, if this file does not exist!
|
|
100
128
|
Set this option to `false`, if you prefer not to use a 404 page and
|
101
129
|
would rather stick with default 404 response from Rack.
|
102
130
|
|
131
|
+
At the moment, this page can not be shown in `development` mode, but
|
132
|
+
will be used for missing URIs across the `umbrella` application in
|
133
|
+
`production`.
|
134
|
+
|
103
135
|
### `verbose: false`
|
104
136
|
|
105
137
|
If true, display warnings such as non-existent 404 error page, and any
|
106
|
-
child apps that were ignored when starting server
|
107
|
-
development/production mode.
|
138
|
+
child apps that were ignored when starting server or building it.
|
108
139
|
|
109
140
|
### `namespace: nil`
|
110
141
|
|
@@ -114,7 +145,7 @@ below for better clarification.
|
|
114
145
|
### `map: {}`
|
115
146
|
|
116
147
|
This option can be used to specify a custom URL endpoint for a specific
|
117
|
-
child app, or
|
148
|
+
child app, or class name for your child app if different than
|
118
149
|
what is guessed (`str.classify.constantize`).
|
119
150
|
|
120
151
|
```ruby
|
@@ -143,6 +174,100 @@ With the above configuration in place, here is what happens:
|
|
143
174
|
`MM_ROOT/apps/other_mini_project.rb`, it will be mounted at:
|
144
175
|
`/other-mini-project` endpoint.
|
145
176
|
|
177
|
+
### `mount_path: /a/b/c/d`:
|
178
|
+
|
179
|
+
Prefix URL for child apps with the given string, such that a child app
|
180
|
+
that was to be mounted on `/child-app`, will now be mounted at:
|
181
|
+
`/a/b/c/d/child-app`.
|
182
|
+
|
183
|
+
### `app_dir: apps`:
|
184
|
+
|
185
|
+
Customize the name of the directory used to host all child apps.
|
186
|
+
|
187
|
+
## Middleman Layouts
|
188
|
+
|
189
|
+
Child apps can use Middleman layouts, if required. This is useful to
|
190
|
+
keep a seamless appearance across the `umbrella` application.
|
191
|
+
|
192
|
+
To use Middleman layouts, inherit your child app from
|
193
|
+
`Middleman::Apps::Base` and call `middleman_layout` with appropriate
|
194
|
+
layout name, like this:
|
195
|
+
|
196
|
+
require 'middleman/apps/base'
|
197
|
+
|
198
|
+
class TestApp < Middleman::Apps::Base
|
199
|
+
get '/' do
|
200
|
+
middleman_layout :page, locals: { var: value }
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
The above call to `middleman layout` will try to render
|
205
|
+
`source/layouts/page.erb` layout from Middleman and pass it specified
|
206
|
+
options or locals.
|
207
|
+
|
208
|
+
## Listing child apps on a Middleman Page
|
209
|
+
|
210
|
+
# in: source/apps.html.erb
|
211
|
+
|
212
|
+
<section class="child-apps list">
|
213
|
+
<h3 class="title">Available apps:</h3>
|
214
|
+
<ul>
|
215
|
+
<% apps_list.each_with_index do |app, i| %>
|
216
|
+
<article>
|
217
|
+
<h2 class="title"><%= link_to app.title, app.url %></h2>
|
218
|
+
<p><%= app.html_description %></p>
|
219
|
+
</article>
|
220
|
+
<% end %>
|
221
|
+
</ul>
|
222
|
+
</section>
|
223
|
+
|
224
|
+
- `title`, `url`, and `routes` for the application are added on their
|
225
|
+
own.
|
226
|
+
- To overwrite `title`, or provide `description`, or any other arbitrary
|
227
|
+
metadata for your child app, you can make a call to `set_metadata(key,
|
228
|
+
val)` in your child app (must inherit from `Middleman::Apps::Base`).
|
229
|
+
|
230
|
+
- Markdown should be provided to `description`, which will be used to
|
231
|
+
populate `html_description`.
|
232
|
+
|
233
|
+
- Call `metadata` in your child app to have a peek at all the variables
|
234
|
+
that can be accessed this way.
|
235
|
+
|
236
|
+
For example:
|
237
|
+
|
238
|
+
require 'middleman/apps/base'
|
239
|
+
|
240
|
+
class SomeApp < ::Middleman::Apps::Base
|
241
|
+
get '/' do
|
242
|
+
'hello'
|
243
|
+
end
|
244
|
+
|
245
|
+
post '/' do
|
246
|
+
'done'
|
247
|
+
end
|
248
|
+
|
249
|
+
add_routes_to_metadata :get # only `get` routes in metadata
|
250
|
+
set_metadata :title, 'Awesome Application'
|
251
|
+
set_metadata :description, <<-MARKDOWN
|
252
|
+
# Description for this Child application
|
253
|
+
|
254
|
+
This will be added as a metadata property for this child app.
|
255
|
+
MARKDOWN
|
256
|
+
end
|
257
|
+
|
258
|
+
## Notes/Gotchas
|
259
|
+
|
260
|
+
- To setup `routes` metadata, call `add_routes_to_metadata` at the end
|
261
|
+
of your child app (after, actually, defining your routes).
|
262
|
+
|
263
|
+
- 404 error page is not shown in `development` mode, i.e. when running
|
264
|
+
`middleman server`. A default `File Not Found` message is shown in
|
265
|
+
this case, by Middleman.
|
266
|
+
|
267
|
+
- When `relative_assets` is activated, 404 errors on
|
268
|
+
`/deeper/pages/in/your/website` will have wrong assets, and layout for
|
269
|
+
404 pages may be inconsistent with the rest of the site in this case.
|
270
|
+
|
146
271
|
## Community
|
147
272
|
|
148
273
|
The official community forum is available at: http://forum.middlemanapp.com
|
@@ -183,3 +308,4 @@ Copyright (c) 2018 Nikhil Gupta. MIT Licensed, see [LICENSE] for details.
|
|
183
308
|
|
184
309
|
[middleman]: http://middlemanapp.com
|
185
310
|
[LICENSE]: https://github.com/nikhgupta/middleman-apps/blob/master/LICENSE.txt
|
311
|
+
[Simple]: https://github.com/nikhgupta/middleman-apps/tree/master/fixtures/simple
|
@@ -0,0 +1,17 @@
|
|
1
|
+
Feature: Compatibility with other Extensions: AssetHash
|
2
|
+
|
3
|
+
@production @javascript
|
4
|
+
Scenario: Custom error page with AssetHash
|
5
|
+
Given successfully built app is running at "asset_hash"
|
6
|
+
When I go to "/unknown-app"
|
7
|
+
Then the status code should be "404"
|
8
|
+
And I should see text "404 - Not Found!"
|
9
|
+
And I should not see text "Error"
|
10
|
+
|
11
|
+
@production @javascript
|
12
|
+
Scenario: Custom error page with AssetHash
|
13
|
+
Given successfully built app is running at "asset_hash"
|
14
|
+
When I go to "/unknown-app/some/deep/nested/url"
|
15
|
+
Then the status code should be "404"
|
16
|
+
And I should see text "404 - Not Found!"
|
17
|
+
And I should not see text "Error"
|
@@ -1,18 +1,14 @@
|
|
1
|
-
Feature: Compatibility with other Extensions
|
1
|
+
Feature: Compatibility with other Extensions: DirectoryIndex
|
2
2
|
|
3
3
|
# Use custom error page for `middleman-apps`:
|
4
4
|
# with Directory Indexes on - using `find_resource_by_path`
|
5
5
|
Scenario: Custom error page with Directory Indexes
|
6
|
-
Given a fixture app "
|
7
|
-
And a file named "source/
|
6
|
+
Given a fixture app "dir_index"
|
7
|
+
And a file named "source/error.html.erb" with:
|
8
8
|
"""
|
9
9
|
<h2><%= 404 %> Custom Not Found!</h2>
|
10
10
|
"""
|
11
|
-
And app is running
|
12
|
-
"""
|
13
|
-
activate :directory_indexes
|
14
|
-
activate :apps, not_found: "custom.html"
|
15
|
-
"""
|
11
|
+
And app is running
|
16
12
|
When I go to "/unknown-app"
|
17
13
|
Then the status code should be "404"
|
18
14
|
And I should see "<h2>404 Custom Not Found!</h2>"
|
@@ -20,16 +16,17 @@ Feature: Compatibility with other Extensions
|
|
20
16
|
# Use custom error page for `middleman-apps`:
|
21
17
|
# with Directory Indexes on - using `find_resource_by_destination_path`
|
22
18
|
Scenario: Custom error page with Directory Indexes
|
23
|
-
Given a fixture app "
|
24
|
-
And a file named "source/
|
19
|
+
Given a fixture app "dir_index"
|
20
|
+
And a file named "source/error.html.erb" with:
|
25
21
|
"""
|
26
22
|
<h2><%= 404 %> Custom Not Found!</h2>
|
27
23
|
"""
|
28
|
-
And
|
24
|
+
And I overwrite the file named "config.rb" with:
|
29
25
|
"""
|
30
26
|
activate :directory_indexes
|
31
|
-
activate :apps, not_found: "
|
27
|
+
activate :apps, not_found: "error/index.html"
|
32
28
|
"""
|
29
|
+
And app is running
|
33
30
|
When I go to "/unknown-app"
|
34
31
|
Then the status code should be "404"
|
35
32
|
And I should see "<h2>404 Custom Not Found!</h2>"
|
@@ -37,16 +34,17 @@ Feature: Compatibility with other Extensions
|
|
37
34
|
# Use custom error page for `middleman-apps`:
|
38
35
|
# with Directory Indexes on - using `find_resource_by_page_id`
|
39
36
|
Scenario: Custom error page with Directory Indexes
|
40
|
-
Given a fixture app "
|
41
|
-
And a file named "source/
|
37
|
+
Given a fixture app "dir_index"
|
38
|
+
And a file named "source/error.html.erb" with:
|
42
39
|
"""
|
43
40
|
<h2><%= 404 %> Custom Not Found!</h2>
|
44
41
|
"""
|
45
|
-
And
|
42
|
+
And I overwrite the file named "config.rb" with:
|
46
43
|
"""
|
47
44
|
activate :directory_indexes
|
48
|
-
activate :apps, not_found: "
|
45
|
+
activate :apps, not_found: "error"
|
49
46
|
"""
|
47
|
+
And app is running
|
50
48
|
When I go to "/unknown-app"
|
51
49
|
Then the status code should be "404"
|
52
50
|
And I should see "<h2>404 Custom Not Found!</h2>"
|
@@ -0,0 +1,17 @@
|
|
1
|
+
Feature: Compatibility with other Extensions: RelativeAssets
|
2
|
+
|
3
|
+
@production @javascript
|
4
|
+
Scenario: Custom error page with RelativeAssets
|
5
|
+
Given successfully built app is running at "relative_assets"
|
6
|
+
When I go to "/unknown-app"
|
7
|
+
Then the status code should be "404"
|
8
|
+
And I should see text "404 - Not Found!"
|
9
|
+
And I should not see text "Error"
|
10
|
+
|
11
|
+
@production @javascript @wip
|
12
|
+
Scenario: Custom error page with RelativeAssets
|
13
|
+
Given successfully built app is running at "relative_assets"
|
14
|
+
When I go to "/unknown-app/some/deep/nested/url"
|
15
|
+
Then the status code should be "404"
|
16
|
+
And I should see text "404 - Not Found!"
|
17
|
+
And I should not see text "Error"
|
@@ -0,0 +1,134 @@
|
|
1
|
+
Feature: Code reloading for child apps
|
2
|
+
|
3
|
+
@mechanize @development
|
4
|
+
Scenario: Allows reloading in development server
|
5
|
+
Given a fixture app "real_world"
|
6
|
+
And server is running in background
|
7
|
+
When I go to "/child-app" on local server
|
8
|
+
Then I should see "hello my world"
|
9
|
+
When I overwrite the file named "apps/child_app.rb" with:
|
10
|
+
"""
|
11
|
+
require 'middleman/apps/base'
|
12
|
+
class RealWorld::ChildApp < ::Middleman::Apps::Base
|
13
|
+
get '/' do
|
14
|
+
"reloaded #{named} world"
|
15
|
+
end
|
16
|
+
def named; 'other'; end
|
17
|
+
end
|
18
|
+
"""
|
19
|
+
And I go to "/child-app" on local server
|
20
|
+
Then I should see "reloaded other world"
|
21
|
+
|
22
|
+
@mechanize @development
|
23
|
+
Scenario: Allows reloading for apps without any namespace
|
24
|
+
Given a fixture app "real_world"
|
25
|
+
And server is running in background
|
26
|
+
When I go to "/no-name" on local server
|
27
|
+
Then I should see "pass"
|
28
|
+
When I overwrite the file named "apps/no_namespace.rb" with:
|
29
|
+
"""
|
30
|
+
require 'middleman/apps/base'
|
31
|
+
class NoNamespaceApp < ::Middleman::Apps::Base
|
32
|
+
get '/' do
|
33
|
+
"reloaded"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
"""
|
37
|
+
And I go to "/no-name" on local server
|
38
|
+
Then I should see "reloaded"
|
39
|
+
|
40
|
+
@mechanize @development
|
41
|
+
Scenario: Throws 404 when child app is suddenly ignored
|
42
|
+
Given a fixture app "real_world"
|
43
|
+
And server is running in background
|
44
|
+
When I overwrite the file named "apps/child_app.rb" with:
|
45
|
+
"""
|
46
|
+
require 'middleman/apps/base'
|
47
|
+
class ChildApp < ::Middleman::Apps::Base
|
48
|
+
get '/' do
|
49
|
+
"reloaded #{named} world"
|
50
|
+
end
|
51
|
+
def named; 'other'; end
|
52
|
+
end
|
53
|
+
"""
|
54
|
+
And I go to "/child-app" on local server
|
55
|
+
Then the status code should be "404"
|
56
|
+
|
57
|
+
@mechanize @production
|
58
|
+
Scenario: Do not allow reloading of apps in production
|
59
|
+
Given a fixture app "real_world"
|
60
|
+
And server is running in background
|
61
|
+
When I go to "/child-app" on local server
|
62
|
+
Then I should see "hello my world"
|
63
|
+
When I overwrite the file named "apps/child_app.rb" with:
|
64
|
+
"""
|
65
|
+
require 'middleman/apps/base'
|
66
|
+
class RealWorld::ChildApp < ::Middleman::Apps::Base
|
67
|
+
get '/' do
|
68
|
+
'hello world\n' * n
|
69
|
+
end
|
70
|
+
def n; 2; end
|
71
|
+
end
|
72
|
+
"""
|
73
|
+
And I go to "/child-app" on local server
|
74
|
+
Then I should see "hello my world"
|
75
|
+
|
76
|
+
@mechanize @development
|
77
|
+
Scenario: New child apps are loaded automatically
|
78
|
+
Given a fixture app "real_world"
|
79
|
+
And server is running in background
|
80
|
+
When I go to "/unknown-app" on local server
|
81
|
+
Then the status code should be "404"
|
82
|
+
And I should see "File Not Found"
|
83
|
+
When I write to "apps/unknown_app.rb" with:
|
84
|
+
"""
|
85
|
+
require 'middleman/apps/base'
|
86
|
+
class RealWorld::UnknownApp < ::Middleman::Apps::Base
|
87
|
+
get '/' do
|
88
|
+
"I am now!"
|
89
|
+
end
|
90
|
+
end
|
91
|
+
"""
|
92
|
+
And I go to "/unknown-app" on local server
|
93
|
+
Then I should see "I am now!"
|
94
|
+
|
95
|
+
@mechanize @production
|
96
|
+
Scenario: New child apps are NOT loaded automatically
|
97
|
+
Given a fixture app "real_world"
|
98
|
+
And server is running in background
|
99
|
+
When I go to "/unknown-app" on local server
|
100
|
+
Then the status code should be "404"
|
101
|
+
And I should see "Not Found"
|
102
|
+
When I write to "apps/unknown_app.rb" with:
|
103
|
+
"""
|
104
|
+
require 'middleman/apps/base'
|
105
|
+
class RealWorld::UnknownApp < ::Middleman::Apps::Base
|
106
|
+
get '/' do
|
107
|
+
"I am now!"
|
108
|
+
end
|
109
|
+
end
|
110
|
+
"""
|
111
|
+
And I go to "/unknown-app" on local server
|
112
|
+
Then the status code should be "404"
|
113
|
+
And I should see "Not Found"
|
114
|
+
|
115
|
+
@mechanize @development
|
116
|
+
Scenario: Removing child apps removes them from server
|
117
|
+
Given a fixture app "real_world"
|
118
|
+
And server is running in background
|
119
|
+
When I go to "/child-app" on local server
|
120
|
+
Then I should see "hello my world"
|
121
|
+
When I remove the file named "apps/child_app.rb"
|
122
|
+
And I go to "/child-app" on local server
|
123
|
+
Then the status code should be "404"
|
124
|
+
And I should see "File Not Found"
|
125
|
+
|
126
|
+
@mechanize @production
|
127
|
+
Scenario: Removing child apps does NOT remove them from server
|
128
|
+
Given a fixture app "real_world"
|
129
|
+
And server is running in background
|
130
|
+
When I go to "/child-app" on local server
|
131
|
+
Then I should see "hello my world"
|
132
|
+
When I remove the file named "apps/child_app.rb"
|
133
|
+
And I go to "/child-app" on local server
|
134
|
+
Then I should see "hello my world"
|