yardcheck 0.0.2 → 0.0.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b594df9271ab2ef4f110b5fdaf97a44fc3e633a8
4
- data.tar.gz: be08bcfad68850ed0adca3b1dba4e38562de2840
3
+ metadata.gz: fe668ef28d9117e65a7ef3507e3d43c5f19c817d
4
+ data.tar.gz: 3b03b4b15147cd4db2b7594b02e43f04f5d9f1e3
5
5
  SHA512:
6
- metadata.gz: 5406813ffe5bda64d642a76cf9e6aab7c54fa0953e7bd693d5b98044048702cee8860c1af011fb48eb671a353d95b06e229b2996259180ac07e8ffb1cda68377
7
- data.tar.gz: afc03fd46651422fbef24949eb940b175b4c6d62fb532c790b893482be060449d032c2202d02663c5f47f9dc2682069205da7cc5e403badaf66257ed78645bba
6
+ metadata.gz: 15f0d9b8d5bf900d1b8f090738bdb44f0a5d53d60636afe9b0a9e17ca1612902f4d3a96eaaa71e6a6ece59b46be94a3c0ccebf8c298e9551cfc92e0aa2880bee
7
+ data.tar.gz: 0411aa5a17f544b2f5ae3389ee8b84739c3cad5faeeb574b9794bc41ad321992a7465dd54deb0455485610145de0b69143ecc8fa9033cd5d7ab6c989afe72f1c
@@ -1,10 +1,10 @@
1
1
  steps:
2
- - command: "build/run 2.3.3 'rspec'"
2
+ - command: "build/run 2.4.1 'rspec'"
3
3
  label: ":rspec: RSpec"
4
4
  agents:
5
5
  - queue=elastic
6
6
 
7
7
  - name: ':rubocop: Rubocop'
8
- command: build/run 2.3.3 rubocop
8
+ command: build/run 2.4.1 rubocop
9
9
  agents:
10
10
  - queue=elastic
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.3.3
1
+ 2.4.1
@@ -7,7 +7,7 @@ module Yardcheck
7
7
  :selector,
8
8
  :namespace,
9
9
  :params,
10
- :example_location
10
+ :example_metadata
11
11
  )
12
12
 
13
13
  def self.process(params:, **attributes)
@@ -19,6 +19,14 @@ module Yardcheck
19
19
  new(params: params, **attributes)
20
20
  end
21
21
 
22
+ def example_location
23
+ example_metadata.fetch(:location)
24
+ end
25
+
26
+ def example_id
27
+ example_metadata.fetch(:id)
28
+ end
29
+
22
30
  def method_identifier
23
31
  [namespace, selector, scope]
24
32
  end
@@ -108,7 +108,10 @@ module Yardcheck
108
108
  scope: event.defined_class.__send__(:singleton_class?) ? :class : :instance,
109
109
  selector: event.method_id,
110
110
  namespace: event.defined_class,
111
- example_location: RSpec.current_example.location
111
+ example_metadata: {
112
+ location: RSpec.current_example.location,
113
+ id: RSpec.current_example.id
114
+ }
112
115
  }
113
116
  end
114
117
 
@@ -20,6 +20,10 @@ module Yardcheck
20
20
  event.example_location
21
21
  end
22
22
 
23
+ def test_id
24
+ event.example_id
25
+ end
26
+
23
27
  def method_shorthand
24
28
  documentation.shorthand
25
29
  end
@@ -11,7 +11,7 @@ module Yardcheck
11
11
  undef_method :!
12
12
 
13
13
  def method_missing(method_name, *args, &block)
14
- if target_respond_to?(method_name)
14
+ if respond_to_missing?(method_name, true)
15
15
  @target.__send__(method_name, *args, &block)
16
16
  else
17
17
  ::Object
@@ -21,13 +21,20 @@ module Yardcheck
21
21
  end
22
22
  end
23
23
 
24
- private
25
-
26
- def target_respond_to?(method_name)
24
+ def respond_to_missing?(method_name, include_all = false)
27
25
  ::Object
28
26
  .instance_method(:respond_to?)
29
27
  .bind(@target)
30
- .call(method_name, true)
28
+ .call(method_name, include_all)
29
+ end
30
+
31
+ private
32
+
33
+ def object_dispatch(receiver, method_name, *params)
34
+ ::Object
35
+ .instance_method(method_name)
36
+ .bind(receiver)
37
+ .call(*params)
31
38
  end
