Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Hiding Things in Ruby

Hiding Things in Ruby

Borrowing IIFE concept from Javascript to limit access using closures

Avatar for devpuppy

devpuppy

April 27, 2016

Other Decks in Technology

Transcript

  1. @devpuppy IIFE in JS var getNumber; var setNumber; (function() {

    var number = 0; // lives inside the scope getNumber = function() { return number; } setNumber = function(value) { return number = value; } })();
  2. @devpuppy IIFE in Ruby get_number = nil set_number = nil

    -> { number = 0 get_number = -> { number } set_number = ->(value) { number = value } }.()
  3. @devpuppy class Elevator attr_accessor :floor def initialize @floor = 1

    end # override setter to prevent basement def floor=(value) raise "No basement" if value.to_i < 1 @floor = value end end
  4. @devpuppy class Elevator def initialize -> { floor = 1

    define_singleton_method :floor= do |value| raise "No basement" if value.to_i < 1 floor = value end define_singleton_method :floor do floor end }.() end end