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 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 %>