提交 755af497 编写于 作者: X Xavier Noria

edit pass to apply API guideline wrt the use of "# =>" in example code

上级 a7a6a2ff
...@@ -496,10 +496,10 @@ def headers(args=nil) ...@@ -496,10 +496,10 @@ def headers(args=nil)
# You can also search for specific attachments: # You can also search for specific attachments:
# #
# # By Filename # # By Filename
# mail.attachments['filename.jpg'] #=> Mail::Part object or nil # mail.attachments['filename.jpg'] # => Mail::Part object or nil
# #
# # or by index # # or by index
# mail.attachments[0] #=> Mail::Part (first attachment) # mail.attachments[0] # => Mail::Part (first attachment)
# #
def attachments def attachments
@_message.attachments @_message.attachments
......
...@@ -20,7 +20,7 @@ module Routing ...@@ -20,7 +20,7 @@ module Routing
# <%= link_to('Click here', :controller => 'users', # <%= link_to('Click here', :controller => 'users',
# :action => 'new', :message => 'Welcome!') %> # :action => 'new', :message => 'Welcome!') %>
# #
# #=> Generates a link to: /users/new?message=Welcome%21 # # Generates a link to /users/new?message=Welcome%21
# #
# link_to, and all other functions that require URL generation functionality, # link_to, and all other functions that require URL generation functionality,
# actually use ActionController::UrlFor under the hood. And in particular, # actually use ActionController::UrlFor under the hood. And in particular,
......
...@@ -17,9 +17,9 @@ module ActiveModel ...@@ -17,9 +17,9 @@ module ActiveModel
# end # end
# #
# cm = ContactMessage.new # cm = ContactMessage.new
# cm.to_model == self #=> true # cm.to_model == self # => true
# cm.to_key #=> nil # cm.to_key # => nil
# cm.to_param #=> nil # cm.to_param # => nil
# #
module Conversion module Conversion
# If your object is already designed to implement all of the Active Model # If your object is already designed to implement all of the Active Model
......
...@@ -83,8 +83,8 @@ def initialize(base) ...@@ -83,8 +83,8 @@ def initialize(base)
# When passed a symbol or a name of a method, returns an array of errors # When passed a symbol or a name of a method, returns an array of errors
# for the method. # for the method.
# #
# p.errors[:name] #=> ["can not be nil"] # p.errors[:name] # => ["can not be nil"]
# p.errors['name'] #=> ["can not be nil"] # p.errors['name'] # => ["can not be nil"]
def [](attribute) def [](attribute)
if errors = get(attribute.to_sym) if errors = get(attribute.to_sym)
errors errors
...@@ -96,7 +96,7 @@ def [](attribute) ...@@ -96,7 +96,7 @@ def [](attribute)
# Adds to the supplied attribute the supplied error message. # Adds to the supplied attribute the supplied error message.
# #
# p.errors[:name] = "must be set" # p.errors[:name] = "must be set"
# p.errors[:name] #=> ['must be set'] # p.errors[:name] # => ['must be set']
def []=(attribute, error) def []=(attribute, error)
self[attribute.to_sym] << error self[attribute.to_sym] << error
end end
...@@ -124,9 +124,9 @@ def each ...@@ -124,9 +124,9 @@ def each
# Returns the number of error messages. # Returns the number of error messages.
# #
# p.errors.add(:name, "can't be blank") # p.errors.add(:name, "can't be blank")
# p.errors.size #=> 1 # p.errors.size # => 1
# p.errors.add(:name, "must be specified") # p.errors.add(:name, "must be specified")
# p.errors.size #=> 2 # p.errors.size # => 2
def size def size
values.flatten.size values.flatten.size
end end
...@@ -135,16 +135,16 @@ def size ...@@ -135,16 +135,16 @@ def size
# #
# p.errors.add(:name, "can't be blank") # p.errors.add(:name, "can't be blank")
# p.errors.add(:name, "must be specified") # p.errors.add(:name, "must be specified")
# p.errors.to_a #=> ["name can't be blank", "name must be specified"] # p.errors.to_a # => ["name can't be blank", "name must be specified"]
def to_a def to_a
full_messages full_messages
end end
# Returns the number of error messages. # Returns the number of error messages.
# p.errors.add(:name, "can't be blank") # p.errors.add(:name, "can't be blank")
# p.errors.count #=> 1 # p.errors.count # => 1
# p.errors.add(:name, "must be specified") # p.errors.add(:name, "must be specified")
# p.errors.count #=> 2 # p.errors.count # => 2
def count def count
to_a.size to_a.size
end end
...@@ -158,8 +158,8 @@ def empty? ...@@ -158,8 +158,8 @@ def empty?
# #
# p.errors.add(:name, "can't be blank") # p.errors.add(:name, "can't be blank")
# p.errors.add(:name, "must be specified") # p.errors.add(:name, "must be specified")
# p.errors.to_xml #=> Produces: # p.errors.to_xml
# # # =>
# # <?xml version=\"1.0\" encoding=\"UTF-8\"?> # # <?xml version=\"1.0\" encoding=\"UTF-8\"?>
# # <errors> # # <errors>
# # <error>name can't be blank</error> # # <error>name can't be blank</error>
......
...@@ -17,7 +17,10 @@ def initialize(klass) ...@@ -17,7 +17,10 @@ def initialize(klass)
end end
# Transform the model name into a more humane format, using I18n. By default, # Transform the model name into a more humane format, using I18n. By default,
# it will underscore then humanize the class name (BlogPost.model_name.human #=> "Blog post"). # it will underscore then humanize the class name
#
# BlogPost.model_name.human # => "Blog post"
#
# Specify +options+ with additional translating options. # Specify +options+ with additional translating options.
def human(options={}) def human(options={})
return @human unless @klass.respond_to?(:lookup_ancestors) && return @human unless @klass.respond_to?(:lookup_ancestors) &&
...@@ -45,8 +48,8 @@ def human(options={}) ...@@ -45,8 +48,8 @@ def human(options={})
# extend ActiveModel::Naming # extend ActiveModel::Naming
# end # end
# #
# BookCover.model_name #=> "BookCover" # BookCover.model_name # => "BookCover"
# BookCover.model_name.human #=> "Book cover" # BookCover.model_name.human # => "Book cover"
# #
# Providing the functionality that ActiveModel::Naming provides in your object # Providing the functionality that ActiveModel::Naming provides in your object
# is required to pass the Active Model Lint test. So either extending the provided # is required to pass the Active Model Lint test. So either extending the provided
......
...@@ -14,7 +14,7 @@ module ActiveModel ...@@ -14,7 +14,7 @@ module ActiveModel
# end # end
# #
# TranslatedPerson.human_attribute_name('my_attribute') # TranslatedPerson.human_attribute_name('my_attribute')
# #=> "My attribute" # # => "My attribute"
# #
# This also provides the required class methods for hooking into the # This also provides the required class methods for hooking into the
# Rails internationalization API, including being able to define a # Rails internationalization API, including being able to define a
......
...@@ -24,20 +24,16 @@ module ActiveModel ...@@ -24,20 +24,16 @@ module ActiveModel
# end # end
# #
# Which provides you with the full standard validation stack that you # Which provides you with the full standard validation stack that you
# know from ActiveRecord. # know from Active Record:
# #
# person = Person.new # person = Person.new
# person.valid? # person.valid? # => true
# #=> true # person.invalid? # => false
# person.invalid? #
# #=> false
# person.first_name = 'zoolander' # person.first_name = 'zoolander'
# person.valid? # person.valid? # => false
# #=> false # person.invalid? # => true
# person.invalid? # person.errors # => #<OrderedHash {:first_name=>["starts with z."]}>
# #=> true
# person.errors
# #=> #<OrderedHash {:first_name=>["starts with z."]}>
# #
# Note that ActiveModel::Validations automatically adds an +errors+ method # Note that ActiveModel::Validations automatically adds an +errors+ method
# to your instances initialized with a new ActiveModel::Errors object, so # to your instances initialized with a new ActiveModel::Errors object, so
......
...@@ -102,8 +102,8 @@ class Validator ...@@ -102,8 +102,8 @@ class Validator
# #
# == Examples # == Examples
# #
# PresenceValidator.kind #=> :presence # PresenceValidator.kind # => :presence
# UniquenessValidator.kind #=> :uniqueness # UniquenessValidator.kind # => :uniqueness
# #
def self.kind def self.kind
@kind ||= name.split('::').last.underscore.sub(/_validator$/, '').to_sym unless anonymous? @kind ||= name.split('::').last.underscore.sub(/_validator$/, '').to_sym unless anonymous?
......
...@@ -78,7 +78,7 @@ class TooManyRecords < ActiveRecordError ...@@ -78,7 +78,7 @@ class TooManyRecords < ActiveRecordError
# member.avatar_attributes = { :id => '2', :_destroy => '1' } # member.avatar_attributes = { :id => '2', :_destroy => '1' }
# member.avatar.marked_for_destruction? # => true # member.avatar.marked_for_destruction? # => true
# member.save # member.save
# member.reload.avatar #=> nil # member.reload.avatar # => nil
# #
# Note that the model will _not_ be destroyed until the parent is saved. # Note that the model will _not_ be destroyed until the parent is saved.
# #
...@@ -180,7 +180,7 @@ class TooManyRecords < ActiveRecordError ...@@ -180,7 +180,7 @@ class TooManyRecords < ActiveRecordError
# #
# member.attributes = params['member'] # member.attributes = params['member']
# member.posts.detect { |p| p.id == 2 }.marked_for_destruction? # => true # member.posts.detect { |p| p.id == 2 }.marked_for_destruction? # => true
# member.posts.length #=> 2 # member.posts.length # => 2
# member.save # member.save
# member.reload.posts.length # => 1 # member.reload.posts.length # => 1
# #
......
...@@ -108,7 +108,7 @@ def many? ...@@ -108,7 +108,7 @@ def many?
# ==== Example # ==== Example
# #
# Comment.where(:post_id => 1).scoping do # Comment.where(:post_id => 1).scoping do
# Comment.first #=> SELECT * FROM comments WHERE post_id = 1 # Comment.first # SELECT * FROM comments WHERE post_id = 1
# end # end
# #
# Please check unscoped if you want to remove all previous scopes (including # Please check unscoped if you want to remove all previous scopes (including
......
...@@ -2,7 +2,7 @@ class Array ...@@ -2,7 +2,7 @@ class Array
# Return an unique array based on the criteria given as a proc. # Return an unique array based on the criteria given as a proc.
# #
# [1, 2, 3, 4].uniq_by { |i| i.odd? } # [1, 2, 3, 4].uniq_by { |i| i.odd? }
# #=> [1, 2] # # => [1, 2]
# #
def uniq_by def uniq_by
hash, array = {}, [] hash, array = {}, []
......
...@@ -66,7 +66,8 @@ def sum(identity = 0, &block) ...@@ -66,7 +66,8 @@ def sum(identity = 0, &block)
# +memo+ to the block. Handy for building up hashes or # +memo+ to the block. Handy for building up hashes or
# reducing collections down to one object. Examples: # reducing collections down to one object. Examples:
# #
# %w(foo bar).each_with_object({}) { |str, hsh| hsh[str] = str.upcase } #=> {'foo' => 'FOO', 'bar' => 'BAR'} # %w(foo bar).each_with_object({}) { |str, hsh| hsh[str] = str.upcase }
# # => {'foo' => 'FOO', 'bar' => 'BAR'}
# #
# *Note* that you can't use immutable objects like numbers, true or false as # *Note* that you can't use immutable objects like numbers, true or false as
# the memo. You would think the following returns 120, but since the memo is # the memo. You would think the following returns 120, but since the memo is
......
...@@ -12,11 +12,11 @@ class String ...@@ -12,11 +12,11 @@ class String
# class. If the proxy class doesn't respond to a certain method, it's forwarded to the encapsuled string. # class. If the proxy class doesn't respond to a certain method, it's forwarded to the encapsuled string.
# #
# name = 'Claus Müller' # name = 'Claus Müller'
# name.reverse #=> "rell??M sualC" # name.reverse # => "rell??M sualC"
# name.length #=> 13 # name.length # => 13
# #
# name.mb_chars.reverse.to_s #=> "rellüM sualC" # name.mb_chars.reverse.to_s # => "rellüM sualC"
# name.mb_chars.length #=> 12 # name.mb_chars.length # => 12
# #
# In Ruby 1.9 and newer +mb_chars+ returns +self+ because String is (mostly) encoding aware. This means that # In Ruby 1.9 and newer +mb_chars+ returns +self+ because String is (mostly) encoding aware. This means that
# it becomes easy to run one version of your code on multiple Ruby versions. # it becomes easy to run one version of your code on multiple Ruby versions.
...@@ -26,7 +26,7 @@ class String ...@@ -26,7 +26,7 @@ class String
# All the methods on the Chars proxy which normally return a string will return a Chars object. This allows # All the methods on the Chars proxy which normally return a string will return a Chars object. This allows
# method chaining on the result of any of these methods. # method chaining on the result of any of these methods.
# #
# name.mb_chars.reverse.length #=> 12 # name.mb_chars.reverse.length # => 12
# #
# == Interoperability and configuration # == Interoperability and configuration
# #
......
...@@ -11,7 +11,7 @@ module Multibyte #:nodoc: ...@@ -11,7 +11,7 @@ module Multibyte #:nodoc:
# String methods are proxied through the Chars object, and can be accessed through the +mb_chars+ method. Methods # String methods are proxied through the Chars object, and can be accessed through the +mb_chars+ method. Methods
# which would normally return a String object now return a Chars object so methods can be chained. # which would normally return a String object now return a Chars object so methods can be chained.
# #
# "The Perfect String ".mb_chars.downcase.strip.normalize #=> "the perfect string" # "The Perfect String ".mb_chars.downcase.strip.normalize # => "the perfect string"
# #
# Chars objects are perfectly interchangeable with String objects as long as no explicit class checks are made. # Chars objects are perfectly interchangeable with String objects as long as no explicit class checks are made.
# If certain methods do explicitly check the class, call +to_s+ before you pass chars objects to them. # If certain methods do explicitly check the class, call +to_s+ before you pass chars objects to them.
...@@ -83,12 +83,13 @@ def self.consumes?(string) ...@@ -83,12 +83,13 @@ def self.consumes?(string)
include Comparable include Comparable
# Returns <tt>-1</tt>, <tt>0</tt> or <tt>+1</tt> depending on whether the Chars object is to be sorted before, # Returns -1, 0, or 1, depending on whether the Chars object is to be sorted before,
# equal or after the object on the right side of the operation. It accepts any object that implements +to_s+. # equal or after the object on the right side of the operation. It accepts any object
# See <tt>String#<=></tt> for more details. # that implements +to_s+:
# #
# Example: # 'é'.mb_chars <=> 'ü'.mb_chars # => -1
# 'é'.mb_chars <=> 'ü'.mb_chars #=> -1 #
# See <tt>String#<=></tt> for more details.
def <=>(other) def <=>(other)
@wrapped_string <=> other.to_s @wrapped_string <=> other.to_s
end end
...@@ -103,7 +104,7 @@ def self.wants?(string) ...@@ -103,7 +104,7 @@ def self.wants?(string)
# Returns a new Chars object containing the _other_ object concatenated to the string. # Returns a new Chars object containing the _other_ object concatenated to the string.
# #
# Example: # Example:
# ('Café'.mb_chars + ' périferôl').to_s #=> "Café périferôl" # ('Café'.mb_chars + ' périferôl').to_s # => "Café périferôl"
def +(other) def +(other)
chars(@wrapped_string + other) chars(@wrapped_string + other)
end end
...@@ -111,7 +112,7 @@ def +(other) ...@@ -111,7 +112,7 @@ def +(other)
# Like <tt>String#=~</tt> only it returns the character offset (in codepoints) instead of the byte offset. # Like <tt>String#=~</tt> only it returns the character offset (in codepoints) instead of the byte offset.
# #
# Example: # Example:
# 'Café périferôl'.mb_chars =~ /ô/ #=> 12 # 'Café périferôl'.mb_chars =~ /ô/ # => 12
def =~(other) def =~(other)
translate_offset(@wrapped_string =~ other) translate_offset(@wrapped_string =~ other)
end end
...@@ -119,7 +120,7 @@ def =~(other) ...@@ -119,7 +120,7 @@ def =~(other)
# Inserts the passed string at specified codepoint offsets. # Inserts the passed string at specified codepoint offsets.
# #
# Example: # Example:
# 'Café'.mb_chars.insert(4, ' périferôl').to_s #=> "Café périferôl" # 'Café'.mb_chars.insert(4, ' périferôl').to_s # => "Café périferôl"
def insert(offset, fragment) def insert(offset, fragment)
unpacked = Unicode.u_unpack(@wrapped_string) unpacked = Unicode.u_unpack(@wrapped_string)
unless offset > unpacked.length unless offset > unpacked.length
...@@ -135,7 +136,7 @@ def insert(offset, fragment) ...@@ -135,7 +136,7 @@ def insert(offset, fragment)
# Returns +true+ if contained string contains _other_. Returns +false+ otherwise. # Returns +true+ if contained string contains _other_. Returns +false+ otherwise.
# #
# Example: # Example:
# 'Café'.mb_chars.include?('é') #=> true # 'Café'.mb_chars.include?('é') # => true
def include?(other) def include?(other)
# We have to redefine this method because Enumerable defines it. # We have to redefine this method because Enumerable defines it.
@wrapped_string.include?(other) @wrapped_string.include?(other)
...@@ -144,8 +145,8 @@ def include?(other) ...@@ -144,8 +145,8 @@ def include?(other)
# Returns the position _needle_ in the string, counting in codepoints. Returns +nil+ if _needle_ isn't found. # Returns the position _needle_ in the string, counting in codepoints. Returns +nil+ if _needle_ isn't found.
# #
# Example: # Example:
# 'Café périferôl'.mb_chars.index('ô') #=> 12 # 'Café périferôl'.mb_chars.index('ô') # => 12
# 'Café périferôl'.mb_chars.index(/\w/u) #=> 0 # 'Café périferôl'.mb_chars.index(/\w/u) # => 0
def index(needle, offset=0) def index(needle, offset=0)
wrapped_offset = first(offset).wrapped_string.length wrapped_offset = first(offset).wrapped_string.length
index = @wrapped_string.index(needle, wrapped_offset) index = @wrapped_string.index(needle, wrapped_offset)
...@@ -157,8 +158,8 @@ def index(needle, offset=0) ...@@ -157,8 +158,8 @@ def index(needle, offset=0)
# string. Returns +nil+ if _needle_ isn't found. # string. Returns +nil+ if _needle_ isn't found.
# #
# Example: # Example:
# 'Café périferôl'.mb_chars.rindex('é') #=> 6 # 'Café périferôl'.mb_chars.rindex('é') # => 6
# 'Café périferôl'.mb_chars.rindex(/\w/u) #=> 13 # 'Café périferôl'.mb_chars.rindex(/\w/u) # => 13
def rindex(needle, offset=nil) def rindex(needle, offset=nil)
offset ||= length offset ||= length
wrapped_offset = first(offset).wrapped_string.length wrapped_offset = first(offset).wrapped_string.length
...@@ -190,7 +191,7 @@ def strip ...@@ -190,7 +191,7 @@ def strip
# Returns the codepoint of the first character in the string. # Returns the codepoint of the first character in the string.
# #
# Example: # Example:
# 'こんにちは'.mb_chars.ord #=> 12371 # 'こんにちは'.mb_chars.ord # => 12371
def ord def ord
Unicode.u_unpack(@wrapped_string)[0] Unicode.u_unpack(@wrapped_string)[0]
end end
...@@ -200,10 +201,10 @@ def ord ...@@ -200,10 +201,10 @@ def ord
# Example: # Example:
# #
# "¾ cup".mb_chars.rjust(8).to_s # "¾ cup".mb_chars.rjust(8).to_s
# #=> " ¾ cup" # # => " ¾ cup"
# #
# "¾ cup".mb_chars.rjust(8, " ").to_s # Use non-breaking whitespace # "¾ cup".mb_chars.rjust(8, " ").to_s # Use non-breaking whitespace
# #=> "   ¾ cup" # # => "   ¾ cup"
def rjust(integer, padstr=' ') def rjust(integer, padstr=' ')
justify(integer, :right, padstr) justify(integer, :right, padstr)
end end
...@@ -213,10 +214,10 @@ def rjust(integer, padstr=' ') ...@@ -213,10 +214,10 @@ def rjust(integer, padstr=' ')
# Example: # Example:
# #
# "¾ cup".mb_chars.rjust(8).to_s # "¾ cup".mb_chars.rjust(8).to_s
# #=> "¾ cup " # # => "¾ cup "
# #
# "¾ cup".mb_chars.rjust(8, " ").to_s # Use non-breaking whitespace # "¾ cup".mb_chars.rjust(8, " ").to_s # Use non-breaking whitespace
# #=> "¾ cup   " # # => "¾ cup   "
def ljust(integer, padstr=' ') def ljust(integer, padstr=' ')
justify(integer, :left, padstr) justify(integer, :left, padstr)
end end
...@@ -226,10 +227,10 @@ def ljust(integer, padstr=' ') ...@@ -226,10 +227,10 @@ def ljust(integer, padstr=' ')
# Example: # Example:
# #
# "¾ cup".mb_chars.center(8).to_s # "¾ cup".mb_chars.center(8).to_s
# #=> " ¾ cup " # # => " ¾ cup "
# #
# "¾ cup".mb_chars.center(8, " ").to_s # Use non-breaking whitespace # "¾ cup".mb_chars.center(8, " ").to_s # Use non-breaking whitespace
# #=> " ¾ cup  " # # => " ¾ cup  "
def center(integer, padstr=' ') def center(integer, padstr=' ')
justify(integer, :center, padstr) justify(integer, :center, padstr)
end end
...@@ -244,7 +245,7 @@ def =~(other) ...@@ -244,7 +245,7 @@ def =~(other)
# instances instead of String. This makes chaining methods easier. # instances instead of String. This makes chaining methods easier.
# #
# Example: # Example:
# 'Café périferôl'.mb_chars.split(/é/).map { |part| part.upcase.to_s } #=> ["CAF", " P", "RIFERÔL"] # 'Café périferôl'.mb_chars.split(/é/).map { |part| part.upcase.to_s } # => ["CAF", " P", "RIFERÔL"]
def split(*args) def split(*args)
@wrapped_string.split(*args).map { |i| i.mb_chars } @wrapped_string.split(*args).map { |i| i.mb_chars }
end end
...@@ -256,12 +257,12 @@ def split(*args) ...@@ -256,12 +257,12 @@ def split(*args)
# s = "Müller" # s = "Müller"
# s.mb_chars[2] = "e" # Replace character with offset 2 # s.mb_chars[2] = "e" # Replace character with offset 2
# s # s
# #=> "Müeler" # # => "Müeler"
# #
# s = "Müller" # s = "Müller"
# s.mb_chars[1, 2] = "ö" # Replace 2 characters at character offset 1 # s.mb_chars[1, 2] = "ö" # Replace 2 characters at character offset 1
# s # s
# #=> "Möler" # # => "Möler"
def []=(*args) def []=(*args)
replace_by = args.pop replace_by = args.pop
# Indexed replace with regular expressions already works # Indexed replace with regular expressions already works
...@@ -292,7 +293,7 @@ def []=(*args) ...@@ -292,7 +293,7 @@ def []=(*args)
# Reverses all characters in the string. # Reverses all characters in the string.
# #
# Example: # Example:
# 'Café'.mb_chars.reverse.to_s #=> 'éfaC' # 'Café'.mb_chars.reverse.to_s # => 'éfaC'
def reverse def reverse
chars(Unicode.g_unpack(@wrapped_string).reverse.flatten.pack('U*')) chars(Unicode.g_unpack(@wrapped_string).reverse.flatten.pack('U*'))
end end
...@@ -301,7 +302,7 @@ def reverse ...@@ -301,7 +302,7 @@ def reverse
# character. # character.
# #
# Example: # Example:
# 'こんにちは'.mb_chars.slice(2..3).to_s #=> "にち" # 'こんにちは'.mb_chars.slice(2..3).to_s # => "にち"
def slice(*args) def slice(*args)
if args.size > 2 if args.size > 2
raise ArgumentError, "wrong number of arguments (#{args.size} for 1)" # Do as if we were native raise ArgumentError, "wrong number of arguments (#{args.size} for 1)" # Do as if we were native
...@@ -330,7 +331,7 @@ def slice(*args) ...@@ -330,7 +331,7 @@ def slice(*args)
# #
# Example: # Example:
# s = 'こんにちは' # s = 'こんにちは'
# s.mb_chars.limit(7) #=> "こに" # s.mb_chars.limit(7) # => "こに"
def limit(limit) def limit(limit)
slice(0...translate_offset(limit)) slice(0...translate_offset(limit))
end end
...@@ -338,7 +339,7 @@ def limit(limit) ...@@ -338,7 +339,7 @@ def limit(limit)
# Convert characters in the string to uppercase. # Convert characters in the string to uppercase.
# #
# Example: # Example:
# 'Laurent, où sont les tests ?'.mb_chars.upcase.to_s #=> "LAURENT, OÙ SONT LES TESTS ?" # 'Laurent, où sont les tests ?'.mb_chars.upcase.to_s # => "LAURENT, OÙ SONT LES TESTS ?"
def upcase def upcase
chars(Unicode.apply_mapping @wrapped_string, :uppercase_mapping) chars(Unicode.apply_mapping @wrapped_string, :uppercase_mapping)
end end
...@@ -346,7 +347,7 @@ def upcase ...@@ -346,7 +347,7 @@ def upcase
# Convert characters in the string to lowercase. # Convert characters in the string to lowercase.
# #
# Example: # Example:
# 'VĚDA A VÝZKUM'.mb_chars.downcase.to_s #=> "věda a výzkum" # 'VĚDA A VÝZKUM'.mb_chars.downcase.to_s # => "věda a výzkum"
def downcase def downcase
chars(Unicode.apply_mapping @wrapped_string, :lowercase_mapping) chars(Unicode.apply_mapping @wrapped_string, :lowercase_mapping)
end end
...@@ -354,7 +355,7 @@ def downcase ...@@ -354,7 +355,7 @@ def downcase
# Converts the first character to uppercase and the remainder to lowercase. # Converts the first character to uppercase and the remainder to lowercase.
# #
# Example: # Example:
# 'über'.mb_chars.capitalize.to_s #=> "Über" # 'über'.mb_chars.capitalize.to_s # => "Über"
def capitalize def capitalize
(slice(0) || chars('')).upcase + (slice(1..-1) || chars('')).downcase (slice(0) || chars('')).upcase + (slice(1..-1) || chars('')).downcase
end end
...@@ -382,8 +383,8 @@ def normalize(form = nil) ...@@ -382,8 +383,8 @@ def normalize(form = nil)
# Performs canonical decomposition on all the characters. # Performs canonical decomposition on all the characters.
# #
# Example: # Example:
# 'é'.length #=> 2 # 'é'.length # => 2
# 'é'.mb_chars.decompose.to_s.length #=> 3 # 'é'.mb_chars.decompose.to_s.length # => 3
def decompose def decompose
chars(Unicode.decompose_codepoints(:canonical, Unicode.u_unpack(@wrapped_string)).pack('U*')) chars(Unicode.decompose_codepoints(:canonical, Unicode.u_unpack(@wrapped_string)).pack('U*'))
end end
...@@ -391,8 +392,8 @@ def decompose ...@@ -391,8 +392,8 @@ def decompose
# Performs composition on all the characters. # Performs composition on all the characters.
# #
# Example: # Example:
# 'é'.length #=> 3 # 'é'.length # => 3
# 'é'.mb_chars.compose.to_s.length #=> 2 # 'é'.mb_chars.compose.to_s.length # => 2
def compose def compose
chars(Unicode.compose_codepoints(Unicode.u_unpack(@wrapped_string)).pack('U*')) chars(Unicode.compose_codepoints(Unicode.u_unpack(@wrapped_string)).pack('U*'))
end end
...@@ -400,8 +401,8 @@ def compose ...@@ -400,8 +401,8 @@ def compose
# Returns the number of grapheme clusters in the string. # Returns the number of grapheme clusters in the string.
# #
# Example: # Example:
# 'क्षि'.mb_chars.length #=> 4 # 'क्षि'.mb_chars.length # => 4
# 'क्षि'.mb_chars.g_length #=> 3 # 'क्षि'.mb_chars.g_length # => 3
def g_length def g_length
Unicode.g_unpack(@wrapped_string).length Unicode.g_unpack(@wrapped_string).length
end end
......
...@@ -64,7 +64,7 @@ def self.codepoints_to_pattern(array_of_codepoints) #:nodoc: ...@@ -64,7 +64,7 @@ def self.codepoints_to_pattern(array_of_codepoints) #:nodoc:
# valid UTF-8. # valid UTF-8.
# #
# Example: # Example:
# Unicode.u_unpack('Café') #=> [67, 97, 102, 233] # Unicode.u_unpack('Café') # => [67, 97, 102, 233]
def u_unpack(string) def u_unpack(string)
begin begin
string.unpack 'U*' string.unpack 'U*'
...@@ -85,8 +85,8 @@ def in_char_class?(codepoint, classes) ...@@ -85,8 +85,8 @@ def in_char_class?(codepoint, classes)
# Unpack the string at grapheme boundaries. Returns a list of character lists. # Unpack the string at grapheme boundaries. Returns a list of character lists.
# #
# Example: # Example:
# Unicode.g_unpack('क्षि') #=> [[2325, 2381], [2359], [2367]] # Unicode.g_unpack('क्षि') # => [[2325, 2381], [2359], [2367]]
# Unicode.g_unpack('Café') #=> [[67], [97], [102], [233]] # Unicode.g_unpack('Café') # => [[67], [97], [102], [233]]
def g_unpack(string) def g_unpack(string)
codepoints = u_unpack(string) codepoints = u_unpack(string)
unpacked = [] unpacked = []
...@@ -120,7 +120,7 @@ def g_unpack(string) ...@@ -120,7 +120,7 @@ def g_unpack(string)
# Reverse operation of g_unpack. # Reverse operation of g_unpack.
# #
# Example: # Example:
# Unicode.g_pack(Unicode.g_unpack('क्षि')) #=> 'क्षि' # Unicode.g_pack(Unicode.g_unpack('क्षि')) # => 'क्षि'
def g_pack(unpacked) def g_pack(unpacked)
(unpacked.flatten).pack('U*') (unpacked.flatten).pack('U*')
end end
......
...@@ -22,9 +22,9 @@ module ActiveSupport ...@@ -22,9 +22,9 @@ module ActiveSupport
# end # end
# #
# event = @events.first # event = @events.first
# event.name #=> :render # event.name # => :render
# event.duration #=> 10 (in milliseconds) # event.duration # => 10 (in milliseconds)
# event.payload #=> { :extra => :information } # event.payload # => { :extra => :information }
# #
# When subscribing to Notifications, you can pass a pattern, to only consume # When subscribing to Notifications, you can pass a pattern, to only consume
# events that match the pattern: # events that match the pattern:
......
...@@ -26,25 +26,25 @@ module ActiveSupport ...@@ -26,25 +26,25 @@ module ActiveSupport
# == Example # == Example
# #
# # random hexadecimal string. # # random hexadecimal string.
# p SecureRandom.hex(10) #=> "52750b30ffbc7de3b362" # p SecureRandom.hex(10) # => "52750b30ffbc7de3b362"
# p SecureRandom.hex(10) #=> "92b15d6c8dc4beb5f559" # p SecureRandom.hex(10) # => "92b15d6c8dc4beb5f559"
# p SecureRandom.hex(11) #=> "6aca1b5c58e4863e6b81b8" # p SecureRandom.hex(11) # => "6aca1b5c58e4863e6b81b8"
# p SecureRandom.hex(12) #=> "94b2fff3e7fd9b9c391a2306" # p SecureRandom.hex(12) # => "94b2fff3e7fd9b9c391a2306"
# p SecureRandom.hex(13) #=> "39b290146bea6ce975c37cfc23" # p SecureRandom.hex(13) # => "39b290146bea6ce975c37cfc23"
# ... # ...
# #
# # random base64 string. # # random base64 string.
# p SecureRandom.base64(10) #=> "EcmTPZwWRAozdA==" # p SecureRandom.base64(10) # => "EcmTPZwWRAozdA=="
# p SecureRandom.base64(10) #=> "9b0nsevdwNuM/w==" # p SecureRandom.base64(10) # => "9b0nsevdwNuM/w=="
# p SecureRandom.base64(10) #=> "KO1nIU+p9DKxGg==" # p SecureRandom.base64(10) # => "KO1nIU+p9DKxGg=="
# p SecureRandom.base64(11) #=> "l7XEiFja+8EKEtY=" # p SecureRandom.base64(11) # => "l7XEiFja+8EKEtY="
# p SecureRandom.base64(12) #=> "7kJSM/MzBJI+75j8" # p SecureRandom.base64(12) # => "7kJSM/MzBJI+75j8"
# p SecureRandom.base64(13) #=> "vKLJ0tXBHqQOuIcSIg==" # p SecureRandom.base64(13) # => "vKLJ0tXBHqQOuIcSIg=="
# ... # ...
# #
# # random binary string. # # random binary string.
# p SecureRandom.random_bytes(10) #=> "\016\t{\370g\310pbr\301" # p SecureRandom.random_bytes(10) # => "\016\t{\370g\310pbr\301"
# p SecureRandom.random_bytes(10) #=> "\323U\030TO\234\357\020\a\337" # p SecureRandom.random_bytes(10) # => "\323U\030TO\234\357\020\a\337"
# ... # ...
module SecureRandom module SecureRandom
# SecureRandom.random_bytes generates a random binary string. # SecureRandom.random_bytes generates a random binary string.
......
...@@ -9,16 +9,16 @@ module Generators ...@@ -9,16 +9,16 @@ module Generators
# For example: # For example:
# #
# ActiveRecord::Generators::ActiveModel.find(Foo, "params[:id]") # ActiveRecord::Generators::ActiveModel.find(Foo, "params[:id]")
# #=> "Foo.find(params[:id])" # # => "Foo.find(params[:id])"
# #
# Datamapper::Generators::ActiveModel.find(Foo, "params[:id]") # Datamapper::Generators::ActiveModel.find(Foo, "params[:id]")
# #=> "Foo.get(params[:id])" # # => "Foo.get(params[:id])"
# #
# On initialization, the ActiveModel accepts the instance name that will # On initialization, the ActiveModel accepts the instance name that will
# receive the calls: # receive the calls:
# #
# builder = ActiveRecord::Generators::ActiveModel.new "@foo" # builder = ActiveRecord::Generators::ActiveModel.new "@foo"
# builder.save #=> "@foo.save" # builder.save # => "@foo.save"
# #
# The only exception in ActiveModel for ActiveRecord is the use of self.build # The only exception in ActiveModel for ActiveRecord is the use of self.build
# instead of self.new. # instead of self.new.
......
...@@ -68,7 +68,7 @@ def self.destination(path) ...@@ -68,7 +68,7 @@ def self.destination(path)
# Captures the given stream and returns it: # Captures the given stream and returns it:
# #
# stream = capture(:stdout){ puts "Cool" } # stream = capture(:stdout){ puts "Cool" }
# stream #=> "Cool\n" # stream # => "Cool\n"
# #
def capture(stream) def capture(stream)
begin begin
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册