vex 0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (114) hide show
  1. data/Manifest +112 -0
  2. data/Rakefile +53 -0
  3. data/VERSION +1 -0
  4. data/config/README +2 -0
  5. data/config/dependencies.rb +10 -0
  6. data/config/gem.yml +7 -0
  7. data/init.rb +36 -0
  8. data/lib/nokogiri/nokogiri_ext.rb +96 -0
  9. data/lib/vex.rb +5 -0
  10. data/lib/vex/action_controller.rb +4 -0
  11. data/lib/vex/action_controller/verify_action.rb +97 -0
  12. data/lib/vex/action_controller/whitelisted_actions.rb +45 -0
  13. data/lib/vex/active_record.rb +3 -0
  14. data/lib/vex/active_record/__init__.rb +0 -0
  15. data/lib/vex/active_record/advisory_lock.rb +11 -0
  16. data/lib/vex/active_record/advisory_lock/mysql_adapter.rb +16 -0
  17. data/lib/vex/active_record/advisory_lock/sqlite_adapter.rb +78 -0
  18. data/lib/vex/active_record/belongs_to_many.rb +143 -0
  19. data/lib/vex/active_record/find_by_extension.rb +70 -0
  20. data/lib/vex/active_record/gem.rb +8 -0
  21. data/lib/vex/active_record/lite_table.rb +139 -0
  22. data/lib/vex/active_record/lite_view.rb +140 -0
  23. data/lib/vex/active_record/mass_load.rb +65 -0
  24. data/lib/vex/active_record/mysql_backup.rb +21 -0
  25. data/lib/vex/active_record/plugins/default_value_for/LICENSE.TXT +19 -0
  26. data/lib/vex/active_record/plugins/default_value_for/README.rdoc +421 -0
  27. data/lib/vex/active_record/plugins/default_value_for/Rakefile +6 -0
  28. data/lib/vex/active_record/plugins/default_value_for/init.rb +91 -0
  29. data/lib/vex/active_record/plugins/default_value_for/test.rb +279 -0
  30. data/lib/vex/active_record/plugins/default_value_for/test.sqlite3 +0 -0
  31. data/lib/vex/active_record/random_id.rb +56 -0
  32. data/lib/vex/active_record/resolver.rb +49 -0
  33. data/lib/vex/active_record/serialize_hash.rb +125 -0
  34. data/lib/vex/active_record/to_html.rb +53 -0
  35. data/lib/vex/active_record/validate.rb +76 -0
  36. data/lib/vex/active_record/validation_error_ext.rb +68 -0
  37. data/lib/vex/base.rb +2 -0
  38. data/lib/vex/base/app.rb +75 -0
  39. data/lib/vex/base/array/at_random.rb +17 -0
  40. data/lib/vex/base/array/cross.rb +26 -0
  41. data/lib/vex/base/array/each_batch.rb +32 -0
  42. data/lib/vex/base/array/parallel_map.rb +98 -0
  43. data/lib/vex/base/deprecation.rb +41 -0
  44. data/lib/vex/base/enumerable/deep.rb +95 -0
  45. data/lib/vex/base/enumerable/enumerable_ext.rb +59 -0
  46. data/lib/vex/base/enumerable/progress.rb +71 -0
  47. data/lib/vex/base/filesystem/fast_copy.rb +61 -0
  48. data/lib/vex/base/filesystem/grep.rb +34 -0
  49. data/lib/vex/base/filesystem/lock.rb +43 -0
  50. data/lib/vex/base/filesystem/lock.rb.test.lck +0 -0
  51. data/lib/vex/base/filesystem/lock.rb.test.pid +1 -0
  52. data/lib/vex/base/filesystem/make_dirs.rb +94 -0
  53. data/lib/vex/base/filesystem/parse_filename.rb +36 -0
  54. data/lib/vex/base/filesystem/tmp_file.rb +87 -0
  55. data/lib/vex/base/filesystem/write.rb +43 -0
  56. data/lib/vex/base/hash/compact.rb +38 -0
  57. data/lib/vex/base/hash/cross.rb +117 -0
  58. data/lib/vex/base/hash/easy_access.rb +141 -0
  59. data/lib/vex/base/hash/ensure_keys.rb +18 -0
  60. data/lib/vex/base/hash/extract.rb +71 -0
  61. data/lib/vex/base/hash/extras.rb +62 -0
  62. data/lib/vex/base/hash/inspect.rb +17 -0
  63. data/lib/vex/base/hash/simple_access_methods.rb +74 -0
  64. data/lib/vex/base/invalid_argument/invalid_argument.rb +97 -0
  65. data/lib/vex/base/local_conf.rb +35 -0
  66. data/lib/vex/base/net/http_ext.rb +227 -0
  67. data/lib/vex/base/net/socket_ext.rb +43 -0
  68. data/lib/vex/base/object/insp.rb +123 -0
  69. data/lib/vex/base/object/multiple_attributes.rb +58 -0
  70. data/lib/vex/base/object/singleton_methods.rb +23 -0
  71. data/lib/vex/base/object/with_benchmark.rb +110 -0
  72. data/lib/vex/base/range_array.rb +40 -0
  73. data/lib/vex/base/range_ext.rb +28 -0
  74. data/lib/vex/base/safe_token.rb +156 -0
  75. data/lib/vex/base/string/string_ext.rb +136 -0
  76. data/lib/vex/base/thread/deferred.rb +52 -0
  77. data/lib/vex/base/thread/sleep.rb +11 -0
  78. data/lib/vex/base/time/date_ext.rb +12 -0
  79. data/lib/vex/boot.rb +40 -0
  80. data/lib/vex/boot/array.rb +22 -0
  81. data/lib/vex/boot/blank.rb +41 -0
  82. data/lib/vex/boot/string.rb +60 -0
  83. data/migration/create_request_log.rb +28 -0
  84. data/r.rb +35 -0
  85. data/script/console +19 -0
  86. data/script/rebuild +7 -0
  87. data/tasks/echoe.rake +52 -0
  88. data/tasks/validate_db.rake +14 -0
  89. data/test/ar.rb +30 -0
  90. data/test/auto.rb +31 -0
  91. data/test/base-tests/local_conf.rb +25 -0
  92. data/test/base.rb +2 -0
  93. data/test/boot.rb +3 -0
  94. data/test/config/local.defaults.yml +4 -0
  95. data/test/config/local.yml +8 -0
  96. data/test/test.sqlite3 +0 -0
  97. data/test/test.sqlite3.Class#create.lck +0 -0
  98. data/test/test.sqlite3.Class#create.lck.lck +0 -0
  99. data/test/test.sqlite3.Class#create.lck.pid +1 -0
  100. data/test/test.sqlite3.Class#create.pid +1 -0
  101. data/test/test.sqlite3.LiteView.make.holders__view_dummy.lck +0 -0
  102. data/test/test.sqlite3.LiteView.make.holders__view_dummy.lck.lck +0 -0
  103. data/test/test.sqlite3.LiteView.make.holders__view_dummy.lck.pid +1 -0
  104. data/test/test.sqlite3.LiteView.make.holders__view_dummy.pid +1 -0
  105. data/test/test.sqlite3.vex.lck +0 -0
  106. data/test/test_helper.rb +49 -0
  107. data/test/tmp/copy.dat +1 -0
  108. data/test/tmp/lock.sqlite3 +0 -0
  109. data/test/tmp/lock.sqlite3.etest.lck +0 -0
  110. data/test/tmp/lock.sqlite3.etest.pid +1 -0
  111. data/test/tmp/somedata.dat +61 -0
  112. data/vex.gemspec +49 -0
  113. data/vex.tmproj +186 -0
  114. metadata +305 -0
