Skip to content

True Object-Oriented Decorator for either an Object or a Class

License

Notifications You must be signed in to change notification settings

yegor256/decoor

Repository files navigation

True Object-Oriented Decorator

DevOps By Rultor.com We recommend RubyMine

rake PDD status Gem Version Test Coverage Yard Docs Hits-of-Code License

Let's say, you have an object that you want to decorate, thus adding new attributes and methods to it. Here is how:

require 'decoor'
s = ' Jeff Lebowski '
d = decoor(s, br: ' ') do
  def parts
    @origin.strip.split(@br)
  end
end
assert(d.parts == ['Jeff', 'Lebowski'])

You may also turn an existing class into a decorator:

require 'decoor'
class MyString
  def initialize(s, br)
    @s = s
    @br = br
  end
  decoor(:s)
  def parts
    @origin.strip.split(@br)
  end
end
d = MyString.new('Jeff Lebowski')
assert(d.parts == ['Jeff', 'Lebowski'])

That's it.

How to contribute

Read these guidelines. Make sure you build is green before you contribute your pull request. You will need to have Ruby 3.2+ and Bundler installed. Then:

bundle update
bundle exec rake

If it's clean and you don't see any error messages, submit your pull request.