Project

Shorty

0.0
No commit activity in last 3 years
No release in over 3 years
Add before/after hooks to your method calls. More info. at the homepage.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

 Project Readme

Shorty

A Ruby gem that provides DSL to add before/after hooks to method calls.

Installation

gem install Shorty

Usage: Ruby

require "Shorty"

include Shorty::DSL

class My_SSH
  def self.restart
  end
end

add :ssh, My_SSH

before :ssh, :restart do
  puts "restarting SSH"
end

after :ssh, :restart do
  puts "SSH has been restarted"
end

run :ssh, :restart 

# --> My_SSH.restart is run with before/after hooks.

You can also use lambdas or a code block:

add :start, lambda { `service ssh restart` }

add :stop do 
  `service ssh stop`
end

before :start, :call, lambda { puts 're-starting ssh' }

after  :stop, :call do
  puts 'ssh stopped'
end

run :start, :call
# --> "lambda { `service ssh restart` }.call" is called.

Shorty is implemented in just one file in case you have any more questions.

Usage: Shorty (executable)

Write a Ruby file, ~/uptime.rb, that uses the Shorty DSL:

add :uptime, lambda { puts 'uptime' }

before :uptime, :run do
  puts "starting uptime"
end

after :uptime, :run do
  puts "finished uptime"
end

run :uptime

In your shell:

Shorty ~/uptime.rb

Usage: Best Practices

You are not allowed to pass arguments to :run calls:

# Not possible:
run :ssh, :restart, "my arg"

This is intentional. You want to put all logic in a separate class/object. For example, let's say you use a different command for SSH start and restart depending on the OS. In your Ruby file, you put:

require "./My_SSH"
add :ssh, My_SSH
run :ssh, :start

In a separate file, My_SSH.rb:

require "ohai"

O = Ohai::System.new
O.require_plugin "linux/platform"

class My_SSH
  class << self
  
    def start
      case O[:platform]
      when "ubuntu"
        "service ssh start"
      when ...
        ....
      end
    end
    
  end
end

If :run allowed arguments, you would be very tempted to write Shorty/Ruby code with lots of mixed in logic:

if O[:platform] == 'ubuntu'
  run :ssh, :restart, "sudo service ssh restart"
else
  run :ssh, :restart, "some_program sshd start -now"
end

In summary:

  • Write short lines of Shorty/Ruby code.
  • Hide complicated logic in separate Ruby classes and objects.

Run Tests

git clone git@github.com:da99/Shorty.git
cd Shorty
bundle update
bundle exec bacon spec/main.rb