summaryrefslogtreecommitdiff
path: root/spec/ruby/fixtures/class.rb
blob: 98cb6c82a2b351dc26f4fb1e0834ca9b31ef4037 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
module ClassSpecs

  def self.sclass_with_block
    eval <<-RUBY
    class << self
      yield
    end
    RUBY
  end

  def self.sclass_with_return
    class << self
      return :inner
    end
    return :outer
  end

  class A; end

  def self.string_class_variables(obj)
    obj.class_variables.map { |x| x.to_s }
  end

  def self.string_instance_variables(obj)
    obj.instance_variables.map { |x| x.to_s }
  end

  class B
    @@cvar = :cvar
    @ivar = :ivar

  end

  class C
    def self.make_class_variable
      @@cvar = :cvar
    end

    def self.make_class_instance_variable
      @civ = :civ
    end
  end

  class D
    def make_class_variable
      @@cvar = :cvar
    end
  end

  class E
    def self.cmeth() :cmeth end
    def meth() :meth end

    class << self
      def smeth() :smeth end
    end

    CONSTANT = :constant!
  end

  class F; end
  class F
    def meth() :meth end
  end
  class F
    def another() :another end
  end

  class G
    def override() :nothing end
    def override() :override end
  end

  class Container
    class A; end
    class B; end
  end

  O = Object.new
  class << O
    def smeth
      :smeth
    end
  end

  class H
    def self.inherited(sub)
      track_inherited << sub
    end

    def self.track_inherited
      @inherited_modules ||= []
    end
  end

  class K < H; end

  class I
    class J < self
    end
  end

  class K
    def example_instance_method
    end
    def self.example_class_method
    end
  end

  class L; end

  class M < L; end

  # Can't use a method here because of class definition in method body error
  ANON_CLASS_FOR_NEW = -> do
    Class.new do
      class NamedInModule
      end

      def self.get_class_name
        NamedInModule.name
      end
    end
  end

  DEFINE_CLASS = -> do
    class ::A; end
  end
end

class Class
  def example_instance_method_of_class; end
  def self.example_class_method_of_class; end
end
class << Class
  def example_instance_method_of_singleton_class; end
  def self.example_class_method_of_singleton_class; end
end
class Object
  def example_instance_method_of_object; end
  def self.example_class_method_of_object; end
end