Skip to content
This repository has been archived by the owner on Jun 27, 2019. It is now read-only.

2253-1 #179

Open
wants to merge 170 commits into
base: master
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
170 commits
Select commit Hold shift + click to select a range
ab6456f
Create about_array_assignment.rb
Ctalk3r Jul 8, 2018
b69b59d
Add files via upload
Ctalk3r Jul 8, 2018
0d7de85
Update triangle.rb
Ctalk3r Jul 8, 2018
4f3bd83
Update triangle.rb
Ctalk3r Jul 8, 2018
7598c3e
Update triangle.rb
Ctalk3r Jul 8, 2018
19cf67e
Update about_true_and_false.rb
Ctalk3r Jul 8, 2018
144ea09
Update about_true_and_false.rb
Ctalk3r Jul 8, 2018
085963d
Update about_true_and_false.rb
Ctalk3r Jul 8, 2018
bf463f2
Update about_triangle_project_2.rb
Ctalk3r Jul 8, 2018
01276d2
Update about_triangle_project_2.rb
Ctalk3r Jul 8, 2018
fd22b25
Update about_to_str.rb
Ctalk3r Jul 8, 2018
c521d7c
Update about_triangle_project.rb
Ctalk3r Jul 8, 2018
0c3d9a4
Update about_to_str.rb
Ctalk3r Jul 8, 2018
7890e9c
Update about_array_assignment.rb
Ctalk3r Jul 8, 2018
bd82f66
Update about_to_str.rb
Ctalk3r Jul 8, 2018
625b481
Update triangle.rb
Ctalk3r Jul 8, 2018
a3c5e91
Update about_strings.rb
Ctalk3r Jul 8, 2018
962779b
Update about_regular_expressions.rb
Ctalk3r Jul 8, 2018
09fe24e
Update about_regular_expressions.rb
Ctalk3r Jul 8, 2018
5cc5e5c
Update about_regular_expressions.rb
Ctalk3r Jul 8, 2018
aae35e9
Update about_sandwich_code.rb
Ctalk3r Jul 8, 2018
a98481c
Update about_sandwich_code.rb
Ctalk3r Jul 8, 2018
cd7a86a
Update triangle.rb
Ctalk3r Jul 9, 2018
e56988d
Update about_regular_expressions.rb
Ctalk3r Jul 9, 2018
5860b48
Update about_sandwich_code.rb
Ctalk3r Jul 9, 2018
a6014b5
Update about_true_and_false.rb
Ctalk3r Jul 9, 2018
35450b3
Update about_iteration.rb
Ctalk3r Jul 9, 2018
10affeb
Update about_iteration.rb
Ctalk3r Jul 9, 2018
7ca09ff
Update about_proxy_object_project.rb
Ctalk3r Jul 9, 2018
8f8f3d8
Update about_proxy_object_project.rb
Ctalk3r Jul 9, 2018
e3b5935
Update about_to_str.rb
Ctalk3r Jul 9, 2018
8551d80
Update about_symbols.rb
Ctalk3r Jul 9, 2018
bf43352
Update about_methods.rb
Ctalk3r Jul 9, 2018
1c03b6f
Update about_symbols.rb
Ctalk3r Jul 9, 2018
9f3f0e1
Update about_scoring_project.rb
Ctalk3r Jul 9, 2018
a9e0b5e
Update about_control_statements.rb
Ctalk3r Jul 9, 2018
1260d9f
Update triangle.rb
Ctalk3r Jul 9, 2018
442cf61
Update about_symbols.rb
Ctalk3r Jul 9, 2018
6a07d69
Update about_message_passing.rb
Ctalk3r Jul 9, 2018
ca2b1a4
Update about_inheritance.rb
Ctalk3r Jul 9, 2018
3c7b6e8
Update about_symbols.rb
Ctalk3r Jul 9, 2018
285abe0
Update about_nil.rb
Ctalk3r Jul 9, 2018
4d41b4c
Update about_symbols.rb
Ctalk3r Jul 9, 2018
a46494e
Update about_strings.rb
Ctalk3r Jul 9, 2018
091c805
Update about_keyword_arguments.rb
Ctalk3r Jul 9, 2018
16f4252
Update about_regular_expressions.rb
Ctalk3r Jul 9, 2018
0be4ee6
Update about_proxy_object_project.rb
Ctalk3r Jul 9, 2018
e104648
Update about_regular_expressions.rb
Ctalk3r Jul 9, 2018
6a3fe89
Update about_symbols.rb
Ctalk3r Jul 9, 2018
91e555f
Update about_strings.rb
Ctalk3r Jul 9, 2018
318811d
Update about_iteration.rb
Ctalk3r Jul 9, 2018
866ac1c
Update about_methods.rb
Ctalk3r Jul 9, 2018
2f2b933
Update about_scope.rb
Ctalk3r Jul 9, 2018
c13893b
Update about_asserts.rb
Ctalk3r Jul 9, 2018
d876128
Update about_class_methods.rb
Ctalk3r Jul 9, 2018
5ffdd86
Update about_strings.rb
Ctalk3r Jul 9, 2018
9fb42f6
Update about_control_statements.rb
Ctalk3r Jul 9, 2018
5e28805
Update about_objects.rb
Ctalk3r Jul 9, 2018
b8802af
Update about_nil.rb
Ctalk3r Jul 9, 2018
2f381aa
Update about_array_assignment.rb
Ctalk3r Jul 9, 2018
6bbdc2f
Update about_strings.rb
Ctalk3r Jul 9, 2018
68a07a7
Update about_sandwich_code.rb
Ctalk3r Jul 9, 2018
8588cf8
Update about_scoring_project.rb
Ctalk3r Jul 9, 2018
23cf485
Update about_regular_expressions.rb
Ctalk3r Jul 9, 2018
3314454
Update about_hashes.rb
Ctalk3r Jul 9, 2018
b7f7054
Update about_regular_expressions.rb
Ctalk3r Jul 9, 2018
845a4a0
Update about_scoring_project.rb
Ctalk3r Jul 9, 2018
d01deb3
Update about_strings.rb
Ctalk3r Jul 9, 2018
38a2442
Update about_message_passing.rb
Ctalk3r Jul 9, 2018
b324786
Update about_strings.rb
Ctalk3r Jul 9, 2018
133ce16
Update about_modules.rb
Ctalk3r Jul 9, 2018
eaa1f33
Update about_open_classes.rb
Ctalk3r Jul 9, 2018
5fefd19
Update about_proxy_object_project.rb
Ctalk3r Jul 9, 2018
81710ad
Update about_dice_project.rb
Ctalk3r Jul 9, 2018
6117e4e
Update about_strings.rb
Ctalk3r Jul 9, 2018
c4cfe52
Update about_symbols.rb
Ctalk3r Jul 9, 2018
a70d1bc
Update about_open_classes.rb
Ctalk3r Jul 9, 2018
a8c121d
Update about_regular_expressions.rb
Ctalk3r Jul 9, 2018
a0ef8ee
Update about_hashes.rb
Ctalk3r Jul 9, 2018
6d229bd
Update about_regular_expressions.rb
Ctalk3r Jul 9, 2018
830cbf4
Update about_exceptions.rb
Ctalk3r Jul 9, 2018
8272dd0
Update about_inheritance.rb
Ctalk3r Jul 9, 2018
85b69dd
Update about_class_methods.rb
Ctalk3r Jul 10, 2018
60f30f4
Update about_hashes.rb
Ctalk3r Jul 10, 2018
d5c4ade
Update about_dice_project.rb
Ctalk3r Jul 10, 2018
6454d5f
Update about_message_passing.rb
Ctalk3r Jul 10, 2018
61d5c5a
Update about_modules.rb
Ctalk3r Jul 10, 2018
010dca3
Update about_nil.rb
Ctalk3r Jul 10, 2018
5cd8a6f
Update about_methods.rb
Ctalk3r Jul 10, 2018
6047b87
Update about_control_statements.rb
Ctalk3r Jul 10, 2018
fd8dca1
Update about_exceptions.rb
Ctalk3r Jul 10, 2018
cbb08dd
Update about_dice_project.rb
Ctalk3r Jul 10, 2018
0bd0ca4
Update about_methods.rb
Ctalk3r Jul 10, 2018
79eea7a
Update about_exceptions.rb
Ctalk3r Jul 10, 2018
4edf28e
Update about_class_methods.rb
Ctalk3r Jul 10, 2018
67a8d88
Update about_methods.rb
Ctalk3r Jul 10, 2018
59ab1b9
Update about_constants.rb
Ctalk3r Jul 10, 2018
40b1bd1
Update about_dice_project.rb
Ctalk3r Jul 10, 2018
f5bae46
Update about_control_statements.rb
Ctalk3r Jul 10, 2018
7f5e5e9
Update about_class_methods.rb
Ctalk3r Jul 10, 2018
2ecf881
Update about_arrays.rb
Ctalk3r Jul 10, 2018
2760bb6
Update about_exceptions.rb
Ctalk3r Jul 10, 2018
7f66061
Update about_dice_project.rb
Ctalk3r Jul 10, 2018
52c0bd9
Update about_array_assignment.rb
Ctalk3r Jul 10, 2018
b0abb8b
Update about_arrays.rb
Ctalk3r Jul 10, 2018
d10f58d
Update about_blocks.rb
Ctalk3r Jul 10, 2018
8329c80
Update about_classes.rb
Ctalk3r Jul 10, 2018
7fa83ff
Update about_control_statements.rb
Ctalk3r Jul 10, 2018
e88d10b
Update about_methods.rb
Ctalk3r Jul 10, 2018
e453089
Update about_constants.rb
Ctalk3r Jul 10, 2018
cc653c4
Update about_constants.rb
Ctalk3r Jul 10, 2018
c62a334
Update about_blocks.rb
Ctalk3r Jul 10, 2018
46ed271
Update about_classes.rb
Ctalk3r Jul 10, 2018
10f114f
Update about_class_methods.rb
Ctalk3r Jul 10, 2018
1050819
Update about_asserts.rb
Ctalk3r Jul 10, 2018
6ceb5fe
Update about_dice_project.rb
Ctalk3r Jul 10, 2018
90423be
Update about_classes.rb
Ctalk3r Jul 10, 2018
772578f
Update about_classes.rb
Ctalk3r Jul 10, 2018
5a40382
Update about_classes.rb
Ctalk3r Jul 10, 2018
8269a35
Update about_inheritance.rb
Ctalk3r Jul 10, 2018
464945d
Update about_proxy_object_project.rb
Ctalk3r Jul 10, 2018
b22284f
Update about_scoring_project.rb
Ctalk3r Jul 10, 2018
4512926
Update about_classes.rb
Ctalk3r Jul 11, 2018
dfc0aef
Update about_constants.rb
Ctalk3r Jul 11, 2018
0b84da3
Update about_dice_project.rb
Ctalk3r Jul 11, 2018
b0ba43d
Update about_exceptions.rb
Ctalk3r Jul 11, 2018
42fb954
Update about_message_passing.rb
Ctalk3r Jul 11, 2018
7e23db2
Update about_regular_expressions.rb
Ctalk3r Jul 11, 2018
73fd4d1
Update about_strings.rb
Ctalk3r Jul 11, 2018
ffb3e5e
Update about_true_and_false.rb
Ctalk3r Jul 11, 2018
c1e8cac
Update about_control_statements.rb
Ctalk3r Jul 11, 2018
b6749fe
Update about_class_methods.rb
Ctalk3r Jul 11, 2018
3cf3172
Update about_exceptions.rb
Ctalk3r Jul 11, 2018
0788178
Update about_constants.rb
Ctalk3r Jul 11, 2018
de3d8a1
Update about_methods.rb
Ctalk3r Jul 11, 2018
6d96858
Update about_symbols.rb
Ctalk3r Jul 11, 2018
5cb7c47
Update about_scoring_project.rb
Ctalk3r Jul 11, 2018
7b5a9d8
Update about_class_methods.rb
Ctalk3r Jul 11, 2018
5ebe714
Update about_hashes.rb
Ctalk3r Jul 11, 2018
22b6e81
Update about_strings.rb
Ctalk3r Jul 11, 2018
4ac0a16
Update about_regular_expressions.rb
Ctalk3r Jul 11, 2018
da7537b
Update about_proxy_object_project.rb
Ctalk3r Jul 11, 2018
370d655
Update triangle.rb
Ctalk3r Jul 11, 2018
6bd10e2
Update about_keyword_arguments.rb
Ctalk3r Jul 11, 2018
95467d2
Update about_dice_project.rb
Ctalk3r Jul 11, 2018
15035eb
Update about_methods.rb
Ctalk3r Jul 11, 2018
cd80220
Add files via upload
Ctalk3r Jul 11, 2018
4960d43
Update about_exceptions.rb
Ctalk3r Jul 11, 2018
136ae1c
Update about_keyword_arguments.rb
Ctalk3r Jul 11, 2018
64edb48
Update about_message_passing.rb
Ctalk3r Jul 11, 2018
31f0a31
Update about_message_passing.rb
Ctalk3r Jul 11, 2018
7cd6866
Update about_regular_expressions.rb
Ctalk3r Jul 11, 2018
f188d56
Update about_symbols.rb
Ctalk3r Jul 11, 2018
b7a5048
Update triangle.rb
Ctalk3r Jul 11, 2018
040f3b6
Update about_proxy_object_project.rb
Ctalk3r Jul 11, 2018
0d66177
Update about_proxy_object_project.rb
Ctalk3r Jul 11, 2018
dec30d7
Update about_symbols.rb
Ctalk3r Jul 11, 2018
b6310e1
Update about_regular_expressions.rb
Ctalk3r Jul 11, 2018
6240d15
Update about_message_passing.rb
Ctalk3r Jul 11, 2018
67ab697
Update about_exceptions.rb
Ctalk3r Jul 11, 2018
57d1e02
Update about_message_passing.rb
Ctalk3r Jul 11, 2018
d8a396d
Update about_keyword_arguments.rb
Ctalk3r Jul 11, 2018
9e2c25c
Update about_class_methods.rb
Ctalk3r Jul 11, 2018
e0b8637
Update about_message_passing.rb
Ctalk3r Jul 11, 2018
28d3d83
Update about_proxy_object_project.rb
Ctalk3r Jul 11, 2018
cabfb50
Update about_proxy_object_project.rb
Ctalk3r Jul 11, 2018
789d6ea
Update about_message_passing.rb
Ctalk3r Jul 11, 2018
c4f48fc
Update about_message_passing.rb
Ctalk3r Jul 11, 2018
0771e28
Update about_proxy_object_project.rb
Ctalk3r Jul 11, 2018
03d4cdb
Update triangle.rb
Ctalk3r Jul 11, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Update about_class_methods.rb
  • Loading branch information
