Support directory name as a data key
This commit is contained in:
parent
cd539f4e91
commit
1e64e8022e
|
@ -20,3 +20,8 @@ Feature: Local Data API
|
||||||
Given the Server is running at "data-app"
|
Given the Server is running at "data-app"
|
||||||
When I go to "/test2.html"
|
When I go to "/test2.html"
|
||||||
Then I should see "Welcome"
|
Then I should see "Welcome"
|
||||||
|
|
||||||
|
Scenario: Using nested data
|
||||||
|
Given the Server is running at "nested-data-app"
|
||||||
|
When I go to "/test.html"
|
||||||
|
Then I should see "test:Hello"
|
||||||
|
|
1
middleman-core/fixtures/nested-data-app/config.rb
Normal file
1
middleman-core/fixtures/nested-data-app/config.rb
Normal file
|
@ -0,0 +1 @@
|
||||||
|
set :layout, false
|
|
@ -0,0 +1 @@
|
||||||
|
title: "Hello"
|
|
@ -0,0 +1 @@
|
||||||
|
<%= data.examples.map { |k, r| [k, r.title].join(":") }.join %>
|
|
@ -92,19 +92,30 @@ module Middleman
|
||||||
# @param [String] file The file to be re-parsed
|
# @param [String] file The file to be re-parsed
|
||||||
# @return [void]
|
# @return [void]
|
||||||
def touch_file(file)
|
def touch_file(file)
|
||||||
file = File.expand_path(file, @app.root)
|
root = Pathname(@app.root)
|
||||||
|
full_path = root + file
|
||||||
extension = File.extname(file)
|
extension = File.extname(file)
|
||||||
basename = File.basename(file, extension)
|
basename = File.basename(file, extension)
|
||||||
|
|
||||||
|
data_path = full_path.relative_path_from(root + @app.config[:data_dir])
|
||||||
|
|
||||||
if %w(.yaml .yml).include?(extension)
|
if %w(.yaml .yml).include?(extension)
|
||||||
data = YAML.load_file(file)
|
data = YAML.load_file(full_path)
|
||||||
elsif extension == ".json"
|
elsif extension == ".json"
|
||||||
data = ActiveSupport::JSON.decode(File.read(file))
|
data = ActiveSupport::JSON.decode(full_path.read)
|
||||||
else
|
else
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
@local_data[basename] = ::Middleman::Util.recursively_enhance(data)
|
data_branch = @local_data
|
||||||
|
|
||||||
|
path = data_path.to_s.split(File::SEPARATOR)[0..-2]
|
||||||
|
path.each do |dir|
|
||||||
|
data_branch[dir] ||= ::Middleman::Util.recursively_enhance({})
|
||||||
|
data_branch = data_branch[dir]
|
||||||
|
end
|
||||||
|
|
||||||
|
data_branch[basename] = ::Middleman::Util.recursively_enhance(data)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Remove a given file from the internal cache
|
# Remove a given file from the internal cache
|
||||||
|
@ -112,9 +123,21 @@ module Middleman
|
||||||
# @param [String] file The file to be cleared
|
# @param [String] file The file to be cleared
|
||||||
# @return [void]
|
# @return [void]
|
||||||
def remove_file(file)
|
def remove_file(file)
|
||||||
|
root = Pathname(@app.root)
|
||||||
|
full_path = root + file
|
||||||
extension = File.extname(file)
|
extension = File.extname(file)
|
||||||
basename = File.basename(file, extension)
|
basename = File.basename(file, extension)
|
||||||
@local_data.delete(basename) if @local_data.has_key?(basename)
|
|
||||||
|
data_path = full_path.relative_path_from(root + @app.config[:data_dir])
|
||||||
|
|
||||||
|
data_branch = @local_data
|
||||||
|
|
||||||
|
path = data_path.to_s.split(File::SEPARATOR)[0..-2]
|
||||||
|
path.each do |dir|
|
||||||
|
data_branch = data_branch[dir]
|
||||||
|
end
|
||||||
|
|
||||||
|
data_branch.delete(basename) if data_branch.has_key?(basename)
|
||||||
end
|
end
|
||||||
|
|
||||||
# Get a hash from either internal static data or a callback
|
# Get a hash from either internal static data or a callback
|
||||||
|
|
Loading…
Reference in a new issue