programming/rdoc/rdoc-example.rb (30 lines of code) (raw):

# * Style guide based on Rails documention module Namespace #:nodoc: don't document this # Generic Namespace exception class class NamespaceError < StandardError end # Raised when... class SpecificError < NamespaceError end # Document the responsibility of the class # # == Heading # # Use headings to break up descriptions # # == Formatting # # Embody +parameters+ or +options+ in Teletype Text tags. You can also use # *bold* or *italics* but must use HTML tags for <b>multiple words</b>, # <i>like this</i> and <tt>like this</tt>. class Base # RDOC documents constants as well MAX_NUMBER_OF_BOOKINGS = 3 # Write comments above for accessors, this will be presented as [R/W] attr_accessor :first_name # However this one will be presented as [R] attr_reader :name def initialize(string) #:notnew: stops RDoc from seeing the initialize method as the new method end # Desribe the behaviour of the method # # ==== Attributes # # * +remove_string+ - Document the first attribute # * +append_string+ - Document the second attribute # * +options+ - Document the third attribute # # ==== Options # # You may which to break out options as a separate item since there maybe # multiple items. Note options are prefixed with a colon, denoting them # as a # # * +:conditions+ - An SQL fragment like "administrator = 1" # * +:order+ - An SQL fragment like "created_at DESC, name". # * +:group+ - An attribute name by which the result should be grouped # * +:limit+ - An integer determining the limit on the number of rows that should be returned. # * +:offset+ - An integer determining the offset from where the rows should be fetched. # * +:joins+ - Either an SQL fragment for additional joins like "LEFT JOIN comments ON comments.post_id = id" (rarely needed) # # ==== Examples # # Illustrate the behaviour of the method using examples. Indent examples: # # base = Base.new("Example String") # base.method_name("Example", "more") def method_name(remove_string, append_string, options) end end end # Examples from Active Record module ActiveRecord #:nodoc: # Generic Active Record exception class. class ActiveRecordError < StandardError end # Raised when the single-table inheritance mechanism failes to locate the subclass # (for example due to improper usage of column that +inheritance_column+ points to). class SubclassNotFound < ActiveRecordError #:nodoc: end class Base # A generic "counter updater" implementation, intended primarily to be # used by increment_counter and decrement_counter, but which may also # be useful on its own. It simply does a direct SQL update for the record # with the given ID, altering the given hash of counters by the amount # given by the corresponding value: # # ==== Attributes # # * +id+ - The id of the object you wish to update a counter on. # * +counters+ - An Array of Hashes containing the names of the fields # to update as keys and the amount to update the field by as values. # # ==== Examples # # # For the Post with id of 5, decrement the comment_count by 1, and # # increment the action_count by 1 # Post.update_counters 5, :comment_count => -1, :action_count => 1 # # Executes the following SQL: # # UPDATE posts # # SET comment_count = comment_count - 1, # # action_count = action_count + 1 # # WHERE id = 5 def update_counters(id, counters) updates = counters.inject([]) { |list, (counter_name, increment)| sign = increment < 0 ? "-" : "+" list << "#{connection.quote_column_name(counter_name)} = #{connection.quote_column_name(counter_name)} #{sign} #{increment.abs}" }.join(", ") update_all(updates, "#{connection.quote_column_name(primary_key)} = #{quote_value(id)}") end end end