redcarpet-render-seeing_is_believing 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bcc1c0f28a1ecc77cb296065f2eee3ee6fd61263
4
- data.tar.gz: c0e118eb283f1c629c247ff3e4acfa52db02c0a9
3
+ metadata.gz: 994ea9eff8c6cc2193109d282d4750a1ba3d34d5
4
+ data.tar.gz: e8227910b3bb41cc607ca143b55d6e0787642e5f
5
5
  SHA512:
6
- metadata.gz: 6f70e28b8a9fd891543d1aa5de894be380ac6e0a164415b09f0488e04d3d89415c5ec99ef67a6a6b513b418b8a2496c8ee02edcb9391c4fd837a0cf4491e0483
7
- data.tar.gz: af66b1f4f0125202691aa9be088fdb550eab876f7624624cfcc388eafc363a592698b2c393c2edbaf33339d477bee8df1f28c1157305d236f596bbfcd4cd6667
6
+ metadata.gz: c1a1ec1a15f342fdf3d8a1b9bfd05a2927a525dbfc99a094690625925ecf093532808e87653607e3133bbe265c2a7c9cbeb73bb6be837de592ef93744247356f
7
+ data.tar.gz: dd58fba896fdee7426a91065e8e8152034e2ea6b75aa8d81e68369aa6ae0f258efd21a23cbf0b33aba84ae7fb8526b620f04076c6a965c4580e0717b2d0c4a6a
@@ -1,5 +1,7 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
- - 2.4.1
4
+ - 2.3
5
+ - 2.4
6
+ - 2.5
5
7
  before_install: gem install bundler -v 1.16.1
@@ -0,0 +1,9 @@
1
+ # Changes
2
+
3
+ ## 0.2.0 (12th Jan, 2018)
4
+
5
+ - Allow exceptions to be shown when the `ruby+e` option is specified
6
+
7
+ ## 0.1.0 (7th Jan, 2018)
8
+
9
+ - Initial release
data/README.md CHANGED
@@ -1,8 +1,10 @@
1
1
  # Redcarpet::Render::SeeingIsBelieving
2
2
 