32
39
  end # Proxy
33
40
  end # Yardcheck
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Yardcheck
4
- VERSION = '0.0.2'
4
+ VERSION = '0.0.3'
5
5
  end # Yardcheck
@@ -5,9 +5,14 @@ module Yardcheck
5
5
  extend Color
6
6
  include Color
7
7
 
8
- def initialize(observation, test_locations = [observation.test_location])
8
+ def initialize(
9
+ observation,
10
+ test_locations = [observation.test_location],
11
+ test_ids = [observation.test_id]
12
+ )
9
13
  @observation = observation
10
14
  @test_locations = test_locations.sort.uniq
15
+ @test_ids = test_ids.sort.uniq
11
16
  end
12
17
 
13
18
  def offense
@@ -16,23 +21,26 @@ module Yardcheck
16
21
 
17
22
  location_hint = indent(grey("source: #{observation.source_location}"))
18
23
  test_lines = test_locations.map { |l| " - #{l}" }.join("\n")
24
+
19
25
  tests_block = "tests:\n#{test_lines}"
20
26
  test_hint = indent(grey(tests_block))
21
27
 
22
- "#{explanation}\n\n#{location_hint}\n#{test_hint}\n#{source}\n"
28
+ rerun_block = indent(grey("rerun with:\n #{rerun_command}"))
29
+
30
+ "#{explanation}\n\n#{location_hint}\n#{test_hint}\n#{rerun_block}\n#{source}\n"
23
31
  end
24
32
 
25
33
  def combine(other)
26
34
  fail 'Cannot combine' unless combine_with?(other)
27
35
 
28
- with_tests(other.test_locations)
36
+ with_tests(other)
29
37
  end
30
38
 
31
39
  def combination_identifier
32
40
  combine_requirements.map(&method(:__send__))
33
41
  end
34
42
 
35
- attr_reader :test_locations
43
+ attr_reader :test_locations, :test_ids
36
44
 
37
45
  private
38
46
 
@@ -43,7 +51,11 @@ module Yardcheck
43
51
  end
44
52
 
45
53
  def with_tests(other_test_locations)
46
- self.class.new(observation, test_locations + other_test_locations)
54
+ self.class.new(observation, test_locations + other_test_locations, test_ids + other.test_ids)
55
+ end
56
+
57
+ def rerun_command
58
+ "rspec #{test_ids.map { |id| "'#{id}'" }.join(' ')}"
47
59
  end
48
60
 
49
61
  def indent(string)
@@ -70,7 +82,11 @@ module Yardcheck
70
82
  "#{yellow('%<signature>s')} but observed " \
71
83
  "#{red('%<observed_type>s')}"
72
84
 
73
- def initialize(observation, test_locations = [observation.test_location])
85
+ def initialize(
86
+ observation,
87
+ test_locations = [observation.test_location],
88
+ test_ids = [observation.test_id]
89
+ )
74
90
  super
75
91
  end
76
92
 
@@ -103,10 +119,15 @@ module Yardcheck
103
119
  class Param < self
104
120
  include Equalizer.new(:name, :observation)
105
121
 
106
- def initialize(name, observation, test_locations = [observation.test_location])
122
+ def initialize(
123
+ name,
124
+ observation,
125
+ test_locations = [observation.test_location],
126
+ test_ids = [observation.test_id]
127
+ )
107
128
  @name = name
108
129
 
109
- super(observation, test_locations)
130
+ super(observation, test_locations, test_ids)
110
131
  end
111
132
 
112
133
  FORMAT =
@@ -136,11 +157,12 @@ module Yardcheck
136
157
  %i[name shorthand signature observed_type]
137
158
  end
138
159
 
139
- def with_tests(other_test_locations)
160
+ def with_tests(other)
140
161
  self.class.new(
141
162
  name,
142
163
  observation,
143
- test_locations + other_test_locations
164
+ test_locations + other.test_locations,
165
+ test_ids + other.test_ids
144
166
  )
145
167
  end
146
168
 
@@ -42,8 +42,10 @@ RSpec.describe 'test app integration' do
42
42
 
43
43
  it 'reports expectations' do
44
44
  aggregate_failures do
