cauldron 0.1.5 → 0.1.6
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 +7 -0
- data/.gitignore +4 -1
- data/.rspec +1 -0
- data/Gemfile +16 -9
- data/Gemfile.lock +134 -64
- data/README.md +26 -0
- data/Rakefile +24 -99
- data/build_sandbox.rb +41 -0
- data/cucumber.yml +8 -0
- data/features/chop.feature +23 -0
- data/features/create_dynamic_statements.feature +14 -0
- data/features/generate_known_solution.feature +42 -0
- data/features/generate_new_statement.feature +20 -0
- data/features/step_definitions/cauldron_steps.rb +47 -0
- data/features/support/env.rb +1 -1
- data/features/use_existing_statements.feature +23 -0
- data/lib/cauldron.rb +41 -5
- data/lib/cauldron/actualized_composite.rb +35 -0
- data/lib/cauldron/array_collect_template/default.rb +95 -0
- data/lib/cauldron/array_collect_template/template.rb +57 -0
- data/lib/cauldron/builder.rb +60 -0
- data/lib/cauldron/caret.rb +50 -0
- data/lib/cauldron/dynamic_operator.rb +90 -0
- data/lib/cauldron/dynamic_operator_module.rb +140 -0
- data/lib/cauldron/example.rb +18 -0
- data/lib/cauldron/example_set.rb +36 -0
- data/lib/cauldron/histories.rb +53 -0
- data/lib/cauldron/history.rb +34 -0
- data/lib/cauldron/if_relationship.rb +4 -6
- data/lib/cauldron/number_addition_template/add_five.rb +71 -0
- data/lib/cauldron/number_addition_template/template.rb +56 -0
- data/lib/cauldron/operator.rb +62 -0
- data/lib/cauldron/operator/array_reverse_operator.rb +160 -0
- data/lib/cauldron/operator/concat_operator.rb +72 -0
- data/lib/cauldron/operator/hash_key_value_operator.rb +74 -0
- data/lib/cauldron/operator/numeric_operator.rb +115 -0
- data/lib/cauldron/operator/string_asterisk_operator.rb +131 -0
- data/lib/cauldron/operator/to_s_operator.rb +18 -0
- data/lib/cauldron/operator/var_collect_operator.rb +29 -0
- data/lib/cauldron/pot.rb +136 -26
- data/lib/cauldron/scope.rb +24 -0
- data/lib/cauldron/solution/composite.rb +236 -0
- data/lib/cauldron/solution/one.rb +49 -0
- data/lib/cauldron/statement_generator.rb +298 -0
- data/lib/cauldron/template_base.rb +14 -0
- data/lib/cauldron/tracer.rb +55 -0
- data/lib/cauldron/version.rb +1 -1
- data/lib/pry_tester.rb +76 -0
- data/ruby_to_sexp.rb +74 -0
- data/sandbox.rb +7 -0
- data/sexp_to_ruby.rb +150 -0
- data/spec/cauldron/actualized_composite_spec.rb +140 -0
- data/spec/cauldron/array_collect_template/default_spec.rb +41 -0
- data/spec/cauldron/builder_spec.rb +186 -0
- data/spec/cauldron/dynamic/add_number_template_spec.rb +30 -0
- data/spec/cauldron/dynamic_operator_spec.rb +416 -0
- data/spec/cauldron/example_set_spec.rb +49 -0
- data/spec/cauldron/example_spec.rb +33 -0
- data/spec/cauldron/histories_spec.rb +135 -0
- data/spec/cauldron/history_spec.rb +118 -0
- data/spec/cauldron/if_relationship_spec.rb +1 -1
- data/spec/cauldron/operator/array_reverse_operator_spec.rb +73 -0
- data/spec/cauldron/{concat_operator_spec.rb → operator/concat_operator_spec.rb} +30 -12
- data/spec/cauldron/operator/hash_key_value_operator_spec.rb +98 -0
- data/spec/cauldron/operator/numeric_operator_spec.rb +110 -0
- data/spec/cauldron/operator/string_asterisk_operator_spec.rb +196 -0
- data/spec/cauldron/operator/var_collect_operator_spec.rb +38 -0
- data/spec/cauldron/pot_spec.rb +176 -14
- data/spec/cauldron/solution/composite_spec.rb +421 -0
- data/spec/cauldron/solution/one_spec.rb +24 -0
- data/spec/cauldron/statement_generator_spec.rb +211 -0
- data/spec/cauldron/terminal_spec.rb +2 -2
- data/spec/spec_helper.rb +5 -1
- data/spec/support/code_matcher.rb +55 -0
- data/spec/support/include_instance_of_matcher.rb +9 -0
- data/spec/support/shared_examples_for_leaf_operators.rb +22 -0
- data/spec/support/shared_examples_for_operators.rb +23 -0
- data/syntax_spec.txt +2 -0
- metadata +104 -41
- data/README +0 -1
- data/README.rdoc +0 -19
- data/VERSION +0 -1
- data/features/cauldron_new_approach.feature +0 -46
- data/lib/cauldron/array_reverse_operator.rb +0 -39
- data/lib/cauldron/concat_operator.rb +0 -34
- data/lib/cauldron/numeric_operator.rb +0 -45
- data/lib/cauldron/relationship.rb +0 -5
- data/spec/cauldron/array_reverse_operator_spec.rb +0 -59
- data/spec/cauldron/numeric_operator_spec.rb +0 -70
| @@ -0,0 +1,49 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Cauldron
         | 
