Sha256: ee54074c6753d4428efe012f90cd79fd20da78ddf977b3ffe8e056781d39e65c
Contents?: true
Size: 1.38 KB
Versions: 2
Compression:
Stored size: 1.38 KB
Contents
module ReadSource module ReadSource def read_source (file, line_num = send :source_location) || return if file == "(irb)" warn "This feature doesn't work for code written in IRB!" return end is_inline_method = ->str{ defs = str.scan(/def(?:\b|ine_method.*do)/).count ends = str.scan(/end/).count def_method_regex = /define_method[ (]+(?::|\w)+[ ),]+(?:{.*}|(?:instance_)?method\((?::|\w)+\)|&\w+)\)?/ defs == ends || str =~ def_method_regex } readlines = IO.readlines(file) source = readlines[line_num-1] indent = /\A[[:space:]]*/.match(source).to_s.length source = source[indent..-1] return source if source.=~(/\A[[:space:]]*attr[\w]*/) || is_inline_method.(source) readlines[line_num..-1].each do |line| add_line = line =~ /\A[[:space:]]*\n\z/ ? "\n" : line[indent..-1] source += add_line if indent == /\A[[:space:]]*/.match(line).to_s.length break source end end end def attr? (file, line_num = send :source_location) || return if file == "(irb)" warn "This feature doesn't work for code written in IRB!" return end def_header = IO.readlines(file)[line_num-1] return unless def_header =~ /\A[[:space:]]*attr[\w]*/ def_header[/attr[\w]*/].to_sym rescue nil end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
read_source-0.2.6 | lib/read_source/read_source.rb |
read_source-0.2.5 | lib/read_source/read_source.rb |