markdown-rails 2.1.0 → 2.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
  SHA256:
3
- metadata.gz: e552ca56be38b384f153880f11a5edb336f61b12e1e85448278b7e2f81723767
4
- data.tar.gz: 9bbd303fb44492ffd820e0894144b51e387db88ed35197c3c4c76902a352118c
3
+ metadata.gz: 2cce6aedcf3e854a5907729d8ef780db22f9c69a20e92dd34603a4dcbfb6e699
4
+ data.tar.gz: 13374d49447c0d025e5d17a84f927c9027b7031c8a0c938ba3e64a44e179c66d
5
5
  SHA512:
6
- metadata.gz: 78566da895833c13a2e604ad9462d98be9e9c710a8cef12435be8e765204da9a5404a93a51824155b804de743646d54193fb9fd1af208ef986a3c9121dc9f5aa
7
- data.tar.gz: 017a386e646f20a08364d75827b956d8a12b933b360ff86e4105180e92ee5cb4ca58ed05a14ae6db5b8569568ce2dad300558ffab866aa81df986d154b0a9091
6
+ metadata.gz: eaf381f89c5d0105ef005a3008e71fac4ae726c5bc137f02c8a4e6b291ca95f491a018ee008248ada11af0842f2ae0efefa3b561ed061c1ab2450dfc5b4b1cea
7
+ data.tar.gz: 7d2e28141e71907f81a0fed9efca8b673708c9031adfdd19b94ed59823f51cd350687018ed74091085ebb949a736fa40fc8e3edc9c9103461ac434653d712f82
data/Rakefile CHANGED
@@ -1,5 +1,7 @@
1
1
  require "bundler/setup"
2
+ require "bundler/gem_tasks"
3
+ require "rspec/core/rake_task"
2
4
 
3
- load "rails/tasks/statistics.rake"
5
+ RSpec::Core::RakeTask.new(:spec)
4
6
 
5
- require "bundler/gem_tasks"
7
+ task default: :spec
@@ -9,17 +9,18 @@ class ApplicationMarkdown < MarkdownRails::Renderer::Rails
9
9
  # Run `bundle add rouge` and uncomment the include below for syntax highlighting
10
10
  # include MarkdownRails::Helper::Rouge
11
11
 
12
- # If you need access to ActionController::Base.helpers, you can delegate by uncommenting
13
- # and adding to the list below. Several are already included for you in the `MarkdownRails::Renderer::Rails`,
14
- # but you can add more here.
12
+ # The renderer has access to the view_context, which provides access to:
13
+ # - View helpers (image_tag, link_to, content_tag, etc.)
14
+ # - Asset helpers (image_path, image_url, asset_path, etc.)
15
+ # - URL helpers (root_path, user_path, etc.)
15
16
  #
16
- # To see a list of methods available run `bin/rails runner "puts ActionController::Base.helpers.public_methods.sort"`
17
+ # Many common helpers are already delegated. You can add more by uncommenting
18
+ # and extending the delegate list in your subclass:
17
19
  #
18
20
  # delegate \
19
- # :request,
20
- # :cache,
21
- # :turbo_frame_tag,
22
- # to: :helpers
21
+ # :current_user,
22
+ # :some_custom_helper,
23
+ # to: :view_context
23
24
 
24
25
  # These flags control features in the Redcarpet renderer, which you can read
25
26
  # about at https://github.com/vmg/redcarpet#and-its-like-really-simple-to-use
@@ -10,4 +10,4 @@ end
10
10
  # trust, like content files from your code repo.
11
11
  MarkdownRails.handle :markerb do
12
12
  ErbMarkdown.new
13
- end
13
+ end
@@ -2,18 +2,38 @@ module MarkdownRails
2
2
  # We cannot use MarkdownRails because it conflicts with RDiscount's Markdown class
3
3
  class Handler
4
4
  DEFAULT_EXTENSION = :md
5
+ @@handlers = {}
5
6
 
6
- def initialize(&block)
7
+ def initialize(extension, &block)
8
+ @extension = extension
7
9
  @markdown = block
10
+ @@handlers[@extension] = self
8
11
  end
9
12
 
10
13
  def call(template, source = template.source)
