diff --git a/lib/rake/private_reader.rb b/lib/rake/private_reader.rb new file mode 100644 index 000000000..162097857 --- /dev/null +++ b/lib/rake/private_reader.rb @@ -0,0 +1,20 @@ +module Rake + + # Include PrivateReader to use +private_reader+. + module PrivateReader # :nodoc: all + + def self.included(base) + base.extend(ClassMethods) + end + + module ClassMethods + + # Declare a list of private accessors + def private_reader(*names) + attr_reader(*names) + private(*names) + end + end + + end +end diff --git a/lib/rake/thread_history_display.rb b/lib/rake/thread_history_display.rb index facc1bebc..9566a6cd4 100644 --- a/lib/rake/thread_history_display.rb +++ b/lib/rake/thread_history_display.rb @@ -1,8 +1,11 @@ +require 'rake/private_reader' + module Rake class ThreadHistoryDisplay # :nodoc: all - attr_reader :stats, :items, :threads - private :stats, :items, :threads + include Rake::PrivateReader + + private_reader :stats, :items, :threads def initialize(stats) @stats = stats diff --git a/test/test_private_reader.rb b/test/test_private_reader.rb new file mode 100644 index 000000000..f86d4249b --- /dev/null +++ b/test/test_private_reader.rb @@ -0,0 +1,42 @@ +require File.expand_path('../helper', __FILE__) +require 'rake/private_reader' + +class TestPrivateAttrs < Rake::TestCase + + class Sample + include Rake::PrivateReader + + private_reader :reader, :a + + def initialize + @reader = :RVALUE + end + + def get_reader + reader + end + + end + + def setup + super + @sample = Sample.new + end + + def test_private_reader_is_private + assert_private do @sample.reader end + assert_private do @sample.a end + end + + def test_private_reader_returns_data + assert_equal :RVALUE, @sample.get_reader + end + + private + + def assert_private + ex = assert_raises(NoMethodError) do yield end + assert_match(/private/, ex.message) + end + +end