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(*args) ⇒ Object



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

def joined_key(*args); self.class.joined_key(*args) end

#normalize_entries(entries) ⇒ Object



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

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



59
60
61
62
63
# File 'lib/red_blocks/set_utils.rb', line 59

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



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

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