File: node.rb

package info (click to toggle)
ruby-gitlab-pg-query 2.0.4-3
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 15,584 kB
  • sloc: ansic: 143,939; ruby: 2,096; makefile: 4
file content (31 lines) | stat: -rw-r--r-- 1,174 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
module PgQuery
  # Patch the auto-generated generic node type with additional convenience functions
  class Node
    def inspect
      node ? format('<PgQuery::Node: %s: %s>', node, public_send(node).inspect) : '<PgQuery::Node>'
    end

    # Make it easier to initialize nodes from a given node child object
    def self.from(node_field_val)
      # This needs to match libpg_query naming for the Node message field names
      # (see "underscore" method in libpg_query's scripts/generate_protobuf_and_funcs.rb)
      node_field_name = node_field_val.class.name.split('::').last
      node_field_name.gsub!(/^([A-Z\d])([A-Z][a-z])/, '\1__\2')
      node_field_name.gsub!(/([A-Z\d]+[a-z]+)([A-Z][a-z])/, '\1_\2')
      node_field_name.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
      node_field_name.tr!('-', '_')
      node_field_name.downcase!

      PgQuery::Node.new(node_field_name => node_field_val)
    end

    # Make it easier to initialize value nodes
    def self.from_string(str)
      PgQuery::Node.new(string: PgQuery::String.new(str: str))
    end

    def self.from_integer(ival)
      PgQuery::Node.new(integer: PgQuery::Integer.new(ival: ival))
    end
  end
end