Sha256: 916c947cc5776d2b28dff85d5d5312d9c1c6695ebb35cf8e6b11a1e0ff260c55

Contents?: true

Size: 891 Bytes

Versions: 3

Compression:

Stored size: 891 Bytes

Contents

# frozen_string_literal: true

module Jumon
  class Subject
    attr_reader :template, :variables, :subjects

    def initialize(base)
      @template = base[:subject]
      @variables = base[:variables]
      @subjects = [@template]
    end

    def set_subjects
      return unless variables

      add_subject(0, 0)
      @subjects = @subjects.uniq.reject do |s|
        variables.any? { |v| s.include?("{{#{v[:name]}}}") }
      end
    end

    def add_subject(var_i, pat_i)
      copy = subjects.dup
      copy.each do |c|
        result = c.gsub(
          "{{#{variables[var_i][:name]}}}",
          variables[var_i][:patterns][pat_i]
        )
        @subjects.push(result)
      end

      if pat_i < variables[var_i][:patterns].length - 1
        add_subject(var_i, pat_i + 1)
      elsif var_i < variables.length - 1
        add_subject(var_i + 1, 0)
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
jumon-0.1.2 lib/jumon/subject.rb
jumon-0.1.1 lib/jumon/subject.rb
jumon-0.1.0 lib/jumon/subject.rb