jekyll-lilypond 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/Gemfile +9 -0
  4. data/Gemfile.lock +99 -0
  5. data/LICENSE +21 -0
  6. data/README.md +98 -0
  7. data/files/rite.png +0 -0
  8. data/jekyll-lilypond.gemspec +23 -0
  9. data/lib/jekyll-lilypond/file_processor.rb +67 -0
  10. data/lib/jekyll-lilypond/lilypond_tag.rb +34 -0
  11. data/lib/jekyll-lilypond/tag.rb +17 -0
  12. data/lib/jekyll-lilypond/tag_processor.rb +56 -0
  13. data/lib/jekyll-lilypond/templates/basic.ly +45 -0
  14. data/lib/jekyll-lilypond/templates/empty.ly +1 -0
  15. data/lib/jekyll-lilypond/templates/figure.html +25 -0
  16. data/lib/jekyll-lilypond/templates/img.html +4 -0
  17. data/lib/jekyll-lilypond/templates/raw.html +1 -0
  18. data/lib/jekyll-lilypond/templates/raw.ly +1 -0
  19. data/lib/jekyll-lilypond/templates/showsource.html +36 -0
  20. data/lib/jekyll-lilypond/templates.rb +60 -0
  21. data/lib/jekyll-lilypond/version.rb +5 -0
  22. data/lib/jekyll-lilypond.rb +11 -0
  23. data/spec/file_processor_spec.rb +167 -0
  24. data/spec/fixtures/.gitignore +5 -0
  25. data/spec/fixtures/404.html +25 -0
  26. data/spec/fixtures/Gemfile +31 -0
  27. data/spec/fixtures/_config.yml +56 -0
  28. data/spec/fixtures/_layouts/basic_html.html +1 -0
  29. data/spec/fixtures/_layouts/vacuous_html.html +1 -0
  30. data/spec/fixtures/_layouts/vacuous_ly.ly +1 -0
  31. data/spec/fixtures/_layouts/variables_html.html +1 -0
  32. data/spec/fixtures/_layouts/variables_ly.ly +1 -0
  33. data/spec/fixtures/_posts/2021-01-16-welcome-to-jekyll.markdown +29 -0
  34. data/spec/fixtures/about.markdown +18 -0
  35. data/spec/fixtures/index.markdown +6 -0
  36. data/spec/fixtures/page.md +8 -0
  37. data/spec/integration_spec.rb +115 -0
  38. data/spec/spec_helper.rb +88 -0
  39. data/spec/tag_processor_spec.rb +135 -0
  40. data/spec/tag_spec.rb +51 -0
  41. data/spec/templates_spec.rb +175 -0
  42. metadata +118 -0
