aw 0.1.12 → 0.1.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +17 -19
  3. data/lib/aw.rb +11 -7
  4. data/lib/aw/fork.rb +17 -6
  5. metadata +4 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 82f2e2afc9696e62695257eba13de54c57617c9010b159a6c3cf06c6b9a532c7
4
- data.tar.gz: 590c6a707c82d901ba98deaf74bd7e67ee8a11cec073a0e805cc70d237f09f31
3
+ metadata.gz: 9af984fb0d47a9566b6ca5c9ac4a7208328cb444b504865e4fff631bb4122db7
4
+ data.tar.gz: 8c9759ef06861c6518cedd5867d85ebb04b62a01512a42abd94b401a3d67aa92
5
5
  SHA512:
6
- metadata.gz: b7b22077b6f5ee1f082255226d4abf8bf5104c616df19efec6c9b04f1ca7ebf8644fbd5f0e3666950b8ccead2d958a2956bda5b22751f26a27e18cc8bd0aa5e0
7
- data.tar.gz: 1696982963c47a63199069744faef8f6fe96b592f9fb052f188a6d81f6113d277230beed5b3fe8e4b182b03e7550a7246a31737c0dd7021df99894a8412f7508
6
+ metadata.gz: b950326ea7dc9a6846f079e75325e14d90d0261466dbd896dc57644eba8ef08ef8935364e756b6e41ed9f8b11cef68bb9752c9d3ad146daaf375f0b5334920d3
7
+ data.tar.gz: f21141ba62144f1b86ebead8c2816625c243272c51e671fcbdf95a28b8f81c8716dae4e7063427722094db3e661e8ceca2fdf757f2bf26612f9673dc35754b26
data/README.md CHANGED
@@ -1,14 +1,14 @@
1
1
  # Aw
2
2
 
