middleman-api 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ff76c79af0bdd288eb64afe2553d3dc4960d3248
4
- data.tar.gz: a6718aa8ed1a1bc5629171cdde57eb93aeadad56
3
+ metadata.gz: b8adf32c44de93b020c1e960b594795deef6826d
4
+ data.tar.gz: 5ed241fc62eb24859ea4eca5d9fff5e9d3154226
5
5
  SHA512:
6
- metadata.gz: 2aaa08b51a0b3f60a8597f1346d0969d09b758f47e3093bb3aec60f8c464cc3d22cbaf0e3e0d23fde05ade89c4a1b530bcefbf6e54a922ef33c9695edb2ad9c4
7
- data.tar.gz: ce5e5c7bab76254bd8e302d82dc0a6778bc70b4644a7efebc5e5dbb2f5f253e825097ca43ede747bacb80825edfeb6faafdbcae060394c9b6ce76ab6baea7e57
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"
@@ -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')
@@ -1,7 +1 @@
1
- require "middleman-core"
2
- require "middleman-more"
3
-
4
- Middleman::Extensions.register(:api) do
5
- require "middleman-api/extension"
6
- Middleman::Api
7
- end
1
+ require "middleman-api/extension"
@@ -1,32 +1,80 @@
1
- require "middleman-api/template"
2
- require "middleman-api/sitemap"
1
+ require "active_support/core_ext"
3
2
 
4
3
  # Extension namespace
5
4
  module Middleman::Api
6
- class << self
5
+ class Extension < ::Middleman::Extension
7
6
 
8
- # Called when extension is activated
9
- def registered(app, options={})
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
- app.after_configuration do
14
- # Register json.erb template
15
- sitemap.register_resource_list_manipulator(:middleman_api_template, Middleman::Api::Template.new(self), false)
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
- # Register resource manipulator for pages with frontmatter
18
- sitemap.register_resource_list_manipulator(:middleman_api, Middleman::Api::Sitemap.new(self), false)
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
- alias :included :registered
40
+ private
23
41
 
24
- module ClassMethods
25
- # @return [Hash]
26
- def api_formats
27
- [:json, :xml]
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 %>
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "middleman-api"
6
- s.version = "0.1.2"
6
+ s.version = "0.2.0"
7
7
  s.platform = Gem::Platform::RUBY
8
8
  s.authors = ["jordanandree"]
9
9
  s.email = ["jordanandree@gmail.com"]
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.1.2
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-02-06 00:00:00.000000000 Z
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/sitemap.rb
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.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 %>