Ctalk3r committed Jul 11, 2018
commit 7b5a9d869a05361fd733161b6ce7abb987529a0a
230 changes: 125 additions & 105 deletions 2253/1/about_class_methods.rb
Original file line number Diff line number Diff line change
@@ -1,180 +1,200 @@
require File.expand_path(File.dirname(__FILE__) + '/neo')

# :nodoc:
class AboutClassMethods < Neo::Koan
class AboutClasses < Neo::Koan
# :nodoc:
class Dog
end

def test_objects_are_objects
def test_instances_of_classes_can_be_created_with_new
fido = Dog.new
assert_equal true, fido.is_a?(Object)
assert_equal Dog, fido.class
end

def test_classes_are_classes
assert_equal true, Dog.is_a?(Class)
end
# ------------------------------------------------------------------

def test_classes_are_objects_too
assert_equal true, Dog.is_a?(Object)
# rubocop:disable Naming/AccessorMethodName
# :nodoc:
class Dog2
def set_name(a_name)
@name = a_name
end
end

def test_objects_have_methods
fido = Dog.new
assert !fido.methods.empty?
end
def test_instance_variables_can_be_set_by_assigning_to_them
fido = Dog2.new
assert_equal [], fido.instance_variables

def test_classes_have_methods
assert !Dog.methods.empty?
fido.set_name('Fido')
assert_equal [:@name], fido.instance_variables
end

