class JunglePath::Query::Entity

Attributes

alias_[RW]
field_node[RW]
fields[RW]
filter[RW]
join_field_override[RW]
left_join[R]
limit[RW]
name[RW]
node[RW]
offset[RW]
parameters[RW]
parent[RW]
sort[RW]
symbol[RW]

Public Class Methods

get_name_from_token(token) click to toggle source
# File lib/jungle_path/query/entity.rb, line 111
def self.get_name_from_token(token)
  if token[-1] == "@"
    token = token[0..-2]
  end
  if token.include? '.'
    token = token.split('.')[0]
  end
  token = token.downcase.to_sym
end
new(token, alias_, node, parent, symbol) click to toggle source
# File lib/jungle_path/query/entity.rb, line 12
def initialize(token, alias_, node, parent, symbol)
  @name = Entity.get_name_from_token(token)
  if token[-1] == "@"
    @left_join = true
  else
    @left_join = false
  end
  if token.include? '.'
    @join_field_override = token.split('.')[1]
    if @join_field_override[-1] == '@'
      @join_field_override = @join_field_override[0..-2]
    end
  else
    @join_field_override = nil
  end

  @alias_ = alias_
  @node = node
  @parent = parent
  @symbol = symbol
  @fields = nil
  @filter = nil
  @sort = nil
  @limit = nil
  @offset = nil
  @field_node = nil #If this entity object is created from within the field list put the field's node here.
end
select_node_from_array_by_token(nodes, token) click to toggle source
# File lib/jungle_path/query/entity.rb, line 121
def self.select_node_from_array_by_token(nodes, token)
  # find closest matching node.
  # see gen_node_tree.rb lines 60+...
  node = nodes[0] # default
  if token.include? '.'
    name = token.split('.')[1]
    if name[-1] == '@'
      name = name[0..-2]
    end
    nodes.each do |n|
      if n.child_table_join_column_name.to_s.start_with?(name)
        node = n #found match
        break
      end
    end
  end
  node #return node.
end

Public Instance Methods

fields_that_are_entities_count() click to toggle source
# File lib/jungle_path/query/entity.rb, line 101
def fields_that_are_entities_count
  count = 0
  fields.each do |field|
    if field.is_entity?
      count += 1
    end
  end
  count
end
find_entity(name) click to toggle source
# File lib/jungle_path/query/entity.rb, line 55
def find_entity(name)
  field = find_field(name)
  if field
    return field
  end

  if fields
    fields.each do |f|
      if f.is_entity?
        field = f.find_entity(name)
        if field
          return f
          #return field
        end
      end
    end
  end
  field
end
find_field(name) click to toggle source
# File lib/jungle_path/query/entity.rb, line 44
def find_field(name)
  if fields
    fields.each do |field|
      if field.name == name
        return field
      end
    end
  end
  nil
end
find_parent_alias() click to toggle source
# File lib/jungle_path/query/entity.rb, line 89
def find_parent_alias
  #binding.pry
  alias_ = nil
  p = parent
  while p and p.fields.count == p.fields_that_are_entities_count do
    p = p.parent
  end
  alias_ = p.alias_ if p
  alias_ = alias_.to_sym if alias_
  alias_
end
find_symbol() click to toggle source
# File lib/jungle_path/query/entity.rb, line 75
def find_symbol
  symbol = node.symbol
  p = parent
  while true do
    if p.fields.count == p.fields_that_are_entities_count and p.parent
      symbol = p.node.symbol
      p = p.parent
    else
      break
    end
  end
  symbol
end
is_entity?() click to toggle source
# File lib/jungle_path/query/entity.rb, line 40
def is_entity?
  true
end