wax_tasks 0.0.47 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2eb86783ae6e09758e23af201aad5907f68d0f7ee0034d46bd168830264d9a74
4
- data.tar.gz: a1261162881c112780ff5d342cc265389b2bffdc121952d123b1176f36dc31ac
3
+ metadata.gz: 5f996fd8c491dac2f46d075b4b28dc9064f6f4b4f74005e41da3a624080c7aa4
4
+ data.tar.gz: bd3acb6ae9045c3d89c226d4fd6600b8e8349ee931a2cd9df9232761f18eea33
5
5
  SHA512:
6
- metadata.gz: c6c7e4e7874f80c9073b51865ab46f1c39d01cc3993531df218d17f87badb2d242a36aa9346a7a7e237c664ccf9bfb6b95f180fd92f0ee230486eafc7e6058d4
7
- data.tar.gz: ce6b90ea4d1cbf605e162a797c62d2aee01d15eeffdc980989661f9c68f746d1fe35064abd00c3fe70649520391630d41a8ae76a90899be66bdc0e1cd40ef375
6
+ metadata.gz: 310e898680e1598c0e58926e0bb3faf8b6eb678fa853fd133940ad6220441fc05e9a938330fe1a9e286b8ffa347480d115e1077f9a3bc738970669623ce01406
7
+ data.tar.gz: 875d638a7d3cefad2fa77793ed458ecfd4392e5bb7c278de2fb6b931df81925d5ccb7041f50f0120617aea2849a559379944b8d2920dae46a0ceed55781b2388
data/Gemfile CHANGED
@@ -1,2 +1,4 @@
1
1
  source 'https://rubygems.org'
2
2
  gemspec
3
+
4
+ gem 'simplecov', require: false
data/lib/modules/iiif.rb CHANGED
@@ -1,45 +1,35 @@
1
+ require 'colorized_string'
1
2
  require 'json'
2
3
  require 'wax_iiif'
3
4
 
4
5
  # module for generating IIIF derivatives + json from local images
5
6
  module Iiif
6
- include FileUtils
7
-
8
- def self.ingest_collections(args, site_config)
9
- mkdir_p('./iiif', :verbose => false)
10
- all_records = []
11
- id_counter = 0
12
- build_opts = Iiif.build_options(site_config)
13
- args.each do |a|
14
- id_counter += 1
15
- inpath = './_data/iiif/' + a
16
- abort "Source path '#{inpath}' does not exist. Exiting.".magenta unless Dir.exist?(inpath)
17
- collection_records = make_records(a, inpath)
18
- all_records.concat collection_records
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
19
11
  end
20
- builder = IiifS3::Builder.new(build_opts)
21
- builder.load(all_records)
22
- builder.process_data
23
- end
24
-
25
- def self.build_options(site_config)
26
- {
27
- :base_url => site_config['baseurl'] + '/iiif',
28
- :output_dir => './iiif',
29
- :verbose => true
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 }
30
18
  }
19
+ builder = IiifS3::Builder.new(build_opts)
20
+ builder.load(make_records(name, inpath))
21
+ builder.process_data(true)
31
22
  end
32
23
 
33
- def self.make_records(arg, inpath)
24
+ def self.make_records(name, inpath)
34
25
  counter = 1
35
26
  records = []
36
- imagefiles = Dir[inpath + '/*'].sort!
37
- imagefiles.each do |imagefile|
27
+ Dir["#{inpath}/*"].sort!.each do |imagefile|
38
28
  basename = File.basename(imagefile, '.*').to_s
39
29
  record_opts = {
40
- :id => arg + '-' + basename,
41
- :path => imagefile,
42
- :label => arg + ' - ' + basename
30
+ id: basename,
31
+ path: imagefile,
32
+ label: "#{name} #{basename}"
43
33
  }
44
34
  counter += 1
45
35
  records << IiifS3::ImageRecord.new(record_opts)
data/lib/modules/lunr.rb CHANGED
@@ -1,34 +1,33 @@
1
- include FileUtils
1
+ require 'colorized_string'
2
2
  require 'json'
3
3
 
4
4
  # module for generating elasticlunr index and default jquery ui
5
5
  module Lunr
6
- def self.total_fields(collections)
7
- total_fields = ['pid']
8
- collections.each do |c|
9
- total_fields = total_fields.concat(c[1]['lunr_index']['fields'])
10
- total_fields << 'content' if c[1]['lunr_index']['content']
11
- end
12
- total_fields.uniq
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
13
  end
14
14
 
