wax_tasks 1.0.0.pre.beta → 1.1.2

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.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE/bug_report.md +35 -0
  3. data/.github/ISSUE_TEMPLATE/feature_request.md +17 -0
  4. data/.gitignore +7 -0
  5. data/.rspec +3 -0
  6. data/.rubocop.yml +16 -0
  7. data/.travis.yml +27 -0
  8. data/CHANGELOG.md +42 -0
  9. data/CODE_OF_CONDUCT.md +74 -0
  10. data/Gemfile +5 -2
  11. data/LICENSE +21 -0
  12. data/README.md +171 -0
  13. data/lib/tasks/clobber.rake +16 -0
  14. data/lib/tasks/derivatives_iiif.rake +9 -4
  15. data/lib/tasks/derivatives_simple.rake +8 -4
  16. data/lib/tasks/pages.rake +23 -0
  17. data/lib/tasks/search.rake +23 -0
  18. data/lib/wax_tasks.rb +30 -36
  19. data/lib/wax_tasks/asset.rb +57 -0
  20. data/lib/wax_tasks/collection.rb +42 -73
  21. data/lib/wax_tasks/collection/images.rb +126 -0
  22. data/lib/wax_tasks/collection/metadata.rb +101 -0
  23. data/lib/wax_tasks/config.rb +79 -0
  24. data/lib/wax_tasks/error.rb +17 -31
  25. data/lib/wax_tasks/index.rb +45 -0
  26. data/lib/wax_tasks/item.rb +116 -0
  27. data/lib/wax_tasks/record.rb +69 -0
  28. data/lib/wax_tasks/site.rb +86 -0
  29. data/lib/wax_tasks/utils.rb +58 -107
  30. data/lib/wax_tasks/version.rb +5 -0
  31. data/spec/setup.rb +1 -1
  32. data/spec/spec_helper.rb +14 -9
  33. data/wax_tasks.gemspec +33 -0
  34. metadata +52 -44
  35. data/lib/tasks/jspackage.rake +0 -17
  36. data/lib/tasks/lunr.rake +0 -9
  37. data/lib/tasks/pagemaster.rake +0 -11
  38. data/lib/tasks/push.rake +0 -12
  39. data/lib/tasks/test.rake +0 -18
  40. data/lib/wax_tasks/branch.rb +0 -70
  41. data/lib/wax_tasks/iiif/derivatives.rb +0 -86
  42. data/lib/wax_tasks/iiif/manifest.rb +0 -26
  43. data/lib/wax_tasks/image_collection.rb +0 -137
  44. data/lib/wax_tasks/local_branch.rb +0 -21
  45. data/lib/wax_tasks/lunr/index.rb +0 -82
  46. data/lib/wax_tasks/lunr/page_set.rb +0 -57
  47. data/lib/wax_tasks/pagemaster_collection.rb +0 -60
  48. data/lib/wax_tasks/task_runner.rb +0 -148
  49. data/lib/wax_tasks/travis_branch.rb +0 -28
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6df6c21281405044f2958da14b8eda608a4a265337f684c1371612817468767a
4
- data.tar.gz: f1a7248a2b83fa1cf34cfd15580baecdefdd91601c7328b987d9ac247316e154
3
+ metadata.gz: 0d6b199887d4f473d837b2115169191e7ba1761b6402715ef2ef5dc390f0a7e9
4
+ data.tar.gz: 3518140ad547ab96d258ce5de5ee9f8bac47dab868409318c7036a89bc85f3fa
5
5
  SHA512:
