Class: Jekyll::GeneratorSingleSource::SingleSourcePage

Inherits:
Page
  • Object
show all
Defined in:
lib/jekyll/generator-single-source/single_source_page.rb

Instance Method Summary collapse

Constructor Details

#initialize(nav_item) ⇒ SingleSourcePage

rubocop:disable Lint/MissingSuper, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/AbcSize, Metrics/PerceivedComplexity



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/jekyll/generator-single-source/single_source_page.rb', line 6

def initialize(nav_item) # rubocop:disable Lint/MissingSuper, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/AbcSize, Metrics/PerceivedComplexity
  # Configure variables that Jekyll depends on
  @site = nav_item.site

  # Set self.ext and self.basename by extracting information from the page filename
  process('index.md')

  # Override Jekyll::Page's @dir
  # This is the directory that we're going to write the output file to
  @dir = nav_item.dest.file_path

  content = File.read(nav_item.source.full_file_path)

  # Load content + frontmatter from the file
  if content =~ Jekyll::Document::YAML_FRONT_MATTER_REGEXP
    @content = Regexp.last_match.post_match
    @data = SafeYAML.load(Regexp.last_match(1))
  end

  # Set the "Edit on GitHub" link url
  @data['edit_link'] = nav_item.source.file_path

  # Make it clear that this content comes from a generated file
  @data['is_dir_index'] = nav_item.source.dir?

  # Set the current release and concrete version
  @data['release'] = nav_item.release
  @data['version'] = nav_item.versions['default']
  @data['versions'] = nav_item.versions

  # Set the layout if it's not already provided
  @data['layout'] ||= GeneratorConfig.new(@site).layout

  # Apply any overrides
  current = to_version(@data['release'])
  @data['overrides']&.each do |key, entries|
    entries.each do |value, conditions|
      gte = conditions['gte'] ? to_version(conditions['gte']) : nil
      lte = conditions['lte'] ? to_version(conditions['lte']) : nil
      eq = conditions['eq'] ? to_version(conditions['eq']) : nil

      if gte && lte
        @data[key] = value if current >= gte && current <= lte
      elsif gte
        @data[key] = value if current >= gte
      elsif lte
        @data[key] = value if current <= lte
      elsif eq
        @data[key] = value if current == eq
      end
    end
  end

  # Needed so that regeneration works for single sourced pages
  # It must be set to the source file
  # Also, @path MUST NOT be set, it falls back to @relative_path
  @relative_path = nav_item.source.file_path
end

Instance Method Details

#to_version(input) ⇒ Object



65
66
67
68
69
70
71
# File 'lib/jekyll/generator-single-source/single_source_page.rb', line 65

def to_version(input)
 if Gem::Version.correct?(input)
   Gem::Version.new(input.gsub(/\.x$/, '.0'))
 else
   input
 end
end