class Apiphobic::Parameters::Include

Attributes

raw_parameters[RW]

Public Class Methods

new(raw_parameters) click to toggle source
# File lib/apiphobic/parameters/include.rb, line 8
def initialize(raw_parameters)
  self.raw_parameters = raw_parameters ? raw_parameters.split(',') : []
end

Public Instance Methods

present?() click to toggle source
# File lib/apiphobic/parameters/include.rb, line 12
def present?
  raw_parameters.any?
end
to_a() click to toggle source
# File lib/apiphobic/parameters/include.rb, line 16
def to_a
  @to_a ||= map_inclusions(
              raw_parameters
                .reject(&:empty?)
                .compact,
            )
end

Private Instance Methods

map_inclusions(array) click to toggle source

rubocop:disable Metrics/PerceivedComplexity, rubocop:disable Metrics/BlockNesting

# File lib/apiphobic/parameters/include.rb, line 28
def map_inclusions(array)
  mapped = array.each_with_object([{}]) do |inclusion, memo|
    if inclusion.is_a?(::Hash)
      memo[0] = inclusion
    else
      first, _match, rest = inclusion.partition('.')

      if rest == ''
        memo << first
      else
        memo.delete(first)

        memo[0][first] = if memo[0][first].nil?
                           rest
                         else
                           map_inclusions(Array(memo[0][first]) << rest)
                         end
      end
    end
  end

  mapped.shift if mapped[0] == {}

  mapped
end