Sha256: fae88c04dae5eec4e6439e18a291400fcffea2666d4dfdf4e7d3d453552bc464

Contents?: true

Size: 1.02 KB

Versions: 2

Compression:

Stored size: 1.02 KB

Contents

module Snuffle

  class Node

    include Ephemeral::Base
    include PoroPlus

    attr_accessor :id, :name, :type, :child_ids, :parent_id, :line_numbers

    scope :by_id,       lambda{|id| where(:id => id)}
    scope :by_type,     lambda{|type| where(:type => type)}
    scope :with_parent, lambda{|parent_id| where(parent_id: parent_id) }
    scope :hashes,      {type: :hash}
    scope :methods,     {is_method: true}

    def self.nil
      new(type: :nil)
    end

    def initialize(*args, &block)
      @id = SecureRandom.uuid
      super
    end

    def parent
      Snuffle::Node.where(id: self.parent_id).first
    end

    def siblings
      @siblings ||= Snuffle::Node.by_type(self.type).to_a - [self]
    end

    def children
      Snuffle::Node.where(parent_id: self.id)
    end

    def is_method
      self.type == :def || self.type == :defs
    end

    def inspect
      {
        id: self.id,
        type: self.type,
        parent_id: self.parent_id,
        child_ids: self.child_ids
      }.to_s
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
snuffle-0.11.1 lib/snuffle/node.rb
snuffle-0.10.1 lib/snuffle/node.rb