| 4 | 
            +
             | 
| 5 | 
            +
              describe ExampleSet do
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                describe '#all?' do
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  context %q{contains example {:arguments => ['Mass'], :response => 'effect'}} do
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    context %q{with block {|x| x.response == 'effect'}} do
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                      let(:example_set) do
         | 
| 14 | 
            +
                        Cauldron::ExampleSet.new(
         | 
| 15 | 
            +
                          [
         | 
| 16 | 
            +
                            Cauldron::Example.new({:arguments => ['Mass'], :response => 'effect'})
         | 
| 17 | 
            +
                          ]
         | 
| 18 | 
            +
                        )
         | 
| 19 | 
            +
                      end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                      it 'returns false' do
         | 
| 22 | 
            +
                        example_set.all? {|x| x.response == 'effect'}.should == true
         | 
| 23 | 
            +
                      end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                    end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                describe '#scope' do
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                  let(:example) { Cauldron::Example.new({:arguments => ['Mass'], :response => 'effect'}) }
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                  let(:example_set) do
         | 
| 36 | 
            +
                    Cauldron::ExampleSet.new(
         | 
| 37 | 
            +
                      [ example ]
         | 
| 38 | 
            +
                    )
         | 
| 39 | 
            +
                  end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                  it 'creates a new variables array' do
         | 
| 42 | 
            +
                    example_set.scope.variables.object_id.should_not === example.params.object_id
         | 
| 43 | 
            +
                  end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
              end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
            end
         | 
| @@ -0,0 +1,33 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Cauldron
         | 
| 4 | 
            +
              
         | 
| 5 | 
            +
              describe Example do
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                describe '#params' do
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  let(:example) do
         | 
| 10 | 
            +
                    Cauldron::Example.new(
         | 
| 11 | 
            +
                      { arguments: [["Pip", "Rowe"]], response: ["Pi", "Row"] }
         | 
| 12 | 
            +
                    )
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  it "returns ['var0']" do
         | 
| 16 | 
            +
                    example.params.should == ['var0']
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  context '#params has already been called' do
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    before(:each) { example.params }
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                    it "returns ['var0']" do
         | 
| 24 | 
            +
                      example.params.should == ['var0']
         | 
| 25 | 
            +
                    end        
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
              end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
            end
         | 
| @@ -0,0 +1,135 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Cauldron
         | 
| 4 | 
            +
              
         | 
| 5 | 
            +
              describe Histories do
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                describe '#insert_points' do
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  context 'has history with point [0]' do
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    let(:first_line_history) { Cauldron::History.new([{point: [0]}])}
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                    let(:subject){
         | 
| 14 | 
            +
                      Cauldron::Histories.new([first_line_history])          
         | 
| 15 | 
            +
                    }
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    it 'returns [ [0] ]' do
         | 
| 18 | 
            +
                      subject.insert_points.should == [[0]]
         | 
