1
0
Fork 0
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:
Sean Griffin 2017-07-17 14:53:36 -05:00 committed by GitHub
commit bfea6f292b
4 changed files with 20 additions and 2 deletions

View file

@ -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*

View file

@ -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:

View file

@ -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

View file

@ -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|