class Rspec::Usecases::Options::DynamicOptions

Dynamic option will convert a value

Public Class Methods

new(option_key, value, api = {}) click to toggle source

rubocop:disable Metrics/CyclomaticComplexity

Calls superclass method
# File lib/rspec/usecases/options/dynamic_options.rb, line 10
def initialize(option_key, value, api = {})
  super()

  # This will load app the default values
  parse(api)

  self.empty = value.nil? || (value.is_a?(Hash) && value.empty?)

  if !value.nil? && (value.is_a?(TrueClass) || value.is_a?(FalseClass))
    self.empty = value.is_a?(FalseClass)
    return
  end

  return if empty?
  return if value == option_key

  parse(value)
end
struct_to_hash(data) click to toggle source

rubocop:disable Metrics/CyclomaticComplexity, Metrics/AbcSize

# File lib/rspec/usecases/options/dynamic_options.rb, line 43
def self.struct_to_hash(data)
  # No test yet
  if data.is_a?(Array)
    return data.map { |v| v.is_a?(OpenStruct) ? struct_to_hash(v) : v }
  end

  data.each_pair.with_object({}) do |(key, value), hash|
    case value
    when OpenStruct
      hash[key] = struct_to_hash(value)
    when Array
      # No test yet
      values = value.map { |v| v.is_a?(OpenStruct) ? struct_to_hash(v) : v }
      hash[key] = values
    else
      hash[key] = value
    end
  end
end

Public Instance Methods

active?() click to toggle source

rubocop:enable Metrics/CyclomaticComplexity

# File lib/rspec/usecases/options/dynamic_options.rb, line 30
def active?
  !empty?
end
empty?() click to toggle source
# File lib/rspec/usecases/options/dynamic_options.rb, line 34
def empty?
  empty
end
to_h() click to toggle source
# File lib/rspec/usecases/options/dynamic_options.rb, line 38
def to_h
  DynamicOptions.struct_to_hash(self)
end

Private Instance Methods

parse(value) click to toggle source

rubocop:enable Metrics/CyclomaticComplexity, Metrics/AbcSize

# File lib/rspec/usecases/options/dynamic_options.rb, line 66
def parse(value)
  case value
  when Array
    parse_array(value)
  when Hash
    parse_hash(value)
  else
    parse_value(value)
  end
end
parse_array(values) click to toggle source
# File lib/rspec/usecases/options/dynamic_options.rb, line 83
def parse_array(values)
  values.map do |value|
    case value
    when Symbol, String
      parse_symbol_or_string(value)
    when Hash
      parse_hash(value)
    else
      raise Rspec::Usecases::Error, 'Unknown option paramater'
    end
  end
end
parse_hash(data) click to toggle source
# File lib/rspec/usecases/options/dynamic_options.rb, line 77
def parse_hash(data)
  data.each do |k, v|
    send("#{k}=", v)
  end
end
parse_symbol_or_string(value) click to toggle source
# File lib/rspec/usecases/options/dynamic_options.rb, line 96
def parse_symbol_or_string(value)
  send("#{value}=", true)
end