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
@@ -0,0 +1,27 @@
1
+ require 'private_please/utils/ruby_utils'
2
+ require 'private_please/utils/source_file_utils'
3
+
4
+ module PrivatePlease
5
+ module Tracking
6
+ class MethodDetails < Struct.new(:klass, :separator, :method, :source_path, :lineno)
7
+ METHOD_AS_KEY_PATTERN = /(?<klass>.*)
8
+ (?<separator>[#.])
9
+ (?<method>.*)
10
+ /x
11
+
12
+ def self.from_class_plus_method(class_plus_method)
13
+ md = class_plus_method.match(METHOD_AS_KEY_PATTERN)
14
+ klass = Object.const_get(md[:klass])
15
+ separator = md[:separator]
16
+ method = md[:method].to_sym
17
+ source_path, lineno = Utils::SourceFileUtils.source_path_and_lineno(klass, separator, method)
18
+
19
+ new(klass, separator, method, source_path, lineno)
20
+ end
21
+
22
+ def separator_plus_method
23
+ "#{separator}#{method}"
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,25 @@
1
+ require 'private_please/tracking/method_details'
2
+
3
+ module PrivatePlease
4
+ module Tracking
5
+ class Result
6
+ def initialize(encountered_method_calls)
7
+ @private_calls = encountered_method_calls.private_calls
8
+ @public_calls = encountered_method_calls.public_calls
9
+ end
10
+
11
+ def public_methods_only_called_privately
12
+ @private_calls - @public_calls
13
+ end
14
+
15
+ def to_two_level_hash
16
+ two_level_hash = Hash.new { |h, k| h[k] = {} }
17
+ public_methods_only_called_privately.each do |class_plus_method|
18
+ md = MethodDetails.from_class_plus_method(class_plus_method)
19
+ two_level_hash[md.klass][md.separator_plus_method] = [md.source_path, md.lineno]
20
+ end
21
+ two_level_hash.delete_if { |_k, v| v.empty? }
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,41 @@
1
+ module PrivatePlease
2
+ module Tracking
3
+ class TracePointDetails < Struct.new(:event, :object_id, :path, :lineno, :defined_class, :method_id, :_self)
4
+ def self.from(tp)
5
+ new(tp.event, tp.self.object_id, tp.path, tp.lineno, tp.defined_class, tp.method_id, tp.self)
6
+ end
7
+
8
+ def same_object?(other)
9
+ object_id == other.object_id
10
+ end
11
+
12
+ def code
13
+ @_code ||= File.readlines(path)[lineno - 1].chomp
14
+ end
15
+
16
+ # Combine the class and method name with the proper separator
17
+ # Examples:
18
+ # Array#new
19
+ # Array.size
20
+ def method_full_name
21
+ if module_method?
22
+ instance_method = defined_class.instance_methods.include?(method_id)
23
+ instance_method ?
24
+ "#{defined_class}##{method_id}" :
25
+ "#{defined_class}.#{method_id}"
26
+ else
27
+ instance_method = !(_self.class == Class)
28
+ instance_method ?
29
+ "#{defined_class}##{method_id}" :
30
+ "#{_self}.#{method_id}"
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ def module_method?
37
+ defined_class.instance_of?(Module)
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,71 @@
1
+ require 'private_please/config'
2
+ require 'private_please/storage/called_methods_memory_store'
3
+ require 'private_please/tracking/debug/trace_point_data_logger'
4
+ require 'private_please/tracking/result'
5
+ require 'private_please/tracking/trace_point_details'
6
+ require 'private_please/utils/two_level_stack'
7
+
8
+ module PrivatePlease
9
+ module Tracking
10
+ class TracePointProcessor
11
+ def initialize(config)
12
+ @config = config
13
+
14
+ @latest_tracepoints = Utils::TwoLevelStack.new
15
+ @encountered_method_calls = Storage::CalledMethodsMemoryStore.new
16
+ end
17
+
18
+ def process(tp)
19
+ return if untracked_code?(tp.path)
20
+ remember_trace_point tp
21
+ store_method_call_details if tp.event == :call
22
+ end
23
+
24
+ def result
25
+ Result.new(@encountered_method_calls)
26
+ end
27
+
28
+ private
29
+
30
+ def remember_trace_point(tp)
31
+ @latest_tracepoints.push TracePointDetails.from(tp)
32
+ # Debug.log_to_trace_file tpd if Debug.enabled?
33
+ end
34
+
35
+ def untracked_code?(path)
36
+ path.start_with?(*untracked_source_dirs)
37
+ end
38
+
39
+ def untracked_source_dirs
40
+ @_untracked_source_dirs ||= begin
41
+ Utils::RubyUtils.gems_paths +
42
+ Array(Utils::RubyUtils.std_lib_home) +
43
+ @config.additional_excluded_dirs
44
+ end
45
+ end
46
+
47
+ def tp_curr; @latest_tracepoints.curr end
48
+ def tp_prev; @latest_tracepoints.prev end
49
+
50
+ def store_method_call_details
51
+ key = tp_curr.method_full_name
52
+ if private_call?
53
+ @encountered_method_calls.add_private_call(key) unless already_private?
54
+ else
55
+ @encountered_method_calls.add_public_call(key)
56
+ end
57
+ end
58
+
59
+ def private_call?
60
+ curr_event, prev_event = tp_curr.event, tp_prev.event
61
+ (curr_event == :call) &&
62
+ [:line, :return, :c_return].include?(prev_event) &&
63
+ tp_curr.same_object?(tp_prev)
64
+ end
65
+
66
+ def already_private?
67
+ tp_curr._self.private_methods.include?(tp_curr.method_id)
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,44 @@
1
+ require 'yaml'
2
+
3
+ module PrivatePlease
4
+ module Utils
5
+ module RubyUtils
6
+ module_function
7
+
8
+ def gem_env
9
+ @_gem_env ||= begin
10
+ `gem env`
11
+ end
12
+ end
13
+
14
+ # Ex: "/Users/ara/.rbenv/versions/jruby-1.7.3/lib/ruby/1.9"
15
+ def std_lib_home
16
+ @_std_lib_home ||= begin
17
+ basedir = ruby_executable_path.gsub(/bin\/[j]?ruby/, 'lib/ruby')
18
+ # => "/Users/ara/.rbenv/versions/jruby-1.7.3/lib/ruby"
19
+ # jruby has 2+ directories of std. libs under the basedir : 1.8 and 1.9
20
+ $LOAD_PATH.detect do |path| # We choose the one that is also in the load path.
21
+ path =~ /#{basedir}\/[12][^\/]+$/ #
22
+ end # ^^^^^^^^^^ # => "/Users/ara/.rbenv/versions/jruby-1.7.3/lib/ruby/1.9"
23
+ end # ^^^ == the mode
24
+ end
25
+
26
+ # - GEM PATHS:
27
+ # - /Users/alain/.rvm/gems/ruby-2.3.0
28
+ # - /Users/alain/.rvm/gems/ruby-2.3.0@global
29
+
30
+ def gems_paths
31
+ @_gems_paths ||= YAML.load(gem_env)['RubyGems Environment'].detect do |hash|
32
+ hash['GEM PATHS']
33
+ end['GEM PATHS']
34
+ end
35
+
36
+ # Ex: "/Users/ara/.rbenv/versions/jruby-1.7.3/bin/jruby"
37
+ def ruby_executable_path
38
+ @_ruby_executable_path ||= gem_env.match(/RUBY EXECUTABLE:\s*(.*)/)[1]
39
+ end
40
+
41
+ private_class_method :ruby_executable_path
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,20 @@
1
+ module PrivatePlease
2
+ module Utils
3
+ module SourceFileUtils
4
+ module_function
5
+
6
+ def source_path_and_lineno(klass, separator, method)
7
+ is_instance_method = separator == '#'
8
+ if klass.instance_of?(Module)
9
+ is_instance_method ?
10
+ klass.instance_method(method).source_location :
11
+ klass.singleton_method(method).source_location
12
+ else
13
+ is_instance_method ?
14
+ klass.instance_method(method).source_location :
15
+ klass.method(method).source_location
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,13 @@
1
+ module PrivatePlease
2
+ module Utils
3
+ class TwoLevelStack
4
+ def push(value)
5
+ @cell_2 = @cell_1
6
+ @cell_1 = value
7
+ end
8
+
9
+ def curr; @cell_1 end
10
+ def prev; @cell_2 end
11
+ end
12
+ end
13
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module PrivatePlease
2
- VERSION = "0.0.5"
3
+ VERSION = '0.1.0'.freeze
3
4
  end
@@ -1,51 +1,44 @@
1
1
  require 'private_please/version'
2
- require 'private_please/ruby_backports'
3
- require 'private_please/candidate'
4
- require 'private_please/storage'
5
- require 'private_please/report'
6
- require 'private_please/reporter'
7
-
8
- at_exit do
9
- PrivatePlease.at_exit
10
- end
2
+ require 'private_please/methods_calls_tracker'
3
+ require 'private_please/reporting/simple_text'
11
4
 
12
5
  module PrivatePlease
6
+ def self.instance
7
+ MethodsCallsTracker.instance
8
+ end
13
9
 
14
- def self.install
15
- Module.send :include, PrivatePlease::Tracking::Extension
16
- PrivatePlease.pp_automatic_mode_enable
17
- set_trace_func PrivatePlease::Tracking::LineChangeTracker::MY_TRACE_FUN
10
+ def self.reset
11
+ MethodsCallsTracker.reset
18
12
  end
19
13
 
20
- def self.pp_automatic_mode_enabled? ; !!$pp_automatic_mode_enabled end
21
- def self.pp_automatic_mode_enable(value=true)
22
- $pp_automatic_mode_enabled = value
14
+ def self.report
15
+ Reporting::SimpleText.new(instance.result).text
23
16
  end
24
- def self.pp_automatic_mode_disable ; $pp_automatic_mode_enabled = false end
25
17
 
26
- # TODO : replace class methods by PP instance + instance methods
27
- def self.calls_store
28
- @@_calls_store ||= Storage::CallsStore.new
18
+ def self.config
19
+ instance.config
29
20
  end
30
21
 
31
- def self.candidates_store
32
- @@_candidates_store ||= Storage::CandidatesStore.new
22
+ def self.track(reset: true, &block)
23
+ reset if reset
24
+ start_tracking
25
+ block.call
26
+ stop_tracking
33
27
  end
34
28
 
35
- def self.reset
36
- @@_candidates_store = @@_calls_store = nil
37
- Tracking::LineChangeTracker.reset
38
- set_trace_func nil
29
+ def self.start_tracking
30
+ instance.start_tracking
39
31
  end
40
32
 
41
- def self.at_exit
42
- report = PrivatePlease::Reporter::SimpleText.new(PrivatePlease.candidates_store, PrivatePlease.calls_store)
43
- unless $private_please_tests_are_running
44
- $stdout.puts report.text
45
- end
33
+ def self.stop_tracking
34
+ instance.stop_tracking
46
35
  end
47
- end
48
36
 
49
- require 'private_please/tracking'
37
+ def self.exclude_dir(val)
38
+ config.exclude_dir val
39
+ end
50
40
 
51
- PrivatePlease.install
41
+ def self.privatazable_methods
42
+ instance.result.to_two_level_hash
43
+ end
44
+ end
@@ -1,28 +1,35 @@
1
- # -*- encoding: utf-8 -*-
2
- if RUBY_VERSION == '1.8.7'
3
- # avoid double-require of version.rb - see http://bit.ly/18lspBV
4
- $:.unshift File.expand_path("../lib", __FILE__)
5
- require "private_please/version"
6
- else
7
- require File.expand_path('../lib/private_please/version', __FILE__)
8
- end
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'private_please/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'private_please'
8
+ spec.version = PrivatePlease::VERSION
9
+ spec.authors = ['Alain Ravet']
10
+ spec.email = ['alainravet@gmail.com']
9
11
 
10
- Gem::Specification.new do |gem|
11
- gem.authors = ["Alain Ravet"]
12
- gem.email = ["alainravet@gmail.com"]
13
- gem.description = %q{Test if methods can be made private}
14
- gem.summary = %q{Test if methods can be made private}
15
- gem.homepage = "https://github.com/alainravet/private_please"
12
+ spec.summary = 'Identify dynamically methods that can be made private.'
13
+ spec.description = 'Identify dynamically methods that can be made private.'
14
+ spec.homepage = 'https://github.com/alainravet/private_please'
15
+ spec.license = 'MIT'
16
16
 
17
- gem.files = `git ls-files`.split($\)
18
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
19
- gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
20
- gem.name = "private_please"
21
- gem.require_paths = ["lib"]
22
- gem.version = PrivatePlease::VERSION
17
+ # # Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
18
+ # # delete this section to allow pushing this gem to any host.
19
+ # if spec.respond_to?(:metadata)
20
+ # spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
21
+ # else
22
+ # fail 'RubyGems 2.0 or newer is required to protect against public gem pushes.'
23
+ # end
23
24
 
24
- gem.add_development_dependency 'rake' # to run 'All specs' in Rubymine
25
- gem.add_development_dependency 'rspec'
26
- gem.add_development_dependency 'guard-rspec'
27
- gem.add_development_dependency 'rb-fsevent'
28
- end
25
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec)/}) }
26
+ spec.bindir = 'exe'
27
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
+ spec.require_paths = ['lib']
29
+
30
+ spec.add_development_dependency 'bundler', '~> 1.11'
31
+ spec.add_development_dependency 'rake', '~> 10.0'
32
+ spec.add_development_dependency 'rspec', '~> 3.0'
33
+ spec.add_development_dependency 'coderay'
34
+ spec.add_development_dependency 'sinatra'
35
+ end
metadata CHANGED
@@ -1,220 +1,141 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: private_please
3
- version: !ruby/object:Gem::Version
4
- hash: 21
5
- prerelease:
6
- segments:
7
- - 0
8
- - 0
9
- - 5
10
- version: 0.0.5
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Alain Ravet
14
8
  autorequire:
