Class: JekyllLastCommit::Generator

Inherits:
Jekyll::Generator
  • Object
show all
Defined in:
lib/jekyll-last-commit/generator.rb

Instance Method Summary collapse

Instance Method Details

#generate(site) ⇒ Object



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
# File 'lib/jekyll-last-commit/generator.rb', line 7

def generate(site)
  @site = site

  @repo_man = JekyllLastCommit::RepoMan.new(site.source)
  @repo_man.discover_repo()

  @date_format = site.config.dig('jekyll-last-commit', 'date_format')
  @date_format ||= '%B %d, %Y'

  @should_fall_back_to_mtime = site.config.dig('jekyll-last-commit', 'should_fall_back_to_mtime')
  @should_fall_back_to_mtime ||= true

  @repo_man.discover_commits(site.documents.map {|d| d.relative_path })
  populate_jekyll(site.documents)

  @repo_man.discover_commits(site.pages.map {|p| p.relative_path })
  populate_jekyll(site.pages)

  index_static_files = site.config.dig('jekyll-last-commit', 'index_static_files')
  index_static_files ||= false
  if index_static_files
    @repo_man.discover_commits(site.static_files.map {|sf| '.' + sf.relative_path })
    populate_jekyll(site.static_files, '.')
  end

  index_data_files = site.config.dig('jekyll-last-commit', 'index_data_files')
  index_data_files ||= false
  if index_data_files
    data_file_extensions = ['.yml', '.yaml', '.json', '.tsv', '.csv']
    data_files = []
    site.data.keys.each do |data_file|
      data_file_extensions.each do |data_file_extension|
        data_file_name = data_file + data_file_extension
        if File.file?('./_data/' + data_file_name)
          data_files.append(data_file_name)
          break
        end
      end
    end
  
    data_files_key = site.config.dig('jekyll-last-commit', 'data_files_key')
    data_files_key ||= 'meta'

    @repo_man.discover_commits(data_files.map {|df| './_data/' + df })

    site.data[data_files_key] = {}
    populate_data(data_files, site.data[data_files_key], './_data/')
  end
end

#populate_data(source, output = {}, prepend_path = '') ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/jekyll-last-commit/generator.rb', line 82

def populate_data(source, output = {}, prepend_path = '')
  source.each do |file|
    output[file] ||= {}

    relative_path = prepend_path + file
    commit = @repo_man.find_commit(relative_path)

    if commit.nil?
      if @should_fall_back_to_mtime
        path_file = Jekyll.sanitized_path(@site.source, relative_path)

        if File.file?(file)
          raw_time = Time.at(File.mtime(path_file).to_i)
          output[file]['last_modified_at'] = raw_time
          output[file]['last_modified_at_formatted'] = raw_time.strftime(@date_format)
        end
      end
    else
      raw_time = Time.at(commit['time'].to_i)
      output[file]['last_commit'] = commit
      output[file]['last_modified_at'] = raw_time
      output[file]['last_modified_at_formatted'] = raw_time.strftime(@date_format)
    end
  end
end

#populate_jekyll(files, prepend_path = '') ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/jekyll-last-commit/generator.rb', line 57

def populate_jekyll(files, prepend_path = '')
  files.each do |file|
    commit = @repo_man.find_commit(prepend_path + file.relative_path)

    if commit.nil?
      if @should_fall_back_to_mtime
        path_file = Jekyll.sanitized_path(@site.source, prepend_path + file.relative_path)

        if File.file?(path_file)
          raw_time = Time.at(File.mtime(path_file).to_i)
          file.data['commit'] = prepend_path + file.relative_path
          file.data['last_modified_at'] = raw_time
          file.data['last_modified_at_formatted'] = raw_time.strftime(@date_format)
        end
      end

    else
      raw_time = Time.at(commit["time"].to_i)
      file.data['last_commit'] = commit
      file.data['last_modified_at'] = raw_time
      file.data['last_modified_at_formatted'] = raw_time.strftime(@date_format)
    end
  end
end