def test_you_can_define_methods_on_individual_objects
fido = Dog.new
def fido.wag
:fidos_wag
end
assert_equal :fidos_wag, fido.wag
end
def test_instance_variables_cannot_be_accessed_outside_the_class
fido = Dog2.new
fido.set_name('Fido')

def test_other_objects_are_not_affected_by_these_singleton_methods
fido = Dog.new
rover = Dog.new
def fido.wag
:fidos_wag
assert_raise(NoMethodError) do
fido.name
end

assert_raise(NoMethodError) do
rover.wag
# rubocop:disable Style/EvalWithLocation
assert_raise(SyntaxError) do
eval 'fido.@name'
# NOTE: Using eval because the above line is a syntax error.
end
# rubocop:enable Style/EvalWithLocation
end

def test_you_can_politely_ask_for_instance_variable_values
fido = Dog2.new
fido.set_name('Fido')

assert_equal 'Fido', fido.instance_variable_get('@name')
end

# rubocop:disable Style/EvalWithLocation
def test_you_can_rip_the_value_out_using_instance_eval
fido = Dog2.new
fido.set_name('Fido')

assert_equal 'Fido', fido.instance_eval('@name') # string version
assert_equal('Fido', fido.instance_eval { @name }) # block version
end
# rubocop:enable Style/EvalWithLocation