| 19 | 
            +
                    end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  context 'has history 2 points [1,0]' do
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                    let(:first_history) { Cauldron::History.new([{point: [1,0]}])}
         | 
| 26 | 
            +
                    let(:second_history) { Cauldron::History.new([{point: [1,0]}])}
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                    let(:subject){
         | 
| 29 | 
            +
                      Cauldron::Histories.new([first_history,second_history])          
         | 
| 30 | 
            +
                    }        
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                    it 'returns 1 insert point' do
         | 
| 33 | 
            +
                      expect(subject.insert_points.length).to eql(1)
         | 
| 34 | 
            +
                    end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  end      
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                describe '#contexts_at' do
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                # #<Cauldron::Histories:0x007f7f5c3f38c8
         | 
| 43 | 
            +
                #  @results=
         | 
| 44 | 
            +
                #   [#<Cauldron::History:0x007f7f5c3f3940
         | 
| 45 | 
            +
                #     @logs=
         | 
| 46 | 
            +
                #      [{:var2=>"Sparky", :var0=>["Sparky", "Kels"], :var1=>nil, :line=>0, :depth=>1, :total_line=>3, :point=>[0, 0]},
         | 
| 47 | 
            +
                #       {:var2=>"Kels", :var0=>["Sparky", "Kels"], :var1=>nil, :line=>0, :depth=>1, :total_line=>3, :point=>[0, 0]},
         | 
| 48 | 
            +
                #       {:var0=>["Sparky", "Kels"], :var1=>["Sparky", "Kels"], :line=>0, :depth=>0, :total_line=>4, :point=>[1]}]>]>      
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                  # point [0,0] => [{:var2=>"Sparky", :var0=>["Sparky", "Kels"], :var1=>nil}]
         | 
| 51 | 
            +
                  # point [0,0] => [{:var2=>"Kels", :var0=>["Sparky", "Kels"], :var1=>nil}]
         | 
| 52 | 
            +
                  # point [1] => [{:var2=>"Kels", :var0=>["Sparky", "Kels"], :var1=>nil}]
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                  let(:histories) do
         | 
| 55 | 
            +
                    Cauldron::Histories.new(
         | 
| 56 | 
            +
                      [
         | 
| 57 | 
            +
                        Cauldron::History.new(
         | 
| 58 | 
            +
                          [
         | 
| 59 | 
            +
                            {:var2=>"Sparky", :var0=>["Sparky", "Kels"], :var1=>nil, :line=>0, :depth=>1, :total_line=>3, :point=>[0, 0]},
         | 
| 60 | 
            +
                            {:var2=>"Kels", :var0=>["Sparky", "Kels"], :var1=>nil, :line=>0, :depth=>1, :total_line=>3, :point=>[0, 0]},
         | 
| 61 | 
            +
                            {:var0=>["Sparky", "Kels"], :var1=>["Sparky", "Kels"], :line=>0, :depth=>0, :total_line=>4, :point=>[1]}
         | 
| 62 | 
            +
                          ]
         | 
| 63 | 
            +
                        )
         | 
| 64 | 
            +
                      ]
         | 
| 65 | 
            +
                    )
         | 
| 66 | 
            +
                  end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                  it 'returns 1 context' do
         | 
| 69 | 
            +
                    expect(histories.contexts_at([1]).length).to eql(1)
         | 
| 70 | 
            +
                  end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                  it 'returns 2 contexts' do
         | 
| 73 | 
            +
                    expect(histories.contexts_at([0, 0]).length).to eql(2)
         | 
| 74 | 
            +
                  end      
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                end
         | 
| 77 | 
            +
             | 
| 78 | 
            +
                describe '#variable_permutations' do
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                  let(:histories) do
         | 
| 81 | 
            +
                    Cauldron::Histories.new(
         | 
| 82 | 
            +
                      [
         | 
| 83 | 
            +
                        Cauldron::History.new([{var0: 4}])
         | 
| 84 | 
            +
                      ]
         | 
| 85 | 
            +
                    )
         | 
| 86 | 
            +
                  end
         | 
| 87 | 
            +
             | 
| 88 | 
            +
                  it 'returns [{var0: 4}]' do
         | 
| 89 | 
            +
                    histories.variable_permutations(1).should == [
         | 
| 90 | 
            +
                      {var0: 4}
         | 
| 91 | 
            +
                    ]
         | 
