flex-cartesian 0.1.2
Flexible and human-friendly Cartesian product enumerator for Ruby. Supports dimension-agnostic iteration, named dimensions, structured output, lazy/eager evaluation, progress bar, JSON/YAML loading, and export to Markdown/CSV. Example: require 'flex-cartesian' # Define Cartesian space with named dimensions: example = { dim1: [1, 2], dim2: ['x', 'y'], dim3: [true, false] } s = FlexCartesian.new(example) # Iterate over all combinations and calculate function on each combination: s.cartesian { |v| puts "#{v.dim1}-#{v.dim2}" if v.dim3 } # Get number of Cartesian combinations: puts "Total size: #{s.size}" # Convert Cartesian space to array of combinations array = s.to_a(limit: 3) puts array.inspect def do_something(v) end # Display progress bar (useful for large Cartesian spaces) s.progress_each { |v| do_something(v) } # Print Cartesian space as table s.output(align: true) # Lazy evaluation without materializing entire Cartesian product in memory: s.cartesian(lazy: true).take(2).each { |v| puts v.inspect } # Load from JSON or YAML File.write('example.json', JSON.pretty_generate(example)) s = FlexCartesian.from_json('example.json') s.output # Export to Markdown s.output(format: :markdown, align: true) # Export to CSV s.output(format: :csv)