15
- bindir: bin
9
+ bindir: exe
16
10
  cert_chain: []
17
-
18
- date: 2013-05-06 00:00:00 +02:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
22
- name: rake
11
+ date: 2016-02-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.11'
20
+ type: :development
23
21
  prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 3
30
- segments:
31
- - 0
32
- version: "0"
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.11'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
33
34
  type: :development
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
36
42
  name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
37
49
  prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: coderay
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
41
59
  - - ">="
42
- - !ruby/object:Gem::Version
43
- hash: 3
44
- segments:
45
- - 0
46
- version: "0"
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
47
62
  type: :development
48
- version_requirements: *id002
49
- - !ruby/object:Gem::Dependency
50
- name: guard-rspec
51
63
  prerelease: false
52
- requirement: &id003 !ruby/object:Gem::Requirement
53
- none: false
54
- requirements:
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
55
66
  - - ">="
56
- - !ruby/object:Gem::Version
57
- hash: 3
58
- segments:
59
- - 0
60
- version: "0"
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: sinatra
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
61
76
  type: :development
62
- version_requirements: *id003
63
- - !ruby/object:Gem::Dependency
64
- name: rb-fsevent
65
77
  prerelease: false
66
- requirement: &id004 !ruby/object:Gem::Requirement
67
- none: false
68
- requirements:
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
69
80
  - - ">="
