where_is 0.3.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b4c855bcddc4646e2e9d75948b465b5c411a9400
4
- data.tar.gz: e9fdf1137a464bf2b0dabf9e49aae76efcb067e7
3
+ metadata.gz: fafe31e85d2512640fca1b7ee5b1825a98cfab24
4
+ data.tar.gz: a065ccec36e61485627f51e83d04cac52974f472
5
5
  SHA512:
6
- metadata.gz: 4d3cff0fd27d01e9d0050a8807f940f534e8f4068a9fd6afdc15495aa00819aa102f01426f4d8366a0a02e4f607a463709a78dc20d5a449ef1d85e0fc6e43cb9
7
- data.tar.gz: 3c78c4e6b42232cb3e3c6d4b00da77417b652009c6460e115aef7a9aeb302e83a2bb516e7c765398fe326dd4e245bde9b14cc6e30bc81abc11157c08043ba731
6
+ metadata.gz: fcb11e5fd41273ff08c25e7b93d8ff40cbad9e1070f9bb313a2868913660809aeaddfc7ff7ca609897a5d06798f7a4b0404017bf6bb62a002f8a1d920b9f1bfb
7
+ data.tar.gz: b5fa1f0e3d1fe01eda1bb100445ea4b7ae1c46b8529c84d0474e9e33444662767214b6547b4738014458af02c47516adf80b746b3764f176825ae49c527eae38
data/README.md CHANGED
@@ -50,6 +50,19 @@ Where.are(IRB)
50
50
  # ]
51
51
 
52
52
 
53
+ # Where.ignore sets a global array of ignored regexes or partial strings.
54
+ # Any item with a `file` key that matches the ignore will be omitted.
55
+ Where.ignore = [/inspector/]
56
+ # => [/inspector/]
57
+
58
+ Where.are(IRB)
59
+ # => [
60
+ # {:file=>"/Users/david/.rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/irb/workspace.rb", :line=>112, :path=>"/Users/david/.rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/irb/workspace.rb:112"},
61
+ # {:file=>"(eval)", :line=>2, :path=>"(eval):2"},
62
+ # {:file=>"/Users/david/.rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/irb.rb", :line=>350, :path=>"/Users/david/.rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/irb.rb:350"},
63
+ # {:file=>"/Users/david/.rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/irb/init.rb", :line=>16, :path=>"/Users/david/.rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/irb/init.rb:16"}
64
+ # ]
65
+
53
66
  Where.is(String, :unknown_method)
54
67
  # NameError: undefined method `unknown_method' for class `#<Class:String>'
