wax_tasks 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,132 @@
1
+ module WaxTasks
2
+ # Class for running the Rake tasks in ./tasks
3
+ # TaskRunner is responsible for loading and parsing the site config
4
+ # from `_config.yml`, which can be overridden with .override(opts)
5
+ #
6
+ # @attr site [Hash] main variables from site config normalized + symbolized
7
+ class TaskRunner
8
+ attr_reader :site
9
+
10
+ # Creates a new TaskRunner with a config hash or default config file
11
+ #
12
+ # @param env [String] test/prod. only affects Branch module
13
+ # @param config [Hash] optional hash, should mirror a parsed _config.yml
14
+ # @example give a custom config
15
+ # config = {
16
+ # title: 'custom title',
17
+ # url: 'custom.url',
18
+ # collections: {...}
19
+ # }
20
+ # WaxTasks::TaskRunner.new(config)
21
+ # @example use default config from file
22
+ # WaxTasks::TaskRunner.new
23
+ def initialize(config = {}, env = 'prod')
24
+ config = YAML.load_file(DEFAULT_CONFIG).symbolize_keys if config.empty?
25
+ @site = {
26
+ env: env,
27
+ title: config.fetch(:title, ''),
28
+ url: config.fetch(:url, ''),
29
+ baseurl: config.fetch(:baseurl, ''),
30
+ repo_name: config.fetch(:repo_name, ''),
31
+ source_dir: config.fetch(:source, nil),
32
+ collections_dir: config.fetch(:collections_dir, nil),
33
+ collections: config.fetch(:collections, {}),
34
+ js: config.fetch(:js, false),
35
+ permalink: Utils.construct_permalink(config)
36
+ }
37
+ rescue StandardError => e
38
+ raise Error::InvalidSiteConfig, "Could not load _config.yml. => #{e}"
39
+ end
40
+
41
+ # Overrides a specific part of @site
42
+ #
43
+ # @param opts [Hash] part of the site config to be overwritten
44
+ # @example override title + url
45
+ # runner = WaxTasks::TaskRunner.new
46
+ # runner.override({ title: 'my new title', url: 'my-new.url' })
47
+ def override(opts)
48
+ opts.each { |k, v| @site[k] = v }
49
+ @site[:permalink] = Utils.construct_permalink(opts)
50
+ self
51
+ end
52
+
53
+ # Given an array of command line arguments `args`,
54
+ # creates a PagemasterCollection for each and generates markdown
55
+ # pages from its specified data `source` file
56
+ #
57
+ # @param args [Array] the arguments/collection names from wax:pagemaster
58
+ # @return [Nil]
59
+ def pagemaster(args)
60
+ args.each do |name|
61
+ PagemasterCollection.new(name, @site).generate_pages
62
+ end
63
+ end
64
+
65
+ # Creates a LunrCollection for each collection
66
+ # that has lunr_index parameters in the site config
67
+ # and generates a lunr-index.json file from the collection data
68
+ #
69
+ # @param generate_ui [Boolean] whether/not to generate a default lunr UI
70
+ # @return [Nil]
71
+ def lunr(generate_ui = false)
72
+ lunr_collections = Utils.get_lunr_collections(@site)
73
+ lunr_collections.map! { |name| LunrCollection.new(name, @site) }
74
+
75
+ index = LunrIndex.new(lunr_collections)
76
+ index_path = Utils.make_path(@site[:source_dir], LUNR_INDEX_PATH)
77
+
78
+ FileUtils.mkdir_p(File.dirname(index_path))
79
+ File.open(index_path, 'w') { |f| f.write(index.to_s) }
80
+
81
+ ui_path = Utils.make_path(@site[:source_dir], LUNR_UI_PATH)
82
+ File.open(ui_path, 'w') { |f| f.write(index.default_ui) } if generate_ui
83
+ end
84
+
85
+ # Given an array of command line arguments `args`,
86
+ # creates a IiifCollection for each and generates iiif
87
+ # derivative images, manifests, etc. from source image files
88
+ #
89
+ # @param args [Array] the arguments/collection names from wax:pagemaster
90
+ # @return [Nil]
91
+ def iiif(args)
92
+ args.each do |name|
93
+ IiifCollection.new(name, @site).process
94
+ end
95
+ end
96
+
97
+ # Finds the JS dependencies listed in site config and
98
+ # writes them to a package.json file
99
+ # in orderto easily track / monitor / update them
100
+ #
101
+ # @return [Nil]
102
+ def js_package
103
+ names = []
104
+ package = {
105
+ 'name' => site[:title],
106
+ 'version' => '1.0.0',
107
+ 'dependencies' => {}
108
+ }
109
+ site[:js].each do |dependency|
110
+ name = dependency[0]
111
+ names << name
112
+ version = dependency[1]['version']
113
+ package['dependencies'][name] = '^' + version
114
+ end
115
+ package
116
+ end
117
+
118
+ # Constructs a TravisBranch or LocalBranch object
119
+ # with appropriate Git credentials and pushes
120
+ # the compiled Jekyll site to the target GitHub branch
121
+ #
122
+ # @param target [String] the name of the Git branch to deploy to
123
+ # @return [Nil]
124
+ def push_branch(target)
125
+ if ENV.fetch('CI', false)
126
+ TravisBranch.new(self.site, target).push
127
+ else
128
+ LocalBranch.new(self.site, target).push
129
+ end
130
+ end
131
+ end
132
+ end
@@ -0,0 +1,194 @@
1
+ module WaxTasks
2
+ # Utility helper methods
3
+ module Utils
4
+ # Contructs permalink extension from site `permalink` variable
5
+ #
6
+ # @param site [Hash] the site config
7
+ # @return [String] the end of the permalink, either '/' or '.html'
8
+ def self.construct_permalink(site)
9
+ case site.fetch(:permalink, false)
10
+ when 'pretty' || '/'
11
+ '/'
12
+ else
13
+ '.html'
14
+ end
15
+ end
16
+
17
+ # Checks and asserts presence of `pid` value for each item
18
+ #
19
+ # @param data [Array] array of hashes each representing a collection item
20
+ # @return [Array] same data unless a an item is missing the key `pid`
21
+ # @raise WaxTasks::Error::MissingPid
22
+ def self.assert_pids(data)
23
+ data.each_with_index { |d, i| raise Error::MissingPid, "Collection #{@name} is missing pid for item #{i}." unless d.key? 'pid' }
24
+ data
25
+ end
26
+
27
+ # Checks and asserts uniqueness of `pid` value for each item
28
+ #
29
+ # @param data [Array] array of hashes each representing a collection item
30
+ # @return [Array] same data unless an item has non-unique value for `pid`
31
+ # @raise WaxTasks::Error::NonUniquePid
32
+ def self.assert_unique(data)
33
+ pids = data.map { |d| d['pid'] }
34
+ not_unique = pids.select { |p| pids.count(p) > 1 }.uniq! || []
35
+ raise Error::NonUniquePid, "#{@name} has the following nonunique pids:\n#{not_unique}" unless not_unique.empty?
36
+ data
37
+ end
38
+
39
+ # Checks that a CSV file is valid
40
+ #
41
+ # @param source [String] path to CSV file
42
+ # @return [Array] validated CSV data as an Array of Hashes
43
+ # @raise WaxTasks::Error::InvalidCSV
44
+ def self.validate_csv(source)
45
+ CSV.read(source, headers: true).map(&:to_hash)
46
+ rescue StandardError => e
47
+ raise Error::InvalidCSV, " #{e}"
48
+ end
49
+
50
+ # Checks that a JSON file is valid
51
+ #
52
+ # @param source [String] path to JSON file
53
+ # @return [Array] validated JSON data as an Array of Hashes
54
+ # @raise WaxTasks::Error::InvalidJSON
55
+ def self.validate_json(source)
56
+ file = File.read(source)
57
+ JSON.parse(file)
58
+ rescue StandardError => e
59
+ raise Error::InvalidJSON, " #{e}"
60
+ end
61
+
62
+ # Checks that a YAML file is valid
63
+ #
64
+ # @param source [String] path to YAML file
65
+ # @return [Array] validated YAML data as an Array of Hashes
66
+ # @raise WaxTasks::Error::InvalidYAML
67
+ def self.validate_yaml(source)
68
+ YAML.load_file(source)
69
+ rescue StandardError => e
70
+ raise WaxTasks::Error::InvalidYAML, " #{e}"
71
+ end
72
+
73
+ # Creates a file path valid file path with empty strings and
74
+ # null values dropped
75
+ #
76
+ # @param args [Array] items to concatenate in path
77
+ # @return [String] file path
78
+ def self.make_path(*args)
79
+ args.compact.reject(&:empty?).join('/')
80
+ end
81
+
82
+ # Finds collections in site config where `lunr_index` is enabled
83
+ #
84
+ # @param site [Hash] the site config
85
+ # @return [Array] a list of collection names
86
+ # @raise WaxTasks::Error::NoLunrCollections
87
+ def self.get_lunr_collections(site)
88
+ to_index = site[:collections].find_all { |c| c[1].key?('lunr_index') }
89
+ raise Error::NoLunrCollections, 'There are no lunr collections to index.' if to_index.nil?
90
+ to_index.map { |c| c[0] }
91
+ end
92
+ end
93
+ end
94
+
95
+ # Monkey-patched String class
96
+ class String
97
+ # Removes YAML front matter from a string
98
+ # @return [String]
99
+ def remove_yaml
100
+ self.gsub!(/\A---(.|\n)*?---/, '')
101
+ end
102
+
103
+ # Cleans YAML front matter + markdown pages for lunr indexing
104
+ # @return [String]
105
+ def html_strip
106
+ self.gsub!(/\A---(.|\n)*?---/, '') # remove yaml front matter
107
+ self.gsub!(/{%(.*)%}/, '') # remove functional liquid
108
+ self.gsub!(%r{<\/?[^>]*>}, '') # remove html
109
+ self.gsub!('\\n', '') # remove newlines
110
+ self.gsub!(/\s+/, ' ') # remove extra space
111
+ self.tr!('"', "'") # replace double quotes with single
112
+ self
113
+ end
114
+
115
+ # Normalizes accent marks/diacritics for Lunr indexing
116
+ # @return [String]
117
+ def remove_diacritics
118
+ to_replace = 'ÀÁÂÃÄÅàáâãäåĀāĂ㥹ÇçĆćĈĉĊċČčÐðĎďĐđÈÉÊËèéêëĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħÌÍÎÏìíîïĨĩĪīĬĭĮįİıĴĵĶķĸĹĺĻļĽľĿŀŁłÑñŃńŅņŇňʼnŊŋÒÓÔÕÖØòóôõöøŌōŎŏŐőŔŕŖŗŘřŚśŜŝŞşŠšſŢţŤťŦŧÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųŴŵÝýÿŶŷŸŹźŻżŽž'
119
+ replaced_by = 'AAAAAAaaaaaaAaAaAaCcCcCcCcCcDdDdDdEEEEeeeeEeEeEeEeEeGgGgGgGgHhHhIIIIiiiiIiIiIiIiIiJjKkkLlLlLlLlLlNnNnNnNnnNnOOOOOOooooooOoOoOoRrRrRrSsSsSsSssTtTtTtUUUUuuuuUuUuUuUuUuUuWwYyyYyYZzZzZz'
120
+ self.tr(to_replace, replaced_by)
121
+ end
122
+
123
+ # Converts string to snake case and swaps out special chars
124
+ # @return [String]
125
+ def slug
126
+ self.downcase.tr(' ', '_').gsub(/[^\w-]/, '')
127
+ end
128
+
129
+ # Normalizes string without diacritics for lunr indexing
130
+ # @return [String]
131
+ def normalize
132
+ self.remove_diacritics
133
+ end
134
+
135
+ # Colorizes console output to magenta (errors)
136
+ # @return [String]
137
+ def magenta
138
+ "\e[35m#{self}\e[0m"
139
+ end
140
+
141
+ # Colorizes console output to cyan (messages)
142
+ # @return [String]
143
+ def cyan
144
+ "\e[36m#{self}\e[0m"
145
+ end
146
+
147
+ # Colorizes console output to orange (warnings)
148
+ # @return [String]
149
+ def orange
150
+ "\e[33m#{self}\e[0m"
151
+ end
152
+ end
153
+
154
+ # Monkey-patched Array class
155
+ class Array
156
+ # Normalizes an array as a string or array of hashes
157
+ # without diacritics for lunr indexing
158
+ # @return [Hash || String] description
159
+ def normalize
160
+ if self.first.is_a? Hash
161
+ self
162
+ else
163
+ self.join(', ').remove_diacritics
164
+ end
165
+ end
166
+ end
167
+
168
+ # Monkey-patched Hash class
169
+ class Hash
170
+ # Normalizes hash as itself for lunr indexing
171
+ # @return [Hash]
172
+ def normalize
173
+ self
174
+ end
175
+
176
+ # Converts hash keys to symbols
177
+ # @return [Hash]
178
+ def symbolize_keys
179
+ hash = self
180
+ hash.clone.each_key do |key|
181
+ hash[key.to_sym || key] = hash.delete(key)
182
+ end
183
+ hash
184
+ end
185
+ end
186
+
187
+ # Monkey-patched Integer class
188
+ class Integer
189
+ # Normalizes integer as a string for lunr indexing
190
+ # @return [String]
191
+ def normalize
192
+ self.to_s
193
+ end
194
+ end
data/lib/wax_tasks.rb CHANGED
@@ -1,27 +1,35 @@
1
- require 'yaml'
1
+ require_relative 'wax_tasks/branch'
2
+ require_relative 'wax_tasks/collection'
3
+ require_relative 'wax_tasks/error'
4
+ require_relative 'wax_tasks/iiif_collection'
5
+ require_relative 'wax_tasks/lunr_collection'
6
+ require_relative 'wax_tasks/lunr_index'
7
+ require_relative 'wax_tasks/pagemaster_collection'
8
+ require_relative 'wax_tasks/task_runner'
9
+ require_relative 'wax_tasks/utils'
2
10
 
