aw 0.1.13 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.md +1 -1
  3. data/README.md +55 -12
  4. data/lib/aw/fork.rb +6 -5
  5. data/lib/aw.rb +27 -6
  6. metadata +10 -120
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9af984fb0d47a9566b6ca5c9ac4a7208328cb444b504865e4fff631bb4122db7
4
- data.tar.gz: 8c9759ef06861c6518cedd5867d85ebb04b62a01512a42abd94b401a3d67aa92
3
+ metadata.gz: 7e73149e7b499dddb359e9995c9cfe6b1af71d2bb63789f9bf0e13d029893b10
4
+ data.tar.gz: debe86862bee16a1902fb2c1b6448ba7d5bff733fa5ed0470cce4af5a2d30cb4
5
5
  SHA512:
6
- metadata.gz: b950326ea7dc9a6846f079e75325e14d90d0261466dbd896dc57644eba8ef08ef8935364e756b6e41ed9f8b11cef68bb9752c9d3ad146daaf375f0b5334920d3
7
- data.tar.gz: f21141ba62144f1b86ebead8c2816625c243272c51e671fcbdf95a28b8f81c8716dae4e7063427722094db3e661e8ceca2fdf757f2bf26612f9673dc35754b26
6
+ metadata.gz: 92954fad1db8bae390956d76c27cffb0fe399c55f2df5b16f102a2a69345a09b62d64a0694864036745f4cb4ceb89a7e143547d035da743e3abd22c0d1ffa14a
7
+ data.tar.gz: a1eb7a51f4bd7c068ace563f093e2ba94235067bd773a7921f6f175cf9a2a559ba045b9b54fe6f021b5b114ad33bdab48bbc0843ef617ea9fe42a386ae52ef79
data/LICENSE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2015-2021 Cyril Kato
3
+ Copyright (c) 2015-2024 Cyril Kato
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,14 +1,16 @@
1
1
  # Aw
2
2
 
