private_please 0.0.5 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. checksums.yaml +7 -0
  2. data/.ruby-version +1 -1
  3. data/.travis.yml +3 -5
  4. data/CHANGELOG +4 -0
  5. data/Gemfile +2 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +58 -98
  8. data/Rakefile +6 -2
  9. data/bin/console +14 -0
  10. data/bin/setup +8 -0
  11. data/lib/private_please/config.rb +15 -0
  12. data/lib/private_please/methods_calls_tracker.rb +44 -0
  13. data/lib/private_please/reporting/simple_text.rb +43 -0
  14. data/lib/private_please/reporting/templates/simple.txt.erb +11 -0
  15. data/lib/private_please/storage/called_methods_memory_store.rb +20 -0
  16. data/lib/private_please/tracking/debug/trace_point_data_logger.rb +81 -0
  17. data/lib/private_please/tracking/method_details.rb +27 -0
  18. data/lib/private_please/tracking/result.rb +25 -0
  19. data/lib/private_please/tracking/trace_point_details.rb +41 -0
  20. data/lib/private_please/tracking/trace_point_processor.rb +71 -0
  21. data/lib/private_please/utils/ruby_utils.rb +44 -0
  22. data/lib/private_please/utils/source_file_utils.rb +20 -0
  23. data/lib/private_please/utils/two_level_stack.rb +13 -0
  24. data/lib/private_please/version.rb +2 -1
  25. data/lib/private_please.rb +27 -34
  26. data/private_please.gemspec +32 -25
  27. metadata +106 -185
  28. data/Guardfile +0 -8
  29. data/LICENSE +0 -22
  30. data/TODO +0 -20
  31. data/bin/pp_ruby +0 -62
  32. data/bin/ruby_pp +0 -62
  33. data/doc/dev_notes.txt +0 -32
  34. data/doc/fixtures/complex.rb +0 -103
  35. data/doc/fixtures/empty_class.rb +0 -7
  36. data/doc/fixtures/fixture_helper.rb +0 -8
  37. data/doc/fixtures/sample.rb +0 -57
  38. data/lib/private_please/candidate.rb +0 -49
  39. data/lib/private_please/report/table.rb +0 -44
  40. data/lib/private_please/report.rb +0 -6
  41. data/lib/private_please/reporter/base.rb +0 -14
  42. data/lib/private_please/reporter/data_compiler.rb +0 -82
  43. data/lib/private_please/reporter/helpers/options_helpers.rb +0 -37
  44. data/lib/private_please/reporter/helpers/text_table_helpers.rb +0 -9
  45. data/lib/private_please/reporter/simple_text.rb +0 -18
  46. data/lib/private_please/reporter/templates/simple.txt.erb +0 -80
  47. data/lib/private_please/reporter.rb +0 -8
  48. data/lib/private_please/ruby_backports.rb +0 -22
  49. data/lib/private_please/storage/calls_store.rb +0 -41
  50. data/lib/private_please/storage/candidates_store.rb +0 -52
  51. data/lib/private_please/storage/methods_names.rb +0 -10
  52. data/lib/private_please/storage/methods_names_bucket.rb +0 -69
  53. data/lib/private_please/storage.rb +0 -8
  54. data/lib/private_please/tracking/extension.rb +0 -12
  55. data/lib/private_please/tracking/instrumentor.rb +0 -49
  56. data/lib/private_please/tracking/instruments_all_methods_below.rb +0 -28
  57. data/lib/private_please/tracking/instruments_automatically_all_methods_in_all_classes.rb +0 -68
  58. data/lib/private_please/tracking/line_change_tracker.rb +0 -26
  59. data/lib/private_please/tracking/load_utils/gem_utils.rb +0 -49
  60. data/lib/private_please/tracking/load_utils/standard_lib_utils.rb +0 -38
  61. data/lib/private_please/tracking/load_utils.rb +0 -32
  62. data/lib/private_please/tracking/utils.rb +0 -34
  63. data/lib/private_please/tracking.rb +0 -49
  64. data/sample.rb +0 -68
  65. data/spec/01_tracking_candidate_methods/excluding_gems_and_standard_libraries_spec.rb +0 -31
  66. data/spec/01_tracking_candidate_methods/explicitely_with_the_private_please_command_spec.rb +0 -118
  67. data/spec/01_tracking_candidate_methods/load_utils_spec.rb +0 -40
  68. data/spec/01_tracking_candidate_methods/systematically_in_auto_mode_spec.rb +0 -185
  69. data/spec/03_logging_calls_on_candidate_methods_spec.rb +0 -37
  70. data/spec/04_instrumented_program_activity_observation_result_spec.rb +0 -86
  71. data/spec/05_reporting/report_table_spec.rb +0 -51
  72. data/spec/06_at_exit_spec.rb +0 -18
  73. data/spec/_helpers/assert_helpers.rb +0 -76
  74. data/spec/fixtures/bug_22.rb +0 -17
  75. data/spec/fixtures/bug_30.rb +0 -6
  76. data/spec/fixtures/issue_25.rb +0 -12
  77. data/spec/fixtures/sample_class_for_report.rb +0 -56
  78. data/spec/fixtures/sample_class_with_all_calls_combinations.rb +0 -69
  79. data/spec/sandbox/Gemfile +0 -4
  80. data/spec/sandbox/Gemfile.lock +0 -14
  81. data/spec/sandbox/README.txt +0 -26
  82. data/spec/sandbox/normal.rb +0 -7
  83. data/spec/sandbox/normal_prepended_with_require.rb +0 -8
  84. data/spec/spec_helper.rb +0 -38
  85. data/spec/units/calls_store_spec.rb +0 -15
  86. data/spec/units/candidates_store_spec.rb +0 -55
  87. data/spec/units/reporter/data_compiler_spec.rb +0 -12
  88. data/spec/units/reporter/fixtures/simple_case_1.rb +0 -30
  89. data/spec/units/reporter/fixtures/simple_case_2.rb +0 -55
