middleman-apps 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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'
|