wax_tasks 1.1.2 → 1.1.3
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of wax_tasks might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/spec/setup.rb +0 -0
- data/spec/spec_helper.rb +0 -0
- metadata +2 -32
- data/.github/ISSUE_TEMPLATE/bug_report.md +0 -35
- data/.github/ISSUE_TEMPLATE/feature_request.md +0 -17
- data/.gitignore +0 -7
- data/.rspec +0 -3
- data/.rubocop.yml +0 -16
- data/.travis.yml +0 -27
- data/CHANGELOG.md +0 -42
- data/CODE_OF_CONDUCT.md +0 -74
- data/Gemfile +0 -11
- data/LICENSE +0 -21
- data/README.md +0 -171
- data/lib/tasks/clobber.rake +0 -16
- data/lib/tasks/derivatives_iiif.rake +0 -26
- data/lib/tasks/derivatives_simple.rake +0 -17
- data/lib/tasks/pages.rake +0 -23
- data/lib/tasks/search.rake +0 -23
- data/lib/wax_tasks.rb +0 -37
- data/lib/wax_tasks/asset.rb +0 -57
- data/lib/wax_tasks/collection.rb +0 -61
- data/lib/wax_tasks/collection/images.rb +0 -126
- data/lib/wax_tasks/collection/metadata.rb +0 -101
- data/lib/wax_tasks/config.rb +0 -79
- data/lib/wax_tasks/error.rb +0 -65
- data/lib/wax_tasks/index.rb +0 -45
- data/lib/wax_tasks/item.rb +0 -116
- data/lib/wax_tasks/record.rb +0 -69
- data/lib/wax_tasks/site.rb +0 -86
- data/lib/wax_tasks/utils.rb +0 -151
- data/lib/wax_tasks/version.rb +0 -5
- data/wax_tasks.gemspec +0 -33
data/lib/wax_tasks/config.rb
DELETED
@@ -1,79 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module WaxTasks
|
4
|
-
#
|
5
|
-
class Config
|
6
|
-
attr_reader :collections
|
7
|
-
|
8
|
-
def initialize(config)
|
9
|
-
@config = config
|
10
|
-
@collections = process_collections
|
11
|
-
end
|
12
|
-
|
13
|
-
def self
|
14
|
-
@config
|
15
|
-
end
|
16
|
-
|
17
|
-
#
|
18
|
-
#
|
19
|
-
def source
|
20
|
-
@config.dig 'source'
|
21
|
-
end
|
22
|
-
|
23
|
-
#
|
24
|
-
#
|
25
|
-
def collections_dir
|
26
|
-
@config.dig 'collections_dir'
|
27
|
-
end
|
28
|
-
|
29
|
-
#
|
30
|
-
# Contructs permalink extension from site `permalink` variable
|
31
|
-
#
|
32
|
-
# @return [String] the end of the permalink, either '/' or '.html'
|
33
|
-
def ext
|
34
|
-
case @config.dig 'permalink'
|
35
|
-
when 'pretty' || '/'
|
36
|
-
'/'
|
37
|
-
else
|
38
|
-
'.html'
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
#
|
43
|
-
#
|
44
|
-
def process_collections
|
45
|
-
if @config.key? 'collections'
|
46
|
-
@config['collections'].map do |k, v|
|
47
|
-
WaxTasks::Collection.new(k, v, source, collections_dir, ext)
|
48
|
-
end
|
49
|
-
else
|
50
|
-
[]
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
#
|
55
|
-
#
|
56
|
-
def search(name)
|
57
|
-
search_config = @config.dig 'search', name
|
58
|
-
raise WaxTasks::Error::InvalidConfig if search_config.nil?
|
59
|
-
raise WaxTasks::Error::InvalidConfig unless search_config.dig('collections').is_a? Hash
|
60
|
-
|
61
|
-
search_config['collections'] = search_config['collections'].map do |k, v|
|
62
|
-
fields = v.fetch('fields', [])
|
63
|
-
fields << 'content' if v.fetch('content', false)
|
64
|
-
find_collection(k).tap { |c| c.search_fields = fields }
|
65
|
-
end
|
66
|
-
|
67
|
-
search_config
|
68
|
-
end
|
69
|
-
|
70
|
-
#
|
71
|
-
#
|
72
|
-
def find_collection(name)
|
73
|
-
collection = @collections.find { |c| c.name == name }
|
74
|
-
raise WaxTasks::Error::InvalidCollection, "Cannot find requested collection '#{name}'" if collection.nil?
|
75
|
-
|
76
|
-
collection
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
data/lib/wax_tasks/error.rb
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module WaxTasks
|
4
|
-
# Custom WaxTasks Errors module
|
5
|
-
module Error
|
6
|
-
# Custom WaxTasks Error class with magenta console output
|
7
|
-
class WaxTasksError < StandardError
|
8
|
-
def initialize(msg = '')
|
9
|
-
super(Rainbow(msg).magenta)
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
# Custom Error:
|
14
|
-
# Rake task expects arguments, found none
|
15
|
-
class MissingArguments < WaxTasksError; end
|
16
|
-
|
17
|
-
# Custom Error:
|
18
|
-
# Site config cannot be found / parsed for the task at hand
|
19
|
-
class InvalidConfig < WaxTasksError; end
|
20
|
-
|
21
|
-
# Custom Error:
|
22
|
-
# Collection specified cannot be found / parsed in site config
|
23
|
-
class InvalidCollection < WaxTasksError; end
|
24
|
-
|
25
|
-
# Custom Error:
|
26
|
-
# Collection data source type is not allowed or is an invalid file
|
27
|
-
class InvalidSource < WaxTasksError; end
|
28
|
-
|
29
|
-
# Custom Error:
|
30
|
-
# Data source file could not be found
|
31
|
-
class MissingSource < WaxTasksError; end
|
32
|
-
|
33
|
-
# Custom Error:
|
34
|
-
# Could not load collection page(s)
|
35
|
-
class PageLoad < WaxTasksError; end
|
36
|
-
|
37
|
-
# Custom Error:
|
38
|
-
# Collection item does not have a required pid value
|
39
|
-
class MissingPid < WaxTasksError; end
|
40
|
-
|
41
|
-
# Custom Error:
|
42
|
-
# Collection item has a non-unique pud value
|
43
|
-
class NonUniquePid < WaxTasksError; end
|
44
|
-
|
45
|
-
# Custom Error:
|
46
|
-
# Collection page item could not be generated
|
47
|
-
class PageFailure < WaxTasksError; end
|
48
|
-
|
49
|
-
# Custom Error:
|
50
|
-
# CSV file failed to lint + could not be loaded
|
51
|
-
class InvalidCSV < WaxTasksError; end
|
52
|
-
|
53
|
-
# Custom Error:
|
54
|
-
# JSON file failed to lint + could not be loaded
|
55
|
-
class InvalidJSON < WaxTasksError; end
|
56
|
-
|
57
|
-
# Custom Error:
|
58
|
-
# YAML file failed to lint + could not be loaded
|
59
|
-
class InvalidYAML < WaxTasksError; end
|
60
|
-
|
61
|
-
# Custom Error:
|
62
|
-
# Search index in site config has no valid collections to index
|
63
|
-
class NoSearchCollections < WaxTasksError; end
|
64
|
-
end
|
65
|
-
end
|
data/lib/wax_tasks/index.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module WaxTasks
|
4
|
-
#
|
5
|
-
class Index
|
6
|
-
attr_reader :path, :collections
|
7
|
-
|
8
|
-
def initialize(config)
|
9
|
-
@config = config
|
10
|
-
@collections = config.dig 'collections'
|
11
|
-
@path = config.dig 'index'
|
12
|
-
|
13
|
-
raise WaxTasks::Error::NoSearchCollections if @collections.nil?
|
14
|
-
raise WaxTasks::Error::InvalidConfig if @path.nil?
|
15
|
-
|
16
|
-
@records = records
|
17
|
-
end
|
18
|
-
|
19
|
-
#
|
20
|
-
#
|
21
|
-
def records
|
22
|
-
lunr_id = 0
|
23
|
-
@collections.flat_map do |collection|
|
24
|
-
collection.records_from_pages.each.flat_map do |r|
|
25
|
-
r.keep_only collection.search_fields
|
26
|
-
r.set 'lunr_id', lunr_id
|
27
|
-
r.lunr_normalize_values
|
28
|
-
lunr_id += 1
|
29
|
-
r
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
#
|
35
|
-
#
|
36
|
-
def write_to(dir)
|
37
|
-
file_path = WaxTasks::Utils.safe_join dir, @path
|
38
|
-
FileUtils.mkdir_p File.dirname(file_path)
|
39
|
-
File.open(file_path, 'w') do |f|
|
40
|
-
f.puts "---\nlayout: none\n---\n"
|
41
|
-
f.puts JSON.pretty_generate(@records.map(&:hash))
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
data/lib/wax_tasks/item.rb
DELETED
@@ -1,116 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module WaxTasks
|
4
|
-
#
|
5
|
-
class Item
|
6
|
-
attr_accessor :record, :iiif_config
|
7
|
-
attr_reader :pid
|
8
|
-
|
9
|
-
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
def initialize(path, variants)
|
13
|
-
@path = path
|
14
|
-
@variants = variants
|
15
|
-
@type = type
|
16
|
-
@pid = File.basename @path, '.*'
|
17
|
-
@assets = assets
|
18
|
-
end
|
19
|
-
|
20
|
-
#
|
21
|
-
#
|
22
|
-
def accepted_image_formats
|
23
|
-
%w[.png .jpg .jpeg .tiff .tif]
|
24
|
-
end
|
25
|
-
|
26
|
-
#
|
27
|
-
#
|
28
|
-
def type
|
29
|
-
Dir.exist?(@path) ? 'dir' : File.extname(@path).downcase
|
30
|
-
end
|
31
|
-
|
32
|
-
#
|
33
|
-
#
|
34
|
-
def valid?
|
35
|
-
accepted_image_formats.include? @type or @type == 'dir'
|
36
|
-
end
|
37
|
-
|
38
|
-
#
|
39
|
-
#
|
40
|
-
def record?
|
41
|
-
@record.is_a? Record
|
42
|
-
end
|
43
|
-
|
44
|
-
#
|
45
|
-
#
|
46
|
-
def assets
|
47
|
-
if accepted_image_formats.include? @type
|
48
|
-
[Asset.new(@path, @pid, @variants)]
|
49
|
-
elsif @type == 'dir'
|
50
|
-
paths = Dir.glob("#{@path}/*{#{accepted_image_formats.join(',')}}").sort
|
51
|
-
paths.map { |p| Asset.new(p, @pid, @variants) }
|
52
|
-
else
|
53
|
-
[]
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
#
|
58
|
-
#
|
59
|
-
def simple_derivatives
|
60
|
-
@assets.map(&:simple_derivatives).flatten
|
61
|
-
end
|
62
|
-
|
63
|
-
#
|
64
|
-
#
|
65
|
-
def logo
|
66
|
-
logo_uri = @iiif_config&.dig 'logo'
|
67
|
-
"{{ '#{logo_uri}' | absolute_url }}" if logo_uri
|
68
|
-
end
|
69
|
-
|
70
|
-
def label
|
71
|
-
label_key = @iiif_config&.dig 'label'
|
72
|
-
if @record && label_key
|
73
|
-
@record.hash.dig label_key
|
74
|
-
else
|
75
|
-
@pid
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
#
|
80
|
-
#
|
81
|
-
def description
|
82
|
-
description_key = @iiif_config&.dig 'description'
|
83
|
-
@record.hash.dig description_key if description_key && @record
|
84
|
-
end
|
85
|
-
|
86
|
-
#
|
87
|
-
#
|
88
|
-
def attribution
|
89
|
-
attribution_key = @iiif_config.dig 'attribution'
|
90
|
-
@record.hash.dig attribution_key if attribution_key && @record
|
91
|
-
end
|
92
|
-
|
93
|
-
#
|
94
|
-
#
|
95
|
-
def iiif_image_records
|
96
|
-
opts = base_opts.clone
|
97
|
-
is_only = @assets.length == 1
|
98
|
-
|
99
|
-
@assets.map.with_index do |asset, i|
|
100
|
-
asset.to_iiif_image_record(is_only, i, opts)
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
#
|
105
|
-
#
|
106
|
-
def base_opts
|
107
|
-
opts = { label: label }
|
108
|
-
return opts unless @iiif_config
|
109
|
-
|
110
|
-
opts[:logo] = logo if logo
|
111
|
-
opts[:description] = description.to_s if description
|
112
|
-
opts[:attribution] = attribution.to_s if attribution
|
113
|
-
opts
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|
data/lib/wax_tasks/record.rb
DELETED
@@ -1,69 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module WaxTasks
|
4
|
-
#
|
5
|
-
class Record
|
6
|
-
attr_reader :pid, :hash, :order
|
7
|
-
|
8
|
-
def initialize(hash)
|
9
|
-
@hash = hash
|
10
|
-
@pid = @hash.dig 'pid'
|
11
|
-
@order = @hash.dig 'order'
|
12
|
-
end
|
13
|
-
|
14
|
-
#
|
15
|
-
#
|
16
|
-
def lunr_normalize_values
|
17
|
-
@hash.transform_values { |v| Utils.lunr_normalize v }
|
18
|
-
end
|
19
|
-
|
20
|
-
#
|
21
|
-
#
|
22
|
-
def keys
|
23
|
-
@hash.keys
|
24
|
-
end
|
25
|
-
|
26
|
-
# PATCH :: rename 'fullwidth' to 'full' to
|
27
|
-
# (1) avoid breaking wax_iiif with special 'full' variant label
|
28
|
-
# (2) avoid breaking wax_theme which still expects 'full' to provide an image path
|
29
|
-
# this can be deprecated when a new version of wax_theme looks for another fullsize key
|
30
|
-
#
|
31
|
-
def set(key, value)
|
32
|
-
key = 'full' if key == 'fullwidth'
|
33
|
-
@hash[key] = value
|
34
|
-
end
|
35
|
-
|
36
|
-
#
|
37
|
-
#
|
38
|
-
def permalink?
|
39
|
-
@hash.key? 'permalink'
|
40
|
-
end
|
41
|
-
|
42
|
-
#
|
43
|
-
#
|
44
|
-
def order?
|
45
|
-
@order.is_a? String
|
46
|
-
end
|
47
|
-
|
48
|
-
#
|
49
|
-
#
|
50
|
-
def keep_only(fields)
|
51
|
-
@hash.select! { |k, _v| fields.include? k }
|
52
|
-
end
|
53
|
-
|
54
|
-
#
|
55
|
-
#
|
56
|
-
def write_to_page(dir)
|
57
|
-
raise Error::MissingPid if @pid.nil?
|
58
|
-
|
59
|
-
path = "#{dir}/#{Utils.slug(@pid)}.md"
|
60
|
-
if File.exist? path
|
61
|
-
0
|
62
|
-
else
|
63
|
-
FileUtils.mkdir_p File.dirname(path)
|
64
|
-
File.open(path, 'w') { |f| f.puts "#{@hash.to_yaml}---" }
|
65
|
-
1
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
data/lib/wax_tasks/site.rb
DELETED
@@ -1,86 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
#
|
4
|
-
module WaxTasks
|
5
|
-
#
|
6
|
-
class Site
|
7
|
-
attr_reader :config
|
8
|
-
|
9
|
-
#
|
10
|
-
#
|
11
|
-
def initialize(config = nil)
|
12
|
-
@config = WaxTasks::Config.new(config || WaxTasks.config_from_file)
|
13
|
-
end
|
14
|
-
|
15
|
-
#
|
16
|
-
#
|
17
|
-
def collections
|
18
|
-
@config.collections
|
19
|
-
end
|
20
|
-
|
21
|
-
#
|
22
|
-
#
|
23
|
-
def clobber(name)
|
24
|
-
collection = @config.find_collection name
|
25
|
-
raise WaxTasks::Error::InvalidCollection if collection.nil?
|
26
|
-
|
27
|
-
collection.clobber_pages
|
28
|
-
collection.clobber_derivatives
|
29
|
-
|
30
|
-
@config.self.fetch('search', {}).each do |_name, search|
|
31
|
-
next unless search.key? 'index'
|
32
|
-
index = Utils.safe_join @config.source, search['index']
|
33
|
-
next unless File.exist? index
|
34
|
-
puts Rainbow("Removing search index #{index}").cyan
|
35
|
-
FileUtils.rm index
|
36
|
-
end
|
37
|
-
|
38
|
-
puts Rainbow("\nDone ✔").green
|
39
|
-
end
|
40
|
-
|
41
|
-
#
|
42
|
-
#
|
43
|
-
def generate_pages(name)
|
44
|
-
result = 0
|
45
|
-
collection = @config.find_collection name
|
46
|
-
raise WaxTasks::Error::InvalidCollection if collection.nil?
|
47
|
-
|
48
|
-
collection.records_from_metadata.each do |record|
|
49
|
-
result += record.write_to_page(collection.page_source)
|
50
|
-
end
|
51
|
-
|
52
|
-
puts Rainbow("#{result} pages were generated to #{collection.page_source}.").cyan
|
53
|
-
puts Rainbow("\nDone ✔").green
|
54
|
-
end
|
55
|
-
|
56
|
-
#
|
57
|
-
#
|
58
|
-
def generate_static_search(name)
|
59
|
-
search_config = @config.search name
|
60
|
-
index = WaxTasks::Index.new(search_config)
|
61
|
-
|
62
|
-
puts Rainbow("Generating #{name} search index to #{index.path}").cyan
|
63
|
-
index.write_to @config.source
|
64
|
-
|
65
|
-
puts Rainbow("\nDone ✔").green
|
66
|
-
end
|
67
|
-
|
68
|
-
#
|
69
|
-
#
|
70
|
-
def generate_derivatives(name, type)
|
71
|
-
collection = @config.find_collection name
|
72
|
-
raise WaxTasks::Error::InvalidCollection if collection.nil?
|
73
|
-
raise WaxTasks::Error::InvalidConfig unless %w[iiif simple].include? type
|
74
|
-
|
75
|
-
records = case type
|
76
|
-
when 'iiif'
|
77
|
-
collection.write_iiif_derivatives
|
78
|
-
when 'simple'
|
79
|
-
collection.write_simple_derivatives
|
80
|
-
end
|
81
|
-
|
82
|
-
collection.update_metadata records
|
83
|
-
puts Rainbow("\nDone ✔").green
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|