Sha256: fb6cce893d444779af8c2d52732e5042ae3e4f259d0e0cda19e09e190b0d19dd

Contents?: true

Size: 1.3 KB

Versions: 4

Compression:

Stored size: 1.3 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 = create_nested_conditions
  end

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

  def return_value
    edit find_return_value
  end

  def find_return_value
    if @statement =~ /\s+\?\s+(.*?)(:|$)/
      $1.strip
    elsif @statement[/then\n(.+)\nend/]
      $1.strip
    else
      @statement[/(.*?)(unless|if)/, 1].to_s.strip
    end
  end

  def edit(txt)
    txt.sub! /^return\s*/, 'returns '
    txt.sub! /^returns\s*$/, 'returns nil'
    if txt.split(/\s/).length == 1
      txt = "returns #{txt}"
    elsif txt.include?(' = ')
      txt = "assigns #{txt}"
    end
    txt.strip
  end

  #
  # Set related stuff
  #

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

  def hash
    sexp.object_id
  end

  #
  # Private
  #

  def create_nested_conditions
    nc = Set.new
    s = sexp.drop(1)
    s.flatten.include?(:if) && s.deep_each do |exp|
      DRG::Decorators::SexpDecorator.new(exp).each_sexp_condition do |node|
        nc << self.class.new(node)
      end
    end
    nc.to_a
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
drg-0.15.3 lib/drg/ruby/condition.rb
drg-0.15.2 lib/drg/ruby/condition.rb
drg-0.15.1 lib/drg/ruby/condition.rb
drg-0.15.0 lib/drg/ruby/condition.rb