Ruby:没有 Ruby on rails 框架的参数化字符串Jekyll 插件

如何解决Ruby:没有 Ruby on rails 框架的参数化字符串Jekyll 插件

我有一个插件,它从帖子的前端获取属性并在永久链接中使用它。问题是我需要在将字符串放入永久链接之前清除字符串中的所有重音和变音符号。 Ruby on rails 有一个名为 parametrize方法,它完全符合我的需要,但我不知道如何在插件中使用它。

这是我的插件代码

module JekyllCustomPermalink
  class CustomPermalink < Jekyll::Generator
    safe true
    priority :low

    def generate(site)
      # nothing to do,wait for hook
    end

    Jekyll::Hooks.register :documents,:pre_render do |doc|
      begin
        # check if jekyll can resolve the url template
        doc.url
      rescue NoMethodError => error
        begin
          if !doc.collection.Metadata.fetch("custom_permalink_placeholders").is_a?(Array)
            raise CustomPermalinkSetupError,"The custom placeholders need to be an array! Check the settings of your '#{doc.collection.label}' collection."
          end
          def doc.url_template
            @custom_url_template ||= collection.Metadata.fetch("custom_permalink_placeholders").inject(collection.url_template){|o,m| o.sub ":" + m,data[m].to_s.parameterize}
          end
        rescue KeyError
          # "custom_permalink_placeholders"
          raise CustomPermalinkSetupError,"No custom placeholders defined for the '#{doc.collection.label}' collection. Define an array of placeholders under the key 'custom_permalink_placeholders'. \nCaused by: " + error.to_s
        end
      end
    end
  end
end

但我收到此错误

john@arch-thinkpad ~/P/blog (master)> bundle exec jekyll serve --trace
Configuration file: /home/john/Projects/lyricall/_config.yml
            Source: /home/john/Projects/lyricall
       Destination: /home/john/Projects/lyricall/_site
 Incremental build: disabled. Enable with --incremental
      Generating...
       Jekyll Feed: Generating Feed for posts
  Liquid Exception: undefined method `parameterize' for "Žďořšťáčik":String in Feed.xml
bundler: Failed to load command: jekyll (/home/john/.gem/ruby/3.0.0/bin/jekyll)
/usr/lib/ruby/gems/3.0.0/gems/jekyll_custom_permalink-0.0.1/lib/jekyll_custom_permalink/custom_permalink.rb:20:in `block in url_template': undefined method `parameterize' for "Žďořšťáčik":String (NoMethodError)

我做错了什么?我如何使用这个应该是字符串类的一部分但显然不是的方法?如何在没有 ruby​​ on rails 框架的情况下获得相同的结果?

信息:

  • jekyll 4.1.1
  • ruby 3.0.1p64(2021-04-05 修订版 0fb782ee38)[x86_64-linux]

感谢您的帮助

解决方法

Rails 添加到基本 Ruby 类中,例如 String#parameterize,是 Active Support Core Extensions 的一部分。 activesupport gem 可以独立于 Rails 安装和使用。

为了保持较低的默认占用空间,ActiveSupport 允许您只require 您想要使用的单个扩展。在您的情况下,您需要要求字符串屈折扩展:

require 'active_support/core_ext/string/inflections'
"Kurt Gödel".parameterize 
=> "kurt-godel"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?