# ------------------------------------------------------------------

# :nodoc:
class Dog2
def wag
:instance_level_wag
class Dog3
def set_name(a_name)
@name = a_name
end

attr_reader :name
end

def Dog2.wag
:class_level_wag
def test_you_can_create_accessor_methods_to_return_instance_variables
fido = Dog3.new
fido.set_name('Fido')

assert_equal 'Fido', fido.name
end

# rubocop:disable Metrics/LineLength
def test_since_classes_are_objects_you_can_define_singleton_methods_on_them_too
assert_equal :class_level_wag, Dog2.wag
# ------------------------------------------------------------------

# :nodoc:
class Dog4
attr_reader :name

def set_name(a_name)
@name = a_name
end
end
# rubocop:enable Metrics/LineLength

def test_class_methods_are_independent_of_instance_methods
fido = Dog2.new
assert_equal :instance_level_wag, fido.wag
assert_equal :class_level_wag, Dog2.wag
def test_attr_reader_will_automatically_define_an_accessor
fido = Dog4.new
fido.set_name('Fido')

assert_equal 'Fido', fido.name
end

# ------------------------------------------------------------------

# :nodoc:
class Dog
class Dog5
attr_accessor :name
end

# rubocop:disable Style/TrivialAccessors
def Dog.name
@name
end
# rubocop:enable Style/TrivialAccessors
def test_attr_accessor_will_automatically_define_both_read_and_write_accessors
fido = Dog5.new