45
- expect_report('Expected TestApp::Namespace#add to return String but observed Fixnum')
46
- expect_report('Expected #<Class:TestApp::Namespace>#add to return String but observed Fixnum')
45
+ expect_report('Expected TestApp::Namespace#add to return String but observed Integer')
46
+ expect_report(
47
+ 'Expected #<Class:TestApp::Namespace>#add to return String but observed Integer'
48
+ )
47
49
  expect_report(
48
50
  'Expected TestApp::Namespace#documents_relative ' \
49
51
  'to return TestApp::Namespace::Child but observed String'
@@ -42,7 +42,7 @@ RSpec.describe Yardcheck::MethodTracer do
42
42
  namespace: Foo.singleton_class,
43
43
  params: { baz: 'Hello' },
44
44
  return_value: 'HELLO',
45
- example_location: RSpec.current_example.location
45
+ example_metadata: { location: RSpec.current_example.location, id: RSpec.current_example.id }
46
46
  ),
47
47
  Yardcheck::MethodCall::Return.process(
48
48
  scope: :instance,
@@ -50,7 +50,7 @@ RSpec.describe Yardcheck::MethodTracer do
50
50
  namespace: Foo,
51
51
  params: { baz: 'Hello' },
52
52
  return_value: 'HELLO',
53
- example_location: RSpec.current_example.location
53
+ example_metadata: { location: RSpec.current_example.location, id: RSpec.current_example.id }
54
54
  )
55
55
  ])
56
56
  end
@@ -25,7 +25,7 @@ RSpec.describe Yardcheck::Runner do
25
25
  namespace: TestApp::Namespace,
26
26
  params: { left: 'foo', right: 3 },
27
27
  return_value: 5,
28
- example_location: 'test_app_spec.rb:1'
28
+ example_metadata: { location: 'test_app_spec.rb:1', id: 'test_app_spec.rb[1:1]' }
29
29
  ),
30
30
  Yardcheck::MethodCall::Return.process(
31
31
  scope: :class,
@@ -33,18 +33,20 @@ RSpec.describe Yardcheck::Runner do
33
33
  namespace: TestApp::Namespace.singleton_class,
34
34
  params: { left: 2, right: 3 },
35
35
  return_value: 5,
36
- example_location: 'test_app_spec.rb:2'
36
+ example_metadata: { location: 'test_app_spec.rb:2', id: 'test_app_spec.rb[1:2]' }
37
37
  )
38
38
  ]
39
39
  end
40
40
 
41
41
  let(:output) do
42
42
  <<~MSG
43
- Expected #<Class:TestApp::Namespace>#add to return String but observed Fixnum
43
+ Expected #<Class:TestApp::Namespace>#add to return String but observed Integer
44
44
 
45
45
  source: ./test_app/lib/test_app.rb:15
46
46
  tests:
47
47
  - test_app_spec.rb:2
48
+ rerun with:
49
+ rspec 'test_app_spec.rb[1:2]'
48
50
 
49
51
  # Singleton method with correct param definition and incorrect return
50
52
  #
@@ -61,6 +63,8 @@ RSpec.describe Yardcheck::Runner do
61
63
  source: ./test_app/lib/test_app.rb:25
62
64
  tests:
63
65
  - test_app_spec.rb:1
66
+ rerun with:
67
+ rspec 'test_app_spec.rb[1:1]'
64
68
 
65
69
  # Instance method with correct param definition and incorrect return
66
70
  #
@@ -72,11 +76,13 @@ RSpec.describe Yardcheck::Runner do
72
76
  left + right
73
77
  end
74
78
 
75
- Expected TestApp::Namespace#add to return String but observed Fixnum
79
+ Expected TestApp::Namespace#add to return String but observed Integer
76
80
 
77
81
  source: ./test_app/lib/test_app.rb:25
78
82
  tests:
79
83
  - test_app_spec.rb:1
84
+ rerun with:
85
+ rspec 'test_app_spec.rb[1:1]'
80
86
 
81
87
  # Instance method with correct param definition and incorrect return
82
88
  #
@@ -118,7 +124,7 @@ RSpec.describe Yardcheck::Runner do
118
124
  namespace: TestApp::Namespace,
119
125
  params: { left: 'foo', right: 3 },
120
126
  return_value: 'valid return type',
121
- example_location: 'test_app_spec.rb:1'
127
+ example_metadata: { location: 'test_app_spec.rb:1', id: 'test_app_spec.rb[1:1]' }
122
128
  ),