70
- - !ruby/object:Gem::Version
71
- hash: 3
72
- segments:
73
- - 0
74
- version: "0"
75
- type: :development
76
- version_requirements: *id004
77
- description: Test if methods can be made private
78
- email:
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: Identify dynamically methods that can be made private.
84
+ email:
79
85
  - alainravet@gmail.com
80
- executables:
81
- - pp_ruby
82
- - ruby_pp
86
+ executables: []
83
87
  extensions: []
84
-
85
88
  extra_rdoc_files: []
86
-
87
- files:
88
- - .gitignore
89
- - .rspec
90
- - .ruby-version
91
- - .travis.yml
89
+ files:
90
+ - ".gitignore"
91
+ - ".rspec"
92
+ - ".ruby-version"
93
+ - ".travis.yml"
92
94
  - CHANGELOG
93
95
  - Gemfile
94
- - Guardfile
95
- - LICENSE
96
+ - LICENSE.txt
96
97
  - README.md
97
98
  - Rakefile
98
- - TODO
99
- - bin/pp_ruby
100
- - bin/ruby_pp
101
- - doc/dev_notes.txt
102
- - doc/fixtures/complex.rb
103
- - doc/fixtures/empty_class.rb
104
- - doc/fixtures/fixture_helper.rb
105
- - doc/fixtures/sample.rb
99
+ - bin/console
100
+ - bin/setup
106
101
  - lib/private_please.rb
