Module: Jekyll::ClientSearch::Tasks
- Defined in:
- lib/jekyll/client_search/tasks.rb
Overview
Rake tasks for inspecting and installing reference files.
Tasks:
jekyll_client_search:reference_files — list gem reference files,
diff against site copies, offer to update
jekyll_client_search:install — copy reference files into the site's
_layouts/ and _includes/ directories
Constant Summary collapse
- REFERENCE_FILES =
{ "assets/layouts/post-with-related.html" => "_layouts/post-with-related.html", "assets/includes/related-articles.html" => "_includes/related-articles.html" }.freeze
Class Method Summary collapse
- .copy_file(gem_path, site_path, site_rel, overwrite) ⇒ Object
- .diff_reference_files ⇒ Object
- .gem_root ⇒ Object
- .handle_existing(site_rel, gem_path, site_path) ⇒ Object
- .install_file(gem_rel, site_rel, overwrite:) ⇒ Object
- .install_reference_files(overwrite: false) ⇒ Object
- .list_reference_files ⇒ Object
- .reference_files ⇒ Object
- .same_content?(path_a, path_b) ⇒ Boolean
- .site_root ⇒ Object
Class Method Details
.copy_file(gem_path, site_path, site_rel, overwrite) ⇒ Object
121 122 123 124 125 126 127 |
# File 'lib/jekyll/client_search/tasks.rb', line 121 def copy_file(gem_path, site_path, site_rel, overwrite) FileUtils.mkdir_p(File.dirname(site_path)) FileUtils.cp(gem_path, site_path) action = overwrite ? "updated" : "installed" puts " #{site_rel}: #{action}" :installed end |
.diff_reference_files ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/jekyll/client_search/tasks.rb', line 62 def diff_reference_files reference_files.each do |gem_rel, site_rel| gem_path = File.join(gem_root, gem_rel) site_path = File.join(site_root, site_rel) unless File.exist?(site_path) puts "#{site_rel}: not installed (no diff)" next end if same_content?(gem_path, site_path) puts "#{site_rel}: up to date" else puts "Diff for #{site_rel}:" system("diff", "-u", site_path, gem_path) puts end end end |
.gem_root ⇒ Object
22 23 24 25 26 27 28 |
# File 'lib/jekyll/client_search/tasks.rb', line 22 def gem_root spec = Gem::Specification.find_by_name("jekyll-client-search") spec.gem_dir rescue Gem::MissingSpecError # Fall back to the development source directory File.("../../..", __dir__) end |
.handle_existing(site_rel, gem_path, site_path) ⇒ Object
111 112 113 114 115 116 117 118 119 |
# File 'lib/jekyll/client_search/tasks.rb', line 111 def handle_existing(site_rel, gem_path, site_path) if same_content?(gem_path, site_path) puts " #{site_rel}: already up to date (skip)" nil else puts " #{site_rel}: exists and differs (skip — use overwrite: true to replace)" :skipped end end |
.install_file(gem_rel, site_rel, overwrite:) ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/jekyll/client_search/tasks.rb', line 97 def install_file(gem_rel, site_rel, overwrite:) gem_path = File.join(gem_root, gem_rel) site_path = File.join(site_root, site_rel) unless File.exist?(gem_path) warn " WARNING: gem file missing: #{gem_path}" return nil end return handle_existing(site_rel, gem_path, site_path) if File.exist?(site_path) && !overwrite copy_file(gem_path, site_path, site_rel, overwrite) end |
.install_reference_files(overwrite: false) ⇒ Object
82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/jekyll/client_search/tasks.rb', line 82 def install_reference_files(overwrite: false) installed = [] skipped = [] reference_files.each do |gem_rel, site_rel| result = install_file(gem_rel, site_rel, overwrite: overwrite) case result when :installed then installed << site_rel when :skipped then skipped << site_rel end end { installed: installed, skipped: skipped } end |
.list_reference_files ⇒ Object
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/jekyll/client_search/tasks.rb', line 38 def list_reference_files puts "jekyll-client-search reference files:" puts reference_files.each do |gem_rel, site_rel| gem_path = File.join(gem_root, gem_rel) site_path = File.join(site_root, site_rel) site_exists = File.exist?(site_path) status = if !site_exists "not installed" elsif same_content?(gem_path, site_path) "up to date" else "modified or outdated" end puts " #{site_rel}" puts " gem: #{gem_path}" puts " site: #{site_path}" puts " status: #{status}" puts end end |
.reference_files ⇒ Object
30 31 32 |
# File 'lib/jekyll/client_search/tasks.rb', line 30 def reference_files REFERENCE_FILES end |
.same_content?(path_a, path_b) ⇒ Boolean
129 130 131 132 133 |
# File 'lib/jekyll/client_search/tasks.rb', line 129 def same_content?(path_a, path_b) File.read(path_a) == File.read(path_b) rescue Errno::ENOENT false end |
.site_root ⇒ Object
34 35 36 |
# File 'lib/jekyll/client_search/tasks.rb', line 34 def site_root Dir.pwd end |