module ReflectSpecs
def self.o
mock("Object with no singleton methods")
end
def self.os
obj = mock("Object with singleton methods")
class << obj
def os_pub; :os_pub; end
def os_pro; :os_pro; end
protected :os_pro
def os_pri; :os_pri; end
private :os_pri
end
obj
end
def self.oe
obj = mock("Object extended")
obj.extend M
obj
end
def self.oed
obj = mock("Object extended")
obj.extend M
class << obj
def pub; :pub; end
def pro; :pro; end
protected :pro
def pri; :pri; end
private :pri
end
obj
end
def self.oee
obj = mock("Object extended twice")
obj.extend M
obj.extend N
obj
end
def self.oei
obj = mock("Object extended, included")
obj.extend N
obj
end
module L
class << self
def ls_pub; :ls_pub; end
def ls_pro; :ls_pro; end
protected :ls_pro
def ls_pri; :ls_pri; end
private :ls_pri
end
def l_pub; :l_pub; end
def l_pro; :l_pro; end
protected :l_pro
def l_pri; :l_pri; end
private :l_pri
end
module K
end
module M
class << self
def ms_pub; :ms_pub; end
def ms_pro; :ms_pro; end
protected :ms_pro
def ms_pri; :ms_pri; end
private :ms_pri
end
def m_pub; :m_pub; end
def m_pro; :m_pro; end
protected :m_pro
def m_pri; :m_pri; end
private :m_pri
def pub; :pub; end
def pro; :pro; end
protected :pro
def pri; :pri; end
private :pri
end
module N
include M
class << self
def ns_pub; :ns_pub; end
def ns_pro; :ns_pro; end
protected :ns_pro
def ns_pri; :ns_pri; end
private :ns_pri
end
def n_pub; :n_pub; end
def n_pro; :n_pro; end
protected :n_pro
def n_pri; :n_pri; end
private :n_pri
end
class A
class << self
def as_pub; :as_pub; end
def as_pro; :as_pro; end
protected :as_pro
def as_pri; :as_pri; end
private :as_pri
def pub; :pub; end
def pro; :pro; end
protected :pro
def pri; :pri; end
private :pri
end
def a_pub; :a_pub; end
def a_pro; :a_pro; end
protected :a_pro
def a_pri; :a_pri; end
private :a_pri
end
class B < A
class << self
def bs_pub; :bs_pub; end
def bs_pro; :bs_pro; end
protected :bs_pro
def bs_pri; :bs_pri; end
private :bs_pri
def pub; :pub; end
def pro; :pro; end
protected :pro
def pri; :pri; end
private :pri
end
def b_pub; :b_pub; end
def b_pro; :b_pro; end
protected :b_pro
def b_pri; :b_pri; end
private :b_pri
end
class C < A
include M
class << self
def cs_pub; :cs_pub; end
def cs_pro; :cs_pro; end
protected :cs_pro
def cs_pri; :cs_pri; end
private :cs_pri
def pub; :pub; end
def pro; :pro; end
protected :pro
def pri; :pri; end
private :pri
end
def c_pub; :c_pub; end
def c_pro; :c_pro; end
protected :c_pro
def c_pri; :c_pri; end
private :c_pri
end
class D
include M
class << self
def ds_pub; :ds_pub; end
def ds_pro; :ds_pro; end
protected :ds_pro
def ds_pri; :ds_pri; end
private :ds_pri
end
def d_pub; :d_pub; end
def d_pro; :d_pro; end
protected :d_pro
def d_pri; :d_pri; end
private :d_pri
def pub; :pub; end
def pro; :pro; end
protected :pro
def pri; :pri; end
private :pri
end
class E < D
class << self
def es_pub; :es_pub; end
def es_pro; :es_pro; end
protected :es_pro
def es_pri; :es_pri; end
private :es_pri
end
def e_pub; :e_pub; end
def e_pro; :e_pro; end
protected :e_pro
def e_pri; :e_pri; end
private :e_pri
def pub; :pub; end
def pro; :pro; end
protected :pro
def pri; :pri; end
private :pri
end
class F < D
include L
class << self
def fs_pub; :fs_pub; end
def fs_pro; :fs_pro; end
protected :fs_pro
def fs_pri; :fs_pri; end
private :fs_pri
end
def f_pub; :f_pub; end
def f_pro; :f_pro; end
protected :f_pro
def f_pri; :f_pri; end
private :f_pri
end
class O
end
class P
end
P.extend M
end