Sha256: 2fcf33f3bab2e7a182f91c060f46d735bd528229446b1de6bdfd98536a46991f

Contents?: true

Size: 1.27 KB

Versions: 2

Compression:

Stored size: 1.27 KB

Contents

require 'test_helper'

class PrependedRoles
  extend Surrounded::Context

  initialize :user, :other

  trigger :get_name do
    user.name
  end

  trigger :other_title do
    other.title
  end

  role :user do
    def name
      "Not what you thought, #{super}"
    end
  end

  module OtherStuff
    def title
      "OtherStuff #{name}"
    end
  end

  def map_role_other(role_player)
    @other = role_player
    map_role(:other, OtherStuff, role_player)
  end

  def apply_behavior_user(mod, object)
    mod.instance_methods.each do |meth|
      object.singleton_class.send(:define_method, meth, mod.instance_method(meth))
    end
    object
  end

  def remove_behavior_user(mod, object)
    mod.instance_methods.each do |meth|
      object.singleton_class.send(:remove_method, meth)
    end
    object
  end
end

describe Surrounded::Context, 'custom role application' do
  let(:user){ User.new('Jim') }
  let(:other){ User.new('Amy') }

  let(:context){ PrependedRoles.new(user: user, other: other) }

  it 'allows you to override existing methods on a role player' do
    assert_equal "Not what you thought, Jim", context.get_name
    assert_equal "Jim", user.name
  end

  it 'allows you to override the way a role is mapped' do
    assert_equal 'OtherStuff Amy', context.other_title
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
surrounded-1.1.0 test/override_methods_test.rb
surrounded-1.0.0 test/override_methods_test.rb