15
- def self.collections(site_config)
16
- site_config['collections'].find_all { |c| c[1].key?('lunr_index') && c[1]['lunr_index'].key?('fields') }
17
- end
15
+ def self.index(site_config)
16
+ collections = collections_to_index(site_config)
17
+ collections_dir = site_config['collections_dir'].to_s
18
18
 
19
- def self.index(cdir, collections)
20
19
  index = []
21
20
  count = 0
22
- abort 'There are no valid collections to index.'.magenta if collections.nil?
23
21
 
24
- collections.each do |c|
25
- dir = cdir + '_' + c[0]
26
- fields = c[1]['lunr_index']['fields'].uniq
22
+ collections.each do |collection|
23
+ dir = "_#{collection[:name]}"
24
+ dir.prepend("#{collections_dir}/") unless collections_dir.empty?
27
25
  pages = Dir.glob(dir + '/*.md')
28
- get_content = c[1]['lunr_index']['content']
26
+ get_content = collection[:lunr_index].key?('content') ? collection[:lunr_index]['content'] : false
27
+ fields = collection[:lunr_index]['fields']
29
28
  # catch
30
- abort "There are no markdown pages in directory '#{dir}'".magenta if pages.empty?
31
- abort "There are no fields specified for #{c[0]}.".magenta if fields.empty?
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?
32
31
  puts "Loading #{pages.length} pages from #{dir}"
33
32
  # index each page in collection
34
33
  pages.each do |page|
@@ -39,55 +38,72 @@ module Lunr
39
38
  JSON.pretty_generate(index)
40
39
  end
41
40
 
42
- def self.page_hash(page, fields, get_content, count)
43
- yaml = YAML.load_file(page)
44
- hash = {
45
- 'lunr_id' => count,
46
- 'link' => "{{'" + yaml.fetch('permalink') + "' | relative_url }}"
47
- }
48
- fields.each { |f| hash[f] = rm_diacritics(thing2string(yaml[f])) }
49
- hash['content'] = rm_diacritics(clean(File.read(page))) if get_content
50
- hash
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
51
  end
52
52
 
53
- def self.ui(total_fields)
53
+ def self.ui(site_config)
54
54
  # set up index
55
- ui_string = "$.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');"
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
56
  # add fields to index
57
- total_fields.each { |field| ui_string += "\nindex.addField('#{field}');" }
57
+ total_fields = total_fields(site_config)
58
+ total_fields.each { |field| ui += "\nindex.addField('#{field}');" }
58
59
  # add docs
59
- ui_string += "\n// add docs\nfor (i in store){index.addDoc(store[i]);}"
60
+ ui += "\n// add docs\nfor (i in store){index.addDoc(store[i]);}"
60
61
  # gui
61
- ui_string += "\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];"
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];"
62
63
  # add fields as display vars
63
- total_fields.each { |field| ui_string += "var #{field} = item.#{field};\n" }
64
- ui_string += "var result = '<div class=\"result\"><b><a href=\"' + item.link + '\">' + title + '</a></b></p></div>';\nresults_div.append(result);\n}\n});\n});"
65
- ui_string
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
66
67
  end
67
68
 
68
- def self.write_index(index)
69
- mkdir_p('js')
70
- index = "---\nlayout: none\n---\n" + index
71
- path = 'js/lunr-index.json'
72
- File.open(path, 'w') { |file| file.write(index) }
73
- puts "Writing lunr index to #{path}".cyan
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
74
78
  end
75
79
 
76
- def self.write_ui(ui)
77
- ui = "---\nlayout: none\n---\n" + ui
78
- path = 'js/lunr-ui.js'
79
- if File.exist?(path)
80
- puts "Lunr UI already exists at #{path}. Skipping".cyan
81
- else
82
- File.open(path, 'w') { |file| file.write(ui) }
83
- puts "Writing lunr ui to #{path}".cyan
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
84
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
85
101
  end
86
102
 
87
103
  def self.clean(str)
88
104
  str.gsub!(/\A---(.|\n)*?---/, '') # remove yaml front matter
89
105
  str.gsub!(/{%(.*)%}/, '') # remove functional liquid
90
- str.gsub!(/<\/?[^>]*>/, '') # remove html
106
+ str.gsub!(%r{<\/?[^>]*>}, '') # remove html
91
107
  str.gsub!('\\n', '') # remove newlines
92
108
  str.gsub!(/\s+/, ' ') # remove extra space
93
109
  str.tr!('"', "'") # replace double quotes with single