3
- [![Version](https://img.shields.io/github/v/tag/fixrb/aw?label=Version&logo=github)](https://github.com/fixrb/aw/releases)
3
+ [![Version](https://img.shields.io/github/v/tag/fixrb/aw?label=Version&logo=github)](https://github.com/fixrb/aw/tags)
4
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)
5
+ [![Ruby](https://github.com/fixrb/aw/workflows/Ruby/badge.svg?branch=main)](https://github.com/fixrb/aw/actions?query=workflow%3Aruby+branch%3Amain)
6
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
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
- > Aw, fork! 😬
9
+ > Aw, fork 😬
10
10
 
11
- Creates a sub-process to execute a block inside, and return the result.
11
+ ![Aw](https://github.com/fixrb/aw/raw/main/img/aw.jpg)
12
+
13
+ Creates a sub-process to execute a block inside, and returns what it returns (or a boolean).
12
14
 
13
15
  ## Installation
14
16
 
@@ -21,7 +23,7 @@ gem "aw"
21
23
  And then execute:
22
24
 
23
25
  ```sh
24
- bundle
26
+ bundle install
25
27
  ```
26
28
 
27
29
  Or install it yourself as:
@@ -32,26 +34,67 @@ gem install aw
32
34
 
33
35
  ## Usage
34
36
 
35
- Execute a block of code in a sub-process, and return the result to the current process:
37
+ To make __Aw__ available:
38
+
39
+ ```ruby
40
+ require "aw"
41
+ ```
42
+
43
+ There are two methods:
44
+
45
+ - `fork!`
46
+ - `fork?`
47
+
48
+ ### Method `.fork!`
49
+
50
+ Executes a block of code in a sub-process, and returns the result:
36
51
 
37
52
  ```ruby
38
53
  Aw.fork! { 6 * 7 } # => 42
39
54
  ```
40
55
 
41
- Therefore, when the execution of a block of code causes side effects, they are limited to the sub-process:
56
+ When the execution of a block of code causes side effects, these are limited to the sub-process:
42
57
 
43
58
  ```ruby
44
- arr = ["foo"]
59
+ arr = ["foo"] # => ["foo"]
45
60
 
46
61
  Aw.fork! { arr << "FUU" } # => ["foo", "FUU"]
47
62
 
48
63
  arr # => ["foo"]
49
64
  ```
50
65
 
51
- Exceptions raised within a block of code are propagated:
66
+ Exceptions raised in a block of code are propagated:
67
+
68
+ ```ruby
69
+ Aw.fork! { nil + 1 }
70
+ ```
71
+
72
+ results in the error:
73
+
74
+ > `NoMethodError` (undefined method `+' for nil:NilClass)
75
+
76
+ ### Method `.fork?`
77
+
78
+ Executes a block of code in a sub-process, and returns `true` if no exception is thrown:
79
+
80
+ ```ruby
81
+ Aw.fork? { 6 * 7 } # => true
82
+ ```
83
+
84
+ When the execution of a block of code causes side effects, these are limited to the sub-process:
85
+
86
+ ```ruby
87
+ arr = ["foo"] # => ["foo"]
88
+
89
+ Aw.fork? { arr << "FUU" } # => true
90
+
91
+ arr # => ["foo"]
92
+ ```
93
+
94
+ When an exception is raised in a code block, `false` is returned:
52
95
 
53
96
  ```ruby
54
- Aw.fork! { nil + 1 } # => NoMethodError (undefined method `+' for nil:NilClass)
97
+ Aw.fork? { nil + 1 } # => false
55
98
  ```
56
99
 
57
100
  ## Contact
@@ -64,7 +107,7 @@ __Aw__ follows [Semantic Versioning 2.0](https://semver.org/).
64
107
 
65
108
  ## License
66
109
 
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).
110
+ The [gem](https://rubygems.org/gems/aw) is available as open source under the terms of the [MIT License](https://github.com/fixrb/aw/raw/main/LICENSE.md).
68
111
 
69
112
  ***
70
113
 
@@ -72,5 +115,5 @@ The [gem](https://rubygems.org/gems/aw) is available as open source under the te
72
115
  This project is sponsored by:<br />
73
116
  <a href="https://sashite.com/"><img
74
117
  src="https://github.com/fixrb/aw/raw/main/img/sashite.png"
75
- alt="Sashite" /></a>
118
+ alt="Sashité" /></a>
76
119
  </p>
data/lib/aw/fork.rb CHANGED
@@ -34,9 +34,10 @@ module Aw
34
34
  # @example Computes `6 * 7` in a sub-process and returns `42` to the current process.
35
35
  # call { 6 * 7 } # => 42
36
36
  #
37
- # @return [#object_id] The computed value.
38
- def call(&block)
39
- pid = fork_and_return_pid(&block)
37
+ # @raise [Exception] Exceptions raised in a block of code are propagated.
38
+ # @return [#object_id] Returns the value that has been returned in the block.
39
+ def call(&)
40
+ pid = fork_and_return_pid(&)
40
41
  write.close
41
42
  result = read.read
42
43
  ::Process.wait(pid)
@@ -53,7 +54,7 @@ module Aw
53
54
  #
54
55
  # @return [Integer] The ID of the created sub-process.
55
56
  def fork_and_return_pid
56
- fork do
57
+ ::Process.fork do
57
58
  # :nocov:
58
59
 
59
60
  read.close
@@ -67,7 +68,7 @@ module Aw
67
68
  # rubocop:enable Lint/RescueException
68
69
 
69
70
  ::Marshal.dump(result, write)
70
- exit!(true)
71
+ ::Process.exit!(true)
71
72
 
72
73
  # :nocov:
73
74
  end
data/lib/aw.rb CHANGED
@@ -5,19 +5,40 @@
5
5
  # @example Computes `6 * 7` in a sub-process and returns `42` to the current process.
6
6
  # Aw.fork! { 6 * 7 } # => 42
7
7
  #
8
+ # @example Computes `6 * 7` in a sub-process and returns `true` to the current process if no exception is thrown.
9
+ # Aw.fork? { 6 * 7 } # => true
10
+ #
8
11
  # @api public
9
12
  module Aw
10
13
  # Runs the block inside a sub-process, and returns the computed value.
11
14
  #
12
- # @param block [Proc] The code to run in a sub-process.
13
- #
14
15
  # @example Computes `6 * 7` in a sub-process and returns `42` to the current process.
15
- # fork! { 6 * 7 } # => 42
16
+ # Aw.fork! { 6 * 7 } # => 42
16
17
  #
17
- # @return [#object_id] The computed value.
18
- def self.fork!(&block)
18
+ # @example Computes `nil + 1` in a sub-process and raises `NoMethodError` to the current process.
19
+ # Aw.fork! { nil + 1 } # => raise NoMethodError (undefined method `+' for nil:NilClass)
20
+ #
21
+ # @raise [Exception] Exceptions raised in a block of code are propagated.
22
+ # @return [#object_id] Returns the value that has been returned in the block.
23
+ def self.fork!(&)
19
24
  read, write = ::IO.pipe
20
- Fork.new(read, write).call(&block)
25
+ Fork.new(read, write).call(&)
26
+ end
27
+
28
+ # Runs the block inside a sub-process, and returns `true` if no exception is
29
+ # thrown. Otherwise when an exception is raised, `false` is returned.
30
+ #
31
+ # @example Computes `6 * 7` in a sub-process and returns `true` to the current process.
32
+ # Aw.fork? { 6 * 7 } # => true
33
+ #
34
+ # @example Computes `nil + 1` in a sub-process and returns `false` to the current process.
35
+ # Aw.fork? { nil + 1 } # => false
36
+ #
37
+ # @return [Boolean] Returns `true` if stat is successful, `false` if not.
38
+ def self.fork?(&)
39
+ pid = ::Process.fork(&)
40
+ _, status = ::Process.wait2(pid)
41
+ status.success?
21
42
  end
22
43
  end
23
44
 
metadata CHANGED
@@ -1,128 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aw
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.13
4
+ version: 0.2.1
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-07-31 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: rubocop-md
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: rubocop-performance
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: rubocop-rake
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: rubocop-thread_safety
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: simplecov
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: yard
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: '0'
125
- description: Creates a sub-process to execute a block inside, and returns the result.
11
+ date: 2024-01-25 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Creates a sub-process to execute a block inside, and returns what it
14
+ returns.
126
15
  email: contact@cyril.email
127
16
  executables: []
128
17
  extensions: []
@@ -135,7 +24,8 @@ files:
135
24
  homepage: https://github.com/fixrb/aw
136
25
  licenses:
137
26
  - MIT
138
- metadata: {}
27
+ metadata:
28
+ rubygems_mfa_required: 'true'
139
29
  post_install_message:
140
30
  rdoc_options: []
141
31
  require_paths:
@@ -144,15 +34,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
144
34
  requirements:
145
35
  - - ">="
146
36
  - !ruby/object:Gem::Version
147
- version: 2.7.0
37
+ version: 3.2.0
148
38
  required_rubygems_version: !ruby/object:Gem::Requirement
149
39
  requirements:
150
40
  - - ">="
151
41
  - !ruby/object:Gem::Version
152
42
  version: '0'
153
43
  requirements: []
154
- rubygems_version: 3.1.6
44
+ rubygems_version: 3.4.19
155
45
  signing_key:
156
46
  specification_version: 4
157
- summary: "Aw, fork! \U0001F62C"
47
+ summary: "Aw, fork \U0001F62C"
158
48
  test_files: []