module ROM::SQL::AttributeAliasing
@api private
Public Instance Methods
aliased(alias_name)
click to toggle source
Return a new attribute with an alias
@example
users[:id].aliased(:user_id)
@return [SQL::Attribute]
@api public
Calls superclass method
# File lib/rom/sql/attribute_aliasing.rb, line 15 def aliased(alias_name) new_name, new_alias_name = extract_alias_names(alias_name) super(new_alias_name).with(name: new_name).meta( sql_expr: alias_sql_expr(sql_expr, new_alias_name) ) end
Also aliased as: as
aliased_projection?()
click to toggle source
Return true if this attribute is an aliased projection
@example
class Tasks < ROM::Relation[:memory] schema do attribute :user_id, Types::Integer, alias: :id attribute :name, Types::String end end Users.schema[:user_id].aliased? # => true Users.schema[:user_id].aliased_projection? # => false Users.schema[:user_id].qualified_projection.aliased? # => true Users.schema[:user_id].qualified_projection.aliased_projection? # => true
@return [TrueClass,FalseClass]
@api private
# File lib/rom/sql/attribute_aliasing.rb, line 48 def aliased_projection? self.meta[:sql_expr].is_a?(Sequel::SQL::AliasedExpression) end
Private Instance Methods
alias_sql_expr(sql_expr, new_alias)
click to toggle source
@api private
# File lib/rom/sql/attribute_aliasing.rb, line 55 def alias_sql_expr(sql_expr, new_alias) case sql_expr when Sequel::SQL::AliasedExpression Sequel::SQL::AliasedExpression.new(sql_expr.expression, new_alias, sql_expr.columns) else sql_expr.as(new_alias) end end
extract_alias_names(alias_name)
click to toggle source
@api private
# File lib/rom/sql/attribute_aliasing.rb, line 65 def extract_alias_names(alias_name) new_name, new_alias_name = nil if wrapped? && aliased? # If the attribute is wrapped *and* aliased, make sure that we name the # attribute in a way that will map the the requested alias name. # Without this, the attribute will silently ignore the requested alias # name and default to the pre-existing name. new_name = "#{meta[:wrapped]}_#{options[:alias]}".to_sym # Essentially, this makes it so "wrapped" attributes aren't true # aliases, in that we actually alias the wrapped attribute, we use # the old alias. new_alias_name = options[:alias] else new_name = name || alias_name new_alias_name = alias_name end [new_name, new_alias_name] end