@@ -1,68 +1,73 @@
1
+ require 'colorized_string'
2
+ require 'csv'
3
+ require 'fileutils'
1
4
  require 'json'
2
5
  require 'yaml'
3
- require 'csv'
4
6
 
5
7
  # module for generating markdown collection pages from csv/json/yaml records
6
8
  module Pagemaster
7
- include FileUtils
8
-
9
- def self.valid_config(name, site_config)
10
- abort "Cannot find #{name} in _config.yml. Exiting.".magenta unless site_config['collections'].key?(name)
11
- collection_config = site_config['collections'][name]
12
- abort "Cannot find source for '#{name}'. Exiting.".magenta unless collection_config['source']
13
- abort "Cannot find layout for '#{name}'. Exiting.".magenta unless collection_config['layout']
14
- abort "Cannot find the file _data/#{collection_config['source']}.".magenta unless File.file?('_data/' + collection_config['source'])
15
- collection_config
16
- end
17
-
18
- def self.ingest(src)
19
- src = "_data/#{src}"
20
- case File.extname(src)
21
- when '.csv' then data = CSV.read(src, :headers => true, :encoding => 'utf-8').map(&:to_hash)
22
- when '.json' then data = JSON.parse(File.read(src))
23
- when '.yml' then data = YAML.load_file(src)
24
- else abort "File type for #{src} must be .csv, .json, or .yml. Please fix and rerun."
25
- end
26
- puts "Processing #{src}...."
27
- detect_duplicates(data)
28
- data
29
- rescue StandardError
30
- puts "Cannot load #{src}. check for typos and rebuild.".magenta
31
- end
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)
32
13
 
33
- def self.generate_pages(data, name, layout, cdir, order, perma)
34
- dir = cdir + '_' + name
35
- mkdir_p(dir)
36
14
  completed = 0
37
15
  skipped = 0
38
- data.each_with_index do |item, index|
16
+
17
+ records.each_with_index do |item, index|
39
18
  pagename = WaxTasks.slug(item.fetch('pid'))
40
19
  pagepath = dir + '/' + pagename + '.md'
41
20
  if File.exist?(pagepath)
42
21
  puts "#{pagename}.md already exits. Skipping."
43
22
  skipped += 1
44
23
  else
45
- item['permalink'] = '/' + name + '/' + pagename + perma
46
- item['layout'] = layout
47
- item['order'] = padded_int(index, data.length) if order
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]
48
27
  File.open(pagepath, 'w') { |f| f.write(item.to_yaml.to_s + '---') }
49
28
  completed += 1
50
29
  end
51
30
  end
31
+
52
32
  puts "\n#{completed} pages were generated to #{dir} directory.".cyan
53
33
  puts "\n#{skipped} pre-existing items were skipped.".cyan
54
- rescue StandardError
55
- abort "#{completed} pages were generated before failure, most likely a record is missing a valid 'pid' value.".magenta
34
+ rescue StandardError => e
35
+ abort "Failure after #{completed} pages, likely from missing pid.".magenta + "\n#{e}"
56
36
  end
57
37
 
58
- def self.detect_duplicates(data)
59
- pids = []
60
- data.each { |d| pids << d['pid'] }
61
- duplicates = pids.detect { |p| pids.count(p) > 1 } || []
62
- abort "\nYour collection has the following duplicate pids: \n#{duplicates}".magenta unless duplicates.empty?
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}"
63
53
  end
64
54
 
65
55
  def self.padded_int(index, max_idx)
66
56
  index.to_s.rjust(Math.log10(max_idx).to_i + 1, '0')
67
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
68
73
  end
data/lib/tasks/iiif.rake CHANGED
@@ -1,12 +1,11 @@
1
- include FileUtils
1
+ require 'colorized_string'
2
2
  require 'wax_tasks'
3
- require 'wax_iiif'
4
3
 
5
4
  namespace :wax do
6
5
  task :iiif do
7
6
  args = ARGV.drop(1).each { |a| task a.to_sym }
8
- site_config = WaxTasks.config
9
- abort "You must specify a collections after 'bundle exec rake wax:iiif'.".magenta if args.empty?
10
- WaxTasks.iiif(args, site_config)
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) }
11
10
  end
12
11
  end
@@ -1,10 +1,12 @@
1
- require 'wax_tasks'
1
+ require 'colorized_string'
2
2
  require 'json'
3
3
 
4
+ require 'wax_tasks'
5
+
4
6
  namespace :wax do
5
7
  desc 'write a simple package.json'
