Class: TableOfTruth::Table

Inherits:
Object
  • Object
show all
Defined in:
lib/table_of_truth/table.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(&block) ⇒ Table

Returns a new instance of Table.



17
18
19
20
21
22
23
24
25
# File 'lib/table_of_truth/table.rb', line 17

def initialize(&block)
  dsl = DSL.new
  dsl.instance_eval(&block)

  @inputs = dsl.inputs
  @input_names = dsl.input_names
  @expressions = dsl.expressions
  @expression_names = dsl.expression_names
end

Instance Attribute Details

#expression_namesArray<String or Symbol> (readonly)

Returns:

  • (Array<String or Symbol>)


15
16
17
# File 'lib/table_of_truth/table.rb', line 15

def expression_names
  @expression_names
end

#expressionsHash<(String or Symbol)->Proc (readonly)

Returns ].

Returns:

  • (Hash<(String or Symbol)->Proc)

    ]



13
14
15
# File 'lib/table_of_truth/table.rb', line 13

def expressions
  @expressions
end

#input_namesArray<String or Symbol> (readonly)

Returns:

  • (Array<String or Symbol>)


11
12
13
# File 'lib/table_of_truth/table.rb', line 11

def input_names
  @input_names
end

#inputsHash<(String or Symbol)->Array (readonly)

Returns ].

Returns:

  • (Hash<(String or Symbol)->Array)

    ]



9
10
11
# File 'lib/table_of_truth/table.rb', line 9

def inputs
  @inputs
end

Instance Method Details

#equivalent?Boolean

Returns:

  • (Boolean)


63
64
65
# File 'lib/table_of_truth/table.rb', line 63

def equivalent?
  results.all? { |result| result.values_at(*expression_names).uniq.length == 1 }
end

#print!(colorize: true) ⇒ void

This method returns an undefined value.



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

def print!(colorize: true)
  String.disable_colorization = !colorize

  builder = StringIO.new

  # Header
  input_header = input_names.join(' | ')
  expression_header = expression_names.join(' | ')
  builder.puts("#{input_header} || #{expression_header}")

  # Rows
  results.each do |result|
    inputs_string = input_names.map { |name| output_string(result[name]).center(name.length) }.join(' | ')

    outputs_string = expression_names.map { |name| output_string(result[name]).center(name.length) }.join(' | ')
    outputs = expression_names.map { |name| result[name] }
    outputs_string = outputs.uniq.length == 1 ? outputs_string.on_green : outputs_string.on_red

    builder.puts [inputs_string, outputs_string].join(' || ')
  end

  puts builder.string
end

#resultsArray<Hash{String->Boolean}

Returns ].

Returns:

  • (Array<Hash{String->Boolean})

    ]



28
29
30
31
32
33
34
35
# File 'lib/table_of_truth/table.rb', line 28

def results
  @results ||= input_table.map do |inputs|
    result = inputs.dup
    expressions.each { |name, expression| result[name] = Inputs.new(inputs).instance_eval(&expression) }

    result
  end
end