Class: JekyllAdmin::DataFile

Inherits:
Object
  • Object
show all
Extended by:
PathHelper
Includes:
APIable, PathHelper, URLable
Defined in:
lib/jekyll-admin/data_file.rb

Constant Summary collapse

METHODS_FOR_LIQUID =
%w(path relative_path slug ext title).freeze
EXTENSIONS =
%w(yaml yml json csv).freeze

Constants included from APIable

APIable::CONTENT_FIELDS

Class Method Summary collapse

Instance Method Summary collapse

Methods included from PathHelper

absolute_path, relative_path, relative_write_path, renamed?, sanitized_path, sanitized_relative_path, write_path

Methods included from URLable

#api_url, #entries_url, #http_url

Methods included from APIable

#to_api

Constructor Details

#initialize(id) ⇒ DataFile

Initialize a new DataFile object

id - the file ID as passed from the API. This may or may not have an extension



16
17
18
# File 'lib/jekyll-admin/data_file.rb', line 16

def initialize(id)
  @id ||= id
end

Class Method Details

.allObject



60
61
62
63
64
65
# File 'lib/jekyll-admin/data_file.rb', line 60

def self.all
  data_dir = sanitized_path DataFile.data_dir
  Dir["#{data_dir}/*.{#{EXTENSIONS.join(",")}}"].map do |path|
    new path_without_site_source(path)
  end
end

.data_dirObject

Relative path to data directory within site source



68
69
70
# File 'lib/jekyll-admin/data_file.rb', line 68

def self.data_dir
  JekyllAdmin.site.config["data_dir"]
end

Instance Method Details

#contentObject

Returnes (re)parsed content using Jekyll’s native parsing mechanism



30
31
32
# File 'lib/jekyll-admin/data_file.rb', line 30

def content
  @content ||= data_reader.read_data_file(absolute_path)
end

#exists?Boolean

Returns:

  • (Boolean)


20
21
22
# File 'lib/jekyll-admin/data_file.rb', line 20

def exists?
  @exists ||= File.exist?(absolute_path)
end

#extObject Also known as: extension

Returns the file’s extension with preceeding .



35
36
37
38
39
40
41
# File 'lib/jekyll-admin/data_file.rb', line 35

def ext
  @ext ||= if File.extname(@id).to_s.empty?
             ".yml"
           else
             File.extname(@id)
           end
end

#raw_contentObject

Returns unparsed content as it exists on disk



25
26
27
# File 'lib/jekyll-admin/data_file.rb', line 25

def raw_content
  @raw_content ||= File.open(absolute_path, "r:UTF-8", &:read)
end

#slugObject

Returns the file’s sanitized slug (as used in site.data[slug])



45
46
47
# File 'lib/jekyll-admin/data_file.rb', line 45

def slug
  @slug ||= data_reader.sanitize_filename(basename)
end

#titleObject

Returns the human-readable title of the data file



50
51
52
# File 'lib/jekyll-admin/data_file.rb', line 50

def title
  @title ||= Jekyll::Utils.titleize_slug(slug.tr("_", "-"))
end

#to_liquidObject

Mimics Jekyll’s native to_liquid functionality by returning a hash of data file metadata



56
57
58
# File 'lib/jekyll-admin/data_file.rb', line 56

def to_liquid
  @to_liquid ||= METHODS_FOR_LIQUID.map { |key| [key, public_send(key)] }.to_h
end