55
68
  ```
@@ -1,7 +1,10 @@
1
+ require 'where_is/extractors'
1
2
  require 'where_is/version'
2
3
 
3
4
  module Where
4
5
  class << self
6
+ include Where::Extractors
7
+
5
8
  def is(klass, method = nil)
6
9
  are(klass, method)[0]
7
10
  end
@@ -30,6 +33,10 @@ module Where
30
33
  are_instance_methods(klass, method_name)[0]
31
34
  end
32
35
 
36
+ def is_class_primarily(klass)
37
+ is_class(klass)[0]
38
+ end
39
+
33
40
  def are_methods(klass, method_name)
34
41
  ensured_class = ensure_class(klass)
35
42
  methods = are_via_extractor(:method, ensured_class, method_name)
@@ -54,10 +61,6 @@ module Where
54
61
  source_locations
55
62
  end
56
63
 
57
- def is_class_primarily(klass)
58
- is_class(klass)[0]
59
- end
60
-
61
64
  def is_class(klass)
62
65
  ensured_class = ensure_class(klass)
63
66
  methods = defined_methods(ensured_class)
@@ -66,63 +69,10 @@ module Where
66
69
  if source_locations.empty?
67
70
  raise NameError, "#{ensured_class} has no methods" if methods.empty?
68
71
  raise NameError, "#{ensured_class} only has built-in methods " \
69
- "(#{methods.size} in total)"
72
+ "(#{methods.size} in total)"
70
73
  end
71
74
 
72
75
  source_locations
73
76
  end
74
-
75
- private
76
-
77
- def ensure_class(klass)
78
- [Class, Module].include?(klass.class) ? klass : klass.class
79
- end
80
-
81
- def source_location(method)
82
- source_location = method.source_location
83
- source_location = [method.to_s[/: (.*)>/, 1]] if source_location.nil?
84
-
85
- # source_location is a 2 element array
86
- # [filename, line_number]
87
- # some terminals (eg. iterm) will jump to the file if you cmd+click it
88
- # but they can jump to the specific line if you concat file & line number
89
- filename, line = source_location
90
- build_location_hash(filename, line)
91
- end
92
-
93
- def group_and_combine_source_locations(source_locations)
94
- file_groups = source_locations.group_by { |src_loc| src_loc[:file] }.to_a
95
-
96
- file_groups.map! do |file, src_locs|
97
- lines = src_locs.map { |sl| sl[:line] }
98
- count = lines.size
99
- line = lines.min
100
- { count: count, data: build_location_hash(file, line) }
101
- end
102
-
103
- file_groups.sort_by { |fc| fc[:count] }.map { |fc| fc[:data] }
104
- end
105
-
106
- def are_via_extractor(extractor, klass, method_name)
107
- klass.ancestors.map do |ancestor|
108
- begin
109
- source_location(ancestor.send(extractor, method_name))
110
- rescue NameError
111
- nil
112
- end
113
- end.compact
114
- end
115
-
116
- def defined_methods(klass)
117
- methods = klass.methods(false).map { |m| klass.method(m) }
118
- methods += klass.instance_methods(false)
119
- .map { |m| klass.instance_method(m) }
120
- source_locations = methods.map(&:source_location).compact
121
- source_locations.map { |(file, line)| build_location_hash(file, line) }
122
- end
123
-
124
- def build_location_hash(file, line)
125
- { file: file, line: line, path: [file, line].compact.join(':') }
126
- end
127
77
  end
128
78
  end
@@ -0,0 +1,69 @@
1
+ module Where
2
+ module Extractors
3
+ attr_accessor :ignore
4
+
5
+ private
6
+
7
+ def ensure_class(klass)
8
+ [Class, Module].include?(klass.class) ? klass : klass.class
9
+ end
10
+
11
+ def source_location(method)
12
+ source_location = method.source_location
13
+ source_location = [method.to_s[/: (.*)>/, 1]] if source_location.nil?
14
+
15
+ # source_location is a 2 element array
16
+ # [filename, line_number]
17
+ # some terminals (eg. iterm) will jump to the file if you cmd+click it
18
+ # but they can jump to the specific line if you concat file & line number
19
+ filename, line = source_location
20
+ build_location_hash(filename, line)
21
+ end
22
+
23
+ def group_and_combine_source_locations(source_locations)
24
+ file_groups = source_locations.group_by { |src_loc| src_loc[:file] }.to_a
25
+
26
+ file_groups.map! do |file, src_locs|
27
+ lines = src_locs.map { |sl| sl[:line] }
28
+ count = lines.size
29
+ line = lines.min
30
+ { count: count, data: build_location_hash(file, line) }
31
+ end
32
+
33
+ locations = file_groups.sort_by { |fc| fc[:count] }.map { |fc| fc[:data] }
34
+ process_ignores(locations)
35
+ end
36
+
37
+ def process_ignores(locations)
38
+ [@ignore].flatten.compact.each do |ign|
39
+ locations.reject! do |location|
40
+ location[:file].match(ign)
41
+ end
42
+ end
43
+
44
+ locations
45
+ end
46
+
47
+ def are_via_extractor(extractor, klass, method_name)
48
+ klass.ancestors.map do |ancestor|
49
+ begin
50
+ source_location(ancestor.send(extractor, method_name))
51
+ rescue NameError
52
+ nil
53
+ end
54
+ end.compact
55
+ end
56
+
57
+ def defined_methods(klass)
58
+ methods = klass.methods(false).map { |m| klass.method(m) }
59
+ methods += klass.instance_methods(false)
60
+ .map { |m| klass.instance_method(m) }
61
+ source_locations = methods.map(&:source_location).compact
62
+ source_locations.map { |(file, line)| build_location_hash(file, line) }
63
+ end
64
+
65
+ def build_location_hash(file, line)
66
+ { file: file, line: line, path: [file, line].compact.join(':') }
67
+ end
68
+ end
69
+ end
@@ -1,3 +1,3 @@
1
1
  module Where
2
- VERSION = '0.3.2'.freeze
2
+ VERSION = '0.4.0'.freeze
3
3
  end
@@ -24,5 +24,5 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency 'bundler', '~> 1.13'
25
25
  spec.add_development_dependency 'rake', '~> 10.0'
26
26
  spec.add_development_dependency 'rspec', '~> 3.0'
27
- spec.add_development_dependency 'rubocop', '~> 0.56.0'
27
+ spec.add_development_dependency 'rubocop', '~> 0.57.1'
28
28
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: where_is
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dave Allie
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-05-24 00:00:00.000000000 Z
11
+ date: 2018-06-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 0.56.0
61
+ version: 0.57.1
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 0.56.0
68
+ version: 0.57.1
69
69
  description: A little Ruby gem for finding the source location where class and methods
70
70
  are defined.
71
71
  email:
@@ -79,6 +79,7 @@ files:
79
79
  - LICENSE.txt
80
80
  - README.md
81
81
  - lib/where_is.rb
82
+ - lib/where_is/extractors.rb
82
83
  - lib/where_is/version.rb
83
84
  - where_is.gemspec
84
85
  homepage: https://github.com/daveallie/where_is