Sha256: 485daa1173e4c5d400e8bc0b5971035b8a979ace9fa1d385ef9bf4c3ab42104a

Contents?: true

Size: 1.04 KB

Versions: 1

Compression:

Stored size: 1.04 KB

Contents

require 'ruby2ruby'

class DRG::Ruby::Condition

  attr_reader :statement, :nested_conditions, :sexp

  def initialize(sexp)
    @sexp = sexp
    @statement = Ruby2Ruby.new.process(sexp.deep_clone)
    @nested_conditions = Set.new
    sexp.drop(1).flatten.include?(:if) && sexp.drop(1).deep_each do |exp|
      DRG::Decorators::SexpDecorator.new(exp).each_sexp_condition do |node|
        @nested_conditions << self.class.new(node)
      end
    end
    @nested_conditions = @nested_conditions.to_a
  end

  def short_statement
    if @statement =~ /(unless|if)(.+)$/
      ($1 << $2).strip
    elsif @statement =~ /(.*?)\s+\?\s+/
      $1.strip
    end
  end

  def return_value
    if @statement =~ /\s+\?\s+(.*?)(:|$)/
      $1.strip
    else
      translate @statement[/(.*?)(unless|if)/, 1].to_s.strip
    end
  end

  def translate(txt)
    txt.sub! /^return\s*/, 'returns '
    txt.sub! /^returns\s*$/, 'returns nil'
    txt.strip
  end

  #
  # Set related stuff
  #

  def eql?(other)
    hash == other.hash
  end

  def hash
    sexp.object_id
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
drg-0.14.0 lib/drg/ruby/condition.rb