@@ -0,0 +1,167 @@
1
+ require "jekyll-lilypond"
2
+ require "spec_helper"
3
+ require "tmpdir"
4
+ include Liquid
5
+
6
+ RSpec.shared_context 'temp_dir' do
7
+ around do |example|
8
+ Dir.mktmpdir do |dir|
9
+ @temp_dir = dir
10
+ example.run
11
+ end
12
+ end
13
+
14
+ attr_reader :temp_dir
15
+
16
+ let(:source) { '\version "2.14.1" { c d e f g a b c }' }
17
+ let(:hash) { "99cef9f0865c2c21ba7b5b00d1092f61" }
18
+ let(:sourcepath) { "#{@temp_dir}/99cef9f0865c2c21ba7b5b00d1092f61.ly" }
19
+ let(:svgpath) { "#{@temp_dir}/99cef9f0865c2c21ba7b5b00d1092f61.svg" }
20
+ let(:barepath) { "#{@temp_dir}/99cef9f0865c2c21ba7b5b00d1092f61" }
21
+ end
22
+
23
+ RSpec.describe(Jekyll::Lilypond::FileProcessor) do
24
+ include_context 'temp_dir'
25
+
26
+ context "initialization" do
27
+ it "works if the working dir exists" do
28
+ expect { described_class.new(@temp_dir, hash, source) }.not_to raise_error
29
+ end
30
+ it "works even if the working dir is in a deeply nested path" do
31
+ path = "#{@temp_dir}/foo/bar/baz/whatever"
32
+ FileUtils.mkdir_p(path)
33
+ expect { described_class.new(path, hash, source) }.not_to raise_error
34
+ end
35
+ end
36
+
37
+ context "writing" do
38
+ it "creates a file at the expected location" do
39
+ file_processor = described_class.new(@temp_dir, hash, source)
40
+ file_processor.write
41
+ expect(File.file?(sourcepath)).to eq(true)
42
+ end
43
+ it "populates that file with the right source" do
44
+ file_processor = described_class.new(@temp_dir, hash, source)
45
+ file_processor.write
46
+ expect(File.open(sourcepath).read).to eq(source)
47
+ end
48
+ it "doesn't overwrite an existing source file with the same name" do
49
+ File.open(sourcepath, "w") do |f|
50
+ f.write("This should not be overwritten")
51
+ end
52
+ file_processor = described_class.new(@temp_dir, hash, source)
53
+ file_processor.write
54
+ expect(File.open(sourcepath).read).to eq("This should not be overwritten")
55
+ end
56
+ it "creates the working directory if it does not exist" do
57
+ path = "#{@temp_dir}/foo/bar/baz/whatever"
58
+ expect {
59
+ fp = described_class.new(path, hash, source)
60
+ fp.write
61
+ }.not_to raise_error
62
+ expect(File.exists?(path)).to eq(true)
63
+ end
64
+ end
65
+
66
+ context "compiling" do
67
+ it "results in an svg file" do
68
+ file_processor = described_class.new(@temp_dir, hash, source)
69
+ file_processor.write
70
+ file_processor.compile
71
+ expect(File.exist?(svgpath)).to eq(true)
72
+ end
73
+ it "doesn't call lilypond if the target svg exists" do
74
+ File.open(svgpath, "w") do |f|
75
+ f.write("This should not be overwritten")
76
+ end
77
+ file_processor = described_class.new(@temp_dir, hash, source)
78
+ file_processor.write
79
+ file_processor.compile
80
+ expect(File.open(svgpath).read).to eq("This should not be overwritten")
81
+ end
82
+ end
83
+ context "trimming" do
84
+ it "results in an svg file" do
85
+ file_processor = described_class.new(@temp_dir, hash, source)
86
+ file_processor.write
87
+ file_processor.compile
88
+ file_processor.trim_svg
89
+ expect(File.exist?(svgpath)).to eq(true)
90
+ end
91
+ it "raises an error if the target svg does not exist" do
92
+ file_processor = described_class.new(@temp_dir, hash, source)
93
+ expect { file_processor.trim_svg }.to raise_error(RuntimeError)
94
+ end
95
+ end
96
+ context "integration with lilypond" do
97
+ it "puts output in the target directory even if it's deeply nested" do
98
+ path = "#{@temp_dir}/foo/bar/baz/whatever"
99
+ FileUtils.mkdir_p(path)
100
+ file_processor = described_class.new(path, hash, source)
101
+ file_processor.write
102
+ file_processor.compile
103
+ expect(File.exist?("#{path}/#{hash}.svg")).to eq(true)
104
+ end
105
+ end
106
+ end
107
+
108
+ RSpec.shared_context 'temp_dir_with_midi' do
109
+ around do |example|
110
+ Dir.mktmpdir do |dir|
111
+ @temp_dir = dir
112
+ example.run
113
+ end
114
+ end
115
+
116
+ attr_reader :temp_dir
117
+
118
+ let(:source) { '\version "2.14.1" \score { { c d e f g a b c } \midi { } }' }
119
+ let(:hash) { "f95206924ddb60916690c047a2345b87" }
120
+ let(:sourcepath) { "#{@temp_dir}/f95206924ddb60916690c047a2345b87.ly" }
121
+ let(:svgpath) { "#{@temp_dir}/f95206924ddb60916690c047a2345b87.svg" }
122
+ let(:mp3path) { "#{@temp_dir}/f95206924ddb60916690c047a2345b87.mp3" }
123
+ let(:barepath) { "#{@temp_dir}/f95206924ddb60916690c047a2345b87" }
124
+ end
125
+
126
+ RSpec.describe(Jekyll::Lilypond::FileProcessor) do
127
+ include_context 'temp_dir_with_midi'
128
+
129
+ context "making mp3" do
130
+ it "results in an mp3 file" do
131
+ file_processor = described_class.new(@temp_dir, hash, source)
132
+ file_processor.write
133
+ file_processor.compile
134
+ file_processor.make_mp3
135
+ expect(File.exist?(mp3path)).to eq(true)
136
+ end
137
+ it "doesn't touch a target mp3 that already exists" do
138
+ File.open(mp3path, "w") do |f|
139
+ f.write("This should not be overwritten")
140
+ end
141
+ file_processor = described_class.new(@temp_dir, hash, source)
142
+ file_processor.write
143
+ file_processor.compile
144
+ file_processor.make_mp3
145
+ expect(File.open(mp3path).read).to eq("This should not be overwritten")
146
+ end
147
+ it "errors sensibly if its midi dependency doesn't exist" do
148
+ file_processor = described_class.new(@temp_dir, hash, source)
149
+ expect { file_processor.make_mp3 }.to raise_error(RuntimeError)
150
+ end
151
+ end
152
+
153
+ context "integration with lilypond" do
154
+ it "puts output in the target directory even if it's deeply nested" do
155
+ path = "#{@temp_dir}/foo/bar/baz/whatever"
156
+ FileUtils.mkdir_p(path)
157
+ file_processor = described_class.new(path, hash, source)
158
+ file_processor.write
159
+ file_processor.compile
160
+ expect(File.exist?("#{path}/#{hash}.midi")).to eq(true)
161
+ end
162
+ end
163
+ #To do: Error handling
164
+ #To do: Flexible lilypond invocation
165
+ #To do: Do lilypond's products end up in the right place?
166
+ end
167
+
@@ -0,0 +1,5 @@
1
+ _site
2
+ .sass-cache
3
+ .jekyll-cache
4
+ .jekyll-metadata
5
+ vendor
@@ -0,0 +1,25 @@
1
+ ---
2
+ permalink: /404.html
3
+ layout: default
4
+ ---
5
+
6
+ <style type="text/css" media="screen">
7
+ .container {
8
+ margin: 10px auto;
9
+ max-width: 600px;
10
+ text-align: center;
11
+ }
12
+ h1 {
13
+ margin: 30px 0;
14
+ font-size: 4em;
15
+ line-height: 1;
16
+ letter-spacing: -1px;
17
+ }
18
+ </style>
19
+
20
+ <div class="container">
21
+ <h1>404</h1>
22
+
23
+ <p><strong>Page not found :(</strong></p>
24
+ <p>The requested page could not be found.</p>
25
+ </div>
@@ -0,0 +1,31 @@
1
+ source "https://rubygems.org"
2
+ # Hello! This is where you manage which Jekyll version is used to run.
3
+ # When you want to use a different version, change it below, save the
4
+ # file and run `bundle install`. Run Jekyll with `bundle exec`, like so:
5
+ #
6
+ # bundle exec jekyll serve
7
+ #
8
+ # This will help ensure the proper Jekyll version is running.
9
+ # Happy Jekylling!
10
+ gem "jekyll", "~> 4.2.0"
11
+ # This is the default theme for new Jekyll sites. You may change this to anything you like.
12
+ gem "minima", "~> 2.5"
13
+ # If you want to use GitHub Pages, remove the "gem "jekyll"" above and
14
+ # uncomment the line below. To upgrade, run `bundle update github-pages`.
15
+ # gem "github-pages", group: :jekyll_plugins
16
+ # If you have any plugins, put them here!
17
+ group :jekyll_plugins do
18
+ gem "jekyll-feed", "~> 0.12"
19
+ gem "jekyll-lilypond", path: "../.."
20
+ end
21
+
22
+ # Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
23
+ # and associated library.
24
+ platforms :mingw, :x64_mingw, :mswin, :jruby do
25
+ gem "tzinfo", "~> 1.2"
26
+ gem "tzinfo-data"
27
+ end
28
+
29
+ # Performance-booster for watching directories on Windows
30
+ gem "wdm", "~> 0.1.1", :platforms => [:mingw, :x64_mingw, :mswin]
31
+
@@ -0,0 +1,56 @@
1
+ # Welcome to Jekyll!
2
+ #
3
+ # This config file is meant for settings that affect your whole blog, values
4
+ # which you are expected to set up once and rarely edit after that. If you find
5
+ # yourself editing this file very often, consider using Jekyll's data files
6
+ # feature for the data you need to update frequently.
7
+ #
8
+ # For technical reasons, this file is *NOT* reloaded automatically when you use
9
+ # 'bundle exec jekyll serve'. If you change this file, please restart the server process.
10
+ #
11
+ # If you need help with YAML syntax, here are some quick references for you:
12
+ # https://learn-the-web.algonquindesign.ca/topics/markdown-yaml-cheat-sheet/#yaml
13
+ # https://learnxinyminutes.com/docs/yaml/
14
+ #
15
+ # Site settings
16
+ # These are used to personalize your new site. If you look in the HTML files,
17
+ # you will see them accessed via {{ site.title }}, {{ site.email }}, and so on.
18
+ # You can create any custom variable you would like, and they will be accessible
19
+ # in the templates via {{ site.myvariable }}.
20
+
21
+ title: Your awesome title
22
+ email: your-email@example.com
23
+ description: >- # this means to ignore newlines until "baseurl:"
24
+ Write an awesome description for your new site here. You can edit this
25
+ line in _config.yml. It will appear in your document head meta (for
26
+ Google search results) and in your feed.xml site description.
27
+ baseurl: "" # the subpath of your site, e.g. /blog
28
+ url: "" # the base hostname & protocol for your site, e.g. http://example.com
29
+ twitter_username: jekyllrb
30
+ github_username: jekyll
31
+
32
+ # Build settings
33
+ theme: minima
34
+ plugins:
35
+ - jekyll-feed
36
+ - jekyll-lilypond
37
+
38
+ # Exclude from processing.
39
+ # The following items will not be processed, by default.
40
+ # Any item listed under the `exclude:` key here will be automatically added to
41
+ # the internal "default list".
42
+ #
43
+ # Excluded items can be processed by explicitly listing the directories or
44
+ # their entries' file path in the `include:` list.
45
+ #
46
+ # exclude:
47
+ # - .sass-cache/
48
+ # - .jekyll-cache/
49
+ # - gemfiles/
50
+ # - Gemfile
51
+ # - Gemfile.lock
52
+ # - node_modules/
53
+ # - vendor/bundle/
54
+ # - vendor/cache/
55
+ # - vendor/gems/
56
+ # - vendor/ruby/
@@ -0,0 +1 @@
1
+ <img src='{{ filename }}.png'>
@@ -0,0 +1 @@
1
+ {{- content -}}
@@ -0,0 +1 @@
1
+ { {{ content }} }
@@ -0,0 +1 @@
1
+ {{- a }} {{ content }} {{ b -}}
@@ -0,0 +1 @@
1
+ {{- a }} {{ content }} {{ b -}}
@@ -0,0 +1,29 @@
1
+ ---
2
+ layout: post
3
+ title: "Welcome to Jekyll!"
4
+ date: 2021-01-16 16:01:22 -0500
5
+ categories: jekyll update
6
+ ---
7
+ You’ll find this post in your `_posts` directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run `jekyll serve`, which launches a web server and auto-regenerates your site when a file is updated.
8
+
9
+ Jekyll requires blog post files to be named according to the following format:
10
+
11
+ `YEAR-MONTH-DAY-title.MARKUP`
12
+
13
+ Where `YEAR` is a four-digit number, `MONTH` and `DAY` are both two-digit numbers, and `MARKUP` is the file extension representing the format used in the file. After that, include the necessary front matter. Take a look at the source for this post to get an idea about how it works.
14
+
15
+ Jekyll also offers powerful support for code snippets:
16
+
17
+ {% highlight ruby %}
18
+ def print_hi(name)
19
+ puts "Hi, #{name}"
20
+ end
21
+ print_hi('Tom')
22
+ #=> prints 'Hi, Tom' to STDOUT.
23
+ {% endhighlight %}
24
+
25
+ Check out the [Jekyll docs][jekyll-docs] for more info on how to get the most out of Jekyll. File all bugs/feature requests at [Jekyll’s GitHub repo][jekyll-gh]. If you have questions, you can ask them on [Jekyll Talk][jekyll-talk].
26
+
27
+ [jekyll-docs]: https://jekyllrb.com/docs/home
28
+ [jekyll-gh]: https://github.com/jekyll/jekyll
29
+ [jekyll-talk]: https://talk.jekyllrb.com/
@@ -0,0 +1,18 @@
1
+ ---
2
+ layout: page
3
+ title: About
4
+ permalink: /about/
5
+ ---
6
+
7
+ This is the base Jekyll theme. You can find out more info about customizing your Jekyll theme, as well as basic Jekyll usage documentation at [jekyllrb.com](https://jekyllrb.com/)
8
+
9
+ You can find the source code for Minima at GitHub:
10
+ [jekyll][jekyll-organization] /
11
+ [minima](https://github.com/jekyll/minima)
12
+
13
+ You can find the source code for Jekyll at GitHub:
14
+ [jekyll][jekyll-organization] /
15
+ [jekyll](https://github.com/jekyll/jekyll)
16
+
17
+
18
+ [jekyll-organization]: https://github.com/jekyll
@@ -0,0 +1,6 @@
1
+ ---
2
+ # Feel free to add content and custom Front Matter to this file.
3
+ # To modify the layout, see https://jekyllrb.com/docs/themes/#overriding-theme-defaults
4
+
5
+ layout: home
6
+ ---
@@ -0,0 +1,8 @@
1
+ ---
2
+ title: Test Page
3
+ layout: default
4
+ ---
5
+
6
+ Test test
7
+
8
+ Content content
@@ -0,0 +1,115 @@
1
+ require "jekyll"
2
+ require "jekyll-lilypond"
3
+ require "spec_helper"
4
+ require "tmpdir"
5
+
6
+ RSpec.describe(Jekyll::Lilypond) do
7
+ around(:each) do |example|
8
+ Dir.mktmpdir do |dir|
9
+ @temp_dir = dir
10
+ @test_page = "#{@temp_dir}/test_page.md"
11
+ @dest_page = "#{dest_dir}/test_page.html"
12
+ FileUtils.cp_r("spec/fixtures/.", @temp_dir)
13
+ File.open(@test_page, "w") { |f| f.write(test_page_contents) }
14
+ example.run
15
+ end
16
+ end
17
+
18
+ let(:overrides) { {} }
19
+ let(:config) do
20
+ Jekyll.configuration(Jekyll::Utils.deep_merge_hashes({
21
+ "full_rebuild" => true,
22
+ "source" => @temp_dir,
23
+ "destination" => dest_dir,
24
+ "show_drafts" => false,
25
+ "url" => "http://example.org",
26
+ "name" => "My awesome site",
27
+ "author" => {
28
+ "name" => "Dr. Jekyll",
29
+ },
30
+ "collections" => {
31
+ "my_collection" => { "output" => true },
32
+ "other_things" => { "output" => false },
33
+ },
34
+ }, overrides))
35
+ end
36
+ let(:site) { Jekyll::Site.new(config) }
37
+ let(:context) { make_context(:site => site) }
38
+
39
+
40
+ context "somethingorother" do
41
+ let(:test_page_contents) {
42
+ <<-MD
43
+ ---
44
+ layout: home
45
+ ---
46
+ foobledooble
47
+ MD
48
+ }
49
+ it "works" do
50
+ expect(File).to exist(@test_page)
51
+ site.process
52
+ expect(File.read(@dest_page)).to include("foobledooble")
53
+ end
54
+ end
55
+
56
+ context "used with the vacuous template" do
57
+ let(:test_page_contents) {
58
+ <<-MD
59
+ ---
60
+ layout: vacuous_html
61
+ ---
62
+ Test test test
63
+ {% lilypond source_template_code: "{ {{ content }} }",
64
+ include_template_code: '<img src="{{ filename }}.svg" />' %}
65
+ c d e f g a b c
66
+ {% endlilypond %}
67
+ Test test test
68
+ MD
69
+ }
70
+ before(:each) do site.process end
71
+ it "doesn't just emit the tag contents" do
72
+ expect(File.read(@dest_page)).not_to include("c d e f g a b c")
73
+ end
74
+ it "produces a SVG in the source tree" do
75
+ expect(File).to exist("#{@temp_dir}/lilypond_files/a5b1d61f70473f0247629a66cfc50e52.svg")
76
+ end
77
+ it "produces a SVG in the destination tree" do
78
+ expect(File).to exist("#{dest_dir}/lilypond_files/a5b1d61f70473f0247629a66cfc50e52.svg")
79
+ end
80
+ it "produces an image element in the rendered page" do
81
+ expect(File.read(@dest_page)).to include('<img src="a5b1d61f70473f0247629a66cfc50e52.svg" />')
82
+ end
83
+ end
84
+
85
+ context "used with the vacuous template" do
86
+ let(:test_page_contents) {
87
+ <<-MD
88
+ ---
89
+ layout: vacuous_html
90
+ ---
91
+ Test test test
92
+ {% lilypond source_template: "vacuous_ly",
93
+ include_template_code: '<img src="{{ filename }}.svg" />' %}
94
+ c d e f g a b c
95
+ {% endlilypond %}
96
+ Test test test
97
+ MD
98
+ }
99
+ before(:each) do site.process end
100
+ it "doesn't just emit the tag contents" do
101
+ expect(File.read(@dest_page)).not_to include("c d e f g a b c")
102
+ end
103
+ it "produces a SVG in the source tree" do
104
+ expect(File).to exist("#{@temp_dir}/lilypond_files/a5b1d61f70473f0247629a66cfc50e52.svg")
105
+ end
106
+ it "produces a SVG in the destination tree" do
107
+ expect(File).to exist("#{dest_dir}/lilypond_files/a5b1d61f70473f0247629a66cfc50e52.svg")
108
+ end
109
+ it "produces an image element in the rendered page" do
110
+ expect(File.read(@dest_page)).to include('<img src="a5b1d61f70473f0247629a66cfc50e52.svg" />')
111
+ end
112
+ end
113
+ end
114
+
115
+
@@ -0,0 +1,88 @@
1
+ require 'simplecov'
2
+ SimpleCov.start
3
+
4
+ require "jekyll"
5
+ require "jekyll-lilypond"
6
+
7
+ RSpec.configure do |config|
8
+
9
+ config.expect_with :rspec do |expectations|
10
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
11
+ end
12
+
13
+ config.mock_with :rspec do |mocks|
14
+ mocks.verify_partial_doubles = true
15
+ end
16
+
17
+ config.shared_context_metadata_behavior = :apply_to_host_groups
18
+
19
+ #https://ayastreb.me/writing-a-jekyll-plugin/ from here on down
20
+ SOURCE_DIR = File.expand_path("../fixtures", __FILE__)
21
+ DEST_DIR = File.expand_path("../dest", __FILE__)
22
+
23
+ def source_dir(*files)
24
+ File.join(SOURCE_DIR, *files)
25
+ end
26
+
27
+ def dest_dir(*files)
28
+ File.join(DEST_DIR, *files)
29
+ end
30
+
31
+ def make_context(registers = {})
32
+ Liquid::Context.new({}, {}, { :site => site }.merge(registers))
33
+ end
34
+
35
+ # The settings below are suggested to provide a good initial experience
36
+ # with RSpec, but feel free to customize to your heart's content.
37
+ =begin
38
+ # This allows you to limit a spec run to individual examples or groups
39
+ # you care about by tagging them with `:focus` metadata. When nothing
40
+ # is tagged with `:focus`, all examples get run. RSpec also provides
41
+ # aliases for `it`, `describe`, and `context` that include `:focus`
42
+ # metadata: `fit`, `fdescribe` and `fcontext`, respectively.
43
+ config.filter_run_when_matching :focus
44
+
45
+ # Allows RSpec to persist some state between runs in order to support
46
+ # the `--only-failures` and `--next-failure` CLI options. We recommend
47
+ # you configure your source control system to ignore this file.
48
+ config.example_status_persistence_file_path = "spec/examples.txt"
49
+
50
+ # Limits the available syntax to the non-monkey patched syntax that is
51
+ # recommended. For more details, see:
52
+ # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/
53
+ # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/
54
+ # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode
55
+ config.disable_monkey_patching!
56
+
57
+ # This setting enables warnings. It's recommended, but in some cases may
58
+ # be too noisy due to issues in dependencies.
59
+ config.warnings = true
60
+
61
+ # Many RSpec users commonly either run the entire suite or an individual
62
+ # file, and it's useful to allow more verbose output when running an
63
+ # individual spec file.
64
+ if config.files_to_run.one?
65
+ # Use the documentation formatter for detailed output,
66
+ # unless a formatter has already been configured
67
+ # (e.g. via a command-line flag).
68
+ config.default_formatter = "doc"
69
+ end
70
+
71
+ # Print the 10 slowest examples and example groups at the
72
+ # end of the spec run, to help surface which specs are running
73
+ # particularly slow.
74
+ config.profile_examples = 10
75
+
76
+ # Run specs in random order to surface order dependencies. If you find an
77
+ # order dependency and want to debug it, you can fix the order by providing
78
+ # the seed, which is printed after each run.
79
+ # --seed 1234
80
+ config.order = :random
81
+
82
+ # Seed global randomization in this process using the `--seed` CLI option.
83
+ # Setting this allows you to use `--seed` to deterministically reproduce
84
+ # test failures related to randomization by passing the same `--seed` value
85
+ # as the one that triggered the failure.
86
+ Kernel.srand config.seed
87
+ =end
88
+ end