| 92 | 
            +
                  end
         | 
| 93 | 
            +
             | 
| 94 | 
            +
                  context 'when var0 is ["Sparky", "Kel"]' do
         | 
| 95 | 
            +
             | 
| 96 | 
            +
                    let(:histories) do
         | 
| 97 | 
            +
                      Cauldron::Histories.new(
         | 
| 98 | 
            +
                        [
         | 
| 99 | 
            +
                          Cauldron::History.new([{:var0=>["Sparky", "Kel"], :line=>0, :depth=>0, :total_line=>0}])
         | 
| 100 | 
            +
                        ]
         | 
| 101 | 
            +
                      )
         | 
| 102 | 
            +
                    end
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                    it 'returns ["Sparky", "Kel"]' do
         | 
| 105 | 
            +
                      histories.variable_permutations(1).should == [
         | 
| 106 | 
            +
                        {var0: ["Sparky", "Kel"]}
         | 
| 107 | 
            +
                      ]
         | 
| 108 | 
            +
                    end        
         | 
| 109 | 
            +
             | 
| 110 | 
            +
                  end
         | 
| 111 | 
            +
             | 
| 112 | 
            +
                  context 'using two histories' do
         | 
| 113 | 
            +
             | 
| 114 | 
            +
                    let(:histories) do
         | 
| 115 | 
            +
                      Cauldron::Histories.new(
         | 
| 116 | 
            +
                        [
         | 
| 117 | 
            +
                          Cauldron::History.new([{:var0=>"Sparky", :line=>0, :depth=>0, :total_line=>0}]),
         | 
| 118 | 
            +
                          Cauldron::History.new([{:var0=>"Kel", :line=>0, :depth=>0, :total_line=>0}])
         | 
| 119 | 
            +
                        ]
         | 
| 120 | 
            +
                      )
         | 
| 121 | 
            +
                    end
         | 
| 122 | 
            +
             | 
| 123 | 
            +
                    it 'returns []' do
         | 
| 124 | 
            +
                      histories.variable_permutations(1).should == [
         | 
| 125 | 
            +
                        {var0: 'Sparky'}, {var0: 'Kel'}
         | 
| 126 | 
            +
                      ]
         | 
| 127 | 
            +
                    end              
         | 
| 128 | 
            +
             | 
| 129 | 
            +
                  end
         | 
| 130 | 
            +
             | 
| 131 | 
            +
                end
         | 
| 132 | 
            +
             | 
| 133 | 
            +
              end
         | 
| 134 | 
            +
             | 
| 135 | 
            +
            end
         | 
| @@ -0,0 +1,118 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Cauldron
         | 
| 4 | 
            +
              
         | 
| 5 | 
            +
              describe History do
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                describe '#insert_points' do
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  context %q{given the history is 
         | 
| 10 | 
            +
                    History is:
         | 
| 11 | 
            +
                      [line: 0, depth:0, var0: ['Sparky','Kel'] ]
         | 
| 12 | 
            +
                  } do
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                    let(:subject) { History.new([{line: 0, depth: 0, point: [0], var0: ['Sparky','Kel'] }]) }
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                    it 'has 1 insert point' do
         | 
| 17 | 
            +
                      expect(subject.insert_points.length).to eql(1)
         | 
| 18 | 
            +
                    end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                    it 'has the insert point [0,0]' do
         | 
| 21 | 
            +
                      subject.insert_points.should include([0])
         | 
| 22 | 
            +
                    end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                  context %q{given the history is 
         | 
| 27 | 
            +
                    History is:
         | 
| 28 | 
            +
                      [line: 1, depth:0, var0: 'Sparky', var1: 'Spark' ]
         | 
| 29 | 
            +
                    from:
         | 
| 30 | 
            +
                      var1 = var0.chop
         | 
| 31 | 
            +
                    } do
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                    let(:subject) { History.new([{line: 1, depth: 0, point: [1], var0: 'Sparky', var1: 'Spark'}]) }
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                    it 'has 1 insert point' do
         | 
| 36 | 
            +
                      expect(subject.insert_points.length).to eql(1)
         | 
| 37 | 
            +
                    end 
         | 
| 38 | 
            +
                      
         | 
