power_p 0.0.1 → 1.0.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.
- checksums.yaml +4 -4
- data/lib/power_p.rb +13 -3
- data/lib/power_p/core_ext.rb +92 -0
- data/lib/power_p/version.rb +1 -1
- data/power_p.gemspec +1 -1
- data/test/test_power_p.rb +7 -0
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 31d7a1bbffb279c980f36c36c6d199ce6daf5a48
|
4
|
+
data.tar.gz: 56a115aa4beb3f7e6619dac609bd4f11c869a935
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dc86ea97496dbea0a7c7a564b7948208fbadac720af496befa220b0a0dc96487b497f7f4121e45b773dcb2f460523a0f444b7de354d77c5d37415b7c7d67ce13
|
7
|
+
data.tar.gz: b830f800b14f6682eedd8f58a9ba8004bc2bdb79e754061247dac45bcf21358c1eb979f875a5466e40abd88e9c27c7fb2f0b09bc5479cb2c6bf86c29a3f35ce0
|
data/lib/power_p.rb
CHANGED
@@ -4,14 +4,24 @@
|
|
4
4
|
|
5
5
|
require "power_p/version"
|
6
6
|
require 'power_assert'
|
7
|
+
require 'power_p/core_ext'
|
8
|
+
|
9
|
+
module PowerAssert
|
10
|
+
INTERNAL_LIB_DIRS[PowerP] = File.dirname(caller_locations(1, 1).first.path)
|
11
|
+
end
|
7
12
|
|
8
13
|
module PowerP
|
9
14
|
def p(*, &blk)
|
10
15
|
if blk
|
11
16
|
PowerAssert.start(blk, assertion_method: __callee__) do |pa|
|
12
|
-
|
13
|
-
|
14
|
-
|
17
|
+
begin
|
18
|
+
val = pa.yield
|
19
|
+
puts pa.message
|
20
|
+
val
|
21
|
+
rescue => e
|
22
|
+
puts pa.message
|
23
|
+
raise e
|
24
|
+
end
|
15
25
|
end
|
16
26
|
else
|
17
27
|
super
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require 'power_assert'
|
2
|
+
|
3
|
+
verbose = $VERBOSE
|
4
|
+
begin
|
5
|
+
$VERBOSE = nil
|
6
|
+
|
7
|
+
module PowerAssert
|
8
|
+
class << self
|
9
|
+
prepend Module.new {
|
10
|
+
def start(*)
|
11
|
+
super do |ctx|
|
12
|
+
disable_nesting_contexts(ctx) do
|
13
|
+
yield ctx
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
BLOCK_CONTEXTS_STACK = Hash.new {|h, thread| h[thread] = [] }
|
21
|
+
|
22
|
+
def disable_nesting_contexts(ctx)
|
23
|
+
BLOCK_CONTEXTS_STACK.delete_if {|th,| ! th.alive? }
|
24
|
+
stack = BLOCK_CONTEXTS_STACK[Thread.current]
|
25
|
+
if stack.last
|
26
|
+
stack.last.disable
|
27
|
+
end
|
28
|
+
stack.push(ctx)
|
29
|
+
yield
|
30
|
+
ensure
|
31
|
+
stack.pop
|
32
|
+
if stack.last
|
33
|
+
stack.last.enable
|
34
|
+
end
|
35
|
+
end
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
class Parser
|
40
|
+
def method_id_set
|
41
|
+
@method_id_set ||=
|
42
|
+
if @assertion_proc
|
43
|
+
insns = RubyVM::InstructionSequence.of(@assertion_proc).to_a[13]
|
44
|
+
insns.each_with_object({}) do |i, h|
|
45
|
+
if i.kind_of?(Array) and i[1].kind_of?(Hash) and i[1][:mid]
|
46
|
+
h[i[1][:mid]] = true
|
47
|
+
end
|
48
|
+
end
|
49
|
+
else
|
50
|
+
Hash.new(true)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
EQ_TRUE = Class.new do
|
55
|
+
def ==(*)
|
56
|
+
true
|
57
|
+
end
|
58
|
+
end.new
|
59
|
+
private_constant :EQ_TRUE
|
60
|
+
|
61
|
+
def lineno
|
62
|
+
EQ_TRUE
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
class Context
|
67
|
+
def message
|
68
|
+
@message ||= (@return_values.chunk(&:lineno).map.with_index do |(lineno, vals), i|
|
69
|
+
if i == 0
|
70
|
+
parser = @parser
|
71
|
+
else
|
72
|
+
line = open(@parser.path).each_line.drop(lineno - 1).first
|
73
|
+
parser = Parser.new(line, @parser.path, lineno, @parser.binding)
|
74
|
+
end
|
75
|
+
build_assertion_message(parser, vals)
|
76
|
+
end).join("\n").freeze
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
class BlockContext
|
81
|
+
def enable
|
82
|
+
@trace_return.enable
|
83
|
+
end
|
84
|
+
|
85
|
+
def disable
|
86
|
+
@trace_return.disable
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
ensure
|
91
|
+
$VERBOSE = verbose
|
92
|
+
end
|
data/lib/power_p/version.rb
CHANGED
data/power_p.gemspec
CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.executables = `git ls-files -- bin/*`.split("\n").map{|f| File.basename(f) }
|
18
18
|
spec.require_paths = ['lib']
|
19
19
|
|
20
|
-
spec.add_runtime_dependency 'power_assert'
|
20
|
+
spec.add_runtime_dependency 'power_assert', '>= 1.1.0'
|
21
21
|
spec.add_development_dependency 'test-unit'
|
22
22
|
spec.add_development_dependency 'rake'
|
23
23
|
spec.extra_rdoc_files = ['README.rdoc']
|
data/test/test_power_p.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: power_p
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kazuki Tsujimoto
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-08-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: power_assert
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 1.1.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 1.1.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: test-unit
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -69,6 +69,7 @@ files:
|
|
69
69
|
- README.rdoc
|
70
70
|
- Rakefile
|
71
71
|
- lib/power_p.rb
|
72
|
+
- lib/power_p/core_ext.rb
|
72
73
|
- lib/power_p/version.rb
|
73
74
|
- power_p.gemspec
|
74
75
|
- test/test_power_p.rb
|
@@ -93,7 +94,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
93
94
|
version: '0'
|
94
95
|
requirements: []
|
95
96
|
rubyforge_project:
|
96
|
-
rubygems_version: 2.
|
97
|
+
rubygems_version: 2.6.11
|
97
98
|
signing_key:
|
98
99
|
specification_version: 4
|
99
100
|
summary: Extend Kernel#p with power_assert
|