mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #26343 from ccutrer/runner_from_stdin
support `-` as an argument to `rails runner`
This commit is contained in:
commit
bfea6f292b
4 changed files with 20 additions and 2 deletions
|
@ -1,3 +1,8 @@
|
|||
* Support `-` as a platform-agnostic way to run a script from stdin with
|
||||
`rails runner`
|
||||
|
||||
*Cody Cutrer*
|
||||
|
||||
* Add `bootsnap` to default `Gemfile`.
|
||||
|
||||
*Burke Libbey*
|
||||
|
|
|
@ -8,6 +8,9 @@ Run the Ruby file located at `path/to/filename.rb` after loading the app:
|
|||
|
||||
<%= executable %> path/to/filename.rb
|
||||
|
||||
Run the Ruby script read from stdin after loading the app:
|
||||
<%= executable %> -
|
||||
|
||||
<% unless Gem.win_platform? %>
|
||||
You can also use the runner command as a shebang line for your executables:
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ module Rails
|
|||
end
|
||||
|
||||
def self.banner(*)
|
||||
"#{super} [<'Some.ruby(code)'> | <filename.rb>]"
|
||||
"#{super} [<'Some.ruby(code)'> | <filename.rb> | -]"
|
||||
end
|
||||
|
||||
def perform(code_or_file = nil, *command_argv)
|
||||
|
@ -29,7 +29,9 @@ module Rails
|
|||
|
||||
ARGV.replace(command_argv)
|
||||
|
||||
if File.exist?(code_or_file)
|
||||
if code_or_file == "-"
|
||||
eval($stdin.read, binding, "stdin")
|
||||
elsif File.exist?(code_or_file)
|
||||
$0 = code_or_file
|
||||
Kernel.load code_or_file
|
||||
else
|
||||
|
|
|
@ -84,6 +84,14 @@ module ApplicationTests
|
|||
assert_match %w( a b ).to_s, Dir.chdir(app_path) { `bin/rails runner "bin/program_name.rb" a b` }
|
||||
end
|
||||
|
||||
def test_should_run_stdin
|
||||
app_file "bin/count_users.rb", <<-SCRIPT
|
||||
puts User.count
|
||||
SCRIPT
|
||||
|
||||
assert_match "42", Dir.chdir(app_path) { `cat bin/count_users.rb | bin/rails runner -` }
|
||||
end
|
||||
|
||||
def test_with_hook
|
||||
add_to_config <<-RUBY
|
||||
runner do |app|
|
||||
|
|
Loading…
Reference in a new issue