wax_tasks 0.1.0 → 0.2.0
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.
- checksums.yaml +4 -4
- data/Gemfile +2 -0
- data/lib/wax/branch.rb +70 -0
- data/lib/wax/collection.rb +49 -0
- data/lib/wax/iiif_collection.rb +63 -0
- data/lib/wax/index.rb +70 -0
- data/lib/wax/lunr_collection.rb +50 -0
- data/lib/wax/pagemaster_collection.rb +40 -0
- data/lib/wax/tasks/iiif.rake +9 -0
- data/lib/wax/tasks/jspackage.rake +26 -0
- data/lib/{tasks → wax/tasks}/lunr.rake +2 -2
- data/lib/wax/tasks/pagemaster.rake +10 -0
- data/lib/wax/tasks/push.rake +18 -0
- data/lib/{tasks → wax/tasks}/test.rake +1 -2
- data/lib/wax/utilities.rb +99 -0
- data/lib/wax_tasks.rb +20 -40
- data/spec/iiif.rb +42 -0
- data/spec/lunr.rb +24 -0
- data/spec/pagemaster.rb +41 -0
- data/spec/spec_helper.rb +24 -114
- metadata +21 -26
- data/lib/modules/iiif.rb +0 -39
- data/lib/modules/lunr.rb +0 -123
- data/lib/modules/pagemaster.rb +0 -73
- data/lib/tasks/iiif.rake +0 -11
- data/lib/tasks/jspackage.rake +0 -26
- data/lib/tasks/pagemaster.rake +0 -14
- data/lib/tasks/push_gh.rake +0 -43
- data/lib/tasks/push_static.rake +0 -35
data/spec/lunr.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# lunr task specs
|
2
|
+
describe 'wax:lunr' do
|
3
|
+
it 'constructs an index object' do
|
4
|
+
idx = quiet_stdout { Index.new }
|
5
|
+
expect { idx.collections.all? }
|
6
|
+
end
|
7
|
+
it 'passes when invoked' do
|
8
|
+
passes = quiet_stdout { system('bundle exec rake wax:lunr') }
|
9
|
+
expect(passes).to eq(true)
|
10
|
+
end
|
11
|
+
it 'writes a lunr index' do
|
12
|
+
index = File.open('./js/lunr-index.json', 'r').read
|
13
|
+
expect(index.length).to be > 1000
|
14
|
+
end
|
15
|
+
it 'generates a lunr ui' do
|
16
|
+
ui = File.open('./js/lunr-ui.js', 'r').read
|
17
|
+
expect(ui.length).to be > 100
|
18
|
+
end
|
19
|
+
context 'when a ui already exists' do
|
20
|
+
it 'skips over it' do
|
21
|
+
expect { Index.new.write }.to output(/.*Skipping.*/).to_stdout
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/spec/pagemaster.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# pagemaster task specs
|
2
|
+
describe 'wax:pagemaster' do
|
3
|
+
it 'constructs pagemaster collections' do
|
4
|
+
expect { PM_COLLECTIONS.all? }
|
5
|
+
end
|
6
|
+
context 'when invoked as a task' do
|
7
|
+
it 'passes' do
|
8
|
+
passes = quiet_stdout { system("bundle exec rake wax:pagemaster #{ARGS.join ' '}") }
|
9
|
+
expect(passes).to eq(true)
|
10
|
+
end
|
11
|
+
it 'generates pages to the correct directories' do
|
12
|
+
PM_COLLECTIONS.each do |c|
|
13
|
+
pages = Dir.glob("#{c.page_dir}/*.md")
|
14
|
+
expect(pages.length).to be > 0
|
15
|
+
Fake.content(pages) # add content to pages to test lunr indexing
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
context 'when processed directly' do
|
20
|
+
it 'still passes' do
|
21
|
+
FileUtils.rm_r "./collections/_#{ARGS.first}"
|
22
|
+
expect { quiet_stdout { PM_COLLECTIONS.first.generate_pages } }.not_to raise_error
|
23
|
+
end
|
24
|
+
end
|
25
|
+
context 'when given a collection arg not in config' do
|
26
|
+
it 'throws a configuration error' do
|
27
|
+
expect { quiet_stdout { PagemasterCollection.new('not_a_collection') } }.to raise_error(SystemExit)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
context 'when trying to genrate pages that already exist' do
|
31
|
+
it 'skips them' do
|
32
|
+
expect { PM_COLLECTIONS.first.generate_pages }.to output(/.*Skipping.*/).to_stdout
|
33
|
+
end
|
34
|
+
end
|
35
|
+
context 'when given a bad config' do
|
36
|
+
it 'throws a key error' do
|
37
|
+
opts = { site_config: {} }
|
38
|
+
expect { PagemasterCollection.new(ARGS.first, opts) }.to raise_error(KeyError)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,130 +1,40 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
require_relative 'fake/data'
|
5
|
-
require_relative 'fake/site'
|
6
|
-
|
7
|
-
$LOAD_PATH.unshift File.expand_path('../lib', __dir__)
|
8
|
-
require 'wax_tasks'
|
9
|
-
|
10
|
-
silence_output do
|
11
|
-
Fake.site
|
12
|
-
Fake.data
|
13
|
-
end
|
14
|
-
|
15
|
-
site_config = WaxTasks.site_config
|
16
|
-
bad_src_config = {
|
17
|
-
'collections' => {
|
18
|
-
'test' => {
|
19
|
-
'source' => 'test.jpg'
|
20
|
-
}
|
21
|
-
}
|
22
|
-
}
|
23
|
-
missing_src_config = {
|
24
|
-
'collections' => {
|
25
|
-
'test' => {
|
26
|
-
'source' => 'test.csv'
|
27
|
-
}
|
28
|
-
}
|
29
|
-
}
|
1
|
+
# toggle stdout/stderr verbosity
|
2
|
+
QUIET = true
|
30
3
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
args.each do |a|
|
38
|
-
dir = Pagemaster.target_dir(a, site_config)
|
39
|
-
pages = Dir.glob("#{dir}/*.md")
|
40
|
-
expect(pages.length).to be > 0
|
41
|
-
Fake.content(pages)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
context 'when given a collection arg not in config' do
|
45
|
-
collection_name = 'not_a_collection'
|
46
|
-
it 'throws a configuration error' do
|
47
|
-
expect { silence_output { WaxTasks.pagemaster(collection_name, site_config) } }.to raise_error(SystemExit)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
context 'when given config with bad source' do
|
51
|
-
collection_name = bad_src_config['collections'].first[0]
|
52
|
-
it 'throws ingest error' do
|
53
|
-
expect { silence_output { WaxTasks.pagemaster(collection_name, bad_src_config) } }.to raise_error(SystemExit)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
context 'when given config with missing source' do
|
57
|
-
collection_name = missing_src_config['collections'].first[0]
|
58
|
-
it 'throws io error' do
|
59
|
-
expect { silence_output { WaxTasks.pagemaster(collection_name, missing_src_config) } }.to raise_error(SystemExit)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
context 'when trying to genrate pages that already exist' do
|
63
|
-
it 'skips them' do
|
64
|
-
expect { WaxTasks.pagemaster(args.first, site_config) }.to output(/.*Skipping.*/).to_stdout
|
65
|
-
end
|
66
|
-
end
|
4
|
+
# use codecov + add requirements
|
5
|
+
require 'simplecov'
|
6
|
+
SimpleCov.start do
|
7
|
+
add_filter 'spec'
|
8
|
+
add_filter 'utilities'
|
9
|
+
add_filter 'branch'
|
67
10
|
end
|
68
11
|
|
69
|
-
|
70
|
-
|
71
|
-
it 'generates a lunr index' do
|
72
|
-
index = File.open('./js/lunr-index.json', 'r').read
|
73
|
-
expect(index.length).to be > 1000
|
74
|
-
end
|
75
|
-
it 'generates a lunr ui' do
|
76
|
-
ui = File.open('./js/lunr-ui.js', 'r').read
|
77
|
-
expect(ui.length).to be > 100
|
78
|
-
end
|
79
|
-
context 'when a ui already exists' do
|
80
|
-
it 'skips over it' do
|
81
|
-
expect { WaxTasks.lunr(site_config) }.to output(/.*Skipping.*/).to_stdout
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
12
|
+
require_relative './../lib/wax_tasks'
|
13
|
+
require_relative 'fake/site'
|
85
14
|
|
86
|
-
|
87
|
-
|
88
|
-
images = Dir.glob('./_data/iiif/*.jpg')
|
89
|
-
iiif_src_dir = "./_data/iiif/#{collection_name}"
|
15
|
+
# setup
|
16
|
+
quiet_stdout { Fake.site }
|
90
17
|
|
91
|
-
|
92
|
-
|
93
|
-
|
18
|
+
# constants
|
19
|
+
SITE_CONFIG = WaxTasks.site_config
|
20
|
+
ARGS = SITE_CONFIG[:collections].map { |c| c[0] }
|
21
|
+
PM_COLLECTIONS = quiet_stdout { ARGS.map { |a| PagemasterCollection.new(a) } }
|
22
|
+
IIIF_COLLECTIONS = ARGS.map { |a| IiifCollection.new(a) }
|
94
23
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
expect(File.exist?("./iiif/#{collection_name}/1/manifest.json")).to be true
|
100
|
-
end
|
101
|
-
it 'generates derivatives' do
|
102
|
-
expect(Dir.exist?("./iiif/#{collection_name}/images")).to be true
|
103
|
-
end
|
104
|
-
it 'generates image variants' do
|
105
|
-
[250, 600, 1140].each do |size|
|
106
|
-
expect(File.exist?("./iiif/#{collection_name}/images/1-1/full/#{size},/0/default.jpg")).to be true
|
107
|
-
end
|
108
|
-
end
|
109
|
-
context 'when looking for a missing dir' do
|
110
|
-
it 'throws an io error' do
|
111
|
-
collection_name = 'not_a_collection'
|
112
|
-
expect { silence_output { WaxTasks.iiif(collection_name, site_config) } }.to raise_error(SystemExit)
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
24
|
+
# run specs
|
25
|
+
require_relative 'pagemaster'
|
26
|
+
require_relative 'lunr'
|
27
|
+
require_relative 'iiif'
|
116
28
|
|
117
29
|
describe 'jekyll' do
|
118
30
|
it 'builds successfully' do
|
119
|
-
|
31
|
+
quiet_stdout { Bundler.with_clean_env { system('bundle exec jekyll build') } }
|
120
32
|
end
|
121
33
|
end
|
122
34
|
|
123
35
|
describe 'wax:jspackage' do
|
124
|
-
before(:all) do
|
125
|
-
silence_output { system('bundle exec rake wax:jspackage') }
|
126
|
-
end
|
127
36
|
it 'writes a package.json file' do
|
37
|
+
quiet_stdout { system('bundle exec rake wax:jspackage') }
|
128
38
|
package = File.open('package.json', 'r').read
|
129
39
|
expect(package.length > 90)
|
130
40
|
end
|
@@ -132,6 +42,6 @@ end
|
|
132
42
|
|
133
43
|
describe 'wax:test' do
|
134
44
|
it 'passes html-proofer' do
|
135
|
-
|
45
|
+
quiet_stdout { system('bundle exec rake wax:test') }
|
136
46
|
end
|
137
47
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wax_tasks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marii Nyrop
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-06-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: colorize
|
@@ -122,20 +122,6 @@ dependencies:
|
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '3'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: rubocop
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - ">="
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '0.5'
|
132
|
-
type: :development
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - ">="
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '0.5'
|
139
125
|
description: Rake tasks for minimal iiif exhibition sites with Jekyll.
|
140
126
|
email:
|
141
127
|
- m.nyrop@columbia.edu
|
@@ -144,17 +130,23 @@ extensions: []
|
|
144
130
|
extra_rdoc_files: []
|
145
131
|
files:
|
146
132
|
- Gemfile
|
147
|
-
- lib/
|
148
|
-
- lib/
|
149
|
-
- lib/
|
150
|
-
- lib/
|
151
|
-
- lib/
|
152
|
-
- lib/
|
153
|
-
- lib/tasks/
|
154
|
-
- lib/tasks/
|
155
|
-
- lib/tasks/
|
156
|
-
- lib/tasks/
|
133
|
+
- lib/wax/branch.rb
|
134
|
+
- lib/wax/collection.rb
|
135
|
+
- lib/wax/iiif_collection.rb
|
136
|
+
- lib/wax/index.rb
|
137
|
+
- lib/wax/lunr_collection.rb
|
138
|
+
- lib/wax/pagemaster_collection.rb
|
139
|
+
- lib/wax/tasks/iiif.rake
|
140
|
+
- lib/wax/tasks/jspackage.rake
|
141
|
+
- lib/wax/tasks/lunr.rake
|
142
|
+
- lib/wax/tasks/pagemaster.rake
|
143
|
+
- lib/wax/tasks/push.rake
|
144
|
+
- lib/wax/tasks/test.rake
|
145
|
+
- lib/wax/utilities.rb
|
157
146
|
- lib/wax_tasks.rb
|
147
|
+
- spec/iiif.rb
|
148
|
+
- spec/lunr.rb
|
149
|
+
- spec/pagemaster.rb
|
158
150
|
- spec/spec_helper.rb
|
159
151
|
homepage: https://github.com/minicomp/wax_tasks
|
160
152
|
licenses:
|
@@ -183,3 +175,6 @@ specification_version: 4
|
|
183
175
|
summary: Rake tasks for minimal exhibitions.
|
184
176
|
test_files:
|
185
177
|
- spec/spec_helper.rb
|
178
|
+
- spec/iiif.rb
|
179
|
+
- spec/pagemaster.rb
|
180
|
+
- spec/lunr.rb
|
data/lib/modules/iiif.rb
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
require 'colorized_string'
|
2
|
-
require 'json'
|
3
|
-
require 'wax_iiif'
|
4
|
-
|
5
|
-
# module for generating IIIF derivatives + json from local images
|
6
|
-
module Iiif
|
7
|
-
def self.process(name, site_config)
|
8
|
-
inpath = "./_data/iiif/#{name}"
|
9
|
-
unless Dir.exist?(inpath)
|
10
|
-
abort "Source path '#{inpath}' does not exist. Exiting.".magenta
|
11
|
-
end
|
12
|
-
FileUtils.mkdir_p("./iiif/#{name}", verbose: false)
|
13
|
-
build_opts = {
|
14
|
-
base_url: "#{site_config['baseurl']}/iiif/#{name}",
|
15
|
-
output_dir: "./iiif/#{name}",
|
16
|
-
verbose: true,
|
17
|
-
variants: { med: 600, lg: 1140 }
|
18
|
-
}
|
19
|
-
builder = IiifS3::Builder.new(build_opts)
|
20
|
-
builder.load(make_records(name, inpath))
|
21
|
-
builder.process_data(true)
|
22
|
-
end
|
23
|
-
|
24
|
-
def self.make_records(name, inpath)
|
25
|
-
counter = 1
|
26
|
-
records = []
|
27
|
-
Dir["#{inpath}/*"].sort!.each do |imagefile|
|
28
|
-
basename = File.basename(imagefile, '.*').to_s
|
29
|
-
record_opts = {
|
30
|
-
id: basename,
|
31
|
-
path: imagefile,
|
32
|
-
label: "#{name} #{basename}"
|
33
|
-
}
|
34
|
-
counter += 1
|
35
|
-
records << IiifS3::ImageRecord.new(record_opts)
|
36
|
-
end
|
37
|
-
records
|
38
|
-
end
|
39
|
-
end
|
data/lib/modules/lunr.rb
DELETED
@@ -1,123 +0,0 @@
|
|
1
|
-
require 'colorized_string'
|
2
|
-
require 'json'
|
3
|
-
|
4
|
-
# module for generating elasticlunr index and default jquery ui
|
5
|
-
module Lunr
|
6
|
-
def self.write_index(site_config)
|
7
|
-
index = index(site_config)
|
8
|
-
FileUtils.mkdir_p('js')
|
9
|
-
index = "---\nlayout: none\n---\n" + index
|
10
|
-
path = 'js/lunr-index.json'
|
11
|
-
File.open(path, 'w') { |file| file.write(index) }
|
12
|
-
puts "Writing lunr index to #{path}".cyan
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.index(site_config)
|
16
|
-
collections = collections_to_index(site_config)
|
17
|
-
collections_dir = site_config['collections_dir'].to_s
|
18
|
-
|
19
|
-
index = []
|
20
|
-
count = 0
|
21
|
-
|
22
|
-
collections.each do |collection|
|
23
|
-
dir = "_#{collection[:name]}"
|
24
|
-
dir.prepend("#{collections_dir}/") unless collections_dir.empty?
|
25
|
-
pages = Dir.glob(dir + '/*.md')
|
26
|
-
get_content = collection[:lunr_index].key?('content') ? collection[:lunr_index]['content'] : false
|
27
|
-
fields = collection[:lunr_index]['fields']
|
28
|
-
# catch
|
29
|
-
abort "There are no pages in '#{dir}'".magenta if pages.empty?
|
30
|
-
abort "There are no fields for #{collection.name}.".magenta if fields.empty?
|
31
|
-
puts "Loading #{pages.length} pages from #{dir}"
|
32
|
-
# index each page in collection
|
33
|
-
pages.each do |page|
|
34
|
-
index << page_hash(page, fields, get_content, count)
|
35
|
-
count += 1
|
36
|
-
end
|
37
|
-
end
|
38
|
-
JSON.pretty_generate(index)
|
39
|
-
end
|
40
|
-
|
41
|
-
def self.write_ui(site_config)
|
42
|
-
ui_str = ui(site_config)
|
43
|
-
ui = "---\nlayout: none\n---\n" + ui_str
|
44
|
-
path = 'js/lunr-ui.js'
|
45
|
-
if File.exist?(path)
|
46
|
-
puts "Lunr UI already exists at #{path}. Skipping".cyan
|
47
|
-
else
|
48
|
-
File.open(path, 'w') { |file| file.write(ui) }
|
49
|
-
puts "Writing lunr ui to #{path}".cyan
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def self.ui(site_config)
|
54
|
-
# set up index
|
55
|
-
ui = "$.getJSON(\"{{ site.baseurl }}/js/lunr-index.json\", function(index_json) {\nwindow.index = new elasticlunr.Index;\nwindow.store = index_json;\nindex.saveDocument(false);\nindex.setRef('lunr_id');"
|
56
|
-
# add fields to index
|
57
|
-
total_fields = total_fields(site_config)
|
58
|
-
total_fields.each { |field| ui += "\nindex.addField('#{field}');" }
|
59
|
-
# add docs
|
60
|
-
ui += "\n// add docs\nfor (i in store){index.addDoc(store[i]);}"
|
61
|
-
# gui
|
62
|
-
ui += "\n$('input#search').on('keyup', function() {\nvar results_div = $('#results');\nvar query = $(this).val();\nvar results = index.search(query, { boolean: 'AND', expand: true });\nresults_div.empty();\nif (results.length > 10) {\nresults_div.prepend(\"<p><small>Displaying 10 of \" + results.length + \" results.</small></p>\");\n}\nfor (var r in results.slice(0, 9)) {\nvar ref = results[r].ref;\nvar item = store[ref];"
|
63
|
-
# add fields as display vars
|
64
|
-
total_fields.each { |field| ui += "var #{field} = item.#{field};\n" }
|
65
|
-
ui += "var result = '<div class=\"result\"><b><a href=\"' + item.link + '\">' + title + '</a></b></p></div>';\nresults_div.append(result);\n}\n});\n});"
|
66
|
-
ui
|
67
|
-
end
|
68
|
-
|
69
|
-
def self.collections_to_index(site_config)
|
70
|
-
to_index = site_config['collections'].find_all { |c| c[1].key?('lunr_index') }
|
71
|
-
to_index.map! { |c| c[0] }
|
72
|
-
abort 'There are no valid collections to index.'.magenta if to_index.nil?
|
73
|
-
collections = []
|
74
|
-
to_index.each do |c|
|
75
|
-
collections << WaxTasks.collection(c, site_config)
|
76
|
-
end
|
77
|
-
collections
|
78
|
-
end
|
79
|
-
|
80
|
-
def self.total_fields(site_config)
|
81
|
-
total_fields = ['pid']
|
82
|
-
site_config['collections'].each do |c|
|
83
|
-
if c[1].key?('lunr_index') && c[1]['lunr_index'].key?('fields')
|
84
|
-
total_fields = total_fields.concat(c[1]['lunr_index']['fields'])
|
85
|
-
total_fields << 'content' if c[1]['lunr_index']['content']
|
86
|
-
end
|
87
|
-
end
|
88
|
-
total_fields.uniq
|
89
|
-
end
|
90
|
-
|
91
|
-
def self.page_hash(page, fields, get_content, count)
|
92
|
-
yaml = YAML.load_file(page)
|
93
|
-
hash = {
|
94
|
-
'lunr_id' => count,
|
95
|
-
'link' => "{{'" + yaml.fetch('permalink') + "' | relative_url }}",
|
96
|
-
'collection' => yaml.fetch('permalink').to_s[%r{^\/([^\/]*)\/}].tr('/', '')
|
97
|
-
}
|
98
|
-
fields.each { |f| hash[f] = rm_diacritics(thing2string(yaml[f])) }
|
99
|
-
hash['content'] = rm_diacritics(clean(File.read(page))) if get_content
|
100
|
-
hash
|
101
|
-
end
|
102
|
-
|
103
|
-
def self.clean(str)
|
104
|
-
str.gsub!(/\A---(.|\n)*?---/, '') # remove yaml front matter
|
105
|
-
str.gsub!(/{%(.*)%}/, '') # remove functional liquid
|
106
|
-
str.gsub!(%r{<\/?[^>]*>}, '') # remove html
|
107
|
-
str.gsub!('\\n', '') # remove newlines
|
108
|
-
str.gsub!(/\s+/, ' ') # remove extra space
|
109
|
-
str.tr!('"', "'") # replace double quotes with single
|
110
|
-
str
|
111
|
-
end
|
112
|
-
|
113
|
-
def self.rm_diacritics(str)
|
114
|
-
to_replace = 'ÀÁÂÃÄÅàáâãäåĀāĂ㥹ÇçĆćĈĉĊċČčÐðĎďĐđÈÉÊËèéêëĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħÌÍÎÏìíîïĨĩĪīĬĭĮįİıĴĵĶķĸĹĺĻļĽľĿŀŁłÑñŃńŅņŇňʼnŊŋÒÓÔÕÖØòóôõöøŌōŎŏŐőŔŕŖŗŘřŚśŜŝŞşŠšſŢţŤťŦŧÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųŴŵÝýÿŶŷŸŹźŻżŽž'
|
115
|
-
replaced_by = 'AAAAAAaaaaaaAaAaAaCcCcCcCcCcDdDdDdEEEEeeeeEeEeEeEeEeGgGgGgGgHhHhIIIIiiiiIiIiIiIiIiJjKkkLlLlLlLlLlNnNnNnNnnNnOOOOOOooooooOoOoOoRrRrRrSsSsSsSssTtTtTtUUUUuuuuUuUuUuUuUuUuWwYyyYyYZzZzZz'
|
116
|
-
str.tr(to_replace, replaced_by)
|
117
|
-
end
|
118
|
-
|
119
|
-
def self.thing2string(thing)
|
120
|
-
thing = thing.join(' || ') if thing.is_a?(Array)
|
121
|
-
thing.to_s
|
122
|
-
end
|
123
|
-
end
|
data/lib/modules/pagemaster.rb
DELETED
@@ -1,73 +0,0 @@
|
|
1
|
-
require 'colorized_string'
|
2
|
-
require 'csv'
|
3
|
-
require 'fileutils'
|
4
|
-
require 'json'
|
5
|
-
require 'yaml'
|
6
|
-
|
7
|
-
# module for generating markdown collection pages from csv/json/yaml records
|
8
|
-
module Pagemaster
|
9
|
-
def self.generate(collection, site_config)
|
10
|
-
records = ingest(collection[:source])
|
11
|
-
dir = target_dir(collection[:name], site_config)
|
12
|
-
permalink_style = WaxTasks.permalink_style(site_config)
|
13
|
-
|
14
|
-
completed = 0
|
15
|
-
skipped = 0
|
16
|
-
|
17
|
-
records.each_with_index do |item, index|
|
18
|
-
pagename = WaxTasks.slug(item.fetch('pid'))
|
19
|
-
pagepath = dir + '/' + pagename + '.md'
|
20
|
-
if File.exist?(pagepath)
|
21
|
-
puts "#{pagename}.md already exits. Skipping."
|
22
|
-
skipped += 1
|
23
|
-
else
|
24
|
-
item['permalink'] = '/' + collection[:name] + '/' + pagename + permalink_style
|
25
|
-
item['layout'] = collection[:layout]
|
26
|
-
item['order'] = padded_int(index, records.length) if collection[:keep_order]
|
27
|
-
File.open(pagepath, 'w') { |f| f.write(item.to_yaml.to_s + '---') }
|
28
|
-
completed += 1
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
puts "\n#{completed} pages were generated to #{dir} directory.".cyan
|
33
|
-
puts "\n#{skipped} pre-existing items were skipped.".cyan
|
34
|
-
rescue StandardError => e
|
35
|
-
abort "Failure after #{completed} pages, likely from missing pid.".magenta + "\n#{e}"
|
36
|
-
end
|
37
|
-
|
38
|
-
def self.ingest(source)
|
39
|
-
src = "_data/#{source}"
|
40
|
-
opts = { headers: true, encoding: 'utf-8' }
|
41
|
-
|
42
|
-
case File.extname(src)
|
43
|
-
when '.csv' then data = CSV.read(src, opts).map(&:to_hash)
|
44
|
-
when '.json' then data = JSON.parse(File.read(src))
|
45
|
-
when '.yml' then data = YAML.load_file(src)
|
46
|
-
else abort "Source #{src} must be .csv, .json, or .yml.".magenta
|
47
|
-
end
|
48
|
-
|
49
|
-
puts "Processing #{src}...."
|
50
|
-
validate(data)
|
51
|
-
rescue StandardError => e
|
52
|
-
abort "Cannot load #{src}. check for typos and rebuild.".magenta + "\n#{e}"
|
53
|
-
end
|
54
|
-
|
55
|
-
def self.padded_int(index, max_idx)
|
56
|
-
index.to_s.rjust(Math.log10(max_idx).to_i + 1, '0')
|
57
|
-
end
|
58
|
-
|
59
|
-
def self.validate(data)
|
60
|
-
pids = data.map { |d| d['pid'] }
|
61
|
-
duplicates = pids.detect { |p| pids.count(p) > 1 } || []
|
62
|
-
abort "Fix duplicate pids: \n#{duplicates}".magenta unless duplicates.empty?
|
63
|
-
data
|
64
|
-
end
|
65
|
-
|
66
|
-
def self.target_dir(collection_name, site_config)
|
67
|
-
collections_dir = site_config['collections_dir'].to_s
|
68
|
-
dir = collections_dir.empty? ? '_' : collections_dir + '/_'
|
69
|
-
dir += collection_name
|
70
|
-
FileUtils.mkdir_p(dir)
|
71
|
-
dir
|
72
|
-
end
|
73
|
-
end
|
data/lib/tasks/iiif.rake
DELETED
@@ -1,11 +0,0 @@
|
|
1
|
-
require 'colorized_string'
|
2
|
-
require 'wax_tasks'
|
3
|
-
|
4
|
-
namespace :wax do
|
5
|
-
task :iiif do
|
6
|
-
args = ARGV.drop(1).each { |a| task a.to_sym }
|
7
|
-
abort "Please specify a collections after 'wax:iiif'".magenta if args.empty?
|
8
|
-
site_config = WaxTasks.site_config
|
9
|
-
args.each { |collection_name| WaxTasks.iiif(collection_name, site_config) }
|
10
|
-
end
|
11
|
-
end
|
data/lib/tasks/jspackage.rake
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'colorized_string'
|
2
|
-
require 'json'
|
3
|
-
|
4
|
-
require 'wax_tasks'
|
5
|
-
|
6
|
-
namespace :wax do
|
7
|
-
desc 'write a simple package.json'
|
8
|
-
task :jspackage do
|
9
|
-
site_config = WaxTasks.site_config
|
10
|
-
package = {
|
11
|
-
'name' => site_config['title'],
|
12
|
-
'version' => '1.0.0',
|
13
|
-
'description' => site_config['description'],
|
14
|
-
'dependencies' => {}
|
15
|
-
}
|
16
|
-
names = []
|
17
|
-
site_config['js'].each do |dependency|
|
18
|
-
name = dependency[0]
|
19
|
-
names << name
|
20
|
-
version = dependency[1]['version']
|
21
|
-
package['dependencies'][name] = '^' + version
|
22
|
-
end
|
23
|
-
File.open('package.json', 'w') { |file| file.write(package.to_json) }
|
24
|
-
puts "Writing #{names} to simple package.json.".cyan
|
25
|
-
end
|
26
|
-
end
|
data/lib/tasks/pagemaster.rake
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
require 'colorized_string'
|
2
|
-
require 'wax_tasks'
|
3
|
-
|
4
|
-
namespace :wax do
|
5
|
-
desc 'generate collection md pages from yaml or csv data source'
|
6
|
-
task :pagemaster do
|
7
|
-
args = ARGV.drop(1).each { |a| task a.to_sym }
|
8
|
-
abort "Please specify a collection after 'wax:pagemaster'".magenta if args.empty?
|
9
|
-
args.each do |collection_name|
|
10
|
-
site_config = WaxTasks.site_config
|
11
|
-
WaxTasks.pagemaster(collection_name, site_config)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
data/lib/tasks/push_gh.rake
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
require 'colorized_string'
|
2
|
-
require 'jekyll'
|
3
|
-
require 'wax_tasks'
|
4
|
-
|
5
|
-
namespace :wax do
|
6
|
-
namespace :push do
|
7
|
-
desc 'build site with gh-baseurl and push to gh-pages branch'
|
8
|
-
task :gh do
|
9
|
-
if ENV['CI']
|
10
|
-
REPO_SLUG = ENV['TRAVIS_REPO_SLUG']
|
11
|
-
USER = REPO_SLUG.split('/')[0]
|
12
|
-
REPO_NAME = '1' + REPO_SLUG.split('/')[1]
|
13
|
-
TOKEN = ENV['ACCESS_TOKEN']
|
14
|
-
COMMIT_MSG = "Site updated via #{ENV['TRAVIS_COMMIT']}".freeze
|
15
|
-
ORIGIN = "https://#{USER}:#{TOKEN}@github.com/#{REPO_SLUG}.git".freeze
|
16
|
-
puts "Deploying to gh-oages branch from Travis as #{USER}"
|
17
|
-
else
|
18
|
-
ORIGIN = `git config --get remote.origin.url`.freeze
|
19
|
-
COMMIT_MSG = "Site updated at #{Time.now.utc}".freeze
|
20
|
-
puts 'Deploying to gh-pages branch from local task'
|
21
|
-
end
|
22
|
-
config = WaxTasks.site_config
|
23
|
-
FileUtils.rm_rf('_site')
|
24
|
-
|
25
|
-
opts = {
|
26
|
-
'source' => '.',
|
27
|
-
'destination' => '_site',
|
28
|
-
'config' => '_config.yml',
|
29
|
-
'baseurl' => config['gh-baseurl'] || REPO_NAME.to_s
|
30
|
-
}
|
31
|
-
|
32
|
-
Jekyll::Site.new(Jekyll.configuration(opts)).process
|
33
|
-
Dir.mktmpdir do |tmp|
|
34
|
-
FileUtils.cp_r '_site/.', tmp
|
35
|
-
Dir.chdir tmp
|
36
|
-
system 'git init'
|
37
|
-
system "git add . && git commit -m '#{COMMIT_MSG}'"
|
38
|
-
system "git remote add origin #{ORIGIN}"
|
39
|
-
system 'git push origin master:refs/heads/gh-pages --force'
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
data/lib/tasks/push_static.rake
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
require 'wax_tasks'
|
2
|
-
|
3
|
-
namespace :wax do
|
4
|
-
namespace :push do
|
5
|
-
desc 'push built site to s3 branch'
|
6
|
-
task :static do
|
7
|
-
if ENV['CI']
|
8
|
-
puts "Build type=#{ENV['TRAVIS_EVENT_TYPE']}"
|
9
|
-
unless ENV['TRAVIS_BRANCH'] == 'master'
|
10
|
-
puts "Skipping deploy from branch #{ENV['TRAVIS_BRANCH']}"
|
11
|
-
next
|
12
|
-
end
|
13
|
-
REPO_SLUG = ENV['TRAVIS_REPO_SLUG']
|
14
|
-
USER = REPO_SLUG.split('/')[0]
|
15
|
-
TOKEN = ENV['ACCESS_TOKEN']
|
16
|
-
COMMIT_MSG = "Site updated via #{ENV['TRAVIS_COMMIT']}".freeze
|
17
|
-
ORIGIN = "https://#{USER}:#{TOKEN}@github.com/#{REPO_SLUG}.git".freeze
|
18
|
-
puts "Deploying to s3 branch from Travis as #{USER}"
|
19
|
-
else
|
20
|
-
ORIGIN = `git config --get remote.origin.url`.freeze
|
21
|
-
COMMIT_MSG = "Site updated at #{Time.now.utc}".freeze
|
22
|
-
puts 'Deploying to s3 branch from local task'
|
23
|
-
end
|
24
|
-
|
25
|
-
Dir.mktmpdir do |tmp|
|
26
|
-
FileUtils.cp_r '_site/.', tmp
|
27
|
-
Dir.chdir tmp
|
28
|
-
system 'git init'
|
29
|
-
system "git add . && git commit -m '#{COMMIT_MSG}'"
|
30
|
-
system "git remote add origin #{ORIGIN}"
|
31
|
-
system 'git push origin master:refs/heads/s3 --force'
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|