3
- require_relative 'wax/branch'
4
- require_relative 'wax/collection'
5
- require_relative 'wax/index'
6
- require_relative 'wax/iiif_collection'
7
- require_relative 'wax/lunr_collection'
8
- require_relative 'wax/pagemaster_collection'
9
- require_relative 'wax/utilities'
10
-
11
- # document
11
+ # The WaxTasks module powers the Rake tasks in `./tasks`, including:
12
+ #
13
+ # wax:pagemaster :: generate collection md pages from csv, json, or yaml file
14
+ # wax:lunr :: build lunr search index (with default UI if UI=true)
15
+ # wax:iiif :: generate iiif derivatives from local image files
16
+ # wax:jspackage :: write a simple package.json for monitoring js dependencies
17
+ # wax:push :: push compiled Jekyll site to git branch
18
+ # wax:test :: run htmlproofer, rspec if .rspec file exists
19
+ #
20
+ # Tasks are run by a WaxTasks::TaskRunner object which is resposible
21
+ # for reading in site config from `_config.yml`
12
22
  module WaxTasks
13
- def self.site_config
14
- site_config = YAML.load_file('./_config.yml')
15
- s_conf = {
16
- title: site_config.fetch('title', ''),
17
- url: site_config.fetch('url', ''),
18
- baseurl: site_config.fetch('baseurl', ''),
19
- permalink: site_config.fetch('permalink', false),
20
- c_dir: site_config.fetch('collections_dir', false),
21
- collections: site_config.fetch('collections', false),
22
- js: site_config.fetch('js', false)
23
- }
24
- s_conf[:permalink] = s_conf[:permalink] == 'pretty' ? '/' : '.html'
25
- s_conf
26
- end
23
+ # ----------
24
+ # CONSTANTS
25
+ # ----------
26
+
27
+ # @return [String] The path to load Jekyll site config
28
+ DEFAULT_CONFIG = '_config.yml'.freeze
29
+ # @return [String] The path to write WaxTasks::LunrIndex
30
+ LUNR_INDEX_PATH = 'js/lunr_index.json'.freeze
31
+ # @return [String] The path to write default LunrUI
32
+ LUNR_UI_PATH = 'js/lunr_ui.js'.freeze
33
+ # @return [String] The path to the compiled Jekyll site
34
+ SITE_DIR = './_site'.freeze
27
35
  end