6
8
  task :jspackage do
7
- site_config = WaxTasks.config
9
+ site_config = WaxTasks.site_config
8
10
  package = {
9
11
  'name' => site_config['title'],
10
12
  'version' => '1.0.0',
data/lib/tasks/lunr.rake CHANGED
@@ -3,7 +3,7 @@ require 'wax_tasks'
3
3
  namespace :wax do
4
4
  desc 'build lunr search index'
5
5
  task :lunr do
6
- site_config = WaxTasks.config
6
+ site_config = WaxTasks.site_config
7
7
  WaxTasks.lunr(site_config)
8
8
  end
9
9
  end
@@ -1,14 +1,14 @@
1
+ require 'colorized_string'
1
2
  require 'wax_tasks'
2
3
 
3
4
  namespace :wax do
4
5
  desc 'generate collection md pages from yaml or csv data source'
5
6
  task :pagemaster do
6
7
  args = ARGV.drop(1).each { |a| task a.to_sym }
7
- site_config = WaxTasks.config
8
- if args.empty?
9
- abort "You must specify one or more collections after 'rake wax:pagemaster' to generate.".magenta
10
- else
11
- args.each { |a| WaxTasks.pagemaster(a, site_config) }
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
12
  end
13
13
  end
14
14
  end
@@ -1,6 +1,6 @@
1
- include FileUtils
2
- require 'wax_tasks'
1
+ require 'colorized_string'
3
2
  require 'jekyll'
3
+ require 'wax_tasks'
4
4
 
5
5
  namespace :wax do
6
6
  namespace :push do
@@ -19,21 +19,19 @@ namespace :wax do
19
19
  COMMIT_MSG = "Site updated at #{Time.now.utc}".freeze
20
20
  puts 'Deploying to gh-pages branch from local task'
21
21
  end
22
- config = read_config
23
- rm_rf('_site')
24
-
25
- baseurl = config['gh-baseurl'] || REPO_NAME.to_s
22
+ config = WaxTasks.site_config
23
+ FileUtils.rm_rf('_site')
26
24
 
27
25
  opts = {
28
26
  'source' => '.',
29
27
  'destination' => '_site',
30
28
  'config' => '_config.yml',
31
- 'baseurl' => baseurl
29
+ 'baseurl' => config['gh-baseurl'] || REPO_NAME.to_s
32
30
  }
33
31
 
34
32
  Jekyll::Site.new(Jekyll.configuration(opts)).process
35
33
  Dir.mktmpdir do |tmp|
36
- cp_r '_site/.', tmp
34
+ FileUtils.cp_r '_site/.', tmp
37
35
  Dir.chdir tmp
38
36
  system 'git init'
39
37
  system "git add . && git commit -m '#{COMMIT_MSG}'"
@@ -1,11 +1,15 @@
1
- include FileUtils
2
1
  require 'wax_tasks'
3
2
 
4
3
  namespace :wax do
5
4
  namespace :push do
6
5
  desc 'push built site to s3 branch'
7
- task :s3 do
6
+ task :static do
8
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
9
13
  REPO_SLUG = ENV['TRAVIS_REPO_SLUG']
10
14
  USER = REPO_SLUG.split('/')[0]
11
15
  TOKEN = ENV['ACCESS_TOKEN']
@@ -19,7 +23,7 @@ namespace :wax do
19
23
  end
20
24
 
21
25
  Dir.mktmpdir do |tmp|
22
- cp_r '_site/.', tmp
26
+ FileUtils.cp_r '_site/.', tmp
23
27
  Dir.chdir tmp
24
28
  system 'git init'
25
29
  system "git add . && git commit -m '#{COMMIT_MSG}'"
data/lib/tasks/test.rake CHANGED
@@ -1,23 +1,19 @@
1
- require 'wax_tasks'
1
+ require 'colorized_string'
2
2
  require 'html-proofer'
3
3
 
4
4
  namespace :wax do
5
5
  desc 'run htmlproofer, rspec if exists'
6
6
  task :test do
7
7
  opts = {
8
- :check_external_hash => true,
9
- :allow_hash_href => true,
10
- :check_html => true,
11
- :disable_external => true,
12
- :empty_alt_ignore => true,
13
- :only_4xx => true,
14
- :verbose => true
8
+ check_external_hash: true,
9
+ allow_hash_href: true,
10
+ check_html: true,
11
+ disable_external: true,
12
+ empty_alt_ignore: true,
13
+ only_4xx: true,
14
+ verbose: true
15
15
  }
16
- begin
17
- HTMLProofer.check_directory('./_site', opts).run
18
- rescue StandardError
19
- puts('Failed to run wax:texts. Make sure you are using `bundle exec`.').magenta
20
- end
16
+ HTMLProofer.check_directory('./_site', opts).run
21
17
  sh 'bundle exec rspec' if File.exist?('.rspec')
22
18
  end
23
19
  end
data/lib/wax_tasks.rb CHANGED
@@ -1,43 +1,44 @@
1
+ require 'yaml'
2
+
1
3
  require_relative 'modules/iiif'
2
4
  require_relative 'modules/lunr'
3
5
  require_relative 'modules/pagemaster'
4
6
 
5
- require 'yaml'
6
- require 'wax_iiif'
7
-
8
7
  # umbrella module for registering task modules
9
8
  module WaxTasks
10
- def self.pagemaster(name, site_config)
11
- collection_config = Pagemaster.valid_config(name, site_config)
12
-
13
- src = collection_config['source']
14
- data = Pagemaster.ingest(src)
15
- layout = collection_config.fetch('layout').to_s
16
- perma = config['permalink'] == 'pretty' ? '/' : '.html'
17
- cdir = site_config['collections_dir'].to_s
18
- order = collection_config.key?('keep_order') ? collection_config.fetch('keep_order') : false
19
-
20
- Pagemaster.generate_pages(data, name, layout, cdir, order, perma)
9
+ def self.pagemaster(collection_name, site_config)
10
+ collection = collection(collection_name, site_config)
11
+ Pagemaster.generate(collection, site_config)
21
12
  end
22
13
 
23
14
  def self.lunr(site_config)
24
- cdir = site_config['collections_dir'].to_s
25
- collections = Lunr.collections(site_config)
26
- total_fields = Lunr.total_fields(collections)
15
+ Lunr.write_index(site_config)
16
+ Lunr.write_ui(site_config)
17
+ end
27
18
 
28
- index = Lunr.index(cdir, collections)
29
- ui = Lunr.ui(total_fields)
19
+ def self.iiif(collection_name, site_config)
20
+ Iiif.process(collection_name, site_config)
21
+ end
30
22
 
31
- Lunr.write_index(index)
32
- Lunr.write_ui(ui)
23
+ def self.site_config
24
+ YAML.load_file('_config.yml')
33
25
  end
34
26
 
35
- def self.iiif(args, site_config)
36
- Iiif.ingest_collections(args, site_config)
27
+ def self.permalink_style(site_config)
28
+ site_config['permalink'] == 'pretty' ? '/' : '.html'
37
29
  end
38
30
 
39
- def self.config
40
- YAML.load_file('_config.yml')
31
+ def self.collection(collection_name, site_config)
32
+ conf = site_config.fetch('collections').fetch(collection_name)
33
+ {
34
+ name: collection_name,
35
+ source: conf['source'],
36
+ layout: conf['layout'],
37
+ keep_order: conf.key?('keep_order') ? conf['keep_order'] : false,
38
+ lunr_index: conf['lunr_index']
39
+ }
40
+ rescue StandardError => e
41
+ abort "Collection '#{collection_name}' is not properly configured.".magenta + "\n#{e}"
41
42
  end
42
43
 
43
44
  def self.slug(str)
data/spec/spec_helper.rb CHANGED
@@ -1,4 +1,5 @@
1
- require 'fileutils'
1
+ require 'simplecov'
2
+ SimpleCov.start
2
3
 
3
4
  require_relative 'fake/data'
4
5
  require_relative 'fake/site'
@@ -6,59 +7,123 @@ require_relative 'fake/site'
6
7
  $LOAD_PATH.unshift File.expand_path('../lib', __dir__)
7
8
  require 'wax_tasks'
8
9
 
9
- Fake.site
10
- Fake.data
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
+ }
11
30
 