6
- metadata.gz: 2a2c5464d13a57208f0c79bbf44a4355b6fad5efd3d2e511ad30ce7a0b4075321868a906a70b680b76ced742d5394fb758a746aff42f0601ea9137ad774dd448
7
- data.tar.gz: 87e84935bcda6fcc92bab5a5fecc7b8fec29d19e3348b6b1f0404dd3b6e47595b778a1b7a25562e0ce7b5c187c700be7c9c20a728bc7adbf98284bba26e7b691
6
+ metadata.gz: ba2e755b8068a428edcb8b57ad727bef86108fa5ba6c651ff3191b521e3a71b4d5a2d9a55a8036efa3b27cbae97a03acdacff29fbfc459033af2b287fb018d52
7
+ data.tar.gz: 53fe1a0275839addf3b0d98b58ab02982c52885d3d2029a6c2424364b38f17e68ef426bd02449d9900d6dc30ce2f19b9cff577250470fa2ce3edfc9336cec15a
@@ -0,0 +1,35 @@
1
+ ---
2
+ name: Bug report
3
+ about: Create a report to help us improve
4
+
5
+ ---
6
+
7
+ **Describe the bug**
8
+ A clear and concise description of what the bug is.
9
+
10
+ **To Reproduce**
11
+ Steps to reproduce the behavior:
12
+ 1. Go to '...'
13
+ 2. Click on '....'
14
+ 3. Scroll down to '....'
15
+ 4. See error
16
+
17
+ **Expected behavior**
18
+ A clear and concise description of what you expected to happen.
19
+
20
+ **Screenshots**
21
+ If applicable, add screenshots to help explain your problem.
22
+
23
+ **Desktop (please complete the following information):**
24
+ - OS: [e.g. iOS]
25
+ - Browser [e.g. chrome, safari]
26
+ - Version [e.g. 22]
27
+
28
+ **Smartphone (please complete the following information):**
29
+ - Device: [e.g. iPhone6]
30
+ - OS: [e.g. iOS8.1]
31
+ - Browser [e.g. stock browser, safari]
32
+ - Version [e.g. 22]
33
+
34
+ **Additional context**
35
+ Add any other context about the problem here.
@@ -0,0 +1,17 @@
1
+ ---
2
+ name: Feature request
3
+ about: Suggest an idea for this project
4
+
5
+ ---
6
+
7
+ **Is your feature request related to a problem? Please describe.**
8
+ A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
9
+
10
+ **Describe the solution you'd like**
11
+ A clear and concise description of what you want to happen.
12
+
13
+ **Describe alternatives you've considered**
14
+ A clear and concise description of any alternative solutions or features you've considered.
15
+
16
+ **Additional context**
17
+ Add any other context or screenshots about the feature request here.
@@ -0,0 +1,7 @@
1
+ .DS_Store
2
+ Gemfile.lock
3
+ coverage
4
+ test_build
5
+ doc
6
+ .yardoc
7
+ DIANE
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --require spec_helper
3
+ --format documentation
@@ -0,0 +1,16 @@
1
+ AllCops:
2
+ NewCops: enable
3
+ TargetRubyVersion: 2.4
4
+ Exclude: ['spec/**/*', 'test_build/**/*']
5
+ Layout/LineLength:
6
+ IgnoredPatterns: ['raise', 'puts', 'set', 'warn', 'ÈÉÊË', 'EEEE', 'safe_join', 'spec']
7
+ Metrics/AbcSize:
8
+ Max: 28
9
+ Metrics/MethodLength:
10
+ Max: 15
11
+ Layout/EmptyComment:
12
+ Enabled: false
13
+ Layout/EmptyLineAfterGuardClause:
14
+ Enabled: false
15
+ Style/SingleArgumentDig:
16
+ Enabled: false
@@ -0,0 +1,27 @@
1
+ # sudo: true
2
+ language: ruby
3
+ rvm:
4
+ - 2.4
5
+ - 2.5
6
+ - 2.6
7
+ addons:
8
+ apt:
9
+ packages:
10
+ - ghostscript
11
+ - tree
12
+ env:
13
+ global:
14
+ - CC_TEST_REPORTER_ID=9ef8644063d4113becf719844a0f9c0f8a452f87d69a8315c6fb090123e52cc8
15
+ before_install:
16
+ - gem update --system
17
+ - gem install bundler
18
+ - sudo rm /etc/ImageMagick-6/policy.xml
19
+ before_script:
20
+ - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
21
+ - chmod +x ./cc-test-reporter
22
+ - ./cc-test-reporter before-build
23
+ script:
24
+ - bundle exec bundle-audit
25
+ - bundle exec rspec
26
+ after_script:
27
+ - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
@@ -0,0 +1,42 @@
1
+ # Changelog
2
+
3
+ Welcome to the Changelog! Below is the first attempt at a log for this project.
4
+
5
+ Please note that we define ___breaking changes___ as those changes which force users to change how they interact with __wax_tasks__
6
+ via their site's `_config.yml` file or how they invoke the tasks on the command line.
7
+
8
+ ## v1.0.3
9
+ #### Date: ???
10
+
11
+ #### Non-breaking Changes:
12
+ - :white_check_mark: Allows use of `wax_iiif < 0.3` (was `<0.2`)
13
+ - :white_check_mark: Fix bug where command options (e.g., `--trace`) were being parsed as task ARGV args.
14
+
15
+ ## v1.0.2
16
+ #### Date: 06/12/2019
17
+
18
+ #### Non-breaking Changes:
19
+ - :white_check_mark: Fixes [32](https://github.com/minicomp/wax_tasks/issues/32); accepts narrow images (< 1140px)
20
+ - :white_check_mark: Fixes [33](https://github.com/minicomp/wax_tasks/issues/33); better image extension handling
21
+ - :white_check_mark: Fixes [34](https://github.com/minicomp/wax_tasks/issues/34); ^
22
+ - :white_check_mark: Fixes [36](https://github.com/minicomp/wax_tasks/issues/36); fixes bug if an image item doesn't have a record
23
+
24
+ ## v1.0.1
25
+ #### Date: 06/05/2019
26
+
27
+ #### Non-breaking Changes:
28
+ - :white_check_mark: Uses `wax_iiif v0.1.2` with better progress bar handling on IIIF derivative generation
29
+ - :white_check_mark: Has better progress bar handling on simple derivative generation
30
+
31
+ ## v1.0.0
32
+ #### Date: 06/04/2019
33
+
34
+ #### Breaking Changes:
35
+ - :bangbang: __Search index generation__ is now handled under the variable `search` in `_config.yml` instead of `lunr_index` and accepts a hash instead of an array.
36
+ - :bangbang: __Search index generation__ is now run with `bundle exec rake wax:search NAME` instead of `bundle exec rake wax:lunr`
37
+ - :x: __Search UI__ is now handled dynamically by `wax_theme`; as such the `UI=true` option on the rake task has been depricated.
38
+ - :x:: The __site testing__ task `bundle exec rake wax:test` was deprecated and moved to `wax_theme`, since it deals with site presentation and not the handling of collection data.
39
+ - :x: The `wax:jspackage` task was depricated, since it was arbitrary and unused.
40
+
41
+ #### Non-breaking Changes:
42
+ - :white_check_mark: The __page generation__ task `bundle exec rake wax:pagemaster NAME` has become `bundle exec rake wax:pages NAME`. However, this is currently aliased for backwards compatibility.
@@ -0,0 +1,74 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ In the interest of fostering an open and welcoming environment, we as
6
+ contributors and maintainers pledge to making participation in our project and
7
+ our community a harassment-free experience for everyone, regardless of age, body
8
+ size, disability, ethnicity, gender identity and expression, level of experience,
9
+ nationality, personal appearance, race, religion, or sexual identity and
10
+ orientation.
11
+
12
+ ## Our Standards
13
+
14
+ Examples of behavior that contributes to creating a positive environment
15
+ include:
16
+
17
+ * Using welcoming and inclusive language
18
+ * Being respectful of differing viewpoints and experiences
19
+ * Gracefully accepting constructive criticism
20
+ * Focusing on what is best for the community
21
+ * Showing empathy towards other community members
22
+
23
+ Examples of unacceptable behavior by participants include:
24
+
25
+ * The use of sexualized language or imagery and unwelcome sexual attention or
26
+ advances
27
+ * Trolling, insulting/derogatory comments, and personal or political attacks
28
+ * Public or private harassment
29
+ * Publishing others' private information, such as a physical or electronic
30
+ address, without explicit permission
31
+ * Other conduct which could reasonably be considered inappropriate in a
32
+ professional setting
33
+
34
+ ## Our Responsibilities
35
+
36
+ Project maintainers are responsible for clarifying the standards of acceptable
37
+ behavior and are expected to take appropriate and fair corrective action in
38
+ response to any instances of unacceptable behavior.
39
+
40
+ Project maintainers have the right and responsibility to remove, edit, or
41
+ reject comments, commits, code, wiki edits, issues, and other contributions
42
+ that are not aligned to this Code of Conduct, or to ban temporarily or
43
+ permanently any contributor for other behaviors that they deem inappropriate,
44
+ threatening, offensive, or harmful.
45
+
46
+ ## Scope
47
+
48
+ This Code of Conduct applies both within project spaces and in public spaces
49
+ when an individual is representing the project or its community. Examples of
50
+ representing a project or community include using an official project e-mail
51
+ address, posting via an official social media account, or acting as an appointed
52
+ representative at an online or offline event. Representation of a project may be
53
+ further defined and clarified by project maintainers.
54
+
55
+ ## Enforcement
56
+
57
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
+ reported by contacting the project team. All
59
+ complaints will be reviewed and investigated and will result in a response that
60
+ is deemed necessary and appropriate to the circumstances. The project team is
61
+ obligated to maintain confidentiality with regard to the reporter of an incident.
62
+ Further details of specific enforcement policies may be posted separately.
63
+
64
+ Project maintainers who do not follow or enforce the Code of Conduct in good
65
+ faith may face temporary or permanent repercussions as determined by other
66
+ members of the project's leadership.
67
+
68
+ ## Attribution
69
+
70
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71
+ available at [https://contributor-covenant.org/version/1/4][version]
72
+
73
+ [homepage]: https://contributor-covenant.org
74
+ [version]: https://contributor-covenant.org/version/1/4/
data/Gemfile CHANGED
@@ -1,8 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
  gemspec
3
5
 
4
6
  # dev/test utilities
7
+ gem 'bundle-audit', require: false
5
8
  gem 'diane', require: false
6
- gem 'rubocop', '0.59.0', require: false
7
- gem 'simplecov', require: false
9
+ gem 'rubocop', require: false
10
+ gem 'simplecov', '0.17.1', require: false
8
11
  gem 'yard', require: false
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2018 marii nyrop
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,171 @@
1
+ # wax_tasks 🐝
2
+ [![Build Status](https://travis-ci.com/minicomp/wax_tasks.svg?branch=main)](https://travis-ci.com/minicomp/wax_tasks) [![Depfu](https://badges.depfu.com/badges/6105c55b9634e74b1c27055b19bad8f0/overview.svg)](https://depfu.com/github/minicomp/wax_tasks?project_id=10548)
3
+ [![Gem Version](https://badge.fury.io/rb/wax_tasks.svg)](https://badge.fury.io/rb/wax_tasks)
4
+ [![Gem Downloads](https://img.shields.io/gem/dt/wax_tasks.svg?color=046d0b)](https://badge.fury.io/rb/wax_tasks)
5
+ [![docs](http://img.shields.io/badge/docs-rdoc.info-blue.svg?style=flat)](https://www.rubydoc.info/github/minicomp/wax_tasks/)
6
+
7
+ [![Maintainability](https://api.codeclimate.com/v1/badges/14408e7e962b9b84ec65/maintainability)](https://codeclimate.com/github/minicomp/wax_tasks/maintainability)
8
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/14408e7e962b9b84ec65/test_coverage)](https://codeclimate.com/github/minicomp/wax_tasks/test_coverage)
9
+ ![License](https://img.shields.io/github/license/minicomp/wax_tasks.svg?color=c6a1e0)
10
+
11
+ __wax_tasks__ is gem-packaged set of [Rake](https://ruby.github.io/rake/) tasks for creating minimal exhibition sites with [Wax](https://github.com/minicomp/wax/).
12
+
13
+ It can be used to:
14
+ - generate collection markdown pages from a metadata file ([wax:pages](#waxpages))
15
+ - generate a client-side search index ([wax:search](#waxsearch))
16
+ - generate either IIIF-compliant derivatives ([wax:derivatives:iiif](#waxderivativesiiif)) or simple image derivatives ([wax:derivatives:simple](#waxderivativessimple)) from local image and pdf files
17
+
18
+ <br>
19
+ <img src="https://github.com/minicomp/wiki/blob/main/assets/wax_screen.gif?raw=true"/>
20
+
21
+
22
+ # Getting Started
23
+
24
+ ## Prerequisites
25
+
26
+ You'll need `Ruby >= 2.4` with `bundler` installed. Check your versions with:
27
+ ```bash
28
+ $ ruby -v
29
+ ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-darwin15]
30
+
31
+ $ bundler -v
32
+ Bundler version 1.16.1
33
+ ```
34
+
35
+ To use the image derivative tasks, you will also need to have ImageMagick and Ghostscript installed and functional. You can check to see if you have ImageMagick by running:
36
+ ```bash
37
+ $ convert -version
38
+ Version: ImageMagick 6.9.9-20 Q16 x86_64 2017-10-15 http://www.imagemagick.org
39
+ Copyright: (c) 1999-2017 ImageMagick Studio LLC
40
+ License: http://www.imagemagick.org/script/license.php
41
+ Features: Cipher DPC Modules
42
+ Delegates (built-in): bzlib freetype jng jpeg ltdl lzma png tiff xml zlib
43
+ ```
44
+
45
+ ... and check Ghostscript with:
46
+ ```bash
47
+ $ gs -version
48
+ GPL Ghostscript 9.21 (2017-03-16)
49
+ Copyright (C) 2017 Artifex Software, Inc. All rights reserved.
50
+ ```
51
+
52
+ Next, you'll need a Jekyll site. You can clone the [minicomp/wax demo site](https://github.com/minicomp/wax/) or start a site from scratch with:
53
+
54
+ ```sh
55
+ $ gem install jekyll
56
+ $ jekyll new wax && cd wax
57
+ ```
58
+
59
+ ## Installation
60
+
61
+ Add `wax_tasks` to your Jekyll site's `Gemfile`:
62
+
63
+ ```ruby
64
+ gem 'wax_tasks'
65
+ ```
66
+
67
+ ... and install with bundler:
68
+
69
+ ```bash
70
+ $ bundle install
71
+ ```
72
+
73
+ Create a `Rakefile` with the following:
74
+ ```ruby
75
+ spec = Gem::Specification.find_by_name 'wax_tasks'
76
+ Dir.glob("#{spec.gem_dir}/lib/tasks/*.rake").each { |r| load r }
77
+ ```
78
+
79
+ # Usage
80
+
81
+ After following the installation instructions above, you will have access to the Rake tasks in your shell by running `$ bundle exec rake wax:taskname` in the root directory of your Jekyll site.
82
+ To see the available tasks, run
83
+
84
+ ```ruby
85
+ $ bundle exec rake --tasks
86
+ ```
87
+
88
+ ## Sample site `_config.yml` file:
89
+
90
+ ```yaml
91
+ # basic settings
92
+ title: Wax.
93
+ description: a jekyll theme for minimal exhibitions
94
+ url: 'https://minicomp.github.io'
95
+ baseurl: '/wax'
96
+
97
+ # build settings
98
+ permalink: pretty # optional, creates `/page/` link instead of `page.html` links
99
+
100
+ # wax collection settings
101
+ collections:
102
+ objects: # the collection name
103
+ layout: 'iiif-image-page'
104
+ output: true # this must be true for your .md pages to be built to html!
105
+ metadata:
106
+ source: 'objects.csv' # path to the metadata file, must be within '_data'
107
+ images:
108
+ source 'source_images/objects' # path to the directory of source images, must be within '_data'
109
+
110
+ # wax search index settings
111
+ lunr_index:
112
+ main:
113
+ index: 'js/lunr-index.json' # where the index will be generated
114
+ collections: # the collections to index
115
+ objects:
116
+ content: false # whether or not to index the markdown page content (below the YAML)
117
+ fields: # the metadata fields to index
118
+ - 'label'
119
+ - 'artist'
120
+ - 'location'
121
+ - 'object_type'
122
+ ```
123
+
124
+ The above example includes a single collection `objects` that comprises:
125
+ 1. a CSV `metadata:source` file (`objects.csv`), and
126
+ 2. a `images:source` directory of image and pdf files.
127
+
128
+ For more information on configuring Jekyll collections for __wax_tasks__, check out the [minicomp/wax wiki](https://minicomp.github.io/wiki/#/wax/) and <https://jekyllrb.com/docs/collections/>.
129
+
130
+ ## Running the tasks
131
+
132
+ ### wax:pages
133
+
134
+ Takes a CSV, JSON, or YAML file of collection metadata and generates a [markdown](https://daringfireball.net/projects/markdown/syntax) page for each record to a directory using a specified layout. [Read More](#TODO).
135
+
136
+ `$ bundle exec rake wax:pages collection-name`
137
+
138
+ ### wax:search
139
+
140
+ Generates a client-side JSON search index of your site for use with [ElasticLunr.js](http://elasticlunr.com/). [Read More](#TODO).
141
+
142
+ `$ bundle exec rake wax:search search-name`
143
+
144
+
145
+ ### wax:derivatives:simple
146
+
147
+ Takes a local directory of images and pdf files and generates a few image derivatives (i.e., 'thumbnail' 250w and 'full' 1140w) for Jekyll layouts and includes to use. [Read More](#TODO).
148
+
149
+ `$ bundle exec rake wax:derivatives:iiif collection-name`
150
+
151
+ ### wax:derivatives:iiif
152
+
153
+ Takes a local directory of images and pdf files and generates tiles and data that work with a IIIF compliant image viewer like [OpenSeaDragon](https://openseadragon.github.io/), [Mirador](http://projectmirador.org/), or [Leaflet IIIF](https://github.com/mejackreed/Leaflet-IIIF). [Read More](#TODO).
154
+
155
+ `$ bundle exec rake wax:derivatives:iiif collection-name`
156
+
157
+ ### wax:clobber
158
+
159
+ Destroys (or "clobbers") wax-generated files, i.e., pages generated from `wax:pagemaster`, derivatives generated from `wax:derivatives`, and search indexes generated with `wax:search` so you can start from scratch.
160
+
161
+ This task does *not* touch your source metadata or source image files! Instead, it simply clears a path for you to regenerate your collection materials in case you add/edit source materials.
162
+
163
+ `$ bundle exec rake wax:clobber collection-name`
164
+
165
+ # Contributing
166
+
167
+ Fork/clone the repository. After making code changes, run the tests (`$ bundle exec rubocop` and `$ bundle exec rspec`) before submitting a pull request. You can enable verbose tests with `$ DEBUG=true bundle exec rspec`.
168
+
169
+ # License
170
+
171
+ The gem is available as open source under the terms of the [MIT License](LICENSE).