Skip to content

Instantly share code, notes, and snippets.

@gbaptista
Last active December 11, 2015 22:18
Show Gist options
  • Save gbaptista/4668414 to your computer and use it in GitHub Desktop.
Save gbaptista/4668414 to your computer and use it in GitHub Desktop.
Métodos de classe, são métodos acessíveis sem a necessidade de instanciar a classe. Seriam os famosos “métodos estáticos”. O mesmo vale para variáveis.
# encoding: utf-8
class ClassMethods
class << self
attr_accessor :class_var
end
def self.class_method
'class_method'
end
end
# encoding: utf-8
# Ajuda para os comentários e termos:
# http://blog.gbaptista.com/2013/01/29/comentarios-metodos-variaveis-classe-instancia/
require 'test/unit'
require './class_methods'
class ClassMethodsTest < Test::Unit::TestCase
def test_class_methods
# Métodos [class public] são acessíveis sem precisar instanciar a classe.
assert_equal('class_method', ClassMethods.class_method)
# Variáveis [class public] são setáveis sem precisar instanciar a classe.
assert_equal('class_var', ClassMethods.class_var=('class_var'))
# Variáveis [class public] são acessíveis sem precisar instanciar a classe.
assert_equal('class_var', ClassMethods.class_var)
# Métodos [class public] não são acessíveis em uma instância da classe.
assert_match(/undefined method/, assert_raise(NoMethodError){
ClassMethods.new.class_method
}.message)
# Variáveis [class public] não são setáveis em uma instância da classe.
assert_match(/undefined method/, assert_raise(NoMethodError){
ClassMethods.new.class_var=('class_var')
}.message)
# Variáveis [class public] não são acessíveis em uma instância da classe.
assert_match(/undefined method/, assert_raise(NoMethodError){
ClassMethods.new.class_var
}.message)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment