lib/cap_reserve.rb in cap_reserve-0.1.0 vs lib/cap_reserve.rb in cap_reserve-0.1.1
- old
+ new
@@ -1,45 +1,71 @@
-gem "nestful", "= 0.0.7"
-require "nestful"
+gem 'yajl-ruby', '= 1.0.0'
+require 'open-uri'
+require 'uri'
+require 'yajl'
+
$:.unshift File.dirname(__FILE__)
Capistrano::Configuration.instance(:must_exist).load do
desc "Reserve environment using RESERVE=minutes"
- task :reserve do
- env, user, time, force, url =
- ENV['RESERVE_ENV'], ENV['USER'], ENV['RESERVE'], ENV['FORCE'], ENV['RESERVE_URL']
+ task :maitre_d do
+ env, user, time, force, url, destroy =
+ ENV['RESERVE_ENV'], ENV['USER'], ENV['RESERVE'], ENV['FORCE'], ENV['RESERVE_URL'], ENV['DESTROY']
+ expires_to_string = lambda do |expires|
+ left = Time.at(expires) - Time.now
+ if left < 60
+ "#{left} seconds"
+ elsif left / 60 < 60
+ "#{sprintf "%.1f", left / 60} minutes"
+ else
+ "#{sprintf "%.1f", left / 60 / 60} hours"
+ end
+ end
+
+ get = lambda do |full_url, hash|
+ params = ''
+ hash.each do |k, v|
+ params << "#{URI.escape(k.to_s)}=#{URI.escape(v.to_s)}&"
+ end
+ params.chop! # trailing &
+
+ puts "#{full_url}?#{params}"
+ json = open("#{full_url}?#{params}").read
+ Yajl::Parser.parse(json)
+ end
+
create = lambda do |params|
if time
- Nestful.get("#{url}/reservations/create", :format => :json, :params => {
+ get.call("#{url}/reservations/create", {
:environment => env, :user => user, :seconds => time.to_i * 60
}.merge(params))
puts "Reservation created: #{user}@#{env} for #{time.to_i} minutes"
- elsif force
- res = Nestful.get("#{url}/reservations/destroy", :params => { :environment => env }, :format => :json)
+ elsif destroy
+ res = get.call("#{url}/reservations/destroy", :environment => env)
if res['status'] == 'reserved'
- puts "Reservation destroyed: #{res['user']}@#{env} (#{(Time.at(res['expires']) - Time.now) / 60} minutes left)"
+ puts "Reservation destroyed: #{res['user']}@#{env} (#{expires_to_string.call Time.at(res['expires'])} left)"
end
end
end
if env && user
- if force
+ if destroy
+ create.call({})
+ elsif force
create.call(:force => true)
else
- res = Nestful.get("#{url}/reservations/show", :params => { :environment => env }, :format => :json)
+ res = get.call("#{url}/reservations/show", :environment => env)
if res['status'] == 'reserved'
- if res['user'] == user
- create.call({})
- else
- puts "Reservation exists: #{res['user']}@#{env} for #{(Time.at(res['expires']) - Time.now) / 60} minutes"
- exit 0
- end
+ puts "Reservation exists: #{res['user']}@#{env} for #{expires_to_string.call Time.at(res['expires'])}"
+ exit 0
else
create.call({})
end
end
end
+
+ exit
end
end
\ No newline at end of file