redcarpet-render-seeing_is_believing 0.1.0 → 0.2.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
  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