Module: RedBlocks::SetUtils

Included in:
Set
Defined in:
lib/red_blocks/set_utils.rb

Defined Under Namespace

Modules: ClassMethods Classes: InvalidEntriesError

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



3
4
5
# File 'lib/red_blocks/set_utils.rb', line 3

def self.included(base)
  base.extend(ClassMethods)
end

Instance Method Details

#joined_key(array, **args) ⇒ Object



25
26
27
# File 'lib/red_blocks/set_utils.rb', line 25

def joined_key(array, **args)
  self.class.joined_key(array, **args)
end

#normalize_entries(entries) ⇒ Object



29
30
31
32
33
34
35
36
# File 'lib/red_blocks/set_utils.rb', line 29

def normalize_entries(entries)
  blank_entry = [-RedBlocks.config.infinity, RedBlocks.config.blank_id]
  if entries.first.is_a?(Array)
    entries.map{ |id, score| [score, id] } + [blank_entry]
  else
    entries.map {|id| [0, id] } + [blank_entry]
  end
end

#validate_array_entry(entry) ⇒ Object



61
62
63
64
65
# File 'lib/red_blocks/set_utils.rb', line 61

def validate_array_entry(entry)
  is_pair = entry.size == 2
  id, score = entry
  is_pair && id.is_a?(Integer) && (score.is_a?(Numeric) && !score.to_f.nan?)
end

#validate_entries!(entries) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/red_blocks/set_utils.rb', line 38

def validate_entries!(entries)
  case entries
  when Array
    entry = entries[0]
    case entry
    when Integer
      entries
    when Array
      if !validate_array_entry(entry)
        raise InvalidEntriesError.new(entries, key)
      else
        entries
      end
    when NilClass
      entries
    else
      raise InvalidEntriesError.new(entries, key)
    end
  else
    raise InvalidEntriesError.new(entries, key)
  end
end