我想创建一个除了默认的'foo'.titlecase之外的方法,它将正确地添加"占有性".
字符串是用户的名字(< - 只是在那里做了一个!)
例如:"sam"是用户<%= user.titlecase.possessive +'个人资料'%> => #Sam的个人资料
它只需要处理边缘情况,如:
钢人队的简介(应该是钢人队的简介)罗斯的简介(应该是罗斯的简介)
Cod*_*dad 31
我也需要这个,因此我在github上提供了实现,并在rubygems 上作为gem,所以你可以很容易地将它包含在你的项目中.
在rails 3中你所做的就是
gem "possessive"
Run Code Online (Sandbox Code Playgroud)
你会拥有它.
Jam*_*noy 21
对于Musta爱好者(以及三元运算符的爱好者),对BaroqueBobcat的代码进行了一次轻微的重写:
初始化:
module StringExtensions
def possessive
self + ('s' == self[-1,1] ? "'" : "'s")
end
end
class String
include StringExtensions
end
Run Code Online (Sandbox Code Playgroud)
应该规范:
require File.expand_path(File.dirname(__FILE__) + "/../test_helper")
class StringExtensionsTest < ActiveSupport::TestCase
context 'String' do
context '#possessive' do
should "turn sam into sam's" do
assert_equal "sam's", "sam".possessive
end
should "turn Steelers into Steelers'" do
assert_equal "Steelers'", "Steelers".possessive
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
编辑:请参阅Rimian对此问题的回答,该问题正确处理"who"和"it".
Bar*_*cat 14
考虑到ruby的开放课程,你想要的是非常微不足道的.
class String
def possessive
self + case self[-1,1]#1.8.7 style
when 's' then "'"
else "'s"
end
end
end
#rspec examples
describe "String#possessive" do
it "should turn Steelers into Steelers'" do
"Steelers".possessive.should == "Steelers'"
end
it "should turn sam into sam's" do
"sam".possessive.should == "sam's"
end
end
Run Code Online (Sandbox Code Playgroud)
您可能希望将其放在插件中,以使其与业务逻辑代码分开.
$ script/generate plugin Possessiveate
Run Code Online (Sandbox Code Playgroud)
然后将代码放到插件目录中生成的init.rb中.几乎所有其他生成的文件都不需要,但您可能有兴趣查看默认文件结构.
Rim*_*ian 14
我真的不想使用Gem,所以已经在这里实现了一些答案的组合.但是当我意识到这些例子不正确时,我在半夜醒来.那个"谁"和"它"怎么样?(英文很难!)
module Possessive
def possessive
suffix = if self.downcase == 'it'
"s"
elsif self.downcase == 'who'
'se'
elsif self.end_with?('s')
"'"
else
"'s"
end
self + suffix
end
end
class String
include Possessive
end
Run Code Online (Sandbox Code Playgroud)
和规格:
describe Possessive do
it "has possessive names not ending in s" do
"james".possessive.should == "james'"
end
it "has possessive names not ending in s" do
"James".possessive.should == "James'"
end
it "has possessive names ending in s" do
"sally".possessive.should == "sally"
end
it "has possessive names ending in s" do
"Sally".possessive.should == "Sally's"
end
it "has possessive its" do
"it".possessive.should == "its"
end
it "has possessive Its" do
"It".possessive.should == "Its"
end
it "has possessive who" do
"who".possessive.should == "whose"
end
it "has possessive Who" do
"Who".possessive.should == "Whose"
end
end
Run Code Online (Sandbox Code Playgroud)
注意:这不是最优雅的解决方案.但正如阿尔伯特爱因斯坦所说,优雅适合裁缝.
| 归档时间: |
|
| 查看次数: |
9452 次 |
| 最近记录: |