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
@@ -0,0 +1,61 @@
|
|
1
|
+
module Middleman
|
2
|
+
module Sitemap
|
3
|
+
# Base app resource that inherits from Sitemap Resource.
|
4
|
+
#
|
5
|
+
class AppResource < Resource
|
6
|
+
def self.find_by_klass(klass, app)
|
7
|
+
app.sitemap.resources.detect do |res|
|
8
|
+
res.is_a?(self) && res.locals[:klass].name == klass.name
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.find_by_path(path, app)
|
13
|
+
app.sitemap.resources.detect do |res|
|
14
|
+
res.is_a?(self) && res.source_file.to_s == path.to_s
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# Get class for this child app.
|
19
|
+
#
|
20
|
+
# @return [Class] class for the child app
|
21
|
+
#
|
22
|
+
def klass
|
23
|
+
locals[:klass]
|
24
|
+
end
|
25
|
+
|
26
|
+
def title
|
27
|
+
locals[:title] || path.to_s.titleize
|
28
|
+
end
|
29
|
+
|
30
|
+
def description
|
31
|
+
str = locals[:description].to_s
|
32
|
+
locals[:description] = str.gsub(/^#{str.scan(/^[ \t]+(?=\S)/).min}/, '')
|
33
|
+
end
|
34
|
+
|
35
|
+
def update_locals(key, val)
|
36
|
+
locals[key.to_sym] = val
|
37
|
+
end
|
38
|
+
|
39
|
+
def routes
|
40
|
+
locals[:routes] || []
|
41
|
+
end
|
42
|
+
|
43
|
+
def html_description
|
44
|
+
return locals[:html_description] if locals[:html_description]
|
45
|
+
html = Tilt['markdown'].new { description }.render(self)
|
46
|
+
locals[:html_description] = html
|
47
|
+
end
|
48
|
+
|
49
|
+
def render(opts = {}, locs = {})
|
50
|
+
md = metadata
|
51
|
+
locs = md[:locals].deep_merge(locs)
|
52
|
+
opts = md[:options].deep_merge(opts)
|
53
|
+
locs[:current_path] ||= destination_path
|
54
|
+
|
55
|
+
layout = "layouts/#{opts.delete(:layout)}"
|
56
|
+
context = @app.template_context_class.new(@app, locs, opts)
|
57
|
+
context.render :middleman, layout, opts.merge(locals: locs)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: middleman-apps
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nikhil Gupta
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-10-
|
11
|
+
date: 2017-10-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: middleman-core
|
@@ -77,37 +77,75 @@ files:
|
|
77
77
|
- ".rubocop.yml"
|
78
78
|
- ".travis.yml"
|
79
79
|
- Gemfile
|
80
|
-
- LICENSE
|
80
|
+
- LICENSE
|
81
81
|
- README.md
|
82
82
|
- Rakefile
|
83
|
-
- features/
|
84
|
-
- features/
|
85
|
-
- features/
|
86
|
-
- features/
|
87
|
-
- features/
|
88
|
-
- features/
|
89
|
-
- features/
|
83
|
+
- features/e_asset_hash.feature
|
84
|
+
- features/e_directory_indexes.feature
|
85
|
+
- features/e_relative_assets.feature
|
86
|
+
- features/f_code_reloading.feature
|
87
|
+
- features/f_metadata.feature
|
88
|
+
- features/f_not_found.feature
|
89
|
+
- features/f_options.feature
|
90
|
+
- features/step_definitions/capybara_steps.rb
|
91
|
+
- features/step_definitions/mechanize_steps.rb
|
90
92
|
- features/step_definitions/rack_app_steps.rb
|
93
|
+
- features/support/aruba.rb
|
91
94
|
- features/support/env.rb
|
92
|
-
- features/
|
93
|
-
-
|
94
|
-
-
|
95
|
-
-
|
96
|
-
-
|
97
|
-
-
|
98
|
-
- fixtures/
|
99
|
-
- fixtures/
|
100
|
-
- fixtures/
|
101
|
-
- fixtures/
|
102
|
-
- fixtures/
|
103
|
-
- fixtures/
|
104
|
-
- fixtures/
|
95
|
+
- features/support/helpers.rb
|
96
|
+
- features/support/mechanize.rb
|
97
|
+
- features/support/poltegeist.rb
|
98
|
+
- features/v_activating.feature
|
99
|
+
- features/v_building.feature
|
100
|
+
- features/v_inheriting_from.feature
|
101
|
+
- fixtures/asset_hash/apps/ignored_app.rb
|
102
|
+
- fixtures/asset_hash/apps/test_app.rb
|
103
|
+
- fixtures/asset_hash/config.rb
|
104
|
+
- fixtures/asset_hash/source/error.html.erb
|
105
|
+
- fixtures/asset_hash/source/index.html.erb
|
106
|
+
- fixtures/asset_hash/source/layouts/layout.erb
|
107
|
+
- fixtures/asset_hash/source/layouts/page.erb
|
108
|
+
- fixtures/asset_hash/source/stylesheets/style.css.scss.erb
|
109
|
+
- fixtures/dir_index/apps/ignored_app.rb
|
110
|
+
- fixtures/dir_index/apps/test_app.rb
|
111
|
+
- fixtures/dir_index/config.rb
|
112
|
+
- fixtures/dir_index/source/index.html.erb
|
113
|
+
- fixtures/mount_path/apps/test_app.rb
|
114
|
+
- fixtures/mount_path/config.rb
|
115
|
+
- fixtures/mount_path/source/index.html.erb
|
116
|
+
- fixtures/real_world/apps/awesome_api.rb
|
117
|
+
- fixtures/real_world/apps/child_app.rb
|
118
|
+
- fixtures/real_world/apps/ignored_app.rb
|
119
|
+
- fixtures/real_world/apps/no_namespace.rb
|
120
|
+
- fixtures/real_world/apps/test_app.rb
|
121
|
+
- fixtures/real_world/config.rb
|
122
|
+
- fixtures/real_world/source/apps.html.erb
|
123
|
+
- fixtures/real_world/source/custom.html.erb
|
124
|
+
- fixtures/real_world/source/index.html.erb
|
125
|
+
- fixtures/real_world/source/layouts/_partial.erb
|
126
|
+
- fixtures/real_world/source/layouts/layout.erb
|
127
|
+
- fixtures/real_world/source/layouts/page.erb
|
128
|
+
- fixtures/real_world/source/layouts/test.html.markdown.erb
|
129
|
+
- fixtures/relative_assets/apps/ignored_app.rb
|
130
|
+
- fixtures/relative_assets/apps/test_app.rb
|
131
|
+
- fixtures/relative_assets/config.rb
|
132
|
+
- fixtures/relative_assets/source/error.html.erb
|
133
|
+
- fixtures/relative_assets/source/index.html.erb
|
134
|
+
- fixtures/relative_assets/source/layouts/layout.erb
|
135
|
+
- fixtures/relative_assets/source/layouts/page.erb
|
136
|
+
- fixtures/relative_assets/source/stylesheets/style.css.scss.erb
|
137
|
+
- fixtures/simple/apps/ignored_app.rb
|
138
|
+
- fixtures/simple/apps/test_app.rb
|
139
|
+
- fixtures/simple/config.rb
|
140
|
+
- fixtures/simple/source/index.html.erb
|
105
141
|
- lib/middleman.rb
|
106
142
|
- lib/middleman/apps.rb
|
107
143
|
- lib/middleman/apps/base.rb
|
108
144
|
- lib/middleman/apps/extension.rb
|
109
145
|
- lib/middleman/apps/rack_contrib.rb
|
110
146
|
- lib/middleman/apps/version.rb
|
147
|
+
- lib/middleman/sitemap/app_collection.rb
|
148
|
+
- lib/middleman/sitemap/app_resource.rb
|
111
149
|
- middleman-apps.gemspec
|
112
150
|
homepage: https://github.com/nikhgupta/middleman-apps
|
113
151
|
licenses: []
|
@@ -133,13 +171,21 @@ signing_key:
|
|
133
171
|
specification_version: 4
|
134
172
|
summary: Middleman extension to run dynamic pages using Sinatra
|
135
173
|
test_files:
|
136
|
-
- features/
|
137
|
-
- features/
|
138
|
-
- features/
|
139
|
-
- features/
|
140
|
-
- features/
|
141
|
-
- features/
|
142
|
-
- features/
|
174
|
+
- features/e_asset_hash.feature
|
175
|
+
- features/e_directory_indexes.feature
|
176
|
+
- features/e_relative_assets.feature
|
177
|
+
- features/f_code_reloading.feature
|
178
|
+
- features/f_metadata.feature
|
179
|
+
- features/f_not_found.feature
|
180
|
+
- features/f_options.feature
|
181
|
+
- features/step_definitions/capybara_steps.rb
|
182
|
+
- features/step_definitions/mechanize_steps.rb
|
143
183
|
- features/step_definitions/rack_app_steps.rb
|
184
|
+
- features/support/aruba.rb
|
144
185
|
- features/support/env.rb
|
145
|
-
- features/
|
186
|
+
- features/support/helpers.rb
|
187
|
+
- features/support/mechanize.rb
|
188
|
+
- features/support/poltegeist.rb
|
189
|
+
- features/v_activating.feature
|
190
|
+
- features/v_building.feature
|
191
|
+
- features/v_inheriting_from.feature
|
data/features/activation.feature
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
Feature: Activating MiddlemanApps
|
2
|
-
|
3
|
-
Scenario: Without `middleman-apps`
|
4
|
-
Given a fixture app "simple-app"
|
5
|
-
And a file named "config.rb" with:
|
6
|
-
"""
|
7
|
-
"""
|
8
|
-
And the Server is running at "simple-app"
|
9
|
-
When I go to "/"
|
10
|
-
Then I should see "<h1>Middleman</h1>"
|
11
|
-
When I go to "/test-app"
|
12
|
-
Then the status code should be "404"
|
13
|
-
And I should see "<h1>File Not Found</h1>"
|
14
|
-
|
15
|
-
Scenario: Without `middleman-apps` with Rack
|
16
|
-
Given a fixture app "simple-app"
|
17
|
-
And a file named "config.rb" with:
|
18
|
-
"""
|
19
|
-
require 'sinatra'
|
20
|
-
require_relative 'apps/test_app'
|
21
|
-
map("/test-app") { run TestApp }
|
22
|
-
"""
|
23
|
-
And the Server is running at "simple-app"
|
24
|
-
When I go to "/"
|
25
|
-
Then I should see "<h1>Middleman</h1>"
|
26
|
-
When I go to "/test-app"
|
27
|
-
Then I should see "fail"
|
28
|
-
When I go to "/test-app/?test=1"
|
29
|
-
Then I should see "pass"
|
30
|
-
|
31
|
-
Scenario: With `middleman-apps`
|
32
|
-
Given a fixture app "simple-app"
|
33
|
-
And a file named "config.rb" with:
|
34
|
-
"""
|
35
|
-
activate :apps
|
36
|
-
"""
|
37
|
-
And the Server is running at "simple-app"
|
38
|
-
When I go to "/"
|
39
|
-
Then I should see "<h1>Middleman</h1>"
|
40
|
-
When I go to "/test-app"
|
41
|
-
Then I should see "fail"
|
42
|
-
When I go to "/test-app/?test=1"
|
43
|
-
Then I should see "pass"
|
44
|
-
|
45
|
-
Scenario: Adds a `config.ru`
|
46
|
-
Given a fixture app "simple-app"
|
47
|
-
Then the file "config.ru" should not exist
|
48
|
-
Given a file named "config.rb" with:
|
49
|
-
"""
|
50
|
-
activate :apps
|
51
|
-
"""
|
52
|
-
And the Server is running at "simple-app"
|
53
|
-
Then the file "config.ru" should exist
|
data/features/build.feature
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
Feature: Built app
|
2
|
-
|
3
|
-
Scenario: Builds successfully
|
4
|
-
Given a successfully built app at "simple-app"
|
5
|
-
Then the file "config.ru" should exist
|
6
|
-
And the file "build/index.html" should exist
|
7
|
-
And the file "build/apps/test_app.rb" should not exist
|
8
|
-
|
9
|
-
Scenario: Running built app
|
10
|
-
Given a fixture app "simple-app"
|
11
|
-
And app is running with config:
|
12
|
-
"""
|
13
|
-
activate :apps
|
14
|
-
"""
|
15
|
-
When I go to "/"
|
16
|
-
Then I should see "<h1>Middleman</h1>"
|
17
|
-
When I go to "/test-app"
|
18
|
-
Then I should see "fail"
|
19
|
-
When I go to "/test-app?test=1"
|
20
|
-
Then I should see "pass"
|
data/features/child_app.feature
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
Feature: 404 error pages for Child apps
|
2
|
-
|
3
|
-
Scenario: Custom 404 response from child app
|
4
|
-
Given a fixture app "complex-app"
|
5
|
-
And a file named "source/custom.html.erb" with:
|
6
|
-
"""
|
7
|
-
<h2><%= 404 %> Custom Not Found!</h2>
|
8
|
-
"""
|
9
|
-
And app is running with config:
|
10
|
-
"""
|
11
|
-
activate :apps, not_found: "custom.html", namespace: :complex_app
|
12
|
-
"""
|
13
|
-
When I go to "/child-app"
|
14
|
-
Then I should see "hello"
|
15
|
-
When I go to "/child-app/unknown"
|
16
|
-
Then the status code should be "404"
|
17
|
-
And I should see "<h2>404 Custom Not Found!</h2>"
|
18
|
-
|
@@ -1,66 +0,0 @@
|
|
1
|
-
Feature: Real world JSON API example
|
2
|
-
|
3
|
-
Scenario: Allows namespacing applications
|
4
|
-
Given a fixture app "complex-app"
|
5
|
-
And app is running with config:
|
6
|
-
"""
|
7
|
-
activate :apps, namespace: "ComplexApp::SomeNamespace"
|
8
|
-
"""
|
9
|
-
When I go to "/test-app?test=1"
|
10
|
-
Then the status code should be "200"
|
11
|
-
And I should see "pass"
|
12
|
-
|
13
|
-
Scenario: Allows namespacing applications via underscored module path
|
14
|
-
Given a fixture app "complex-app"
|
15
|
-
And app is running with config:
|
16
|
-
"""
|
17
|
-
activate :apps, namespace: "complex_app/some_namespace"
|
18
|
-
"""
|
19
|
-
When I go to "/test-app?test=1"
|
20
|
-
Then the status code should be "200"
|
21
|
-
And I should see "pass"
|
22
|
-
|
23
|
-
Scenario: Ignores modular apps that have no direct mapping
|
24
|
-
Given a fixture app "complex-app"
|
25
|
-
And app is running with config:
|
26
|
-
"""
|
27
|
-
activate :apps, namespace: "other_namespacee"
|
28
|
-
"""
|
29
|
-
When I go to "/test-app?test=1"
|
30
|
-
Then the status code should be "404"
|
31
|
-
|
32
|
-
Scenario: Allows specifying Application Name
|
33
|
-
Given a fixture app "complex-app"
|
34
|
-
And app is running with config:
|
35
|
-
"""
|
36
|
-
activate :apps, namespace: :complex_app,
|
37
|
-
map: { child_app: "/some-other-path/abcd" }
|
38
|
-
"""
|
39
|
-
When I go to "/some-other-path/abcd"
|
40
|
-
Then the status code should be "200"
|
41
|
-
And I should see "hello"
|
42
|
-
|
43
|
-
Scenario: Allows specifying URL path for application
|
44
|
-
Given a fixture app "complex-app"
|
45
|
-
And app is running with config:
|
46
|
-
"""
|
47
|
-
activate :apps,
|
48
|
-
namespace: 'complex_app/some_namespace',
|
49
|
-
map: {
|
50
|
-
test_app: 'test',
|
51
|
-
awesome_api: {
|
52
|
-
url: 'api',
|
53
|
-
class: "OtherNamespace::AwesomeAPI"
|
54
|
-
}
|
55
|
-
}
|
56
|
-
"""
|
57
|
-
When I go to "/test-app?test=1"
|
58
|
-
Then the status code should be "404"
|
59
|
-
When I go to "/test?test=1"
|
60
|
-
Then the status code should be "200"
|
61
|
-
And I should see "pass"
|
62
|
-
When I go to "/awesome-api/ping"
|
63
|
-
Then the status code should be "404"
|
64
|
-
When I go to "/api/ping"
|
65
|
-
Then the status code should be "200"
|
66
|
-
And I should see "pong"
|
@@ -1,8 +0,0 @@
|
|
1
|
-
Feature: 404 error pages with Middleman Preview Server
|
2
|
-
|
3
|
-
Scenario: Fixed 404 response with Server
|
4
|
-
Given a fixture app "simple-app"
|
5
|
-
And the Server is running at "simple-app"
|
6
|
-
When I go to "/unknown-app"
|
7
|
-
Then the status code should be "404"
|
8
|
-
And I should see "<h1>File Not Found</h1>"
|
data/features/verbose.feature
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
Feature: Verbose mode
|
2
|
-
|
3
|
-
Scenario: Display list of child apps which were ignored
|
4
|
-
Given a fixture app "complex-app"
|
5
|
-
And I overwrite the file named "config.rb" with:
|
6
|
-
"""
|
7
|
-
activate :apps, verbose: true
|
8
|
-
"""
|
9
|
-
And I run `middleman build --verbose`
|
10
|
-
And the aruba exit timeout is 2 seconds
|
11
|
-
And I run `rackup -p 17283` in background
|
12
|
-
Then the output should match:
|
13
|
-
"""
|
14
|
-
Ignored child app:.*apps\/awesome_api\.rb
|
15
|
-
"""
|
16
|
-
And the output should match:
|
17
|
-
"""
|
18
|
-
Ignored child app:.*apps\/test_app\.rb
|
19
|
-
"""
|
20
|
-
And the output should match:
|
21
|
-
"""
|
22
|
-
Ignored child app:.*apps\/child_app\.rb
|
23
|
-
"""
|
@@ -1 +0,0 @@
|
|
1
|
-
<h1>Error!!</h1>
|
@@ -1 +0,0 @@
|
|
1
|
-
activate :apps # , not_found: 'error.html'
|
@@ -1 +0,0 @@
|
|
1
|
-
<h1>Error!!</h1>
|
@@ -1 +0,0 @@
|
|
1
|
-
activate :apps # , not_found: 'error.html'
|