No commit activity in last 3 years
No release in over 3 years
Helper for single purpose objects
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

~> 1.7
~> 10.0
~> 3.1
 Project Readme

delegate_to_instance

Helper for single purpose objects

Usage

Instead of

class SendInvoiceJob
  def self.perform(invoice_id, recipients)
    new(invoice_id, recipients).perform
  end
  
  def initialize(invoice_id, recipients)
    @invoice_id, @recipients = invoice_id, recipients
  end
  
  def perform
    send_invoice(invoice_id, recipients)
  end
end

just write

class SendInvoiceJob
  extend DelegateToInstance
  delegate_to_instance :perform
  
  def initialize(invoice_id, recipients)
    @invoice_id, @recipients = invoice_id, recipients
  end
  
  def perform
    send_invoice(invoice_id, recipients)
  end
end

Why

When I write single purpose objects, like

class HTMLSanitizer
  def self.sanitize(html)
    new(html).sanitize
  end
  
  def initialize(html)
    @html = html
  end
  
  def sanitize
    sanitize_html(html)
  end
end

I often find myself writing a class level delegator (and corresponding tests for it)

class HTMLSanitizer
  def self.sanitize(html)
    new(html).sanitize
  end

  # ...

Instead, just write

class HTMLSanitizer
  include DelegateToInstance
  delegate_to_instance :sanitize
  
  # ...

Installation

Add this line to your application's Gemfile:

gem 'delegate_to_instance'

And then execute:

$ bundle

Or install it yourself as:

$ gem install delegate_to_instance

TODO

  1. Add a RSpec matcher