stringex:实践指南
在项目中评估stringex,可以先看清用途边界:[希望]对 Ruby 的 String 类有一些有用的扩展。实际做日常自动化时,经常会碰到输入边界、依赖和失败处理如果不清楚就很难稳定复用,所以功能列表并不能代替验证。短测时我会用一项范围明确的真实任务完成最小试跑,并保留配置时间、输出质量、异常信息和维护痕迹的结果,方便团队复盘。如果团队属于愿意先做小范围验证并复查原始文档的团队,它有继续测试的理由;否则先看替代方案会更省时间。
Stringex
[希望]对 Ruby 的 String 类有一些有用的扩展。它由三个库组成:ActsAsUrl、Unidecoder 和 StringExtensions。
NOTE:Stringex 2.0 [及更高版本] 放弃了对 Rails 2 的支持。如果您需要对该版本的支持,请改用 1.5.1。
ActsAsUrl
NOTE:您现在可以要求“stringex_lite”而不是“stringex”,并在不需要时跳过加载 ActsAsUrl 功能。
该库旨在创建属性的 URI- 友好表示,用于从属性生成 url。基本用法就是调用该方法:
# Inside your model
acts_as_url :title
这将使用 title 属性的转换内容填充对象上的 url 属性。 acts_as_url 采用以下选项:
:url_attribute |
用于存储生成的 url 字符串的属性名称。默认为 :url |
:scope |
唯一 url 范围的模型属性的名称。这里没有默认值。 |
:only_when_blank |
如果设置为 true,则仅当 :url_attribute 为空时才会生成 url。默认值为 false(意味着 url 生成始终会发生)。 |
:sync_url |
如果设置为 true,则当对其所基于的属性进行更改时,url 字段将被更新。默认为 false。 |
:allow_slash |
如果设置为 true,则 url 字段将不会转换斜杠。默认为 false。 |
:allow_duplicates |
如果设置为 true,则不会强制执行唯一 url。默认为 false。 NOTE:如果您仅在生成的 slug 上进行路由,则强烈不建议这样做,因为您将不再保证根据重复的 slug 查找预期记录。 |
:limit |
如果设置,将限制生成的 url 长度。默认为零。 |
:truncate_words |
与 :limit 一起使用。如果设置为 false,则 url 将被截断为达到限制之前的最后一个完整单词。默认为 true。 |
:blacklist |
不应允许的 URL 列表。默认值为 %w{new} [这可以避免 /documents/new 等 url 上的混淆]。 |
:blacklist_policy |
Proc 或 lambda 定义遇到黑名单 url 时的新命名行为。默认将 /documents/new 转换为 /documents/new-document。 |
为了使用生成的 url 属性,您可能需要
在您的模型中像这样覆盖 to_param :
# Inside your model
def to_param
url # or whatever you set :url_attribute to
end
通过 foo_path(@foo) 等命名路由调用的路由将自动使用该 url。在你的控制器中你需要调用
Foo.find_by_url(params[:id]) 而不是常规查找。不要寻找params[:url],除非你在路由中明确设置它,to_param将生成params[:id]。
请注意,如果将 acts_as_url 添加到现有模型,则 url 数据库列最初将为空。要为现有实例设置此列,您可以使用 initialize_urls 方法。因此,如果您的班级是 Post,只需说 Post.initialize_urls 即可。
与其他永久链接解决方案不同,ActsAsUrl 不依赖 Iconv(它在不同平台上不一致,并且不能按原样提供出色的音译),而是使用音译方案(请参阅 Unidecoder 的代码),该方案可以为 Unicode 字符产生更好的结果。它还混合了一些自定义帮助程序,将常见字符转换为更加 URI- 友好的格式,而不是完全转储它们。示例:
# A simple prelude
"simple English".to_url => "simple-english"
"it's nothing at all".to_url => "its-nothing-at-all"
"rock & roll".to_url => "rock-and-roll"
# Let's show off
"$12 worth of Ruby power".to_url => "12-dollars-worth-of-ruby-power"
“如果您立即行动,可享受 10% 折扣”.to_url => “如果您立即行动,可享受 10% 折扣”
# You dont EVEN wanna rely on Iconv for this next part
"kick it en Français".to_url => "kick-it-en-francais"
"rock it Español style".to_url => "rock-it-espanol-style"
"tell your readers 你好".to_url => "tell-your-readers-ni-hao"
将这些结果与我的 Intel Mac 上由领先的永久链接插件生成的结果进行比较:
"simple English" # => "simple-english"
"it's nothing at all" # => "it-s-nothing-at-all"
"rock & roll" # => "rock-roll"
"$12 worth of Ruby power" # => "12-worth-of-ruby-power"
"10% off if you act now" # => "10-off-if-you-act-now"
"kick it en Français" # => "kick-it-en-francais"
"rock it Español style" # => "rock-it-espan-ol-style"
"tell your readers 你好" # => "tell-your-readers"
实际上并不是那么好。
注意:无意冒犯任何可能产生此类结果的插件的作者。 Iconv 烂透了,这不是你的错。
统一解码器
该库将 Unicode [和重音 ASCII] 字符转换为其纯文本 ASCII 等效项。这是 Perl 的 Unicode 的移植,提供比 Iconv 更优越、更可靠的结果。 (说真的,Icon...你们两个房子都遭受瘟疫![原文如此])
您可能只需要 unidecoder (及其相关本地化)
require "stringex/unidecoder"
您可能永远不需要单独运行 Unicode。因此,您可能想要添加 String#to_ascii,它包含了 Unidecoder 的所有功能,需要:
require "stringex/core_ext"
对于任何感兴趣的人,可以在 Text::Unidecode 的原始实现中阅读实现的详细信息。测试中可以找到大量示例。
StringExtensions
Ruby 的 String 类扩展的一个小集合。有关更多信息,请参阅 StringExtensions 模块的文档。关于它们其实没什么好解释的。
本地化
使用 Stringex 2.0 及更高版本,您可以本地化 Stringex 中的不同转换。在这里阅读更多 here。如果您添加新语言,请提交拉取请求,以便我们也可以将其提供给其他用户。
Ruby on Rails 用法
将 Stringex 与 Ruby on Rails 结合使用时,您会自动获得各种字符、HTML 实体和粗俗分数的内置翻译。您可以在此处查看 Stringex 的标准翻译 here。
目前,内置翻译可用于以下语言:
- 英语(en)
- 丹麦语 (da)
- 瑞典语 (sv)
- 荷兰语 (nl)
- 德语 (de)
- 波兰语(pl)
- 巴西葡萄牙语 (pt-BR)
- 俄语 (ru)
您可以轻松添加自己的翻译或自定义内置翻译 - 请在此处阅读 here。如果您添加新语言,请提交拉取请求,以便我们也可以将其提供给其他用户。
如果您不想使用 Stringex 内置翻译,您可以强制 Stringex 使用英语(或其他语言),无论您的 I18n.locale 中是什么。在初始化程序中,e.g。 config/initializers/stringex.rb:
Stringex::Localization.locale = :en
CanCan 使用说明
您需要将 :find_by => :url 添加到 load_and_authorize_resource。这是一个例子:
load_and_authorize_resource :class => "随便", :message => "未授权", :find_by => :url
语义版本控制
该项目符合 语义版本。由于此策略,您可以(并且应该)使用 悲观版本约束 指定对此 gem 的依赖关系,精度为两位数。例如:
spec.add_dependency 'stringex', '~> 1.0'
这意味着您的项目与被许可方 1.0 直至 2.0 兼容。您还可以设置更高的最低版本:
spec.add_dependency 'stringex', '~> 1.1'
-
09.11
pytorch-gradual-warmup-lr:实践指南
-
09.11
EASY-HWID-SPOOFER:实践指南
-
09.11
computer-museum-dnbwg:实践指南
-
09.11
tmux-better-mouse-mode:实践指南
-
09.11
onnx2tf:实践指南
-
09.11
keras-hub:实践指南
-
- wechat-app-mall:实践指南
- 09.11
-
- houdini-samples:实践指南
- 09.11
-
-
下载
- |
-
-
下载
- 《行尸走肉第一章》免安装中文汉化硬盘版下载
- 单机|436 MB
- 一款以动作冒险为主题的游戏
-
-
下载
- 《街头霸王X铁拳》免安装中文汉化硬盘版下载
- 单机|111MB
- 一款非常好玩的格斗游戏
-
-
下载
- |
-
-
下载
- 《暗黑破坏神3》免安装繁体中文正式版下载
- 单机|7630 MB
- 一款以角色扮演为主题的游戏
-
-
下载
- 《马克思佩恩3》免安装硬盘版下载
- 单机|27033 MB
- 一款以第三人称射击为主题的游戏