3
+ [![Build Status](https://travis-ci.org/odlp/redcarpet-render-seeing_is_believing.svg?branch=master)](https://travis-ci.org/odlp/redcarpet-render-seeing_is_believing)
4
+
3
5
  Powerup the Ruby examples in your markdown. Combines the excellent
4
6
  [Redcarpet][redcarpet] (a markdown parser) with [Seeing Is Believing][sib],
5
- which evaluates each line of code.
7
+ which shows the evaluated result from each line of code.
6
8
 
7
9
  If your markdown includes a fenced code block with `ruby+` specified as the
8
10
  language:
@@ -23,11 +25,11 @@ require "redcarpet-render-seeing_is_believing"
23
25
  require "redcarpet"
24
26
 
25
27
  class MyCustomHtmlRenderer < Redcarpet::Render::HTML
28
+ prepend Redcarpet::Render::SeeingIsBelieving
29
+
26
30
  def block_code(code, language)
27
31
  "<pre><code>#{code}</code></pre>"
28
32
  end
29
-
30
- prepend Redcarpet::Render::SeeingIsBelieving
31
33
  end
32
34
 
33
35
  Redcarpet::Markdown.new(MyCustomHtmlRenderer, fenced_code_blocks: true).
@@ -56,7 +58,15 @@ Redcarpet::Markdown.new(MyCustomHtmlRenderer, fenced_code_blocks: true).
56
58
  [redcarpet]: https://github.com/vmg/redcarpet
57
59
  [sib]: https://github.com/JoshCheek/seeing_is_believing
58
60
 
61
+ ## Options
62
+
63
+ You can pass additional options after the `ruby+` language hint:
64
+
65
+ - `ruby+e`: Hints exceptions are expected, and should be displayed. Exceptions
66
+ are hidden by default.
67
+
59
68
  ## TODO
60
69
 
61
- - Ignore exceptions / failed evaluations by default
62
70
  - Allow comments to be scoped to specific lines
71
+ - Wrap comments to the following line when the overall length is greater than
72
+ 80 chars
@@ -1,12 +1,14 @@
1
1
  require "redcarpet/render/seeing_is_believing/enricher"
2
+ require "redcarpet/render/seeing_is_believing/options"
2
3
  require "redcarpet/render/seeing_is_believing/version"
3
4
 
4
5
  module Redcarpet
5
6
  module Render
6
7
  module SeeingIsBelieving
7
8
  def block_code(code, language)
8
- if language == "ruby+"
9
- enriched_code = Enricher.new.process(code)
9
+ if language.start_with? "ruby+"
10
+ options = Options.parse(language)
11
+ enriched_code = Enricher.new(options).process(code)
10
12
  super(enriched_code, "ruby")
11
13
  else
12
14
  super(code, language)
@@ -1,31 +1,59 @@
1
1
  require "seeing_is_believing"
2
+ require_relative "options"
2
3
 
3
4
  module Redcarpet
4
5
  module Render
5
6
  module SeeingIsBelieving
6
7
  class Enricher
8
+ def initialize(options = Options.new)
9
+ @options = options
10
+ end
11
+
7
12
  def process(code)
8
13
  code.split("\n").
9
14
  zip(evaluate_code(code)).
10
- map(&combine_code_and_eval_lines).
15
+ map(&combine_code_with_result).
11
16
  join("\n")
12
17
  end
13
18
 
14
19
  private
15
20
 
21
+ attr_reader :options
22
+
16
23
  def evaluate_code(code)
17
- ::SeeingIsBelieving.call(code).result
24
+ eval_result = ::SeeingIsBelieving.call(code).result
25
+ combine_eval_lines_and_exceptions(eval_result)
18
26
  end
19
27
 
20
- def combine_code_and_eval_lines
21
- proc do |code_line, eval_lines|
28
+ def combine_eval_lines_and_exceptions(result)
29
+ (1..result.num_lines).map do |line_number|
30
+ eval_lines = result[line_number]
31
+ exception = exception_for_line(result.exceptions, line_number)
32
+
22
33
  if eval_lines.any?
23
- code_line + " # => " + eval_lines.join("\n")
34
+ eval_lines.join(" ")
35
+ elsif exception
36
+ "#{exception.class_name}: #{exception.message}"
37
+ end
38
+ end
39
+ end
40
+
41
+ def exception_for_line(exceptions, line_number)
42
+ if options.show_exceptions
43
+ exceptions.detect { |ex| ex.line_number == line_number }
44
+ end
45
+ end
46
+
47
+ def combine_code_with_result
48
+ proc do |code_line, eval_line|
49
+ if eval_line
50
+ "#{code_line} # => #{eval_line}"
24
51
  else
25
52
  code_line
26
53
  end
27
54
  end
28
55
  end
56
+
29
57
  end
30
58
  end
31
59
  end
@@ -0,0 +1,19 @@
1
+ module Redcarpet
2
+ module Render
3
+ module SeeingIsBelieving
4
+ class Options
5
+ attr_reader :show_exceptions
6
+
7
+ def self.parse(language)
8
+ options = language.partition("+").last
9
+
10
+ new(show_exceptions: options.include?("e"))
11
+ end
12
+
13
+ def initialize(show_exceptions: false)
14
+ @show_exceptions = show_exceptions
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,7 +1,7 @@
1
1
  module Redcarpet
2
2
  module Render
3
3
  module SeeingIsBelieving
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redcarpet-render-seeing_is_believing
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oli Peate
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-01-07 00:00:00.000000000 Z
11
+ date: 2018-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redcarpet
@@ -146,6 +146,7 @@ files:
146
146
  - ".gitignore"
147
147
  - ".rspec"
148
148
  - ".travis.yml"
149
+ - CHANGELOG.md
149
150
  - Gemfile
150
151
  - README.md
151
152
  - Rakefile
@@ -153,6 +154,7 @@ files:
153
154
  - bin/setup
154
155
  - lib/redcarpet/render/seeing_is_believing.rb
155
156
  - lib/redcarpet/render/seeing_is_believing/enricher.rb
157
+ - lib/redcarpet/render/seeing_is_believing/options.rb
156
158
  - lib/redcarpet/render/seeing_is_believing/version.rb
157
159
  - redcarpet-render-seeing_is_believing.gemspec
158
160
  homepage: https://github.com/odlp/redcarpet-render-seeing_is_believing