107
- - lib/private_please/candidate.rb
108
- - lib/private_please/report.rb
109
- - lib/private_please/report/table.rb
110
- - lib/private_please/reporter.rb
111
- - lib/private_please/reporter/base.rb
112
- - lib/private_please/reporter/data_compiler.rb
113
- - lib/private_please/reporter/helpers/options_helpers.rb
114
- - lib/private_please/reporter/helpers/text_table_helpers.rb
115
- - lib/private_please/reporter/simple_text.rb
116
- - lib/private_please/reporter/templates/simple.txt.erb
117
- - lib/private_please/ruby_backports.rb
118
- - lib/private_please/storage.rb
119
- - lib/private_please/storage/calls_store.rb
120
- - lib/private_please/storage/candidates_store.rb
121
- - lib/private_please/storage/methods_names.rb
122
- - lib/private_please/storage/methods_names_bucket.rb
123
- - lib/private_please/tracking.rb
124
- - lib/private_please/tracking/extension.rb
125
- - lib/private_please/tracking/instrumentor.rb
126
- - lib/private_please/tracking/instruments_all_methods_below.rb
127
- - lib/private_please/tracking/instruments_automatically_all_methods_in_all_classes.rb
128
- - lib/private_please/tracking/line_change_tracker.rb
129
- - lib/private_please/tracking/load_utils.rb
130
- - lib/private_please/tracking/load_utils/gem_utils.rb
131
- - lib/private_please/tracking/load_utils/standard_lib_utils.rb
132
- - lib/private_please/tracking/utils.rb
102
+ - lib/private_please/config.rb
103
+ - lib/private_please/methods_calls_tracker.rb
104
+ - lib/private_please/reporting/simple_text.rb
105
+ - lib/private_please/reporting/templates/simple.txt.erb
106
+ - lib/private_please/storage/called_methods_memory_store.rb
107
+ - lib/private_please/tracking/debug/trace_point_data_logger.rb
108
+ - lib/private_please/tracking/method_details.rb
109
+ - lib/private_please/tracking/result.rb
110
+ - lib/private_please/tracking/trace_point_details.rb
111
+ - lib/private_please/tracking/trace_point_processor.rb
112
+ - lib/private_please/utils/ruby_utils.rb
113
+ - lib/private_please/utils/source_file_utils.rb
114
+ - lib/private_please/utils/two_level_stack.rb
133
115
  - lib/private_please/version.rb
