Class Transformer
In: lib/yaml_extensions/transform.rb
Parent: Test::Unit::TestCase

Methods

Public Instance methods

[Source]

# File lib/yaml_extensions/transform.rb, line 303
    def test_compiled
      # Initialization.
      engine = nil
      str = ''
      assert_nothing_raised { engine = YAML::Transformer.new }

      # Build.
      assert_nothing_raised do
        engine.add(YAML::YRegexPath.new('/name')) do |key, value|
          assert_instance_of(String, key)
          str += "#{value} is"
        end
      end
      assert_nothing_raised do
        engine.add(YAML::YRegexPath.new('/name=Akli/boss')) do |key, value|
          assert_instance_of(String, key)
          str += ' a boss'
        end
      end
      assert_nothing_raised do
        engine.add(YAML::YRegexPath.new('/jobs/professor=EPITA/class')) do |k,v|
          assert_instance_of(String, k)
          str += e
        end
      end
      assert_nothing_raised do
        engine.add(YAML::YRegexPath.new('toto#titi'), 'unused') do
          str += 'Why am I HERE???'
        end
      end

      # Display.
      TempPath.new do |dot_file|
        assert_nothing_raised { engine.dottify(dot_file) }
        `dot #{dot_file} 2> /dev/null`
        # assert_equal(0, $?, 'Cannot display the graph')
      end

      # Traverse.
      tree = {
        'name' => 'Akli A.',
        'tel' => '06932359',
        'address' => '23 boulevard voltaire',
        'jobs' => [
          {
            'professor' => 'EPITA',
            'boss' => 'MindSuite',
            'god' => 'world',
          }
        ]
      }
      assert_nothing_raised { engine.traverse(tree) }
      assert_equal(str, 'Akli A. is a boss a boss a boss')
    end

def test_higher_level_on_array

  users = []
  tree = {
    'users' => [
      {
        'name' => 'Sea',
        'tel' => '111'
      },
      {
        'name' => 'Sex',
        'tel' => '222'
      },
      {
        'name' => 'Sun',
        'tel' => '333'
      }
    ]
  }
  YAML::Transformer.traverse(YAML::YRegexPath.new('users#name=Se'), tree) do
    |key, value|
    assert_instance_of(Array, value)
    value.each do |e|
      users << "#{e['name']} (#{e['tel']})"
    end
  end
  p users
  #assert_equal(['Sea (111)', 'Sex (222)'], users)

end

[Source]

# File lib/yaml_extensions/transform.rb, line 430
    def test_errors
      engine = nil
      assert_nothing_raised { engine = YAML::Transformer.new }

      # Not an YRegexPath gived.
      assert_raise(ArgumentError) do
        engine.add('/name') { |key, value| str += "error" }
      end

#       # Block with only one parameter.
#       assert_raise(ArgumentError) do
#         engine.add(YAML::YRegexPath.new('/name')) { |key| str += "error" }
#       end

      # No block ginven.
      assert_raise(ArgumentError) do
        engine.add(YAML::YRegexPath.new('/name'))
      end
    end

[Source]

# File lib/yaml_extensions/transform.rb, line 382
    def test_higher_level_on_hash
      email = ''
      tree = {
        'Name' => 'Foo',
        'FirstName' => 'Bar',
        'Emails' => {
          'home' => 'foo312@coldmail.com',
          'work' => 'bfoo@staff.com',
          'edu' =>  'bar.foo@school.edu'
        }
      }
      path = YAML::YRegexPath.new('Emails#.*=.*\.edu')
      YAML::Transformer.traverse(path, tree) do |key, value|
        assert_instance_of(Hash, value)
        email += "#{value['home']}"
      end
      assert_equal('foo312@coldmail.com', email)
    end

[Source]

# File lib/yaml_extensions/transform.rb, line 358
    def test_unique
      names = []
      tree = {
        'users' => [
          {
            'name' => 'Sea',
            'tel' => '111'
          },
          {
            'name' => 'Sex',
            'tel' => '222'
          },
          {
            'name' => 'Sun',
            'tel' => '333'
          }
        ]
      }
      YAML::Transformer.traverse(YAML::YRegexPath.new('name=Se'), tree) do
        |k,v| names << v
      end
      assert_equal(['Sea', 'Sex'], names)
    end

[Validate]