class JSONAPI::Path

Attributes

resource_klass[R]
segments[R]

Public Class Methods

new(resource_klass:, path_string:, ensure_default_field: true, parse_fields: true) click to toggle source
# File lib/jsonapi/path.rb, line 4
def initialize(resource_klass:,
               path_string:,
               ensure_default_field: true,
               parse_fields: true)
  @resource_klass = resource_klass

  current_resource_klass = resource_klass
  @segments = path_string.to_s.split('.').collect do |segment_string|
    segment = PathSegment.parse(source_resource_klass: current_resource_klass,
                             segment_string: segment_string,
                             parse_fields: parse_fields)

    current_resource_klass = segment.resource_klass
    segment
  end

  if ensure_default_field && parse_fields && @segments.last.is_a?(PathSegment::Relationship)
    last = @segments.last
    @segments << PathSegment::Field.new(resource_klass: last.resource_klass,
                                        field_name: last.resource_klass._primary_key)
  end
end

Public Instance Methods

last_relationship() click to toggle source
# File lib/jsonapi/path.rb, line 35
def last_relationship
  if @segments.last.is_a?(PathSegment::Relationship)
    @segments.last
  else
    @segments[-2]
  end
end
relationship_path_string() click to toggle source
# File lib/jsonapi/path.rb, line 31
def relationship_path_string
  relationship_segments.collect(&:to_s).join('.')
end
relationship_segments() click to toggle source
# File lib/jsonapi/path.rb, line 27
def relationship_segments
  @segments.select {|p| p.is_a?(PathSegment::Relationship)}
end