aboutsummaryrefslogblamecommitdiffstats
path: root/actionpack/test/lib/controller/fake_models.rb
blob: b8b51d86c2582c31a3887d49fa13b16eb4114e84 (plain) (tree)
1
2
3
4
5
6
7
8

                      
                                       

                                 
 

                       





                                 

     

                           
     
                       




            

                
     
   
 









                                  

                                         

                                   
 

                  

       


                        
   
 
                                                                                             

                                 
                                 

                                
                                      
 




                       


                                         
                                       












                                                                          
                                 
                                     
                                  
                             






                                                                                        
                     

   
           

                                     










                                      
 
                                         

                                                        

     
require "active_model"

class Customer < Struct.new(:name, :id)
  extend ActiveModel::Naming
  include ActiveModel::Conversion

  undef_method :to_json

  def to_xml(options={})
    if options[:builder]
      options[:builder].name name
    else
      "<name>#{name}</name>"
    end
  end

  def to_js(options={})
    "name: #{name.inspect}"
  end
  alias :to_text :to_js

  def errors
    []
  end

  def persisted?
    id.present?
  end
end

class ValidatedCustomer < Customer
  def errors
    if name =~ /Sikachu/i
      []
    else
      [{:name => "is invalid"}]
    end
  end
end

module Quiz
  class Question < Struct.new(:name, :id)
    extend ActiveModel::Naming
    include ActiveModel::Conversion

    def persisted?
      id.present?
    end
  end

  class Store < Question
  end
end

class Post < Struct.new(:title, :author_name, :body, :secret, :persisted, :written_on, :cost)
  extend ActiveModel::Naming
  include ActiveModel::Conversion
  extend ActiveModel::Translation

  alias_method :secret?, :secret
  alias_method :persisted?, :persisted

  def initialize(*args)
    super
    @persisted = false
  end

  attr_accessor :author
  def author_attributes=(attributes); end

  attr_accessor :comments, :comment_ids
  def comments_attributes=(attributes); end

  attr_accessor :tags
  def tags_attributes=(attributes); end
end

class Comment
  extend ActiveModel::Naming
  include ActiveModel::Conversion

  attr_reader :id
  attr_reader :post_id
  def initialize(id = nil, post_id = nil); @id, @post_id = id, post_id end
  def to_key; id ? [id] : nil end
  def save; @id = 1; @post_id = 1 end
  def persisted?; @id.present? end
  def to_param; @id.to_s; end
  def name
    @id.nil? ? "new #{self.class.name.downcase}" : "#{self.class.name.downcase} ##{@id}"
  end

  attr_accessor :relevances
  def relevances_attributes=(attributes); end

  attr_accessor :body
end

module Blog
  def self.use_relative_model_naming?
    true
  end

  class Post < Struct.new(:title, :id)
    extend ActiveModel::Naming
    include ActiveModel::Conversion

    def persisted?
      id.present?
    end
  end
end

class RenderJsonTestException < Exception
  def as_json(options = nil)
    { :error => self.class.name, :message => self.to_s }
  end
end