data/spec/setup.rb ADDED
@@ -0,0 +1,38 @@
1
+ require 'fileutils'
2
+
3
+ #constants
4
+ ROOT = `pwd`.strip.freeze
5
+ SAMPLE = "#{ROOT}/spec/sample_site".freeze
6
+ BUILD = "#{ROOT}/build".freeze
7
+
8
+ # helper methods
9
+ def quiet_stdout
10
+ if QUIET
11
+ begin
12
+ orig_stderr = $stderr.clone
13
+ orig_stdout = $stdout.clone
14
+ $stderr.reopen File.new('/dev/null', 'w')
15
+ $stdout.reopen File.new('/dev/null', 'w')
16
+ retval = yield
17
+ rescue StandardError => e
18
+ $stdout.reopen orig_stdout
19
+ $stderr.reopen orig_stderr
20
+ raise e
21
+ ensure
22
+ $stdout.reopen orig_stdout
23
+ $stderr.reopen orig_stderr
24
+ end
25
+ retval
26
+ else
27
+ yield
28
+ end
29
+ end
30
+
31
+ module WaxTasks::Test
32
+ def self.reset
33
+ Dir.chdir(ROOT)
34
+ FileUtils.rm_r(BUILD) if File.directory?(BUILD)
35
+ FileUtils.copy_entry SAMPLE, BUILD
36
+ Dir.chdir(BUILD)
37
+ end
38
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,47 +1,37 @@
1
1
  # toggle stdout/stderr verbosity
