Class: Bridgetown::Reader

Inherits:
Object
  • Object
show all
Defined in:
lib/bridgetown-core/reader.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(site) ⇒ Reader

Returns a new instance of Reader.

Parameters:

[View source]

9
10
11
# File 'lib/bridgetown-core/reader.rb', line 9

def initialize(site)
  @site = site
end

Instance Attribute Details

#siteBridgetown::Site (readonly)

Returns:


6
7
8
# File 'lib/bridgetown-core/reader.rb', line 6

def site
  @site
end

Instance Method Details

#filter_entries(entries, base_directory = nil) ⇒ Object

Filter out any files/directories that are hidden or backup files (start with "." or "#" or end with "~"), or contain site content (start with "_"), or are excluded in the site configuration, unless they are web server files such as '.htaccess'.

Returns the Array of filtered entries.

Parameters:

  • entries (Array<String>)

    file/directory entries to filter

  • base_directory (String) (defaults to: nil)

    optional base directory

[View source]

133
134
135
# File 'lib/bridgetown-core/reader.rb', line 133

def filter_entries(entries, base_directory = nil)
  EntryFilter.new(site, base_directory:).filter(entries)
end

#get_entries(dir, subfolder) ⇒ Object

Read the entries from a particular directory for processing

Returns the list of entries to process

Parameters:

  • dir (String)

    parent directory

  • subfolder (String)

    the directory to read

[View source]

143
144
145
146
147
148
149
# File 'lib/bridgetown-core/reader.rb', line 143

def get_entries(dir, subfolder)
  base = site.in_source_dir(dir, subfolder)
  return [] unless File.exist?(base)

  entries = Dir.chdir(base) { filter_entries(Dir["**/*"], base) }
  entries.delete_if { |e| File.directory?(site.in_source_dir(base, e)) }
end

#readvoid

This method returns an undefined value.

Read data and resources from disk and load it into internal data structures.

[View source]

15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/bridgetown-core/reader.rb', line 15

def read
  site.defaults_reader.read
  site.data = site.collections.data.read.merge_data_resources
  read_layouts
  read_directories
  read_includes
  sort_files!
  read_collections
  site.config.source_manifests.select(&:content).each do |manifest|
    PluginContentReader.new(site, manifest).read
  end
end

#read_collectionsvoid

This method returns an undefined value.

Read in collections (other than the data collection)

[View source]

37
38
39
40
41
42
43
# File 'lib/bridgetown-core/reader.rb', line 37

def read_collections
  site.collections.each_value do |collection|
    next if collection.data?

    collection.read unless site.ssr? && collection..skip_for_ssr
  end
end

#read_directories(dir = "") ⇒ void

This method returns an undefined value.

Recursively traverse directories to find pages and static files that will become part of the site according to the rules in filter_entries.

Parameters:

  • dir (String) (defaults to: "")

    relative path of the directory to read. Default: ''

[View source]

58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/bridgetown-core/reader.rb', line 58

def read_directories(dir = "")
  base = site.in_source_dir(dir)

  return unless File.directory?(base)

  entries_dirs = []
  entries_pages = []
  entries_static_files = []

  entries = Dir.chdir(base) { filter_entries(Dir.entries("."), base) }
  entries.each do |entry|
    file_path = @site.in_source_dir(base, entry)
    if File.directory?(file_path)
      entries_dirs << entry
    elsif FrontMatter::Loaders.front_matter?(file_path)
      entries_pages << entry
    else
      entries_static_files << entry
    end
  end

  retrieve_dirs(dir, entries_dirs)
  retrieve_pages(dir, entries_pages)
  retrieve_static_files(dir, entries_static_files) unless site.ssr?
end

#read_layoutsvoid

This method returns an undefined value.

Read in layouts

See Also:

[View source]

31
32
33
# File 'lib/bridgetown-core/reader.rb', line 31

def read_layouts
  site.layouts = LayoutReader.new(site).read
end

#retrieve_dirs(dir, entries_dirs) ⇒ void

This method returns an undefined value.

Recursively traverse directories with the read_directories function.

Parameters:

  • dir (String)

    the directory to traverse down

  • entries_dirs (Array<String>)

    subdirectories in the directory

[View source]

89
90
91
92
93
94
95
# File 'lib/bridgetown-core/reader.rb', line 89

def retrieve_dirs(dir, entries_dirs)
  entries_dirs.each do |file|
    dir_path = site.in_source_dir(dir, file)
    rel_path = File.join(dir, file)
    read_directories(rel_path) unless @site.destination.chomp("/") == dir_path
  end
end

#retrieve_pages(dir, entries_pages) ⇒ void

This method returns an undefined value.

Retrieve all the pages from the current directory, add them to the site and sort them.

Parameters:

  • dir (String)

    the directory to retrieve the pages from

  • entries_pages (Array<String>)

    page paths in the directory

[View source]

103
104
105
106
107
108
109
# File 'lib/bridgetown-core/reader.rb', line 103

def retrieve_pages(dir, entries_pages)
  return if site.ssr? && site.collections.pages..skip_for_ssr

  entries_pages.each do |page_path|
    site.collections.pages.read_resource(site.in_source_dir(dir, page_path))
  end
end

#retrieve_static_files(dir, files) ⇒ Object

Retrieve all the static files from the current directory, add them to the site and sort them.

Parameters:

  • dir (String)

    The directory retrieve the static files from.

  • files (Array<String>)

    The static files in the dir.

[View source]

116
117
118
119
120
121
122
# File 'lib/bridgetown-core/reader.rb', line 116

def retrieve_static_files(dir, files)
  site.static_files.concat(
    files.map do |file|
      StaticFile.new(site, site.source, dir, file)
    end
  )
end

#sort_files!void

This method returns an undefined value.

Sorts generated pages and static files.

[View source]

47
48
49
50
# File 'lib/bridgetown-core/reader.rb', line 47

def sort_files!
  site.generated_pages.sort_by!(&:name)
  site.static_files.sort_by!(&:relative_path)
end