power_p 0.0.1 → 1.0.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: 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