12
31
  describe 'wax:pagemaster' do
13
- config = WaxTasks.config
14
- args = config['collections'].map { |c| c[0] }
15
- system("bundle exec rake wax:pagemaster #{args.join(' ')} > /dev/null")
16
- it 'generates directories' do
17
- args.each { |a| expect(Dir.exist?('_' + a)) }
32
+ args = site_config['collections'].map { |c| c[0] }
33
+ args.each do |collection_name|
34
+ silence_output { WaxTasks.pagemaster(collection_name, site_config) }
35
+ end
36
+ it 'generates pages to the correct directories' do
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
18
55
  end
19
- it 'generates pages' do
20
- args.each { |a| expect(Dir.glob("_#{a}/*.md")) }
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
21
66
  end
22
67
  end
23
68
 
24
69
  describe 'wax:lunr' do
25
- system('bundle exec rake wax:lunr > /dev/null')
70
+ silence_output { WaxTasks.lunr(site_config) }
26
71
  it 'generates a lunr index' do
27
- index = File.open('js/lunr-index.json', 'r').read
28
- expect(index.length > 1000)
72
+ index = File.open('./js/lunr-index.json', 'r').read
73
+ expect(index.length).to be > 1000
29
74
  end
30
-
31
75
  it 'generates a lunr ui' do
