racksh 0.9.2 → 0.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. data/README.markdown +79 -24
  2. data/VERSION +1 -1
  3. data/lib/racksh.rb +17 -7
  4. metadata +23 -4
@@ -1,52 +1,107 @@
1
- racksh
2
- ======
1
+ # racksh
3
2
 
4
- About
5
- -----
3
+ ## About
6
4
 
7
5
  **racksh** (Rack::Shell) is a console for Rack based ruby web applications.
8
6
 
9
- It's like Rails' _script/console_ or Merb's _merb -i_, but for any app built on Rack. You can use it to load application environment for Rails, Merb, Sinatra, Camping, Ramaze or your own framework provided there is _config.ru_ file in app's root directory.
7
+ It's like Rails' _script/console_ or Merb's _merb -i_, but for any app built on Rack. You can use it to load application
8
+ environment for Rails, Merb, Sinatra, Camping, Ramaze or your own framework provided there is _config.ru_ file in app's root
9
+ directory.
10
10
 
11
- It's purpose is to allow developer to introspect his application and/or make some initial setup, ie. running _DataMapper.auto_migrate!_. It's mainly aimed at apps that don't have similar facility (like Sinatra) but can be used without problems with Merb or Rails apps.
11
+ It's purpose is to allow developer to introspect his application and/or make some initial setup. You can for example run
12
+ _DataMapper.auto_migrate!_ or make a request to "/users/666" and check response details. It's mainly aimed at apps that don't
13
+ have console-like component (ie. app built with Sinatra) but all frameworks can benefit from interactive Rack stack introspection.
12
14
 
13
- How it works?
14
- -------------
15
+ ## How it works?
15
16
 
16
- It loads whole application environment like Rack web server, but it doesn't run the app. Simply, methods like _use_ or _run_ which are normally invoked on Rack::Builder instance are being stubbed.
17
+ It loads whole application environment like Rack web server, but instead of running the app it starts _irb_ session.
18
+ Additionally it exposes _$rack_ variable which allows you to make simulated HTTP requests to your app.
17
19
 
18
- Installation
19
- ------------
20
+ ## Installation
20
21
 
21
22
  gem install racksh -s http://gemcutter.org
22
23
 
23
- Usage
24
- -----
24
+ ## Usage
25
25
 
26
- To open console run following inside rack application directory (containing config.ru file):
26
+ ### Starting racksh
27
27
 
28
- racksh
28
+ To start racksh session run following inside rack application directory (containing config.ru file):
29
+
30
+ % racksh
31
+ Rack::Shell v0.9.3 started in development environment.
32
+ irb(main):001:0>
29
33
 
30
34
  Specifying location of config.ru:
31
35
 
32
- CONFIG_RU=~/projects/foobar/config.ru racksh
36
+ % CONFIG_RU=~/projects/foobar/config.ru racksh
33
37
 
34
38
  Executing ruby code inside application environment and printing results:
35
39
 
36
- racksh Order.all
37
- racksh "Order.first :created_at => Date.today"
40
+ % racksh Order.all
41
+ % racksh "Order.first :created_at => Date.today"
38
42
 
39
43
  Specifying Rack environment (default is development):
40
44
 
41
- RACK_ENV=production racksh
42
-
43
- Bugs & feature requests
44
- ---------------------------------
45
+ % RACK_ENV=production racksh
46
+ Rack::Shell v0.9.3 started in production environment.
47
+ irb(main):001:0>
48
+
49
+ ### Making simulated HTTP requests to your app:
50
+
51
+ % racksh
52
+ Rack::Shell v0.9.3 started in development environment.
53
+ irb(main):001:0> $rack.get "/"
54
+ => #<Rack::MockResponse:0xb68fa7bc @body="<html>...", @headers={"Content-Type"=>"text/html", "Content-Length"=>"1812"}, @status=200, ...
55
+
56
+ _$rack_ variable contains following methods (thanks to [rack-test](http://github.com/brynary/rack-test) gem):
57
+
58
+ # make GET request
59
+ $rack.get uri, params, env
60
+
61
+ # make POST request
62
+ $rack.post uri, params, env
63
+
64
+ # make PUT request
65
+ $rack.put uri, params, env
66
+
67
+ # make DELETE request
68
+ $rack.delete uri, params, env
69
+
70
+ # make HEAD request
71
+ $rack.head uri, params, env
72
+
73
+ # make custom request
74
+ $rack.request uri, params, env
75
+
76
+ # set HTTP header
77
+ $rack.header name, value
78
+
79
+ # set credentials for Basic Authorization
80
+ $rack.basic_authorize username, password
81
+
82
+ # set credentials for Digest Authorization
83
+ $rack.digest_authorize username, password
84
+
85
+ # follow redirect from previous request
86
+ $rack.follow_redirect!
87
+
88
+ # access your Rack app
89
+ $rack.app
90
+
91
+ Check [test.rb from brynary's rack-test](http://github.com/brynary/rack-test/blob/master/lib/rack/test.rb) for implementation of
92
+ above methods.
93
+
94
+ Examples:
95
+
96
+ $rack.get "/", {}, { 'REMOTE_ADDR' => '123.45.67.89' }
97
+ $rack.header "User-Agent", "Firefox"
98
+ $rack.post "/users", :user => { :name => "Jola", :email => "jola@misi.ak" }
99
+
100
+ ## Bugs & feature requests
45
101
 
46
102
  Please report bugs and/or feature requests on the github issue tracker for the project located [here](http://github.com/sickill/racksh/issues).
47
103
 
48
- Authors
49
- -------
104
+ ## Authors
50
105
 
51
106
  * Marcin Kulik - [sickill.net](http://sickill.net/)
52
107
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.9.2
1
+ 0.9.3
@@ -1,16 +1,26 @@
1
- ENV['RACK_ENV'] ||= 'development'
1
+ require "rubygems"
2
+ require "rack"
3
+ require "rack/test"
2
4
 
3
- def use(*args, &blk); end
4
- def run(*args, &blk); end
5
- def map(*args, &blk); end
5
+ ENV['RACK_ENV'] ||= 'development'
6
6
 
7
- config_ru = ENV['CONFIG_RU'] || 'config.ru'
7
+ module Rack
8
+ class Shell
9
+ include Rack::Test::Methods
10
+ attr_reader :app
11
+ def initialize(app)
12
+ @app = app
13
+ end
14
+ end
15
+ end
8
16
 
9
17
  begin
10
- load config_ru
18
+ config_ru = ENV['CONFIG_RU'] || 'config.ru'
19
+ rack_application = eval("Rack::Builder.new { #{File.read(config_ru)} }")
20
+ $rack = Rack::Shell.new(rack_application)
11
21
  version = File.read(File.join(File.dirname(__FILE__), '..', 'VERSION')).strip
12
22
  puts "Rack::Shell v#{version} started in #{ENV['RACK_ENV']} environment."
13
- rescue LoadError => e
23
+ rescue Errno::ENOENT => e
14
24
  if e.message =~ /config\.ru$/
15
25
  puts "Rack::Shell couldn't find #{config_ru}"
16
26
  exit(1)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: racksh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 0.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcin Kulik
@@ -9,10 +9,29 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-11-15 00:00:00 +01:00
12
+ date: 2009-11-17 00:00:00 +01:00
13
13
  default_executable:
14
- dependencies: []
15
-
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rack
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "1.0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: rack-test
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0.5"
34
+ version:
16
35
  description:
17
36
  email: marcin.kulik@gmail.com
18
37
  executables: