Skip to content
vic

fredwu/ruby_decorators

Ruby method decorators inspired by Python.

fredwu/ruby_decorators.json
{
"createdAt": "2012-09-11T16:27:52Z",
"defaultBranch": "master",
"description": "Ruby method decorators inspired by Python.",
"fullName": "fredwu/ruby_decorators",
"homepage": null,
"language": "Ruby",
"name": "ruby_decorators",
"pushedAt": "2013-11-09T07:23:10Z",
"stargazersCount": 63,
"topics": [],
"updatedAt": "2020-09-30T16:57:39Z",
"url": "https://github.com/fredwu/ruby_decorators"
}

Ruby method decorators inspired by Python.

Section titled “Ruby method decorators inspired by Python.”

I wrote this as a small practice for some ruby meta-programming fun. The implementation is relatively simple, and is thread safe.

There are also these other two implementations:

Add this line to your application’s Gemfile:

gem 'ruby_decorators'

And then execute:

$ bundle

Or install it yourself as:

$ gem install ruby_decorators
class Hi < RubyDecorator
def call(this, *args, &blk)
this.call(*args, &blk).sub('hello', 'hi')
end
end
class Batman < RubyDecorator
def call(this, *args, &blk)
this.call(*args, &blk).sub('world', 'batman')
end
end
class Catwoman < RubyDecorator
def initialize(*args)
@args = args.any? ? args : ['catwoman']
end
def call(this, *args, &blk)
this.call(*args, &blk).sub('world', @args.join(' '))
end
end
class World
extend RubyDecorators
def initialize
@greeting = 'hello world'
end
def hello_world
@greeting
end
+Batman
def hello_batman
@greeting
end
+Hi
+Catwoman
def hello_catwoman
@greeting
end
+Catwoman.new('super', 'catwoman')
def hello_super_catwoman
@greeting
end
end
world = World.new
world.hello_world # => "hello world"
world.hello_batman # => "hello batman"
world.hello_catwoman # => "hi catwoman"
world.hello_super_catwoman # => "hello super catwoman"

Copyright (c) 2012 Fred Wu

Licensed under the MIT license.

Bitdeli Badge