32
- ui = File.open('js/lunr-ui.js', 'r').read
33
- expect(ui.length > 100)
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
34
83
  end
35
84
  end
36
85
 
37
86
  describe 'wax:iiif' do
38
- site_config = WaxTasks.config
39
- args = site_config['collections'].map { |c| c[0] }
87
+ collection_name = site_config['collections'].first[0]
88
+ images = Dir.glob('./_data/iiif/*.jpg')
89
+ iiif_src_dir = "./_data/iiif/#{collection_name}"
90
+
91
+ FileUtils.mkdir_p(iiif_src_dir)
92
+ images.each { |f| FileUtils.cp(File.expand_path(f), iiif_src_dir) }
93
+ silence_output { WaxTasks.iiif(collection_name, site_config) }
40
94
 
41
- it 'generates iiif tiles and data' do
42
- images = Dir.glob('./_data/iiif/*.jpg')
43
- site_config['collections'].each do |c|
44
- new_dir = './_data/iiif/' + c[0]
45
- mkdir_p(new_dir)
46
- images.each { |f| cp(File.expand_path(f), new_dir) }
95
+ it 'generates collections' do
96
+ expect(File.exist?("./iiif/#{collection_name}/collection/top.json")).to be true
97
+ end
98
+ it 'generates manifests' do
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)
47
113
  end
48
- rm_r(images)
49
- system("bundle exec rake wax:iiif #{args.first} > /dev/null")
50
- args.each { |a| expect(Dir.exist?('iiif/images' + a)) }
51
114
  end
52
115
  end
53
116
 
54
117
  describe 'jekyll' do
55
118
  it 'builds successfully' do
56
- Bundler.with_clean_env { system('bundle exec jekyll build > /dev/null') }
119
+ silence_output { Bundler.with_clean_env { system('bundle exec jekyll build') } }
57
120
  end
58
121
  end
59
122
 
60
123
  describe 'wax:jspackage' do
61
- system('bundle exec rake wax:jspackage > /dev/null')
124
+ before(:all) do
125
+ silence_output { system('bundle exec rake wax:jspackage') }
126
+ end
62
127
  it 'writes a package.json file' do
63
128
  package = File.open('package.json', 'r').read
64
129
  expect(package.length > 90)
@@ -66,5 +131,7 @@ describe 'wax:jspackage' do
66
131
  end
67
132
 
68
133
  describe 'wax:test' do
69
- it 'passes html-proofer' do system('bundle exec rake wax:test > /dev/null') end
134
+ it 'passes html-proofer' do
135
+ silence_output { system('bundle exec rake wax:test') }
136
+ end
70
137
  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.0.47
4
+ version: 0.1.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-03-28 00:00:00.000000000 Z
11
+ date: 2018-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize
@@ -70,16 +70,16 @@ dependencies:
70
70
  name: wax_iiif
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: 0.0.2
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: 0.0.2
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: bundler
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -152,11 +152,11 @@ files:
152
152
  - lib/tasks/lunr.rake
153
153
  - lib/tasks/pagemaster.rake
154
154
  - lib/tasks/push_gh.rake
155
- - lib/tasks/push_s3.rake
155
+ - lib/tasks/push_static.rake
156
156
  - lib/tasks/test.rake
157
157
  - lib/wax_tasks.rb
158
158
  - spec/spec_helper.rb
159
- homepage: https://github.com/mnyrop/wax_tasks
159
+ homepage: https://github.com/minicomp/wax_tasks
160
160
  licenses:
161
161
  - MIT
162
162
  metadata: {}
@@ -174,7 +174,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
174
174
  - - ">="
175
175
  - !ruby/object:Gem::Version
176
176
  version: '0'
177
- requirements: []
177
+ requirements:
178
+ - imagemagick
178
179
  rubyforge_project:
179
180
  rubygems_version: 2.7.6
180
181
  signing_key: