Guest User

Untitled

a guest
Jul 23rd, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.53 KB | None | 0 0
  1. module TimeSet
  2. module TwentyFourHour
  3.  
  4. def self.included(klass)
  5. klass.class_eval do
  6. extend ClassMethods
  7. include InstanceMethods
  8. end
  9. end
  10.  
  11. module ClassMethods
  12. attr :times_for
  13.  
  14. def twenty_four_hour_time_for(*args)
  15. @times_for = args
  16. args.each do |attribute|
  17. attr_writer "#{attribute}_hour", "#{attribute}_minute", "#{attribute}_meridian"
  18.  
  19. define_method "#{attribute}_hour" do
  20. time = eval("#{attribute}") ? eval("#{attribute}") : Time.now
  21. (time.hour > 12 ? time.hour - 12 : time.hour).to_s
  22. end
  23.  
  24. define_method "#{attribute}_minute" do
  25. eval("#{attribute}") ? eval("#{attribute}").min.to_s : "00"
  26. end
  27.  
  28. define_method "#{attribute}_meridian" do
  29. if eval("#{attribute}")
  30. eval("#{attribute}").hour < 12 ? "AM" : "PM"
  31. else
  32. Time.now.hour < 12 ? "AM" : "PM"
  33. end
  34. end
  35. end
  36. end
  37. end
  38.  
  39. module InstanceMethods
  40. def there_are_times_for
  41. self.class.times_for
  42. end
  43. end
  44. end
  45. end
  46.  
  47.  
  48. class SomeClass
  49. include TimeSet::TwentyFourHour
  50. twenty_four_hour_time_for :start, :end
  51. end
  52.  
  53. class OtherClass
  54. include TimeSet::TwentyFourHour
  55. twenty_four_hour_time_for :commencement, :finality
  56. end
  57.  
  58. x = SomeClass.new
  59. y = OtherClass.new
  60.  
  61. puts x.there_are_times_for
  62. puts y.there_are_times_for
  63. # =>
  64. # start
  65. # end
  66. # commencement
  67. # finality
Add Comment
Please, Sign In to add comment