Skip to content

Commit

Permalink
Harper 0.0.4: Provide a better client interface, and allow Harper to
Browse files Browse the repository at this point in the history
be easily started from the command line.
  • Loading branch information
gga committed Mar 5, 2012
1 parent 5c75b67 commit 407925e
Show file tree
Hide file tree
Showing 5 changed files with 79 additions and 7 deletions.
6 changes: 4 additions & 2 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
PATH
remote: .
specs:
harper (0.0.3)
harper (0.0.4)
httparty
json (>= 1.4.6)
sinatra (>= 1.0.0)
trollop

GEM
remote: http://rubygems.org/
Expand All @@ -27,7 +28,7 @@ GEM
multi_json
multi_xml
json (1.6.5)
multi_json (1.0.4)
multi_json (1.1.0)
multi_xml (0.4.1)
rack (1.4.1)
rack-protection (1.2.0)
Expand All @@ -54,6 +55,7 @@ GEM
highline (>= 1.4.0)
term-ansicolor (1.0.7)
tilt (1.3.3)
trollop (1.16.2)

PLATFORMS
ruby
Expand Down
41 changes: 37 additions & 4 deletions bin/harper
Original file line number Diff line number Diff line change
@@ -1,11 +1,44 @@
#!/usr/bin/env ruby

require "harper"
require "trollop"
require "open3"

port = ARGV.shift || 4567
opts = Trollop::options do
opt :port, "The port to run Harper on", :default => 4567
opt :bg, "Run in the background", :default => false
end

def start(port)
server = Rack::Server.new :app => Harper::App, :Port => port, :server => 'webrick'
Harper::App.server(server.server)
server.start
end

def start_in_background(port)
read, write = IO.pipe

fork do
read.close
Open3.popen2({}, "harper --port #{port}", {:err => [:child, :out]}) do |i, o|
found_start = false
while !found_start && line = o.readline
if line =~ /WEBrick::HTTPServer#start/
write.puts "Harper started"
found_start = true
end
end
end
end

write.close
read.readline
end

# Harper needs access to the server hosting itself so that it can shut
# it down on demand
server = Rack::Server.new :app => Harper::App, :Port => port, :server => 'webrick'
Harper::App.server(server.server)
server.start
if opts[:bg]
start_in_background(opts[:port])
else
start(opts[:port])
end
1 change: 1 addition & 0 deletions harper.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ Gem::Specification.new do |s|
s.add_dependency "sinatra", ">= 1.0.0"
s.add_dependency "httparty"
s.add_dependency "json", ">= 1.4.6"
s.add_dependency "trollop"

s.add_development_dependency "rack-test"
s.add_development_dependency "sham_rack"
Expand Down
36 changes: 36 additions & 0 deletions lib/harper/client.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
require 'httparty'
require 'json'

class HarperClient
include HTTParty

base_uri "localhost:4568"

def initialize
@started = false
end

def started?
@started
end

def start
system("harper --port 4568 --bg")
@started = true
end

def stop
self.class.put "/h/control", :body => {:command => "quit"}.to_json
@started = false
end

def mock(mock)
mock_body = case mock
when String
mock
else
mock.to_json
end
self.class.post "/h/mocks", :body => mock_body
end
end
2 changes: 1 addition & 1 deletion lib/harper/version.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
module Harper
Version = "0.0.3"
Version = "0.0.4"
end

0 comments on commit 407925e

Please sign in to comment.