134
116
  - private_please.gemspec
135
- - sample.rb
136
- - spec/01_tracking_candidate_methods/excluding_gems_and_standard_libraries_spec.rb
137
- - spec/01_tracking_candidate_methods/explicitely_with_the_private_please_command_spec.rb
138
- - spec/01_tracking_candidate_methods/load_utils_spec.rb
139
- - spec/01_tracking_candidate_methods/systematically_in_auto_mode_spec.rb
140
- - spec/03_logging_calls_on_candidate_methods_spec.rb
141
- - spec/04_instrumented_program_activity_observation_result_spec.rb
142
- - spec/05_reporting/report_table_spec.rb
143
- - spec/06_at_exit_spec.rb
144
- - spec/_helpers/assert_helpers.rb
145
- - spec/fixtures/bug_22.rb
146
- - spec/fixtures/bug_30.rb
147
- - spec/fixtures/issue_25.rb
148
- - spec/fixtures/sample_class_for_report.rb
149
- - spec/fixtures/sample_class_with_all_calls_combinations.rb
150
- - spec/sandbox/Gemfile
151
- - spec/sandbox/Gemfile.lock
152
- - spec/sandbox/README.txt
153
- - spec/sandbox/normal.rb
154
- - spec/sandbox/normal_prepended_with_require.rb
155
- - spec/spec_helper.rb
156
- - spec/units/calls_store_spec.rb
157
- - spec/units/candidates_store_spec.rb
158
- - spec/units/reporter/data_compiler_spec.rb
159
- - spec/units/reporter/fixtures/simple_case_1.rb
160
- - spec/units/reporter/fixtures/simple_case_2.rb
161
- has_rdoc: true
162
117
  homepage: https://github.com/alainravet/private_please
