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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c99351f52fbfc338960c05304117afb1038431d6
4
- data.tar.gz: 612131704d1897368a4c1ea60b238e3d3d505271
3
+ metadata.gz: 31d7a1bbffb279c980f36c36c6d199ce6daf5a48
4
+ data.tar.gz: 56a115aa4beb3f7e6619dac609bd4f11c869a935
5
5
  SHA512:
6
- metadata.gz: 1debce1526ee6533bf883e94ce616bd151fb024ed0a455a020493f96e2d2c740f764256de99253396e915427a57f8fad2e5b113a33a3c4e72c366240a46cfdd9
7
- data.tar.gz: 93f599e12bb26a038260f0e9b2fea243dc8a60a3d279dd08dfed2e93e3e00478323de3a94bd631c2278734bbd3e11550d49c97ba6768e46479641520031070bf
6
+ metadata.gz: dc86ea97496dbea0a7c7a564b7948208fbadac720af496befa220b0a0dc96487b497f7f4121e45b773dcb2f460523a0f444b7de354d77c5d37415b7c7d67ce13
7
+ data.tar.gz: b830f800b14f6682eedd8f58a9ba8004bc2bdb79e754061247dac45bcf21358c1eb979f875a5466e40abd88e9c27c7fb2f0b09bc5479cb2c6bf86c29a3f35ce0
@@ -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
- val = pa.yield
13
- puts pa.message_proc.call
14
- val
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
@@ -1,3 +1,3 @@
1
1
  module PowerP
2
- VERSION = "0.0.1"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -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']
@@ -5,4 +5,11 @@ class TestPowerP < Test::Unit::TestCase
5
5
  def test_power_p
6
6
  p { 3.times.to_a }
7
7
  end
8
+
9
+ def test_power_p_multiline
10
+ p do
11
+ 0.to_s
12
+ 1 == 2
13
+ end
14
+ end
8
15
  end
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.1
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: 2014-09-23 00:00:00.000000000 Z
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: '0'
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: '0'
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.2.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