factbase 0.15.2 → 0.15.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 85e37453d7e238f20d15017e452fc39e2068cf86bc1c0bc0c5689439bf732c81
4
- data.tar.gz: dc91da500dd5e512e041de74ad677dbf98ce24a84cb1972bc910884ddb3c48f3
3
+ metadata.gz: 5d4b1fc60e21bcadc4052ddc0de95b321d9b543fc2cde19ab33036ca473405f4
4
+ data.tar.gz: 07cc23815e363aff2995f29d359f93aa7c0916bd6bf59176018a297ef8d66679
5
5
  SHA512:
6
- metadata.gz: 323d7a269d425e503365cd694cdafb224ee9bab256992d740af40c4151245d729cd183aba297f6bc963984d8e3d743ffe6e6099e6fbf3b0514a7994876d00533
7
- data.tar.gz: 2ede879be19ca0faf61506cdfb9672117f767d66528c8fa5aa52237180848a011202eef6c3982b102e1b56430ebf9777b94fdfaf9b76e96738b25d45d1a549a3
6
+ metadata.gz: 4cb26f18ddfd83e7e709b3bf007a6f16905ef3dd2a6f6444d0fd401df675ec88d50c152c162a5ab1c3ba16362f3dadc1dc2c21eec12a223e427c4c285496d32c
7
+ data.tar.gz: 81a5f3ad8ca670537bff7f2a5739bd886f4cfc19146dde2dcf51e43789517e97a9ee5a54fc6aea0be1bc6f562e4774cbb3013501bcaaf03f5e901b444c6ed96f
data/lib/factbase/term.rb CHANGED
@@ -121,7 +121,7 @@ class Factbase::Term
121
121
  rescue NoMethodError => e
122
122
  raise "Probably the term '#{@op}' is not defined at #{self}: #{e.message}"
123
123
  rescue StandardError => e
124
- raise "#{e.message} at #{self}"
124
+ raise "#{e.message.inspect} at #{self} at #{e.backtrace[0]}"
125
125
  end
126
126
 
127
127
  # Simplify it if possible.
@@ -20,24 +20,35 @@ module Factbase::Ordering
20
20
  end
21
21
 
22
22
  def unique(fact, maps, fb)
23
- @uniques = {} if @uniques.nil?
23
+ @seen = Set.new if @seen.nil?
24
24
  raise "Too few operands for 'unique' (at least 1 expected)" if @operands.empty?
25
- dups = 0
26
- @operands.each_with_index do |_, i|
27
- @uniques[i] = [] if @uniques[i].nil?
28
- vv = _values(i, fact, maps, fb)
29
- return false if vv.nil?
30
- vv = [vv] unless vv.respond_to?(:to_a)
31
- exists = false
32
- vv.each do |v|
33
- if @uniques[i].include?(v)
34
- exists = true
35
- else
36
- @uniques[i] << v
37
- end
38
- end
39
- dups += 1 if exists
25
+ vv = (0..(@operands.size - 1)).map { |i| _values(i, fact, maps, fb) }
26
+ return false if vv.any?(nil)
27
+ pass = true
28
+ _cartesian(vv).each do |t|
29
+ pass = false if @seen.include?(t)
30
+ @seen << t
31
+ end
32
+ pass
33
+ end
34
+
35
+ private
36
+
37
+ # Multiplies arrays and returns a list of all possible combinations
38
+ # of their elements. If this array is provided:
39
+ #
40
+ # [ [4, 3], [2, 88, 13] ]
41
+ #
42
+ # This will be the result:
43
+ #
44
+ # [ [4, 2], [4, 88], [4, 13], [3, 2], [3, 88], [3, 13]]
45
+ def _cartesian(vv)
46
+ ff = vv.first.zip
47
+ if vv.one?
48
+ ff
49
+ else
50
+ tail = _cartesian(vv[1..])
51
+ ff.map { |f| tail.map { |t| f + t } }
40
52
  end
41
- dups < @operands.size
42
53
  end
43
54
  end
@@ -9,5 +9,5 @@
9
9
  # License:: MIT
10
10
  class Factbase
11
11
  # Current version of the gem (changed by .rultor.yml on every release)
12
- VERSION = '0.15.2' unless const_defined?(:VERSION)
12
+ VERSION = '0.15.3' unless const_defined?(:VERSION)
13
13
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: factbase
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.2
4
+ version: 0.15.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko