aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2008-01-03 02:43:19 +0000
committerJeremy Kemper <jeremy@bitsweat.net>2008-01-03 02:43:19 +0000
commit2ae55ca0b9eab88bebc96764a7a1ce4929cb077e (patch)
tree430446a610f29cd853da9a20c8f57a6937c0c735 /activesupport
parent6a6367d7d207e54fced36b58a1abdd7ef0d36f82 (diff)
downloadrails-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.rb120
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