Sha256: f9aadd3cac29822018c2a855668443419edfd4b6c459bed35522c83592cbf9b7
Contents?: true
Size: 1.18 KB
Versions: 1
Compression:
Stored size: 1.18 KB
Contents
require 'crosscounter/util' module Crosscounter module Compute @@values = {} @@tuples = {} def self.compute(enumerable, properties) enumerable.count do |object| properties.all? do |key, value| extracted = (object[key] || object[key.sub('_', '')]) if extracted.kind_of?(Array) extracted.join("\t") =~ regexify(value) else extracted == value end end end end def self.compute_all(enumerable, rows, columns) enumerable.map! { |object| Crosscounter::Util.stringify_keys(object) } tuplize(rows).map do |tuple| initial = [tuple.last, compute(enumerable, tuple.first => tuple.last)] tuplize(columns).inject(initial) do |rows, column| rows << compute(enumerable, tuple.first => tuple.last, "_#{column.first}" => column.last) end end end def self.regexify(value) @@values[value] ||= /(\A|\t)#{value}(\Z|\t)/ end def self.tuplize(hash) @@tuples[hash] ||= hash.flat_map do |tuple| tuple.last.map { |value| [tuple.first.to_s, value] } end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
crosscounter-0.2.0 | lib/crosscounter/compute.rb |