Skip to content

Commit 9f9bc99

Browse files
Merge pull request #396 from ashmaroli/data-dir-patch
support directories for data files more robustly
2 parents c561e0a + 66203a1 commit 9f9bc99

File tree

2 files changed

+11
-14
lines changed

2 files changed

+11
-14
lines changed

lib/jekyll-admin/data_file.rb

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class DataFile
1616
def initialize(id)
1717
@id ||= File.extname(id).empty? ? "#{id}.yml" : id
1818
end
19-
alias_method :path, :id
19+
alias_method :relative_path, :id
2020

2121
def exists?
2222
@exists ||= File.exist?(absolute_path)
@@ -52,15 +52,15 @@ def title
5252
@title ||= Jekyll::Utils.titleize_slug(slug.tr("_", "-"))
5353
end
5454

55-
# Return path relative to configured `data_dir`
56-
def relative_path
57-
id.sub("/#{DataFile.data_dir}/", "")
55+
# Returns path relative to site source
56+
def path
57+
ensure_leading_slash(File.join(DataFile.data_dir, relative_path))
5858
end
5959

60-
# Return the absolute path to given data file
6160
def absolute_path
62-
sanitized_path id
61+
sanitized_path(path)
6362
end
63+
alias_method :file_path, :absolute_path
6464

6565
# Mimics Jekyll's native to_liquid functionality by returning a hash
6666
# of data file metadata
@@ -69,13 +69,10 @@ def to_liquid
6969
end
7070

7171
def self.all
72-
data_dir = sanitized_path DataFile.data_dir
73-
files = Dir["#{data_dir}/**/*.{#{EXTENSIONS.join(",")}}"].reject do |d|
74-
File.directory?(d)
75-
end
76-
77-
files.map do |path|
78-
new path_without_site_source(path)
72+
data_dir = Jekyll.sanitized_path(JekyllAdmin.site.source, DataFile.data_dir)
73+
data_dir = Pathname.new(data_dir)
74+
Dir["#{data_dir}/**/*.{#{EXTENSIONS.join(",")}}"].map do |path|
75+
new(Pathname.new(path).relative_path_from(data_dir).to_s)
7976
end
8077
end
8178

spec/jekyll-admin/data_file_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
let(:data_dir) { "_data" }
33
let(:relative_path) { "data_file.yml" }
44
let(:absolute_path) { in_source_dir(relative_path) }
5-
let(:id) { "/#{data_dir}/data_file.yml" }
5+
let(:id) { "data_file.yml" }
66

77
subject { described_class.new(id) }
88

0 commit comments

Comments
 (0)