diff options
author | Jeremy Kemper <jeremy@bitsweat.net> | 2008-01-03 02:43:19 +0000 |
---|---|---|
committer | Jeremy Kemper <jeremy@bitsweat.net> | 2008-01-03 02:43:19 +0000 |
commit | 2ae55ca0b9eab88bebc96764a7a1ce4929cb077e (patch) | |
tree | 430446a610f29cd853da9a20c8f57a6937c0c735 /activesupport | |
parent | 6a6367d7d207e54fced36b58a1abdd7ef0d36f82 (diff) | |
download | rails-2ae55ca0b9eab88bebc96764a7a1ce4929cb077e.tar.gz rails-2ae55ca0b9eab88bebc96764a7a1ce4929cb077e.tar.bz2 rails-2ae55ca0b9eab88bebc96764a7a1ce4929cb077e.zip |
Ruby 1.9 compat: special-case String access methods to not depend on #chars
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8538 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activesupport')
-rw-r--r-- | activesupport/lib/active_support/core_ext/string/access.rb | 120 |
1 files changed, 72 insertions, 48 deletions
diff --git a/activesupport/lib/active_support/core_ext/string/access.rb b/activesupport/lib/active_support/core_ext/string/access.rb index d70d889f07..89999ff136 100644 --- a/activesupport/lib/active_support/core_ext/string/access.rb +++ b/activesupport/lib/active_support/core_ext/string/access.rb @@ -1,56 +1,80 @@ module ActiveSupport #:nodoc: module CoreExtensions #:nodoc: module String #:nodoc: - # Makes it easier to access parts of a string, such as specific characters and substrings. - module Access - # Returns the character at the +position+ treating the string as an array (where 0 is the first character). - # - # Examples: - # "hello".at(0) # => "h" - # "hello".at(4) # => "o" - # "hello".at(10) # => nil - def at(position) - chars[position, 1].to_s - end - - # Returns the remaining of the string from the +position+ treating the string as an array (where 0 is the first character). - # - # Examples: - # "hello".from(0) # => "hello" - # "hello".from(2) # => "llo" - # "hello".from(10) # => nil - def from(position) - chars[position..-1].to_s - end - - # Returns the beginning of the string up to the +position+ treating the string as an array (where 0 is the first character). - # - # Examples: - # "hello".to(0) # => "h" - # "hello".to(2) # => "hel" - # "hello".to(10) # => "hello" - def to(position) - chars[0..position].to_s - end + if RUBY_VERSION < '1.9' + # Makes it easier to access parts of a string, such as specific characters and substrings. + module Access + # Returns the character at the +position+ treating the string as an array (where 0 is the first character). + # + # Examples: + # "hello".at(0) # => "h" + # "hello".at(4) # => "o" + # "hello".at(10) # => nil + def at(position) + chars[position, 1].to_s + end + + # Returns the remaining of the string from the +position+ treating the string as an array (where 0 is the first character). + # + # Examples: + # "hello".from(0) # => "hello" + # "hello".from(2) # => "llo" + # "hello".from(10) # => nil + def from(position) + chars[position..-1].to_s + end + + # Returns the beginning of the string up to the +position+ treating the string as an array (where 0 is the first character). + # + # Examples: + # "hello".to(0) # => "h" + # "hello".to(2) # => "hel" + # "hello".to(10) # => "hello" + def to(position) + chars[0..position].to_s + end - # Returns the first character of the string or the first +limit+ characters. - # - # Examples: - # "hello".first # => "h" - # "hello".first(2) # => "he" - # "hello".first(10) # => "hello" - def first(limit = 1) - chars[0..(limit - 1)].to_s + # Returns the first character of the string or the first +limit+ characters. + # + # Examples: + # "hello".first # => "h" + # "hello".first(2) # => "he" + # "hello".first(10) # => "hello" + def first(limit = 1) + chars[0..(limit - 1)].to_s + end + + # Returns the last character of the string or the last +limit+ characters. + # + # Examples: + # "hello".last # => "o" + # "hello".last(2) # => "lo" + # "hello".last(10) # => "hello" + def last(limit = 1) + (chars[(-limit)..-1] || self).to_s + end end - - # Returns the last character of the string or the last +limit+ characters. - # - # Examples: - # "hello".last # => "o" - # "hello".last(2) # => "lo" - # "hello".last(10) # => "hello" - def last(limit = 1) - (chars[(-limit)..-1] || self).to_s + else + module Access #:nodoc: + def at(position) + self[position] + end + + def from(position) + self[position..-1] + end + + def to(position) + self[0..position] + end + + def first(limit = 1) + self[0..(limit - 1)] + end + + def last(limit = 1) + from(-limit) || self + end end end end |