123
129
  Yardcheck::MethodCall::Return.process(
124
130
  scope: :instance,
@@ -126,7 +132,7 @@ RSpec.describe Yardcheck::Runner do
126
132
  namespace: TestApp::Namespace,
127
133
  params: { left: 'foo', right: 3 },
128
134
  return_value: 'valid return type',
129
- example_location: 'test_app_spec.rb:2'
135
+ example_metadata: { location: 'test_app_spec.rb:2', id: 'test_app_spec.rb[1:2]' }
130
136
  ),
131
137
  Yardcheck::MethodCall::Return.process(
132
138
  scope: :instance,
@@ -134,7 +140,7 @@ RSpec.describe Yardcheck::Runner do
134
140
  namespace: TestApp::Namespace,
135
141
  params: { left: 1, right: 'now this one is wrong' },
136
142
  return_value: 'valid return type',
137
- example_location: 'test_app_spec.rb:3'
143
+ example_metadata: { location: 'test_app_spec.rb:3', id: 'test_app_spec.rb[1:3]' }
138
144
  )
139
145
  ]
140
146
  end
@@ -147,6 +153,8 @@ RSpec.describe Yardcheck::Runner do
147
153
  tests:
148
154
  - test_app_spec.rb:1
149
155
  - test_app_spec.rb:2
156
+ rerun with:
157
+ rspec 'test_app_spec.rb[1:1]' 'test_app_spec.rb[1:2]'
150
158
 
151
159
  # Instance method with correct param definition and incorrect return
152
160
  #
@@ -163,6 +171,8 @@ RSpec.describe Yardcheck::Runner do
163
171
  source: ./test_app/lib/test_app.rb:25
164
172
  tests:
165
173
  - test_app_spec.rb:3
174
+ rerun with:
175
+ rspec 'test_app_spec.rb[1:3]'
166
176
 
167
177
  # Instance method with correct param definition and incorrect return
168
178
  #
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: ..
3
3
  specs:
4
- yardcheck (0.0.1)
4
+ yardcheck (0.0.3)
5
5
  anima (~> 0.3)
6
6
  coderay (~> 1.1)
7
7
  concord (~> 0.1)
@@ -26,7 +26,7 @@ GEM
26
26
  concord (0.1.5)
27
27
  adamantium (~> 0.2.0)
28
28
  equalizer (~> 0.0.9)
29
- diff-lcs (1.2.5)
29
+ diff-lcs (1.3)
30
30
  equalizer (0.0.11)
31
31
  ice_nine (0.11.2)
32
32
  memoizable (0.4.2)
@@ -41,19 +41,19 @@ GEM
41
41
  pry-byebug (3.4.2)
42
42
  byebug (~> 9.0)
43
43
  pry (~> 0.10)
44
- rspec (3.5.0)
45
- rspec-core (~> 3.5.0)
46
- rspec-expectations (~> 3.5.0)
47
- rspec-mocks (~> 3.5.0)
48
- rspec-core (3.5.4)
49
- rspec-support (~> 3.5.0)
50
- rspec-expectations (3.5.0)
44
+ rspec (3.6.0)
45
+ rspec-core (~> 3.6.0)
46
+ rspec-expectations (~> 3.6.0)
47
+ rspec-mocks (~> 3.6.0)
48
+ rspec-core (3.6.0)
49
+ rspec-support (~> 3.6.0)
50
+ rspec-expectations (3.6.0)
51
51
  diff-lcs (>= 1.2.0, < 2.0)
52
- rspec-support (~> 3.5.0)
53
- rspec-mocks (3.5.0)
52
+ rspec-support (~> 3.6.0)
53
+ rspec-mocks (3.6.0)
54
54
  diff-lcs (>= 1.2.0, < 2.0)
55
- rspec-support (~> 3.5.0)
56
- rspec-support (3.5.0)
55
+ rspec-support (~> 3.6.0)
56
+ rspec-support (3.6.0)
57
57
  slop (3.6.0)
58
58
  thread_safe (0.3.6)
59
59
  yard (0.9.8)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yardcheck
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - John
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-07-31 00:00:00.000000000 Z
12
+ date: 2017-08-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: yard
@@ -176,7 +176,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
176
176
  version: '0'
177
177
  requirements: []
178
178
  rubyforge_project:
179
- rubygems_version: 2.5.2
179
+ rubygems_version: 2.6.11
180
180
  signing_key:
181
181
  specification_version: 4
182
182
  summary: Validate YARD docs by running specs