@@ -1,7 +0,0 @@
1
- puts 'opened: ' + __FILE__
2
-
3
- class Foo
4
- def self.entry_point; new.entry_point end
5
- def entry_point; end
6
- end
7
- Foo.entry_point
@@ -1,8 +0,0 @@
1
- puts 'opened: ' + __FILE__
2
-
3
- require 'private_please'
4
- class Foo
5
- def self.entry_point; foo ; end
6
- def self.foo; end
7
- end
8
- Foo.entry_point
data/spec/spec_helper.rb DELETED
@@ -1,38 +0,0 @@
1
- # This file was (originally) generated by the `rspec --init` command. Conventionally, all
2
- # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
- # Require this file using `require "spec_helper"` to ensure that it is only
4
- # loaded once.
5
- #
6
- # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
-
8
- module PrivatePlease
9
- def self.reset_before_new_test
10
- PrivatePlease .reset_before_new_test
11
- end
12
- end
13
-
14
- RSpec.configure do |config|
15
- config.treat_symbols_as_metadata_keys_with_true_values = true
16
- config.run_all_when_everything_filtered = true
17
- config.filter_run :focus
18
-
19
- # Run specs in random order to surface order dependencies. If you find an
20
- # order dependency and want to debug it, you can fix the order by providing
21
- # the seed, which is printed after each run.
22
- # --seed 1234
23
- config.order = 'random'
24
-
25
- config.before(:each) do
26
- PrivatePlease.reset
27
- PrivatePlease.pp_automatic_mode_disable
28
- end
29
- end
30
-
31
- require '_helpers/assert_helpers'
32
-
33
- #--------------------------------------------------------
34
-
35
- require File.dirname(__FILE__) + '/../lib/private_please'
36
- PrivatePlease.pp_automatic_mode_disable
37
-
38
- $private_please_tests_are_running = true
@@ -1,15 +0,0 @@
1
- require 'spec_helper'
2
-
3
-
4
- describe PrivatePlease::Storage::CallsStore do
5
-
6
- let(:calls_store ) { PrivatePlease::Storage::CallsStore.new }
7
-
8
- context 'when fresh' do
9
- it 'is empty (has no calls)' do
10
- calls_store.internal_calls .should be_empty
11
- calls_store.external_calls .should be_empty
12
- end
13
- end
14
-
15
- end
@@ -1,55 +0,0 @@
1
- require 'spec_helper'
2
-
3
-
4
- describe PrivatePlease::Storage::CandidatesStore do
5
-
6
- let(:candidates_store) { PrivatePlease::Storage::CandidatesStore.new }
7
-
8
- # instance methods
9
- let(:object_to_s) {PrivatePlease::Candidate.for_instance_method(Object, 'to_s' )}
10
- let(:object_hash) {PrivatePlease::Candidate.for_instance_method(Object, 'hash' )}
11
- # class methods
12
- let(:object_new ) {PrivatePlease::Candidate.for_class_method(Object, 'new' )}
13
-
14
- context 'when fresh' do
15
- it 'is empty (has no candidates)' do
16
- candidates_store .should be_empty
17
- candidates_store.instance_methods.should be_empty
18
- candidates_store.class_methods .should be_empty
19
- end
20
- end
21
-
22
- example 'storing the 1st instance method candidate stores it so that it can be retrieved' do
23
- candidates_store.store(object_to_s)
24
-
25
- candidates_store.stored?(object_to_s).should be_true
26
- candidates_store.instance_methods.should == {'Object' => mnames_for('to_s')}
27
- candidates_store.class_methods .should be_empty
28
- end
29
-
30
- example 'storing the 1st class method candidate stores it so that it can be retrieved' do
31
- candidates_store.store(object_new)
32
-
33
- candidates_store.stored?(object_new).should be_true
34
- candidates_store.instance_methods.should be_empty
35
- candidates_store.class_methods .should == {'Object' => mnames_for('new')}
36
- end
37
-
38
- example 'storing the 2nd instance method candidate stores it so that it can be retrieved' do
39
- candidates_store.store(object_to_s)
40
- candidates_store.store(object_hash)
41
-
42
- candidates_store.stored?(object_hash).should be_true
43
- candidates_store.instance_methods.should == {'Object' => mnames_for(%w(hash to_s))}
44
- candidates_store.class_methods .should be_empty
45
- end
46
-
47
- example 'storing avoids duplication' do
48
- candidates_store.store(object_to_s)
49
- candidates_store.store(object_to_s) # duplication : ignore it
50
-
51
- candidates_store.instance_methods.should == {'Object' => mnames_for(%w(to_s))}
52
- candidates_store.class_methods .should be_empty
53
- end
54
-
55
- end
@@ -1,12 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe PrivatePlease::Reporter::DataCompiler do
4
-
5
- context 'report generation for different scenarios' do
6
- after { $expected_results = nil }
7
-
8
- example('simple_case_1') { assert_report_data_matches(run_and_inspect("simple_case_1.rb", __FILE__)) }
9
- example('simple_case_2') { assert_report_data_matches(run_and_inspect("simple_case_2.rb", __FILE__)) }
10
- end
11
-
12
- end
@@ -1,30 +0,0 @@
1
- #---------
2
- # Setup
3
- #---------
4
-
5
- class SimpleCase1
6
- def entry_point; baz ; end
7
- def baz ; end
8
- def never; end
9
- def self.c_entry_point; c_baz ; end
10
- def self.c_baz ; end
11
- def self.c_never; end
12
- end
13
- SimpleCase1.new.entry_point
14
- SimpleCase1.c_entry_point
15
-
16
- #------------------
17
- # Expected results
18
- #------------------
19
-
20
- $expected_results = {
21
- :candidates_classes_names => ['SimpleCase1'],
22
-
23
- :good_candidates => {'SimpleCase1' => mnames_for([:baz]) },
24
- :bad_candidates => {'SimpleCase1' => mnames_for([:entry_point]) },
25
- :never_called_candidates => {'SimpleCase1' => mnames_for([:never]) },
26
-
27
- :good_candidates_c => {'SimpleCase1' => mnames_for([:c_baz]) },
28
- :bad_candidates_c => {'SimpleCase1' => mnames_for([:c_entry_point])},
29
- :never_called_candidates_c => {'SimpleCase1' => mnames_for([:c_never]) }
30
- }
@@ -1,55 +0,0 @@
1
- #---------
2
- # Scenario
3
- #---------
4
- # - additional internal calls are made to bad candidates (**1 )
5
- # - an empty class is defined (**2 )
6
- # - an ignored class is defined (**3 )
7
-
8
- class SimpleCase2
9
- def initialize
10
- entry_point # **1
11
- end
12
-
13
- def entry_point
14
- baz
15
- self.class.c_entry_point # **1
16
- end
17
- def baz ; end
18
- def never; end
19
- def self.c_entry_point
20
- c_baz
21
- end
22
- def self.c_baz ; end
23
- def self.c_never; end
24
- end
25
- SimpleCase2.new.entry_point
26
- SimpleCase2.c_entry_point
27
-
28
-
29
- class SimpleCase2
30
- class Empty # **2
31
- end
32
- class NotEmptyButNeverCalled # **3
33
- def initialize ; neverr ; end
34
- def neverr ; end
35
- end
36
- end
37
-
38
- #------------------
39
- # Expected results
40
- #------------------
41
-
42
- $expected_results = {
43
- :candidates_classes_names => ['SimpleCase2',
44
- 'SimpleCase2::NotEmptyButNeverCalled' # will produce a (hidden) empty 3-section block
45
- ], # TODO : filter it out in the DataCompiler
46
-
47
- :good_candidates => {'SimpleCase2' => mnames_for([:baz]) },
48
- :bad_candidates => {'SimpleCase2' => mnames_for([:entry_point]) },
49
- :never_called_candidates => {'SimpleCase2' => mnames_for([:never]),
50
- 'SimpleCase2::NotEmptyButNeverCalled' => mnames_for([:neverr])
51
- },
52
- :good_candidates_c => {'SimpleCase2' => mnames_for([:c_baz]) },
53
- :bad_candidates_c => {'SimpleCase2' => mnames_for([:c_entry_point])},
54
- :never_called_candidates_c => {'SimpleCase2' => mnames_for([:c_never]) }
55
- }