wax_tasks 1.1.2 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
|