private_please 0.0.5 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
- }