data/Manifest ADDED
@@ -0,0 +1,112 @@
1
+ Manifest
2
+ Rakefile
3
+ VERSION
4
+ config/README
5
+ config/dependencies.rb
6
+ config/gem.yml
7
+ init.rb
8
+ lib/nokogiri/nokogiri_ext.rb
9
+ lib/vex.rb
10
+ lib/vex/action_controller.rb
11
+ lib/vex/action_controller/verify_action.rb
12
+ lib/vex/action_controller/whitelisted_actions.rb
13
+ lib/vex/active_record.rb
14
+ lib/vex/active_record/__init__.rb
15
+ lib/vex/active_record/advisory_lock.rb
16
+ lib/vex/active_record/advisory_lock/mysql_adapter.rb
17
+ lib/vex/active_record/advisory_lock/sqlite_adapter.rb
18
+ lib/vex/active_record/belongs_to_many.rb
19
+ lib/vex/active_record/find_by_extension.rb
20
+ lib/vex/active_record/gem.rb
21
+ lib/vex/active_record/lite_table.rb
22
+ lib/vex/active_record/lite_view.rb
23
+ lib/vex/active_record/mass_load.rb
24
+ lib/vex/active_record/mysql_backup.rb
25
+ lib/vex/active_record/plugins/default_value_for/LICENSE.TXT
26
+ lib/vex/active_record/plugins/default_value_for/README.rdoc
27
+ lib/vex/active_record/plugins/default_value_for/Rakefile
28
+ lib/vex/active_record/plugins/default_value_for/init.rb
29
+ lib/vex/active_record/plugins/default_value_for/test.rb
30
+ lib/vex/active_record/plugins/default_value_for/test.sqlite3
31
+ lib/vex/active_record/random_id.rb
32
+ lib/vex/active_record/resolver.rb
33
+ lib/vex/active_record/serialize_hash.rb
34
+ lib/vex/active_record/to_html.rb
35
+ lib/vex/active_record/validate.rb
36
+ lib/vex/active_record/validation_error_ext.rb
37
+ lib/vex/base.rb
38
+ lib/vex/base/app.rb
39
+ lib/vex/base/array/at_random.rb
40
+ lib/vex/base/array/cross.rb
41
+ lib/vex/base/array/each_batch.rb
42
+ lib/vex/base/array/parallel_map.rb
43
+ lib/vex/base/deprecation.rb
44
+ lib/vex/base/enumerable/deep.rb
45
+ lib/vex/base/enumerable/enumerable_ext.rb
46
+ lib/vex/base/enumerable/progress.rb
47
+ lib/vex/base/filesystem/fast_copy.rb
48
+ lib/vex/base/filesystem/grep.rb
49
+ lib/vex/base/filesystem/lock.rb
50
+ lib/vex/base/filesystem/lock.rb.test.lck
51
+ lib/vex/base/filesystem/lock.rb.test.pid
52
+ lib/vex/base/filesystem/make_dirs.rb
53
+ lib/vex/base/filesystem/parse_filename.rb
54
+ lib/vex/base/filesystem/tmp_file.rb
55
+ lib/vex/base/filesystem/write.rb
56
+ lib/vex/base/hash/compact.rb
57
+ lib/vex/base/hash/cross.rb
58
+ lib/vex/base/hash/easy_access.rb
59
+ lib/vex/base/hash/ensure_keys.rb
60
+ lib/vex/base/hash/extract.rb
61
+ lib/vex/base/hash/extras.rb
62
+ lib/vex/base/hash/inspect.rb
63
+ lib/vex/base/hash/simple_access_methods.rb
64
+ lib/vex/base/invalid_argument/invalid_argument.rb
65
+ lib/vex/base/local_conf.rb
66
+ lib/vex/base/net/http_ext.rb
67
+ lib/vex/base/net/socket_ext.rb
68
+ lib/vex/base/object/insp.rb
69
+ lib/vex/base/object/multiple_attributes.rb
70
+ lib/vex/base/object/singleton_methods.rb
71
+ lib/vex/base/object/with_benchmark.rb
72
+ lib/vex/base/range_array.rb
73
+ lib/vex/base/range_ext.rb
74
+ lib/vex/base/safe_token.rb
75
+ lib/vex/base/string/string_ext.rb
76
+ lib/vex/base/thread/deferred.rb
77
+ lib/vex/base/thread/sleep.rb
78
+ lib/vex/base/time/date_ext.rb
79
+ lib/vex/boot.rb
80
+ lib/vex/boot/array.rb
81
+ lib/vex/boot/blank.rb
82
+ lib/vex/boot/string.rb
83
+ migration/create_request_log.rb
84
+ r.rb
85
+ script/console
86
+ script/rebuild
87
+ tasks/echoe.rake
88
+ tasks/validate_db.rake
89
+ test/ar.rb
90
+ test/auto.rb
91
+ test/base-tests/local_conf.rb
92
+ test/base.rb
93
+ test/boot.rb
94
+ test/config/local.defaults.yml
95
+ test/config/local.yml
96
+ test/test.sqlite3
97
+ test/test.sqlite3.Class#create.lck
98
+ test/test.sqlite3.Class#create.lck.lck
99
+ test/test.sqlite3.Class#create.lck.pid
100
+ test/test.sqlite3.Class#create.pid
101
+ test/test.sqlite3.LiteView.make.holders__view_dummy.lck
102
+ test/test.sqlite3.LiteView.make.holders__view_dummy.lck.lck
103
+ test/test.sqlite3.LiteView.make.holders__view_dummy.lck.pid
104
+ test/test.sqlite3.LiteView.make.holders__view_dummy.pid
105
+ test/test.sqlite3.vex.lck
106
+ test/test_helper.rb
107
+ test/tmp/copy.dat
108
+ test/tmp/lock.sqlite3
109
+ test/tmp/lock.sqlite3.etest.lck
110
+ test/tmp/lock.sqlite3.etest.pid
111
+ test/tmp/somedata.dat
112
+ vex.tmproj
data/Rakefile ADDED
@@ -0,0 +1,53 @@
1
+ task :default => :"test:all"
2
+ task :test => :"test:all"
3
+ task :rcov => :"rcov:all"
4
+
5
+ namespace :test do
6
+ task :boot do
7
+ sh "ruby test/boot.rb"
8
+ end
9
+
10
+ task :base do
11
+ sh "ruby test/base.rb"
12
+ end
13
+
14
+ task :ar do
15
+ sh "ruby test/ar.rb"
16
+ end
17
+
18
+ task :auto do
19
+ sh "ruby test/auto.rb"
20
+ end
21
+
22
+ task :all => %w(boot base ar)
23
+ end
24
+
25
+ namespace :rcov do
26
+ task :boot do
27
+ sh "rcov -T -o coverage/boot -x ruby/.*/gems test/boot.rb"
28
+ end
29
+
30
+ task :base do
31
+ sh "rcov -T -o coverage/base -x /vex/boot/ -x ruby/.*/gems test/base.rb"
32
+ end
33
+
34
+ task :ar do
35
+ sh "rcov -T -o coverage/ar -x /vex/boot/ -x /plugins/ -x /vex/base/ -x ruby/.*/gems test/ar.rb"
36
+ end
37
+
38
+ task :all => %w(boot base)
39
+ end
40
+
41
+ task :rebuild => :test do
42
+ sh "rake -f tasks/echoe.rake rebuild"
43
+ end
44
+
45
+ task :manifest do
46
+ sh "rake -f tasks/echoe.rake manifest"
47
+ end
48
+
49
+ SKIP_ECHOE=true
50
+
51
+ Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each do |ext|
52
+ load ext
53
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.2
data/config/README ADDED
@@ -0,0 +1,2 @@
1
+ #
2
+ # Ruby files in this directory will be loaded during loading "vex/base"
@@ -0,0 +1,10 @@
1
+ #
2
+ # require all dependent gems
3
+ require 'nokogiri'
4
+ require 'openssl'
5
+
6
+ require 'etest'
7
+ require 'sanitize'
8
+ require 'htmlentities'
9
+ require 'json'
10
+
data/config/gem.yml ADDED
@@ -0,0 +1,7 @@
1
+ description: "Vex: some ruby extensions"
2
+ url: http://github.com/pboy/vex
3
+ author: pboy
4
+ email: eno-pboy@open-lab.org
5
+ ignore_pattern:
6
+ - "tmp/*"
7
+ - "**/.*"
data/init.rb ADDED
@@ -0,0 +1,36 @@
1
+ #
2
+ # The initializer for the gem. Runs whenever the gem is loaded.
3
+ #
4
+ # DON'T CHANGE THIS FILE, CHANGE config/gem.rb INSTEAD!
5
+ #
6
+
7
+ __END__
8
+
9
+ gem_root = File.expand_path(File.dirname(__FILE__))
10
+ gem_name = File.basename gem_root
11
+
12
+ require "rubygems"
13
+
14
+ load "#{gem_root}/config/gem.rb"
15
+ load "#{gem_root}/config/dependencies.rb"
16
+ load "#{gem_root}/lib/#{gem_name}.rb"
17
+
18
+ dirs = Dir.glob("#{gem_root}/lib/*").select do |dir|
19
+ File.directory?(dir)
20
+ end.sort_by do |dir|
21
+ dir.ends_with?("boot") ? "" : dir
22
+ end
23
+
24
+ dirs.each do |dir|
25
+ if File.exists?("#{dir}/__init__.rb")
26
+ load("#{dir}/__init__.rb")
27
+ else
28
+ Dir.glob("#{dir}/*.rb").sort.each do |file|
29
+ load file
30
+ end
31
+ end
32
+ end
33
+
34
+ Dir.glob("#{gem_root}/lib/*.rb").sort.each do |file|
35
+ load file
36
+ end
@@ -0,0 +1,96 @@
1
+ module NokogiriExt
2
+ def full_name
3
+ ns = namespace
4
+ ns ? "#{ns}:#{name}" : name
5
+ end
6
+
7
+ def transform(&block)
8
+ case r = yield(self)
9
+ when false
10
+ self.remove
11
+ when String
12
+ Nokogiri::HTML.fragment(r).children.each do |n|
13
+ add_previous_sibling n
14
+ end
15
+
16
+ self.remove
17
+ when Nokogiri::XML::Node
18
+ add_previous_sibling r
19
+ self.remove
20
+ else
21
+ children.each do |child| child.transform(&block) end
22
+ end
23
+ end
24
+
25
+ def remove_blanks
26
+ transform do |n|
27
+ n.name != "text" || !n.text.blank?
28
+ end
29
+ end
30
+ end
31
+
32
+ class Nokogiri::XML::Node
33
+ include NokogiriExt
34
+ end
35
+
36
+ class Nokogiri::XML::Document
37
+ private :transform
38
+ end
39
+
40
+ module NokogiriExt::Etest
41
+ SOURCE = <<-XML
42
+ <bb>
43
+ <i:xy></i:xy>
44
+ </bb>
45
+ XML
46
+
47
+ def assert_xml_equals(expected, actual)
48
+ expected = Nokogiri::XML(expected)
49
+
50
+ if expected == actual
51
+ assert true
52
+ return
53
+ end
54
+
55
+ expected = expected.remove_blanks
56
+ actual = actual.remove_blanks
57
+
58
+ if expected == actual
59
+ assert true
60
+ return
61
+ end
62
+
63
+ expected = expected.to_s.gsub(/<\?xml version=\"1.0\"\?>\n/, "")
64
+ actual = actual.to_s.gsub(/<\?xml version=\"1.0\"\?>\n/, "")
65
+
66
+ assert_equal expected, actual
67
+ end
68
+
69
+ def test_assertion
70
+ doc = Nokogiri::XML SOURCE
71
+ assert_xml_equals SOURCE, doc
72
+ end
73
+
74
+ def test_transform
75
+ doc = Nokogiri::XML SOURCE
76
+ doc.root.transform do |s| "<cc />" end
77
+ assert_xml_equals "<cc/>", doc
78
+
79
+ doc = Nokogiri::XML SOURCE
80
+ doc.root.transform do |s| s.name != "xy" end
81
+ assert_xml_equals "<bb/>", doc
82
+ end
83
+
84
+ def test_transform2
85
+ doc = Nokogiri::XML SOURCE
86
+ doc.root.transform do |s|
87
+ if s.name == "xy"
88
+ "<cc />"
89
+ elsif s.name == "text" && s.text.blank?
90
+ false
91
+ end
92
+ end
93
+
94
+ assert_xml_equals "<bb><cc/></bb>", doc
95
+ end
96
+ end
data/lib/vex.rb ADDED
@@ -0,0 +1,5 @@
1
+ require "#{File.dirname(__FILE__)}/vex/boot"
2
+ Vex.load_directory "base"
3
+
4
+ Vex.load_directory "active_record" if defined?(ActiveRecord)
5
+ Vex.load_directory "action_controller" if defined?(ActionController)
@@ -0,0 +1,4 @@
1
+ require "#{File.dirname(__FILE__)}/boot"
2
+ Vex.load_directory "base"
3
+ Vex.load_directory "action_controller"
4
+
@@ -0,0 +1,97 @@
1
+ # This module adds/modifies ActionController::Verification. It adds
2
+ #
3
+ # - adds verify? and verify, which verifies conditions on a per action
4
+ # base. On error the former returns false, while the latter raises
5
+ # an exception.
6
+ # - adds improved error messages
7
+ #
8
+ module ActionController::VerifyAction
9
+ class Error < ArgumentError; end
10
+
11
+ def self.fail(options, better_msg=nil)
12
+ msg = "Action verification failed: #{options.inspect}"
13
+ msg += " #{better_msg}" if better_msg
14
+
15
+ raise Error, "#{msg}."
16
+ end
17
+
18
+ private
19
+
20
+ def fail(*args)
21
+ ActionController::VerifyAction.fail(*args)
22
+ end
23
+
24
+ # Rails 2.3's verify_action method does NOT return a value. Instead it
25
+ # 'executes' the add_flash, add_headers, render, and/or redirect_to
26
+ # options. We raise an additional exception here for a failed verification,
27
+ # which is to be catched later on to return true or false.
28
+ #
29
+ def apply_remaining_actions(options) # :nodoc:
30
+ super
31
+ fail(options)
32
+ end
33
+
34
+ # Override Rails' verify_action
35
+ def verify_action(opts, catch_error = true)
36
+ begin
37
+ super(opts)
38
+ true
39
+ rescue Error
40
+ raise unless catch_error
41
+ false
42
+ end
43
+ end
44
+
45
+ def verify?(opts)
46
+ verify_action(opts, true)
47
+ end
48
+
49
+ def verify(opts)
50
+ verify_action(opts, false)
51
+ end
52
+
53
+ # -- Reimplements Rails' verifications to add better error messages
54
+
55
+ def verify_presence_of_keys_in_hash(options, entry, hash) # :nodoc:
56
+ return unless keys = options[entry]
57
+ missing = if keys.is_a?(Array)
58
+ keys.find { |v| hash[v].nil? }
59
+ elsif hash[keys].nil?
60
+ keys
61
+ end
62
+
63
+ return unless missing
64
+
65
+ fail(options, "Missing key #{missing.inspect} in #{entry}")
66
+ end
67
+
68
+ def verify_presence_of_keys_in_hash_flash_or_params(options) # :nodoc:
69
+ verify_presence_of_keys_in_hash(options, :params, params) ||
70
+ verify_presence_of_keys_in_hash(options, :session, session) ||
71
+ verify_presence_of_keys_in_hash(options, :flash, flash)
72
+ end
73
+
74
+ def verify_method(options) # :nodoc:
75
+ methods = options[:method]
76
+ return if methods.nil?
77
+
78
+ if methods.is_a?(Array)
79
+ return if methods.include?(request.method)
80
+ return if methods.include?(request.method.to_s)
81
+ else
82
+ return if request.method == methods.to_sym
83
+ end
84
+
85
+ fail(options, "Invalid request method #{request.method}")
86
+ end
87
+
88
+ def verify_request_xhr_status(options) # :nodoc:
89
+ return if options[:xhr].nil?
90
+ return if request.xhr? == options[:xhr]
91
+ fail(options, "Unsupported XHR state #{request.xhr?}")
92
+ end
93
+ end
94
+
95
+ class ActionController::Base
96
+ include VerifyAction
97
+ end
@@ -0,0 +1,45 @@
1
+ class ActionController::Base
2
+ def self.whitelist_actions(*names)
3
+ extend WhitelistActions
4
+ include WhitelistControllerActions
5
+
6
+ before_filter :verify_whitelisted_actions
7
+
8
+ actions *names
9
+ end
10
+
11
+ module WhitelistControllerActions
12
+ def verify_whitelisted_actions
13
+ return if self.class.name.starts_with?("Clearance::")
14
+
15
+ valid_actions = self.class.whitelisted_actions
16
+ return if valid_actions == :skip || valid_actions.include?(action_name)
17
+
18
+ unless Rails.env.development?
19
+ error 404, "This page doesn't exist"
20
+ return
21
+ end
22
+
23
+ error 404, <<-TEXT
24
+ No such action exists: #{controller_name}##{action_name}.
25
+ Note: this application uses the whitelisted_actions plugin,
26
+ you might have to use the 'actions' method to whitelist your actions.
27
+ TEXT
28
+ end
29
+ end
30
+
31
+ module WhitelistActions
32
+ def whitelisted_actions
33
+ @whitelisted_actions ||
34
+ (superclass.respond_to?(:whitelisted_actions) ? superclass.whitelisted_actions : nil)
35
+ end
36
+
37
+ def skip_whitelist_actions
38
+ @whitelisted_actions = :skip
39
+ end
40
+
41
+ def actions(*names)
42
+ @whitelisted_actions = names.map(&:to_s).to_set
43
+ end
44
+ end
45
+ end