Class: ActiveFacts::API::RoleValues

Inherits:
Object
  • Object
show all
Defined in:
lib/activefacts/api/role_values.rb

Overview

:nodoc:

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(sort = false) ⇒ RoleValues

Returns a new instance of RoleValues.



13
14
15
16
# File 'lib/activefacts/api/role_values.rb', line 13

def initialize sort = false
	@sort = !!(sort || ENV[@@af_sort_name ||= "ACTIVEFACTS_SORT"])
  @a = @sort ? RBTree.new : []
end

Instance Attribute Details

#sortObject

Returns the value of attribute sort.



11
12
13
# File 'lib/activefacts/api/role_values.rb', line 11

def sort
  @sort
end

Class Method Details

.def_single_delegator(accessor, method, *expected_arities) ⇒ Object

Paranoia. Because of changes in the implementation, I need to catch old code that calls these delegates incorrectly



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/activefacts/api/role_values.rb', line 73

def self.def_single_delegator(accessor, method, *expected_arities)
	str = %{
	  def #{method}(*args, &block)
	    if #{expected_arities.size == 0 ? "block" : "!block || !#{expected_arities.inspect}.include?(block.arity)" }
 raise ArgumentError.new("Arity mismatch on #{name}\##{method}, got \#{block ? block.arity : 'none'} want #{expected_arities.inspect} at \#{caller*"\n\t"})")
	    end
	    if @sort
 #{accessor}.values.__send__(:#{method}, *args, &block)
	    else
 #{accessor}.__send__(:#{method}, *args, &block)
	    end
	  end
	}
	eval(str)
end

Instance Method Details

#+(a) ⇒ Object



18
19
20
21
22
23
24
# File 'lib/activefacts/api/role_values.rb', line 18

def +(a)
	if @sort
	  @a.values.+(a.is_a?(RoleValues) ? [a] : a)
	else
	  @a.+(a.is_a?(RoleValues) ? [a] : a)
	end
end

#add_instance(value, key) ⇒ Object



42
43
44
45
46
47
48
# File 'lib/activefacts/api/role_values.rb', line 42

def add_instance(value, key)
	if @sort
	  @a[form_key(key)] = value
	else
	  @a << value
	end
end

#delete_instance(value, key) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/activefacts/api/role_values.rb', line 50

def delete_instance(value, key)
	if @sort
	  deleted = @a.delete(form_key(key))
	else
	  deleted = @a.delete(value)
	end

	# Test code:
	unless deleted
	  p @a
	  p value
	  debugger
	  true
	end

end

#form_key(a) ⇒ Object



38
39
40
# File 'lib/activefacts/api/role_values.rb', line 38

def form_key a
	KeyArray.new(Array(a))
end

#include?(v) ⇒ Boolean

Returns:

  • (Boolean)


89
90
91
92
93
94
95
# File 'lib/activefacts/api/role_values.rb', line 89

def include? v
	if @sort
	  @a.include?(form_key(v))
	else
	  @a.include?(v)
	end
end

#keysObject



30
31
32
# File 'lib/activefacts/api/role_values.rb', line 30

def keys
	@sort ? @a.keys : @a
end

#singleObject



34
35
36
# File 'lib/activefacts/api/role_values.rb', line 34

def single
  size > 1 ? nil : to_a[0]
end

#to_aObject



26
27
28
# File 'lib/activefacts/api/role_values.rb', line 26

def to_a
	@sort ? @a.values : @a
end

#verbaliseObject



67
68
69
70
# File 'lib/activefacts/api/role_values.rb', line 67

def verbalise
	a = @sort ? @a.values : @a
  "[#{a.map(&:verbalise).join(", ")}]"
end