2
- QUIET = true
2
+ #
3
+ # run $ DEBUG=true bundle exec rspec for verbose output
4
+ # run $ bundle exec rspec for sparse output
5
+ case ENV['DEBUG']
6
+ when 'true' then QUIET = false
7
+ else QUIET = true
8
+ end
3
9
 
4
10
  # use codecov + add requirements
5
11
  require 'simplecov'
6
12
  SimpleCov.start do
7
13
  add_filter 'spec'
8
- add_filter 'utilities'
9
14
  add_filter 'branch'
10
15
  end
11
16
 
12
- require_relative './../lib/wax_tasks'
13
- require_relative 'fake/site'
14
-
15
- # setup
16
- quiet_stdout { Fake.site }
17
-
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) }
23
-
24
- # run specs
25
- require_relative 'pagemaster'
26
- require_relative 'lunr'
27
- require_relative 'iiif'
28
-
29
- describe 'jekyll' do
30
- it 'builds successfully' do
31
- quiet_stdout { Bundler.with_clean_env { system('bundle exec jekyll build') } }
32
- end
33
- end
34
-
35
- describe 'wax:jspackage' do
36
- it 'writes a package.json file' do
37
- quiet_stdout { system('bundle exec rake wax:jspackage') }
38
- package = File.open('package.json', 'r').read
39
- expect(package.length > 90)
40
- end
17
+ # load + setup
18
+ require 'wax_tasks'
19
+ require 'setup'
20
+
21
+ # provide shared context for tests
22
+ shared_context 'shared', :shared_context => :metadata do
23
+ let(:task_runner) { WaxTasks::TaskRunner.new }
24
+ let(:default_site) { task_runner.site }
25
+ let(:args) { default_site[:collections].map{ |c| c[0] } }
26
+ let(:index_path) { 'js/lunr_index.json' }
27
+ let(:ui_path) { 'js/lunr_ui.js'}
41
28
  end
