Guest User

Untitled

a guest
May 24th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.41 KB | None | 0 0
  1. require 'test_helper'
  2.  
  3. class Character < ActiveRecord::Base
  4.  
  5. ABILITIES = ['Strength', 'Dexterity', 'Constitution', 'Intelligence', 'Wisdom', 'Charisma']
  6.  
  7. # Automatically generate xxx_modifier methods for each ability
  8. ABILITIES.map{|ability| ability.downcase}.each do |a|
  9. Character.send(:define_method, "#{a}_modifier") do
  10. score = read_attribute(a.to_sym)
  11. Character.ability_modifier_for(score)
  12. end
  13. end
  14.  
  15. def self.ability_modifier_for(ability_score)
  16. (ability_score - 10) / 2
  17. end
  18.  
  19. end
  20.  
  21.  
  22. class CharacterTest < ActiveSupport::TestCase
  23.  
  24. def test_ability_modifier
  25. assert_equal(-3, Character.ability_modifier_for(4))
  26. assert_equal(-1, Character.ability_modifier_for(8))
  27. assert_equal(-1, Character.ability_modifier_for(9))
  28. assert_equal(0, Character.ability_modifier_for(10))
  29. assert_equal(0, Character.ability_modifier_for(11))
  30. assert_equal(1, Character.ability_modifier_for(12))
  31. assert_equal(1, Character.ability_modifier_for(13))
  32. assert_equal(4, Character.ability_modifier_for(18))
  33. end
  34.  
  35. def test_generated_ability_modifier_methods
  36. c = Character.new
  37. Character::ABILITIES.map {|a| a.downcase }.each do |ability|
  38. c.instance_eval("#{ability}= 12")
  39. assert_equal(12, c.instance_eval("#{ability}"))
  40. puts c.instance_eval("#{ability}")
  41. assert_equal(1, c.send("#{ability}_modifier".to_sym))
  42. end
  43. end
  44.  
  45. end
Add Comment
Please, Sign In to add comment