163
- licenses: []
164
-
118
+ licenses:
119
+ - MIT
120
+ metadata: {}
165
121
  post_install_message:
166
122
  rdoc_options: []
167
-
168
- require_paths:
123
+ require_paths:
169
124
  - lib
170
- required_ruby_version: !ruby/object:Gem::Requirement
171
- none: false
172
- requirements:
125
+ required_ruby_version: !ruby/object:Gem::Requirement
126
+ requirements:
173
127
  - - ">="
174
- - !ruby/object:Gem::Version
175
- hash: 3
176
- segments:
177
- - 0
178
- version: "0"
179
- required_rubygems_version: !ruby/object:Gem::Requirement
180
- none: false
181
- requirements:
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ required_rubygems_version: !ruby/object:Gem::Requirement
131
+ requirements:
182
132
  - - ">="
183
- - !ruby/object:Gem::Version
184
- hash: 3
185
- segments:
186
- - 0
187
- version: "0"
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
188
135
  requirements: []
189
-
190
136
  rubyforge_project:
191
- rubygems_version: 1.6.2
137
+ rubygems_version: 2.5.1
192
138
  signing_key:
193
- specification_version: 3
194
- summary: Test if methods can be made private
195
- test_files:
196
- - spec/01_tracking_candidate_methods/excluding_gems_and_standard_libraries_spec.rb
197
- - spec/01_tracking_candidate_methods/explicitely_with_the_private_please_command_spec.rb
198
- - spec/01_tracking_candidate_methods/load_utils_spec.rb
199
- - spec/01_tracking_candidate_methods/systematically_in_auto_mode_spec.rb
200
- - spec/03_logging_calls_on_candidate_methods_spec.rb
201
- - spec/04_instrumented_program_activity_observation_result_spec.rb
202
- - spec/05_reporting/report_table_spec.rb
203
- - spec/06_at_exit_spec.rb
204
- - spec/_helpers/assert_helpers.rb
205
- - spec/fixtures/bug_22.rb
206
- - spec/fixtures/bug_30.rb
207
- - spec/fixtures/issue_25.rb
208
- - spec/fixtures/sample_class_for_report.rb
209
- - spec/fixtures/sample_class_with_all_calls_combinations.rb
210
- - spec/sandbox/Gemfile
211
- - spec/sandbox/Gemfile.lock
212
- - spec/sandbox/README.txt
213
- - spec/sandbox/normal.rb
214
- - spec/sandbox/normal_prepended_with_require.rb
215
- - spec/spec_helper.rb
216
- - spec/units/calls_store_spec.rb
217
- - spec/units/candidates_store_spec.rb
218
- - spec/units/reporter/data_compiler_spec.rb
219
- - spec/units/reporter/fixtures/simple_case_1.rb
220
- - spec/units/reporter/fixtures/simple_case_2.rb
139
+ specification_version: 4
140
+ summary: Identify dynamically methods that can be made private.
141
+ test_files: []