42
29
 
43
- describe 'wax:test' do
44
- it 'passes html-proofer' do
45
- quiet_stdout { system('bundle exec rake wax:test') }
46
- end
47
- end
30
+ # run tests in a more intuitive order
31
+ require 'tests/tasks_spec'
32
+ require 'tests/task_runner_spec'
33
+ require 'tests/utils_spec'
34
+ require 'tests/pagemaster_collection_spec'
35
+ require 'tests/lunr_collection_spec'
36
+ require 'tests/iiif_collection_spec'
37
+ require 'tests/branch_spec'
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wax_tasks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.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-06-12 00:00:00.000000000 Z
11
+ date: 2018-07-26 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: colorize
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '0.8'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '0.8'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: html-proofer
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -94,20 +80,6 @@ dependencies:
94
80
  - - "~>"
95
81
  - !ruby/object:Gem::Version
96
82
  version: '1'
97
- - !ruby/object:Gem::Dependency
98
- name: faker
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - "~>"
102
- - !ruby/object:Gem::Version
103
- version: '1'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: '1'
111
83
  - !ruby/object:Gem::Dependency
112
84
  name: rspec
113
85
  requirement: !ruby/object:Gem::Requirement
@@ -122,7 +94,7 @@ dependencies:
122
94
  - - "~>"
123
95
  - !ruby/object:Gem::Version
124
96
  version: '3'
125
- description: Rake tasks for minimal iiif exhibition sites with Jekyll.
97
+ description: Rake tasks for minimal exhibition sites with Jekyll Wax.
126
98
  email:
127
99
  - m.nyrop@columbia.edu
128
100
  executables: []
@@ -130,23 +102,23 @@ extensions: []
130
102
  extra_rdoc_files: []
