Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'test_helper'
- class Character < ActiveRecord::Base
- ABILITIES = ['Strength', 'Dexterity', 'Constitution', 'Intelligence', 'Wisdom', 'Charisma']
- # Automatically generate xxx_modifier methods for each ability
- ABILITIES.map{|ability| ability.downcase}.each do |a|
- Character.send(:define_method, "#{a}_modifier") do
- score = read_attribute(a.to_sym)
- Character.ability_modifier_for(score)
- end
- end
- def self.ability_modifier_for(ability_score)
- (ability_score - 10) / 2
- end
- end
- class CharacterTest < ActiveSupport::TestCase
- def test_ability_modifier
- assert_equal(-3, Character.ability_modifier_for(4))
- assert_equal(-1, Character.ability_modifier_for(8))
- assert_equal(-1, Character.ability_modifier_for(9))
- assert_equal(0, Character.ability_modifier_for(10))
- assert_equal(0, Character.ability_modifier_for(11))
- assert_equal(1, Character.ability_modifier_for(12))
- assert_equal(1, Character.ability_modifier_for(13))
- assert_equal(4, Character.ability_modifier_for(18))
- end
- def test_generated_ability_modifier_methods
- c = Character.new
- Character::ABILITIES.map {|a| a.downcase }.each do |ability|
- c.instance_eval("#{ability}= 12")
- assert_equal(12, c.instance_eval("#{ability}"))
- puts c.instance_eval("#{ability}")
- assert_equal(1, c.send("#{ability}_modifier".to_sym))
- end
- end
- end
Add Comment
Please, Sign In to add comment