| 39 | 
            +
                    it 'has the insert point [1,0]' do
         | 
| 40 | 
            +
                      subject.insert_points.should include([1])
         | 
| 41 | 
            +
                    end                   
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                  end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                  context %q{
         | 
| 46 | 
            +
                    History is:
         | 
| 47 | 
            +
                      [line: 1, depth:1, total_line: 2, point: [0,1], var0: ['Sparky', 'Kels'], var1: 'Spark' ],
         | 
| 48 | 
            +
                      [line: 1, depth:1, total_line: 2, point: [0,1], var0: ['Sparky', 'Kels'], var1: 'Kel' ],
         | 
| 49 | 
            +
                      [line: 1, depth:0, total_line: 2, point: [1], var0: ['Sparky', 'Kels'], var1: 'Kel', var2: ['Spark', 'Kel'] ],
         | 
| 50 | 
            +
                    from:
         | 
| 51 | 
            +
                      var2 = var0.each do |var1|
         | 
| 52 | 
            +
                        var1.chop
         | 
| 53 | 
            +
                      end
         | 
| 54 | 
            +
                    } do
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                      let(:subject) { 
         | 
| 57 | 
            +
                        History.new([
         | 
| 58 | 
            +
                          {line: 1, depth:1, total_line: 2, point: [0,1], var0: ['Sparky', 'Kels'], var1: 'Spark'},
         | 
| 59 | 
            +
                          {line: 1, depth:1, total_line: 2, point: [0,1], var0: ['Sparky', 'Kels'], var1: 'Kel'},
         | 
| 60 | 
            +
                          {line: 1, depth:0, total_line: 2, point: [1], var0: ['Sparky', 'Kels'], var1: 'Kel', var2: ['Spark', 'Kel']}
         | 
| 61 | 
            +
                        ]) 
         | 
| 62 | 
            +
                      }
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                      it 'has 2 insert point' do
         | 
| 65 | 
            +
                        expect(subject.insert_points.length).to eql(2)
         | 
| 66 | 
            +
                      end
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                      it 'has the insert point [1]' do
         | 
| 69 | 
            +
                        subject.insert_points.should include([1])
         | 
| 70 | 
            +
                      end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                      it 'has the insert point [0,1]' do
         | 
| 73 | 
            +
                        subject.insert_points.should include([0,1])
         | 
| 74 | 
            +
                      end                               
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                  end
         | 
| 77 | 
            +
             | 
| 78 | 
            +
                end
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                describe '#variables' do
         | 
| 81 | 
            +
             | 
| 82 | 
            +
                  context %q{
         | 
| 83 | 
            +
                    History is:
         | 
| 84 | 
            +
                      [line: 0, depth:0, var0: ['Sparky','Kel'] ]
         | 
| 85 | 
            +
                  } do
         | 
| 86 | 
            +
             | 
| 87 | 
            +
                    let(:history) { History.new([{line: 0, depth: 0, var0: ['Sparky','Kel'] }]) }
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                    it 'returns "var0"' do
         | 
| 90 | 
            +
                      history.variables.should == [:var0]
         | 
| 91 | 
            +
                    end
         | 
| 92 | 
            +
             | 
| 93 | 
            +
                  end
         | 
| 94 | 
            +
             | 
| 95 | 
            +
                end
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                describe '#values' do
         | 
| 98 | 
            +
             | 
| 99 | 
            +
                  context %q{
         | 
| 100 | 
            +
                    History is:
         | 
| 101 | 
            +
                      [line: 0, depth:0, var0: ['Sparky','Kel'] ]
         | 
| 102 | 
            +
                  } do
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                    let(:history) { History.new([{line: 0, depth: 0, var0: ['Sparky','Kel'] }]) }
         | 
| 105 | 
            +
             | 
| 106 | 
            +
                    it %q{returns "[ ['Sparky','Kel'] ]"} do
         | 
| 107 | 
            +
                      history.values(:var0).should == [
         | 
| 108 | 
            +
                        ['Sparky','Kel']
         | 
| 109 | 
            +
                      ]
         | 
| 110 | 
            +
                    end
         | 
| 111 | 
            +
             | 
| 112 | 
            +
                  end
         | 
| 113 | 
            +
             | 
