spinels-racksh 1.0.0

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: b0128a9c2c6ea277f29e4c165aba04dca9cb3d63b8fbadd9247e48c66d41d676
4
+ data.tar.gz: a7df62aeb44cb8989d3639ce3a9fe03b71a533cce56fc9675e328f755dc0972a
5
+ SHA512:
6
+ metadata.gz: b1edfcb6ea64b3c6d2b2f0af11d6c44950d554c10763b566697c05d8c9f6de095ea01d1e82bb43d3836d14cb452d24bd0dead20cdb65d6061e18e2f5fb32c9d3
7
+ data.tar.gz: '049c7337e34ef1ce193d93b19c96e8183725c396224dac9e1908cf7789a8a3e6f91df39833953a207e5d9c5be6ddfad21184600d2cbd064a80024a7fb295225c'
data/CHANGELOG.txt ADDED
@@ -0,0 +1,34 @@
1
+ === 0.9.8 / 2010-09-03
2
+
3
+ * added option to load racksh into existing irb session
4
+
5
+ === 0.9.7 / ?
6
+ === 0.9.6 / ?
7
+
8
+ === 0.9.5 / 2010-01-31
9
+
10
+ * added application reloading with "reload!"
11
+
12
+ === 0.9.4 / 2009-11-19
13
+
14
+ * added loading irb/completion
15
+ * added support for session setup, loaded from .rackshrc in user's home directory and app's directory
16
+ * prevented STDOUT & STDERR to be reopened
17
+ * added showing simple prompt (>>) like Rails console
18
+ * added printing startup info in colors
19
+
20
+ === 0.9.3 / 2009-11-17
21
+
22
+ * exposed Rack::Test::Methods via $rack variable
23
+
24
+ === 0.9.2 / 2009-11-15
25
+
26
+ * irb require uses absolute path (for users without rubygems required in their .irbrc)
27
+
28
+ === 0.9.1 / 2009-11-15
29
+
30
+ * added showing name of loaded rack env
31
+
32
+ === 0.9 / 2009-11-15
33
+
34
+ * initial release
data/README.markdown ADDED
@@ -0,0 +1,146 @@
1
+ # racksh
2
+
3
+ ## About
4
+
5
+ **racksh** (Rack::Shell) is a console for Rack based ruby web applications.
6
+
7
+ It's like _script/console_ in Rails or _merb -i_ in Merb, 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
+
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 and request
14
+ introspection.
15
+
16
+ ## How it works?
17
+
18
+ It loads whole application environment like Rack web server, but instead of running the app it starts _irb_ session.
19
+ Additionally it exposes _$rack_ variable which allows you to make simulated HTTP requests to your app.
20
+
21
+ ## Installation
22
+
23
+ gem install spinels-racksh
24
+
25
+ ## Usage
26
+
27
+ ### Starting racksh
28
+
29
+ To start racksh session run following inside rack application directory (containing config.ru file):
30
+
31
+ % racksh
32
+ Rack::Shell v0.9.9 started in development environment.
33
+ >>
34
+
35
+ Specifying location of config.ru:
36
+
37
+ % CONFIG_RU=~/projects/foobar/config.ru racksh
38
+
39
+ Executing ruby code inside application environment and printing results:
40
+
41
+ % racksh Order.all
42
+ % racksh "Order.first :created_at => Date.today"
43
+
44
+ Specifying Rack environment (default is development):
45
+
46
+ % RACK_ENV=production racksh
47
+ Rack::Shell v0.9.9 started in production environment.
48
+ >>
49
+
50
+ ### Making simulated HTTP requests to your app
51
+
52
+ % racksh
53
+ Rack::Shell v0.9.9 started in development environment.
54
+ >> $rack.get "/"
55
+ => #<Rack::MockResponse:0xb68fa7bc @body="<html>...", @headers={"Content-Type"=>"text/html", "Content-Length"=>"1812"}, @status=200, ...
56
+
57
+ _$rack_ variable contains following methods (thanks to [rack-test](http://github.com/rack/rack-test) gem):
58
+
59
+ # make GET request
60
+ $rack.get uri, params, env
61
+
62
+ # make POST request
63
+ $rack.post uri, params, env
64
+
65
+ # make PUT request
66
+ $rack.put uri, params, env
67
+
68
+ # make DELETE request
69
+ $rack.delete uri, params, env
70
+
71
+ # make HEAD request
72
+ $rack.head uri, params, env
73
+
74
+ # make custom request
75
+ $rack.request uri, params, env
76
+
77
+ # set HTTP header
78
+ $rack.header name, value
79
+
80
+ # set credentials for Basic Authorization
81
+ $rack.basic_authorize username, password
82
+
83
+ # set credentials for Digest Authorization
84
+ $rack.digest_authorize username, password
85
+
86
+ # follow redirect from previous request
87
+ $rack.follow_redirect!
88
+
89
+ # last request object
90
+ $rack.last_request
91
+
92
+ # last response object
93
+ $rack.last_response
94
+
95
+ # access your Rack app
96
+ $rack.app
97
+
98
+ # name of environment
99
+ $rack.env
100
+
101
+ Check [test.rb from brynary's rack-test](http://github.com/brynary/rack-test/blob/master/lib/rack/test.rb) for implementation of
102
+ above methods.
103
+
104
+ Examples:
105
+
106
+ $rack.get "/", {}, { 'REMOTE_ADDR' => '123.45.67.89' }
107
+ $rack.header "User-Agent", "Firefox"
108
+ $rack.post "/users", :user => { :name => "Jola", :email => "jola@misi.ak" }
109
+
110
+ ### Configuration files
111
+
112
+ Rack::Shell supports configuration file _.rackshrc_ which is loaded from two places during startup: user's home dir and
113
+ application directory (in this order). You can put any ruby code in it, but it's purpose is to setup your session, ie. setting
114
+ headers which will be used for all $rack.get/post/... requests.
115
+
116
+ For example to set user agent to Firefox and re-migrate db if loaded environment is _test_ put following in _.rackshrc_:
117
+
118
+ $rack.header "User-Agent", "Firefox"
119
+ DataMapper.auto_migrate! if $rack.env == "test"
120
+
121
+ You can also make requests:
122
+
123
+ $rack.put "/signin", :login => "jola", :password => "misiacz"
124
+
125
+ This will ensure you are always logged in when you start _racksh_.
126
+
127
+ ### Reloading
128
+
129
+ If you've made some changes to your app and you want to reload it type:
130
+
131
+ reload!
132
+
133
+ It will reload (actually restart) whole Rack application in new process.
134
+
135
+ ### Loading racksh into existing irb session
136
+
137
+ If you already opened irb and you want racksh functionality just run following:
138
+
139
+ require 'racksh/irb'
140
+
141
+ It will initialize racksh and load rack app. From now on you can use _$rack_.
142
+
143
+ ## Authors
144
+
145
+ * Marcin Kulik - [ku1ik.com](http://ku1ik.com/)
146
+
data/bin/racksh ADDED
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__), "..", "lib", "racksh", "init.rb"))
4
+
5
+ # prevent STDOUT & STDERR to be reopened (apps do this to be able to log under Passenger)
6
+ def STDOUT.reopen(*args); end
7
+ def STDERR.reopen(*args); end
8
+
9
+ if ARGV.empty?
10
+ begin
11
+ require "pry"
12
+ Interpreter = Pry
13
+ rescue LoadError
14
+ require "irb"
15
+ require "irb/completion"
16
+ Interpreter = IRB
17
+ end
18
+
19
+ Rack::Shell.init
20
+ ARGV.concat(['--prompt', 'simple']) unless ARGV.include?('--prompt')
21
+ Interpreter.start
22
+ else
23
+ Rack::Shell.init
24
+ p eval(ARGV.join(" "))
25
+ end
@@ -0,0 +1,53 @@
1
+ require 'rack'
2
+
3
+ ENV['RACK_ENV'] ||= 'development'
4
+ ENV['CONFIG_RU'] ||= 'config.ru'
5
+
6
+ dir = File.expand_path(File.dirname(__FILE__))
7
+ %w(session version init).each { |f| require File.join(dir, f) }
8
+
9
+ def reload!
10
+ puts "Rack::Shell reloading..."
11
+ ENV['RACKSH_SKIP_INTRO'] = "1"
12
+ exec $0
13
+ end
14
+
15
+ module Rack
16
+ module Shell
17
+ File = ::File
18
+
19
+ def self.init
20
+ config_ru = ENV['CONFIG_RU']
21
+
22
+ # build Rack app
23
+ rack_app = Array(Rack::Builder.parse_file(config_ru)).first
24
+ $rack = Rack::Shell::Session.new(rack_app)
25
+
26
+ # run ~/.rackshrc
27
+ rcfile = File.expand_path("~/.rackshrc")
28
+ eval(File.read(rcfile)) if File.exist?(rcfile)
29
+
30
+ # run local .rackshrc (from app dir)
31
+ rcfile = File.expand_path(File.join(File.dirname(config_ru), ".rackshrc"))
32
+ eval(File.read(rcfile)) if File.exist?(rcfile)
33
+
34
+ # print startup info
35
+ unless ENV['RACKSH_SKIP_INTRO']
36
+ if STDOUT.tty? && ENV['TERM'] != 'dumb' # we have color terminal, let's pimp our info!
37
+ env_color = ($rack.env == 'production' ? "\e[31m\e[1m" : "\e[36m\e[1m")
38
+ puts "\e[32m\e[1mRack\e[0m\e[33m\e[1m::\e[0m\e[32m\e[1mShell\e[0m v#{VERSION} started in #{env_color}#{$rack.env}\e[0m environment."
39
+ else
40
+ puts "Rack::Shell v#{VERSION} started in #{$rack.env} environment."
41
+ end
42
+ @reloaded = true
43
+ end
44
+ rescue Errno::ENOENT => e
45
+ if e.message =~ /config\.ru$/
46
+ puts "Rack::Shell couldn't find #{config_ru}"
47
+ exit(1)
48
+ else
49
+ raise e
50
+ end
51
+ end
52
+ end
53
+ end
data/lib/racksh/irb.rb ADDED
@@ -0,0 +1,2 @@
1
+ require 'racksh/init'
2
+ Rack::Shell.init
@@ -0,0 +1,18 @@
1
+ require 'rack/test'
2
+
3
+ module Rack
4
+ module Shell
5
+ class Session
6
+ include Rack::Test::Methods
7
+ attr_reader :app
8
+
9
+ def initialize(app)
10
+ @app = app
11
+ end
12
+
13
+ def env
14
+ ENV['RACK_ENV']
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,5 @@
1
+ module Rack
2
+ module Shell
3
+ VERSION = '1.0.0'.freeze
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: spinels-racksh
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Marcin Kulik
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-03-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rack
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rack-test
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0.5'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0.5'
41
+ description:
42
+ email: marcin.kulik@gmail.com
43
+ executables:
44
+ - racksh
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - CHANGELOG.txt
49
+ - README.markdown
50
+ - bin/racksh
51
+ - lib/racksh/init.rb
52
+ - lib/racksh/irb.rb
53
+ - lib/racksh/session.rb
54
+ - lib/racksh/version.rb
55
+ homepage: http://github.com/spinels/racksh
56
+ licenses:
57
+ - MIT
58
+ metadata: {}
59
+ post_install_message:
60
+ rdoc_options: []
61
+ require_paths:
62
+ - lib
63
+ required_ruby_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ requirements: []
74
+ rubygems_version: 3.4.7
75
+ signing_key:
76
+ specification_version: 4
77
+ summary: Console for any Rack based ruby web app
78
+ test_files: []