middleman-api 0.1.2 → 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/Gemfile +6 -6
- data/features/support/env.rb +5 -0
- data/lib/middleman-api.rb +1 -7
- data/lib/middleman-api/extension.rb +66 -18
- data/lib/middleman-api/template.erb +1 -0
- data/middleman-api.gemspec +1 -1
- metadata +13 -16
- data/lib/middleman-api/sitemap.rb +0 -39
- data/lib/middleman-api/template.json.erb +0 -1
- data/lib/middleman-api/template.rb +0 -25
- data/lib/middleman-api/template.xml.erb +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b8adf32c44de93b020c1e960b594795deef6826d
|
4
|
+
data.tar.gz: 5ed241fc62eb24859ea4eca5d9fff5e9d3154226
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3621601f77d78a370292f93f2ab6751daa04e034830163bdea501c3ccc6315081935dffe0bf0cd5386e10cc6f8a038dada155174d4e13ec8dc679b4b2cfb559b
|
7
|
+
data.tar.gz: 5b1017aa5d384c8fc74ff04eac51d27712bf48d538440f99a96e59be54364515f4ddfd17d8e96f21ce4080336f5c9131393955d68ffff16a0f415a6cb601babb
|
data/Gemfile
CHANGED
@@ -8,6 +8,12 @@ group :development do
|
|
8
8
|
gem "yard", "~> 0.8.0"
|
9
9
|
end
|
10
10
|
|
11
|
+
if RUBY_VERSION <= "1.9.3"
|
12
|
+
gem "pry-debugger"
|
13
|
+
else
|
14
|
+
gem "pry-byebug"
|
15
|
+
end
|
16
|
+
|
11
17
|
group :test do
|
12
18
|
gem "middleman", github: "middleman/middleman", branch: "v3-stable" do
|
13
19
|
gem "middleman"
|
@@ -20,12 +26,6 @@ group :test do
|
|
20
26
|
gem "aruba", "~> 0.4.11"
|
21
27
|
gem "rspec", "~> 2.7"
|
22
28
|
|
23
|
-
if RUBY_VERSION <= "1.9.3"
|
24
|
-
gem "pry-debugger"
|
25
|
-
else
|
26
|
-
gem "pry-byebug"
|
27
|
-
end
|
28
|
-
|
29
29
|
# Template Engines
|
30
30
|
gem "redcarpet"
|
31
31
|
gem "slim"
|
data/features/support/env.rb
CHANGED
@@ -1,4 +1,9 @@
|
|
1
1
|
PROJECT_ROOT_PATH = File.dirname(File.dirname(File.dirname(__FILE__)))
|
2
2
|
require "middleman-core"
|
3
3
|
require "middleman-core/step_definitions"
|
4
|
+
|
5
|
+
# Don't encode html entities for tests
|
6
|
+
require 'active_support/json'
|
7
|
+
ActiveSupport.escape_html_entities_in_json = false
|
8
|
+
|
4
9
|
require File.join(PROJECT_ROOT_PATH, 'lib', 'middleman-api')
|
data/lib/middleman-api.rb
CHANGED
@@ -1,32 +1,80 @@
|
|
1
|
-
require "
|
2
|
-
require "middleman-api/sitemap"
|
1
|
+
require "active_support/core_ext"
|
3
2
|
|
4
3
|
# Extension namespace
|
5
4
|
module Middleman::Api
|
6
|
-
class
|
5
|
+
class Extension < ::Middleman::Extension
|
7
6
|
|
8
|
-
#
|
9
|
-
|
10
|
-
# Add class methods to context
|
11
|
-
app.send :include, ClassMethods
|
7
|
+
# Support for .json and .xml
|
8
|
+
option :formats, [:json, :xml]
|
12
9
|
|
13
|
-
|
14
|
-
|
15
|
-
|
10
|
+
def after_configuration
|
11
|
+
# Hack to reload our templates dir into the FileWatcher API
|
12
|
+
# https://github.com/middleman/middleman/issues/1217#issuecomment-38014250
|
13
|
+
fix_templates_for_filewatcher!
|
14
|
+
app.ignore "__api/*"
|
15
|
+
end
|
16
|
+
|
17
|
+
def manipulate_resource_list(resources)
|
18
|
+
new_resources = []
|
19
|
+
|
20
|
+
options.formats.each do |format|
|
21
|
+
proxy_parent = ::Middleman::Sitemap::Resource.new(
|
22
|
+
app.sitemap, "__api/proxy.#{format}", fetch_template)
|
23
|
+
proxy_parent.add_metadata locals: { resource_data: nil }
|
24
|
+
|
25
|
+
new_resources << proxy_parent
|
26
|
+
|
27
|
+
resources.each do |resource|
|
28
|
+
ext = resource.ext.gsub('.','').to_sym
|
16
29
|
|
17
|
-
|
18
|
-
|
30
|
+
next if resource.ignored? || ext == format
|
31
|
+
next unless resource.template?
|
32
|
+
|
33
|
+
new_resources << add_proxy_for_format(resource, format)
|
34
|
+
end
|
19
35
|
end
|
36
|
+
|
37
|
+
return resources + new_resources
|
20
38
|
end
|
21
39
|
|
22
|
-
|
40
|
+
private
|
23
41
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
42
|
+
def fix_templates_for_filewatcher!
|
43
|
+
extension_templates_dir = File.expand_path('../', __FILE__)
|
44
|
+
templates_dir_relative_from_root = Pathname(extension_templates_dir)
|
45
|
+
.relative_path_from(Pathname(app.root))
|
46
|
+
app.files.reload_path(templates_dir_relative_from_root)
|
47
|
+
end
|
48
|
+
|
49
|
+
def add_proxy_for_format(resource, format)
|
50
|
+
path = "#{resource.destination_path.split('.').first}.#{format}"
|
51
|
+
|
52
|
+
proxy = ::Middleman::Sitemap::Resource.new(
|
53
|
+
app.sitemap, path, fetch_template)
|
54
|
+
proxy.add_metadata locals: template_data(resource, format)
|
55
|
+
proxy.add_metadata options: { layout: false }
|
56
|
+
proxy.proxy_to "__api/proxy.#{format}"
|
57
|
+
|
58
|
+
return proxy
|
59
|
+
end
|
60
|
+
|
61
|
+
# Resource data hash
|
62
|
+
# @return [Hash] resource data to be parsed into json
|
63
|
+
def template_data(resource, format)
|
64
|
+
data = {}
|
65
|
+
data[:resource_data] = {
|
66
|
+
meta: resource.data,
|
67
|
+
path: resource.url,
|
68
|
+
content: resource.render
|
69
|
+
}.send("to_#{format}")
|
70
|
+
|
71
|
+
return data
|
72
|
+
end
|
73
|
+
|
74
|
+
def fetch_template
|
75
|
+
File.expand_path("../template.erb", __FILE__)
|
28
76
|
end
|
29
|
-
end
|
30
77
|
|
78
|
+
::Middleman::Extensions.register(:api, Middleman::Api::Extension)
|
31
79
|
end
|
32
80
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= resource_data %>
|
data/middleman-api.gemspec
CHANGED
metadata
CHANGED
@@ -1,55 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: middleman-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jordanandree
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-04-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: middleman-core
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '3.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '3.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: middleman-more
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '3.0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '3.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: builder
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: 3.2.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 3.2.0
|
55
55
|
description: Middleman Extension that generates JSON and XML endpoints
|
@@ -59,7 +59,7 @@ executables: []
|
|
59
59
|
extensions: []
|
60
60
|
extra_rdoc_files: []
|
61
61
|
files:
|
62
|
-
- .gitignore
|
62
|
+
- ".gitignore"
|
63
63
|
- Gemfile
|
64
64
|
- LICENSE
|
65
65
|
- Rakefile
|
@@ -85,10 +85,7 @@ files:
|
|
85
85
|
- fixtures/middleman-app/source/tilt/textile.html.textile
|
86
86
|
- lib/middleman-api.rb
|
87
87
|
- lib/middleman-api/extension.rb
|
88
|
-
- lib/middleman-api/
|
89
|
-
- lib/middleman-api/template.json.erb
|
90
|
-
- lib/middleman-api/template.rb
|
91
|
-
- lib/middleman-api/template.xml.erb
|
88
|
+
- lib/middleman-api/template.erb
|
92
89
|
- lib/middleman_extension.rb
|
93
90
|
- middleman-api.gemspec
|
94
91
|
- readme.md
|
@@ -101,17 +98,17 @@ require_paths:
|
|
101
98
|
- lib
|
102
99
|
required_ruby_version: !ruby/object:Gem::Requirement
|
103
100
|
requirements:
|
104
|
-
- -
|
101
|
+
- - ">="
|
105
102
|
- !ruby/object:Gem::Version
|
106
103
|
version: '0'
|
107
104
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
108
105
|
requirements:
|
109
|
-
- -
|
106
|
+
- - ">="
|
110
107
|
- !ruby/object:Gem::Version
|
111
108
|
version: '0'
|
112
109
|
requirements: []
|
113
110
|
rubyforge_project:
|
114
|
-
rubygems_version: 2.4.
|
111
|
+
rubygems_version: 2.4.6
|
115
112
|
signing_key:
|
116
113
|
specification_version: 4
|
117
114
|
summary: Middleman Extension that generates JSON and XML endpoints
|
@@ -1,39 +0,0 @@
|
|
1
|
-
require "active_support/core_ext"
|
2
|
-
|
3
|
-
module Middleman::Api
|
4
|
-
class Sitemap
|
5
|
-
def initialize(app)
|
6
|
-
@app = app
|
7
|
-
end
|
8
|
-
|
9
|
-
# Update the main sitemap resource list
|
10
|
-
# @return [void]
|
11
|
-
def manipulate_resource_list(resources)
|
12
|
-
proxies = []
|
13
|
-
resources.each do |resource|
|
14
|
-
ext = resource.ext.gsub('.','').to_sym
|
15
|
-
if resource.template? && !resource.ignored? && !(@app.api_formats.include?(ext))
|
16
|
-
@app.api_formats.each do |format|
|
17
|
-
path = "#{resource.destination_path.split('.').first}.#{format}"
|
18
|
-
proxy = ::Middleman::Sitemap::Resource.new(@app.sitemap, path)
|
19
|
-
proxy.proxy_to "api.#{format}"
|
20
|
-
proxy.add_metadata locals: template_data(resource, format)
|
21
|
-
proxy.add_metadata options: { layout: false }
|
22
|
-
proxies << proxy
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
proxies + resources
|
27
|
-
end
|
28
|
-
|
29
|
-
# Resource data hash
|
30
|
-
# @return [Hash] resource data to be parsed into json
|
31
|
-
def template_data(resource, format)
|
32
|
-
data = {}
|
33
|
-
data[:meta] = resource.data
|
34
|
-
data[:path] = resource.url
|
35
|
-
data[:content] = resource.render
|
36
|
-
{ data: data.send("to_#{format}") }
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
<%= data %>
|
@@ -1,25 +0,0 @@
|
|
1
|
-
module Middleman::Api
|
2
|
-
class Template
|
3
|
-
def initialize(app)
|
4
|
-
@app = app
|
5
|
-
@app.after_configuration do
|
6
|
-
api_formats.each {|f| ignore "api.#{f}"}
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
# Update the main sitemap resource list
|
11
|
-
# @return [void]
|
12
|
-
def manipulate_resource_list(resources)
|
13
|
-
templates = []
|
14
|
-
@app.api_formats.each do |f|
|
15
|
-
templates << ::Middleman::Sitemap::Resource.new(@app.sitemap, "api.#{f}", template(f))
|
16
|
-
end
|
17
|
-
resources + templates
|
18
|
-
end
|
19
|
-
|
20
|
-
private
|
21
|
-
def template(format)
|
22
|
-
File.expand_path "../template.#{format}.erb", __FILE__
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
<%= data %>
|