| 114 | 
            +
                end
         | 
| 115 | 
            +
             | 
| 116 | 
            +
              end
         | 
| 117 | 
            +
             | 
| 118 | 
            +
            end
         | 
| @@ -0,0 +1,73 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Cauldron
         | 
| 4 | 
            +
              
         | 
| 5 | 
            +
              describe 'ArrayReverseOperator' do
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                it_behaves_like "operator" do
         | 
| 8 | 
            +
                  let(:operator) { ArrayReverseOperator.new([0]) }
         | 
| 9 | 
            +
                  let(:initial_scope) { Cauldron::Scope.new(['var0']) }
         | 
| 10 | 
            +
                  let(:initial_operators) { [] }
         | 
| 11 | 
            +
                end    
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                describe '.viable?' do
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  context 'the arguments are not arrays' do
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    it 'is false' do
         | 
| 18 | 
            +
                      expect(ArrayReverseOperator.viable?([8], ['lions','tigers','bears'])).to eql(false)
         | 
| 19 | 
            +
                    end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                  context 'using more than 1 argument' do
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                    it 'is false' do
         | 
| 26 | 
            +
                      expect(ArrayReverseOperator.viable?([['lions'],['tigers']], ['lions','tigers'])).to eql(false)
         | 
| 27 | 
            +
                    end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                  context 'response is not an array' do
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                    it 'is false' do
         | 
| 34 | 
            +
                      expect(ArrayReverseOperator.viable?([['lions','tigers']], 'lions')).to eql(false)
         | 
| 35 | 
            +
                    end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                  end      
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                describe '#successful?' do
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                  context 'using array that needs reversed' do
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                    it 'is true' do
         | 
| 46 | 
            +
                      operator = ArrayReverseOperator.new([0])
         | 
| 47 | 
            +
                      expect(
         | 
| 48 | 
            +
                        operator.successful?(
         | 
| 49 | 
            +
                          { arguments: [['lions','tigers']],response: ['tigers','lions']}
         | 
| 50 | 
            +
                        )
         | 
| 51 | 
            +
                      ).to eql(true)
         | 
| 52 | 
            +
                    end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                  end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                  context "using array that can't be reversed" do
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                    it 'is false' do
         | 
| 59 | 
            +
                      operator = ArrayReverseOperator.new([0])
         | 
| 60 | 
            +
                      expect(
         | 
| 61 | 
            +
                        operator.successful?(
         | 
| 62 | 
            +
                          {arguments:[['lions','tigers']],response: ['lions','tigers']}
         | 
| 63 | 
            +
                        )
         | 
| 64 | 
            +
                      ).to eql(false)
         | 
| 65 | 
            +
                    end
         | 
| 66 | 
            +
                    
         | 
| 67 | 
            +
                  end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
              end
         | 
| 72 | 
            +
             | 
| 73 | 
            +
            end
         | 
| @@ -2,14 +2,24 @@ require 'spec_helper' | |
| 2 2 |  | 
| 3 3 | 
             
            module Cauldron
         | 
| 4 4 |  | 
| 5 | 
            -
              describe  | 
| 5 | 
            +
              describe ConcatOperator do 
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                it_behaves_like "leaf_operator" do
         | 
| 8 | 
            +
                  let(:leaf_operator) { ConcatOperator.new([0]) }
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                it_behaves_like "operator" do
         | 
| 12 | 
            +
                  let(:operator) { ConcatOperator.new([0]) }
         | 
| 13 | 
            +
                  let(:initial_scope) { Cauldron::Scope.new(['var0']) }
         | 
| 14 | 
            +
                  let(:initial_operators) { [] }
         | 
| 15 | 
            +
                end        
         | 
| 6 16 |  | 
| 7 17 | 
             
                describe '.viable?' do
         | 
| 8 18 |  | 
| 9 19 | 
             
                  context 'the arguments are not string' do
         | 
| 10 20 |  | 
| 11 21 | 
             
                    it 'is false' do
         | 
| 12 | 
            -
                      ConcatOperator.viable?([8], 'foobar'). | 
| 22 | 
            +
                      expect(ConcatOperator.viable?([8], 'foobar')).to eql(false)
         | 
| 13 23 | 
             
                    end
         | 