131
103
  files:
132
104
  - Gemfile
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
105
+ - lib/tasks/iiif.rake
106
+ - lib/tasks/jspackage.rake
107
+ - lib/tasks/lunr.rake
108
+ - lib/tasks/pagemaster.rake
109
+ - lib/tasks/push.rake
110
+ - lib/tasks/test.rake
146
111
  - lib/wax_tasks.rb
147
- - spec/iiif.rb
148
- - spec/lunr.rb
149
- - spec/pagemaster.rb
112
+ - lib/wax_tasks/branch.rb
113
+ - lib/wax_tasks/collection.rb
114
+ - lib/wax_tasks/error.rb
115
+ - lib/wax_tasks/iiif_collection.rb
116
+ - lib/wax_tasks/lunr_collection.rb
117
+ - lib/wax_tasks/lunr_index.rb
118
+ - lib/wax_tasks/pagemaster_collection.rb
119
+ - lib/wax_tasks/task_runner.rb
120
+ - lib/wax_tasks/utils.rb
121
+ - spec/setup.rb
150
122
  - spec/spec_helper.rb
151
123
  homepage: https://github.com/minicomp/wax_tasks
152
124
  licenses:
@@ -172,9 +144,7 @@ rubyforge_project:
172
144
  rubygems_version: 2.7.6
173
145
  signing_key:
174
146
  specification_version: 4
175
- summary: Rake tasks for minimal exhibitions.
147
+ summary: Rake tasks for minimal exhibition sites with Jekyll Wax.
176
148
  test_files:
149
+ - spec/setup.rb
177
150
  - spec/spec_helper.rb
178
- - spec/iiif.rb
179
- - spec/pagemaster.rb
180
- - spec/lunr.rb
data/lib/wax/branch.rb DELETED
@@ -1,70 +0,0 @@
1
- require 'colorize'
2
- require 'jekyll'
3
- require 'tmpdir'
4
- require 'time'
5
- require 'yaml'
6
-
7
- # methods for building/pushing git branches
8
- module Branch
9
- def build(baseurl)
10
- FileUtils.rm_rf('_site')
11
- opts = {
12
- source: '.',
13
- destination: '_site',
14
- config: '_config.yml',
15
- baseurl: baseurl,
16
- verbose: true
17
- }
18
- Jekyll::Site.new(Jekyll.configuration(opts)).process
19
- end
20
-
21
- def push
22
- abort "Cannot find _site.".magenta unless Dir.exist? '_site'
23
- Dir.chdir('./_site')
24
- system 'git init && git add .'
25
- system "git commit -m '#{@commit_msg}'"
26
- system "git remote add origin #{@origin}"
27
- system "git push origin master:refs/heads/#{TARGET} --force"
28
- end
29
- end
30
-
31
- # configure git branches from travis info
32
- class TravisBranch
33
- include Branch
34
-
35
- def initialize
36
- @repo_slug = ENV['TRAVIS_REPO_SLUG']
37
- @user = @repo_slug.split('/')[0]
38
- @repo_name = '1' + @repo_slug.split('/')[1]
39
- @token = ENV['ACCESS_TOKEN']
40
- @commit_msg = "Site updated via #{ENV['TRAVIS_COMMIT']} at #{Time.now.utc}"
41
- @origin = "https://#{@user}:#{@token}@github.com/#{@repo_slug}.git"
42
-
43
- puts "Deploying to #{TARGET} branch from Travis as #{@user}.".cyan
44
- end
45
-
46
- def build_gh_site
47
- abort 'You must add the gh-baseurl to config.' if @repo_name.nil?
48
- build(@repo_name)
49
- end
50
- end
51
-
52
- # configure git branches from local info
53
- class LocalBranch
54
- include Branch
55
-
56
- attr_reader :origin, :commit_msg
57
-
58
- def initialize
59
- @origin = `git config --get remote.origin.url`
60
- @commit_msg = "Site updated via local task at #{Time.now.utc}"
61
- puts "Deploying to #{TARGET} branch from local task.".cyan
62
- end
63
-
64
- def build_gh_site
65
- abort "Cannot load config.".magenta unless CONFIG
66
- baseurl = CONFIG.fetch('gh-baseurl', false)
67
- abort "You must add the gh-baseurl to config.".magenta unless baseurl
68
- build(baseurl)
69
- end
70
- end