Ruby Modules
Objetives

Modules

# Syntaxes
module ModuleName
# Bits 'n pieces
end
# Syntaxes
module MyLibrary
BOOK = 'Zelda'
end
Namespacing

# Namespacing
module Circle
PI = "hi!"
end
puts Math::PI
puts Circle::PI
Require

# Syntaxes
require_relative 'module-file-name'
require "./module-file-name"
# perimeter.rb
module Perimeter
class Array
def initialize
@size = 400
end
end
end
# main.rb
require_relative "perimeter"
our_array = Perimeter::Array.new
ruby_array = Array.new
p our_array.class
p ruby_array.class
Include

# Include
class Angle
include Math
attr_accessor :radians
attr_reader :pi
def initialize(radians)
@radians = radians
@pi = PI
# @pi = Math::PI
end
def cosine
cos(@radians)
# Math::cos(@radians)
end
end
p acute = Angle.new(1)
p acute.cosine
p acute.pi
Mixins

# Mixins
module MartialArts
def swordsman
"I'm a swordsman."
end
end
module Greeting
def say_hello
"Hello!"
end
end
class Ninja
include MartialArts
def initialize(clan)
@clan = clan
end
end
class Samurai
include MartialArts
include Math
include Greeting
attr_reader :pi
def initialize(clan)
@clan = clan
@pi = PI
end
end
person = Samurai.new('fua')
p person.swordsman
p person.pi
p person.say_hello
Example!

# Modules & Classes & Require
# action.rb
module Action
def jump
@distance = rand(4) + 2
puts "I jumped forward #{@distance} feet!"
end
end
# main.rb
require_relative "action"
class Rabbit
include Action
attr_reader :name
def initialize(name)
@name = name
end
end
class Cricket
include Action
attr_reader :name
def initialize(name)
@name = name
end
end
peter = Rabbit.new("Peter")
juan = Cricket.new("Juan")
peter.jump
juan.jump
Extends

# Extends
module ThePresent
def now
puts Time.now
end
end
class TheHereAnd
extend ThePresent
end
TheHereAnd.now
Quick Review

# Quick Review
module UsefulThings
def useful_thing_1
"thing_1"
end
end
class A
include UsefulThings
end
class B
extend UsefulThings
end
p A.new.useful_thing_1 # => "thing_1"
p B.useful_thing_1 # => "thing_1"
Ruby Modules
By Paulo Tijero
Ruby Modules
- 88