3
- [![Build Status](https://api.travis-ci.org/fixrb/aw.svg?branch=master)][travis]
4
- [![Code Climate](https://codeclimate.com/github/fixrb/aw/badges/gpa.svg)][codeclimate]
5
- [![Gem Version](https://badge.fury.io/rb/aw.svg)][gem]
6
- [![Inline docs](https://inch-ci.org/github/fixrb/aw.svg?branch=master)][inchpages]
7
- [![Documentation](https://img.shields.io/:yard-docs-38c800.svg)][rubydoc]
3
+ [![Version](https://img.shields.io/github/v/tag/fixrb/aw?label=Version&logo=github)](https://github.com/fixrb/aw/releases)
4
+ [![Yard documentation](https://img.shields.io/badge/Yard-documentation-blue.svg?logo=github)](https://rubydoc.info/github/fixrb/aw/main)
5
+ [![CI](https://github.com/fixrb/aw/workflows/CI/badge.svg?branch=main)](https://github.com/fixrb/aw/actions?query=workflow%3Aci+branch%3Amain)
6
+ [![RuboCop](https://github.com/fixrb/aw/workflows/RuboCop/badge.svg?branch=main)](https://github.com/fixrb/aw/actions?query=workflow%3Arubocop+branch%3Amain)
7
+ [![License](https://img.shields.io/github/license/fixrb/aw?label=License&logo=github)](https://github.com/fixrb/aw/raw/main/LICENSE.md)
8
8
 
9
9
  > Aw, fork! 😬
10
10
 
11
- Creates a subprocess to execute a block inside.
11
+ Creates a sub-process to execute a block inside, and return the result.
12
12
 
13
13
  ## Installation
14
14
 
@@ -20,21 +20,25 @@ gem "aw"
20
20
 
21
21
  And then execute:
22
22
 
23
- $ bundle
23
+ ```sh
24
+ bundle
25
+ ```
24
26
 
25
27
  Or install it yourself as:
26
28
 
27
- $ gem install aw
29
+ ```sh
30
+ gem install aw
31
+ ```
28
32
 
29
33
  ## Usage
30
34
 
31
- It executes the block in a subprocess, and returns the result in the current process:
35
+ Execute a block of code in a sub-process, and return the result to the current process:
32
36
 
33
37
  ```ruby
34
38
  Aw.fork! { 6 * 7 } # => 42
35
39
  ```
36
40
 
37
- Of course, it prevents from side effects:
41
+ Therefore, when the execution of a block of code causes side effects, they are limited to the sub-process:
38
42
 
39
43
  ```ruby
40
44
  arr = ["foo"]
@@ -44,7 +48,7 @@ Aw.fork! { arr << "FUU" } # => ["foo", "FUU"]
44
48
  arr # => ["foo"]
45
49
  ```
46
50
 
47
- Exceptions raised within the block are propagated:
51
+ Exceptions raised within a block of code are propagated:
48
52
 
49
53
  ```ruby
50
54
  Aw.fork! { nil + 1 } # => NoMethodError (undefined method `+' for nil:NilClass)
@@ -60,19 +64,13 @@ __Aw__ follows [Semantic Versioning 2.0](https://semver.org/).
60
64
 
61
65
  ## License
62
66
 
63
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
67
+ The [gem](https://rubygems.org/gems/aw) is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
64
68
 
65
69
  ***
66
70
 
67
71
  <p>
68
72
  This project is sponsored by:<br />
69
73
  <a href="https://sashite.com/"><img
70
- src="https://github.com/fixrb/aw/raw/master/img/sashite.png"
74
+ src="https://github.com/fixrb/aw/raw/main/img/sashite.png"
71
75
  alt="Sashite" /></a>
72
76
  </p>
73
-
74
- [gem]: https://rubygems.org/gems/aw
75
- [travis]: https://travis-ci.org/fixrb/aw
76
- [codeclimate]: https://codeclimate.com/github/fixrb/aw
77
- [inchpages]: https://inch-ci.org/github/fixrb/aw
78
- [rubydoc]: https://rubydoc.info/gems/aw
data/lib/aw.rb CHANGED
@@ -2,18 +2,22 @@
2
2
 
3
3
  # Namespace for the Aw library.
4
4
  #
5
- # @api public
6
- #
7
- # @example Fork and return 42 from 6 * 7.
5
+ # @example Computes `6 * 7` in a sub-process and returns `42` to the current process.
8
6
  # Aw.fork! { 6 * 7 } # => 42
7
+ #
8
+ # @api public
9
9
  module Aw
10
- # Run the block inside a subprocess, and return the value.
10
+ # Runs the block inside a sub-process, and returns the computed value.
11
+ #
12
+ # @param block [Proc] The code to run in a sub-process.
11
13
  #
12
- # @param block [Proc] The code to run in a subprocess.
14
+ # @example Computes `6 * 7` in a sub-process and returns `42` to the current process.
15
+ # fork! { 6 * 7 } # => 42
13
16
  #
14
- # @return [#object_id] The result.
17
+ # @return [#object_id] The computed value.
15
18
  def self.fork!(&block)
16
- Fork.new(*::IO.pipe).call(&block)
19
+ read, write = ::IO.pipe
20
+ Fork.new(read, write).call(&block)
17
21
  end
18
22
  end
19
23
 
data/lib/aw/fork.rb CHANGED
@@ -4,6 +4,8 @@ require "English"
4
4
 
5
5
  module Aw
6
6
  # The Fork class.
7
+ #
8
+ # @api private
7
9
  class Fork
8
10
  # Initialize the class.
9
11
  #
@@ -27,26 +29,33 @@ module Aw
27
29
  # @return [IO] The write endpoint.
28
30
  attr_reader :write
29
31
 
30
- # Run the block inside a subprocess, and return the value.
32
+ # Runs the block inside a sub-process, and returns the computed value.
31
33
  #
32
- # @return [#object_id] The result.
33
- def call(*, **, &block)
34
+ # @example Computes `6 * 7` in a sub-process and returns `42` to the current process.
35
+ # call { 6 * 7 } # => 42
36
+ #
37
+ # @return [#object_id] The computed value.
38
+ def call(&block)
34
39
  pid = fork_and_return_pid(&block)
35
40
  write.close
36
41
  result = read.read
37
42
  ::Process.wait(pid)
38
43
 
39
44
  # rubocop:disable Security/MarshalLoad
40
- ::Marshal.load(result).tap do |r|
41
- raise r if r.is_a?(::Exception)
42
- end
45
+ ::Marshal.load(result).tap { |r| raise r if r.is_a?(::Exception) }
43
46
  # rubocop:enable Security/MarshalLoad
44
47
  end
45
48
 
46
49
  private
47
50
 
51
+ # Creates a sub-process to execute a block inside, and returns the
52
+ # sub-process ID.
53
+ #
54
+ # @return [Integer] The ID of the created sub-process.
48
55
  def fork_and_return_pid
49
56
  fork do
57
+ # :nocov:
58
+
50
59
  read.close
51
60
 
52
61
  # rubocop:disable Lint/RescueException
@@ -59,6 +68,8 @@ module Aw
59
68
 
60
69
  ::Marshal.dump(result, write)
61
70
  exit!(true)
71
+
72
+ # :nocov:
62
73
  end
63
74
  end
64
75
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aw
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.12
4
+ version: 0.1.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cyril Kato
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-13 00:00:00.000000000 Z
11
+ date: 2021-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -122,7 +122,7 @@ dependencies:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
- description: Creates a subprocess to execute a block inside.
125
+ description: Creates a sub-process to execute a block inside, and returns the result.
126
126
  email: contact@cyril.email
127
127
  executables: []
128
128
  extensions: []
@@ -151,7 +151,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
153
  requirements: []
154
- rubygems_version: 3.1.4
154
+ rubygems_version: 3.1.6
155
155
  signing_key:
156
156
  specification_version: 4
157
157
  summary: "Aw, fork! \U0001F62C"