lib/thingfish/metastore/pggraph/edge.rb
author Mahlon E. Smith <mahlon@laika.com>
Thu, 05 Mar 2020 12:00:19 -0800
changeset 20 e2e96d97b77c
parent 0 3cc90e88c6ab
permissions -rw-r--r--
Update for newer rubies.

# -*- ruby -*-
# frozen_string_literal: true

require 'sequel/model'

require 'thingfish/mixins'
require 'thingfish/metastore/pggraph' unless defined?( Thingfish::Metastore::PgGraph )


### A row representing a relationship between two node objects.
###
class Thingfish::Metastore::PgGraph::Edge < Sequel::Model( :edges )

	# Related resource associations
	many_to_one :node, :key => :id_p

	# Dataset methods
	#
	dataset_module do
		#########
		protected
		#########

		### Returns a Sequel expression suitable for use as the key of a query against
		### the specified property field.
		###
		def prop_expr( field )
			return Sequel.pg_jsonb( :prop ).get_text( field.to_s )
		end
	end


	### Do some initial attribute setup for new objects.
	###
	def initialize( * )
		super
		self[ :prop ] ||= Sequel.pg_jsonb({})
	end


	#########
	protected
	#########

	### Proxy method -- fetch a value from the edge property hash if it exists.
	###
	def method_missing( sym, *args, &block )
		return self.prop[ sym.to_s ] || super
	end

end # Thingfish::Metastore::PgGraph::Edge