def test_classes_and_instances_do_not_share_instance_variables
fido = Dog.new
fido.name = 'Fido'
assert_equal 'Fido', fido.name
assert_equal nil, Dog.name
end

# ------------------------------------------------------------------

# :nodoc:
class Dog
def self.a_class_method
:dogs_class_method
class Dog6
attr_reader :name
def initialize(initial_name)
@name = initial_name
end
end

def test_you_can_define_class_methods_inside_the_class
assert_equal :dogs_class_method, Dog.a_class_method
def test_initialize_provides_initial_values_for_instance_variables
fido = Dog6.new('Fido')
assert_equal 'Fido', fido.name
end

# ------------------------------------------------------------------
def test_args_to_new_must_match_initialize
assert_raise(ArgumentError) do
Dog6.new
end
# THINK ABOUT IT:
# Why is this so?
end

# rubocop:disable Style/Documentation
LAST_EXPRESSION_IN_CLASS_STATEMENT = class Dog
21
end
def test_different_objects_have_different_instance_variables
fido = Dog6.new('Fido')
rover = Dog6.new('Rover')

def test_class_statements_return_the_value_of_their_last_expression
assert_equal 21, LAST_EXPRESSION_IN_CLASS_STATEMENT
assert_equal true, rover.name != fido.name
end

# ------------------------------------------------------------------

SELF_INSIDE_OF_CLASS_STATEMENT = class Dog
self
end
# :nodoc:
class Dog7
attr_reader :name

def test_self_while_inside_class_is_class_object_not_instance
assert_equal true, Dog == SELF_INSIDE_OF_CLASS_STATEMENT
end
# rubocop:enable Style/Documentation
def initialize(initial_name)
@name = initial_name
end

# ------------------------------------------------------------------
def get_self
self
end

# :nodoc:
class Dog
def self.class_method2
:another_way_to_write_class_methods
def to_s
@name
end

def inspect
"<Dog named '#{name}'>"
end
end

def test_you_can_use_self_instead_of_an_explicit_reference_to_dog
assert_equal :another_way_to_write_class_methods, Dog.class_method2
def test_inside_a_method_self_refers_to_the_containing_object
fido = Dog7.new('Fido')

fidos_self = fido.get_self
assert_equal fidos_self, fidos_self
end

# ------------------------------------------------------------------
def test_to_s_provides_a_string_version_of_the_object
fido = Dog7.new('Fido')
assert_equal 'Fido', fido.to_s
end

# :nodoc:
class Dog
class << self
def another_class_method
:still_another_way
end
end
def test_to_s_is_used_in_string_interpolation
fido = Dog7.new('Fido')
assert_equal 'My dog is Fido', "My dog is #{fido}"
end

def test_heres_still_another_way_to_write_class_methods
assert_equal :still_another_way, Dog.another_class_method
def test_inspect_provides_a_more_complete_string_version
fido = Dog7.new('Fido')
assert_equal "<Dog named 'Fido'>", fido.inspect
end

# THINK ABOUT IT:
#
# The two major ways to write class methods are:
# class Demo
# def self.method
# end
#
# class << self
# def class_methods
# end
# end
# end
#
# Which do you prefer and why?
# Are there times you might prefer one over the other?
def test_all_objects_support_to_s_and_inspect
array = [1, 2, 3]

# ------------------------------------------------------------------
assert_equal '[1, 2, 3]', array.to_s
assert_equal '[1, 2, 3]', array.inspect

def test_heres_an_easy_way_to_call_class_methods_from_instance_methods
fido = Dog.new
assert_equal :still_another_way, fido.class.another_class_method
assert_equal 'STRING', 'STRING'.to_s
assert_equal '"STRING"', 'STRING'.inspect
end
# rubocop:enable Naming/AccessorMethodName
end