11
- renderer.render(source).inspect + '.html_safe'
14
+ # Generate code that fetches the handler and calls the block at render time
15
+ extension = @extension
16
+ <<~RUBY
17
+ begin
18
+ handler = MarkdownRails::Handler.handler_for(#{extension.inspect})
19
+ renderer = handler.create_renderer
20
+ renderer.view_context = self
21
+ renderer.renderer.render(#{source.inspect}).html_safe
22
+ end
23
+ RUBY
24
+ end
25
+
26
+ def create_renderer
27
+ @markdown.call
28
+ end
29
+
30
+ def self.handler_for(extension)
31
+ @@handlers[extension]
12
32
  end
13
33
 
14
34
  def self.handle(*extensions, &block)
15
35
  Array(extensions).each do |extension|
16
- handler = new &block
36
+ handler = new(extension, &block)
17
37
  ActionView::Template.register_template_handler extension, handler
18
38
  end
19
39
  end
@@ -23,21 +43,5 @@ module MarkdownRails
23
43
  def self.register_default
24
44
  handle(DEFAULT_EXTENSION) { MarkdownRails::Renderer::Rails.new }
25
45
  end
26
-
27
- private
28
-
29
- def markdown
30
- @cache = nil unless cache_enabled?
31
- @cache ||= @markdown.call
32
- end
33
-
34
- def renderer
35
- @renderer = nil unless cache_enabled?
36
- @renderer ||= markdown.renderer
37
- end
38
-
39
- def cache_enabled?
40
- ::Rails.configuration.cache_classes
41
- end
42
46
  end
43
- end
47
+ end
@@ -16,7 +16,9 @@ module MarkdownRails
16
16
  end
17
17
 
18
18
  def renderer
19
- ::Redcarpet::Markdown.new(self.class, **features)
19
+ # I can get away passing fatures into this class because they don't
20
+ # overlap and RedCarpet is happy accepting both.
21
+ ::Redcarpet::Markdown.new(self.class.new(**features), **features)
20
22
  end
21
23
 
22
24
  private
@@ -3,15 +3,31 @@ module MarkdownRails
3
3
  class Rails < Base
4
4
  include ::Rails.application.routes.url_helpers
5
5
 
6
- # Rendering from Markdown is actually outside of the view
7
- # context, so we need to delegate render to the ApplicationController
8
- # render method that can render outside of the view context.
9
- delegate \
10
- :helpers,
11
- :render,
12
- to: :base_controller
6
+ attr_accessor :view_context
7
+
8
+ def initialize(**options)
9
+ super(**options)
10
+ end
11
+
12
+ def image(link, title, alt)
13
+ image_tag link, title: title, alt: alt
14
+ end
13
15
 
16
+ def view_context
17
+ @view_context ||= self.class.default_view_context
18
+ end
19
+
20
+ # Delegate view helpers to view_context since they need view state.
21
+ # The view_context has all helpers properly configured with @output_buffer, etc.
22
+ # For custom helpers, access them via view_context:
23
+ # view_context.my_custom_helper
24
+ # Or delegate them explicitly in your subclass:
25
+ # delegate :my_custom_helper, to: :view_context
14
26
  delegate \
27
+ :render,
28
+ :link_to,
29
+ :button_to,
30
+ :mail_to,
15
31
  :asset_digest_path,
16
32
  :asset_path,
17
33
  :asset_url,
@@ -26,21 +42,32 @@ module MarkdownRails
26
42
  :video_path,
27
43
  :video_tag,
28
44
  :video_url,
45
+ :javascript_include_tag,
46
+ :stylesheet_link_tag,
29
47
  :tag,
30
48
  :content_tag,
31
49
  :request,
32
50
  :turbo_frame_tag,
33
51
  :controller,
34
52
  :raw,
35
- to: :helpers
53
+ :safe_join,
54
+ :capture,
55
+ to: :view_context
36
56
 
37
- def image(link, title, alt)
38
- image_tag link, title: title, alt: alt
57
+ def renderer
58
+ # Override Base#renderer to pass view_context to the new instance
59
+ new_instance = self.class.new(**features)
60
+ new_instance.view_context = view_context
61
+ ::Redcarpet::Markdown.new(new_instance, **features)
62
+ end
63
+
64
+ def self.default_view_context
65
+ ::ApplicationController.new.view_context
39
66
  end
40
67
 
41
- protected
42
- def base_controller
43
- ::ApplicationController
68
+ private
69
+ def features
70
+ Hash[Array(enable).map{ |feature| [ feature, true ] }]
44
71
  end
45
72
  end
46
73
  end
@@ -1,3 +1,3 @@
1
1
  module MarkdownRails
2
- VERSION = "2.1.0"
2
+ VERSION = "2.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: markdown-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brad Gessler
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2023-10-13 00:00:00.000000000 Z
10
+ date: 2025-11-04 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: railties
@@ -66,6 +65,20 @@ dependencies:
66
65
  - - ">="
67
66
  - !ruby/object:Gem::Version
68
67
  version: 3.0.0
68
+ - !ruby/object:Gem::Dependency
69
+ name: rspec-rails
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '6.0'
75
+ type: :development
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '6.0'
69
82
  description: Markdown Rails is a comprehensive stack for rendering Markdown templates
70
83
  and partials in Rails.
71
84
  email:
@@ -100,7 +113,6 @@ metadata:
100
113
  homepage_uri: https://github.com/sitepress/markdown-rails
101
114
  source_code_uri: https://github.com/sitepress/markdown-rails
102
115
  changelog_uri: https://github.com/sitepress/markdown-rails
103
- post_install_message:
104
116
  rdoc_options: []
105
117
  require_paths:
106
118
  - lib
@@ -115,8 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
115
127
  - !ruby/object:Gem::Version
116
128
  version: '0'
117
129
  requirements: []
118
- rubygems_version: 3.4.6
119
- signing_key:
130
+ rubygems_version: 3.6.2
120
131
  specification_version: 4
121
132
  summary: Markdown templates and partials in Rails.
122
133
  test_files: []