| 14 24 |  | 
| 15 25 | 
             
                  end
         | 
| @@ -17,7 +27,7 @@ module Cauldron | |
| 17 27 | 
             
                  context 'the reponse is not a string' do
         | 
| 18 28 |  | 
| 19 29 | 
             
                    it 'is false' do
         | 
| 20 | 
            -
                      ConcatOperator.viable?(['foo'],8). | 
| 30 | 
            +
                      expect(ConcatOperator.viable?(['foo'],8)).to eql(false)
         | 
| 21 31 | 
             
                    end
         | 
| 22 32 |  | 
| 23 33 | 
             
                  end
         | 
| @@ -30,10 +40,13 @@ module Cauldron | |
| 30 40 |  | 
| 31 41 | 
             
                    context 'response is "foobar"' do
         | 
| 32 42 |  | 
| 43 | 
            +
                      let(:problems) do
         | 
| 44 | 
            +
                        Cauldron::ExampleSet.new(
         | 
| 45 | 
            +
                          [Cauldron::Example.new({ arguments: ['foo'], response: 'foobar'})]
         | 
| 46 | 
            +
                        )
         | 
| 47 | 
            +
                      end          
         | 
| 48 | 
            +
             | 
| 33 49 | 
             
                      it 'return "[bar]"' do
         | 
| 34 | 
            -
                        problems = [
         | 
| 35 | 
            -
                          { arguments: ['foo'], response: 'foobar'}
         | 
| 36 | 
            -
                        ]
         | 
| 37 50 | 
             
                        ConcatOperator.find_constants(problems).should == ['bar']
         | 
| 38 51 | 
             
                      end
         | 
| 39 52 |  | 
| @@ -41,10 +54,13 @@ module Cauldron | |
| 41 54 |  | 
| 42 55 | 
             
                    context 'response is "barfoo"' do
         | 
| 43 56 |  | 
| 57 | 
            +
                      let(:problems) do
         | 
| 58 | 
            +
                        Cauldron::ExampleSet.new(
         | 
| 59 | 
            +
                          [Cauldron::Example.new({ arguments: ['foo'], response: 'barfoo'})]
         | 
| 60 | 
            +
                        )
         | 
| 61 | 
            +
                      end
         | 
| 62 | 
            +
             | 
| 44 63 | 
             
                      it 'returns "[]"' do
         | 
| 45 | 
            -
                        problems = [
         | 
| 46 | 
            -
                          { arguments: ['foo'], response: 'barfoo'}
         | 
| 47 | 
            -
                        ]
         | 
| 48 64 | 
             
                        ConcatOperator.find_constants(problems).should == []            
         | 
| 49 65 | 
             
                      end
         | 
| 50 66 |  | 
| @@ -63,7 +79,7 @@ module Cauldron | |
| 63 79 | 
             
                        {arguments: ['foo'], response: 'foobar'},
         | 
| 64 80 | 
             
                        {arguments: ['goo'], response: 'goobar'}
         | 
| 65 81 | 
             
                      ]          
         | 
| 66 | 
            -
                      operator = ConcatOperator.new( | 
| 82 | 
            +
                      operator = ConcatOperator.new([])  
         | 
| 67 83 | 
             
                      problems.all? {|x| operator.successful?(x) }.should == true
         | 
| 68 84 | 
             
                    end
         | 
| 69 85 |  | 
| @@ -75,9 +91,11 @@ module Cauldron | |
| 75 91 |  | 
| 76 92 | 
             
                  context 'using the constant "bar"' do
         | 
| 77 93 |  | 
| 94 | 
            +
                    let(:scope) { Cauldron::Scope.new(['var0']) }
         | 
| 95 | 
            +
             | 
| 78 96 | 
             
                    it 'returns "var0.concat("bar")"' do
         | 
| 79 | 
            -
                      operator = ConcatOperator.new( | 
| 80 | 
            -
                      operator.to_ruby.should == " | 
| 97 | 
            +
                      operator = ConcatOperator.new([0])
         | 
| 98 | 
            +
                      operator.to_ruby(scope,[]).should == "var0.concat(\"bar\")"
         | 
| 81 99 | 
             
                    end
         | 
| 82 100 |  | 
| 83 101 | 
             
                  end
         |