1
0
Fork 0
mirror of https://github.com/pry/pry.git synced 2022-11-09 12:35:05 -05:00
pry--pry/lib/pry/commands/cat/file_formatter.rb
John Mair 92fe82dbd6 refactor cat command
Put each output formatter (input expression, exception, file) into its own class.
2013-01-06 21:44:33 +01:00

84 lines
1.9 KiB
Ruby

class Pry
class Command::Cat
class FileFormatter < AbstractFormatter
attr_accessor :file_with_embedded_line
attr_accessor :opts
attr_accessor :_pry_
def initialize(file_with_embedded_line, _pry_, opts)
@file_with_embedded_line = file_with_embedded_line
@opts = opts
@_pry_ = _pry_
end
def file_and_line
file_name, line_num = file_with_embedded_line.split(':')
[File.expand_path(file_name), line_num ? line_num.to_i : nil]
end
def file_name
file_and_line.first
end
def line_number
file_and_line.last
end
def code_window_size
Pry.config.default_window_size || 7
end
def format
raise CommandError, "Must provide a filename, --in, or --ex." if !file_with_embedded_line
set_file_and_dir_locals(file_name, _pry_, _pry_.current_context)
decorate(Pry::Code.from_file(file_name))
end
private
def decorate(content)
line_number ? super.around(line_number, code_window_size) : super
end
def code_type
opts[:type] || detect_code_type_from_file(file_name)
end
def detect_code_type_from_file(file_name)
name, ext = File.basename(file_name).split('.', 2)
if ext
case ext
when "py"
:python
when "rb", "gemspec", "rakefile", "ru", "pryrc", "irbrc"
:ruby
when "js"
return :javascript
when "yml", "prytheme"
:yaml
when "groovy"
:groovy
when "c"
:c
when "cpp"
:cpp
when "java"
:java
else
:text
end
else
case name
when "Rakefile", "Gemfile"
:ruby
else
:text
end
end
end
end
end
end