Guest User

Untitled

a guest
Jun 20th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.95 KB | None | 0 0
  1. module Stop
  2. module CantTouchThis
  3. def self.included(mod)
  4.  
  5. %w[instance_variable_get instance_variable_set].each do |m|
  6. send(:protected, m)
  7. end
  8.  
  9. eigenclass = class << mod; self; end
  10. %w[const_set class_variable_get class_variable_set public_class_method attr attr_reader attr_writer].each do |m|
  11. eigenclass.send(:protected, m)
  12. end
  13.  
  14. mod.send(:define_method, :instance_eval) do
  15. raise NoMethodError, "do do do, uh uh, duh duh. can't touch this"
  16. end
  17.  
  18. %w[class_eval class_exec module_eval module_exec include extend alias_method unfreeze remove_const remove_method undef_method define_method].each do |m|
  19. mod.class.send(:define_method, m) do
  20. raise NoMethodError, "do do do, uh uh, duh duh. can't touch this"
  21. end
  22. end
  23.  
  24. mod.send(:protected, :send)
  25. eigenclass.send(:protected, :send)
  26. mod.freeze
  27. end
  28. end
  29. end
  30.  
  31. def r
  32. yield
  33. puts "fail"
  34. rescue => e
  35. p e
  36. end
  37.  
  38. module B
  39. def self.included(_)
  40. puts "fail"
  41. end
  42. end
  43.  
  44. class A
  45. include Stop::CantTouchThis
  46. r{class_eval '' }
  47. r{class_exec {} }
  48. r{module_eval '' }
  49. r{include B }
  50. r{extend B }
  51. r{alias_method :class, :id }
  52. r{define_method(:foo) {} }
  53. r{ remove_const(:FOO) }
  54. r{ remove_method(:id) }
  55. end
  56.  
  57.  
  58. r{ A.new.instance_eval '' }
  59. r{ A.new.instance_variable_get(:@foo) }
  60. r{ A.new.instance_variable_set(:@foo, :foo) }
  61. r{ A.class_variable_get(:@foo) }
  62. r{ A.new.class_variable_get(:@foo) }
  63. r{ A.class_variable_set(:@foo, :bar) }
  64. r{ A.new.class_variable_set(:@foo, :bar) }
  65. r{ A.const_set(:B, :foo) }
  66. r{ A.public_class_method(:send) }
  67. r{ A.const_set(:FOO, :bar) }
  68. r{ A.attr(:foo) }
  69. r{ A.attr_reader(:foo) }
  70. r{ A.attr_writer(:foo) }
  71. r{ A.new.send(:id)}
  72. r{ A.send(:id)}
Add Comment
Please, Sign In to add comment