Skip to content

Instantly share code, notes, and snippets.

View Sebx's full-sized avatar
💭
I may be slow to respond.

Sebx Sebx

💭
I may be slow to respond.
View GitHub Profile
@Sebx
Sebx / Proxy.js
Created January 29, 2019 18:16 — forked from ryandabler/Proxy.js
Complete example of proxying an array for this article: https://itnext.io/meta-programming-in-javascript-with-proxies-64fa4898070e
const db = [
{
name: 'John Doe',
age: 28,
lastModified: Date.now(),
lastAccessed: Date.now()
},
{
name: 'Jane Smith',
age: 30,
@Sebx
Sebx / class_III.rb
Created December 13, 2018 02:25 — forked from hackvan/class_III.rb
instance_variable_set(name, value) # Nos permite definir y asignar un valor a una nueva variable de instancia
define_method(name, &block) # Nos permite definir dentro de la clase un método de manera dinámica y en tiempo de ejecución
method_missing(name, *args, &block) # Nos permite capturar y manejar la excepción que se dispara cuando llamamos un método no definido dentro de una clase.
...
class MethodCatcher
def method_missing(name, *args, &block)
puts "El nombre del método no encontrado es #{name}"
puts "los argumentos del método son #{args}"
puts "El cuerpo del método es #{block.inspect}"
end
end
catch = MethodCatcher.new
catch.some_method(1, 2) { puts "something" }
class Example
end
ex = Example.new
ex.instance_variables # => []
ex.instance_variable_set(:@x, 1) # => 1
ex.instance_variables # => ["@x"]
ex.instance_variable_defined?(:@x) # => true
ex.instance_variable_defined?(:@y) # => false
ex.instance_variable_get(:@x) # => 1
# Esta definición:
class Example
attr_accessor :x
end
## Es equivalente a:
class Example
def x
@x
end
Class.methods.select { |m| m =~ /attr/ } # [:attr, :attr_reader, :attr_writer, :attr_accessor]
# Clase base con la definición de nuestra macro a nivel de clase:
class AttrCustom
def self.attr_custom(name)
define_method("#{name}=") do |value|
puts "Asignando #{value.inspect} a #{name}"
instance_variable_set("@#{name}", value)
end
define_method("#{name}") do
puts "Leyendo #{name}"
class HTML
def self.method_missing(method_name, *args, &block)
tag(method_name, *args, &block)
end
def self.tag(tag_name, *args, &block)
"<#{tag_name}>#{args.last} #{yield if block_given?}</#{tag_name}>"
end
end
@Sebx
Sebx / object.rb
Created December 13, 2018 01:53 — forked from hackvan/object.rb
2_metaprogramming
42.class # => Fixnum
:foo.class # => Symbol
"Ruby".class # => String
true.class # => TrueClass
[1, 2, 3].class # => Array
{ a: => 1 }.class # => Hash
@Sebx
Sebx / object_II.rb
Created December 13, 2018 01:53 — forked from hackvan/object_II.rb
42 + 1 # => 43
42.+(1) # => 43
42.send(:+, 1) # => 43