phantom 0.0.1 → 0.0.2.pre
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/.gitignore +1 -0
- data/README.md +11 -1
- data/lib/phantom.rb +1 -0
- data/lib/phantom/phutex.rb +16 -0
- data/lib/phantom/version.rb +1 -1
- data/spec/phutex_spec.rb +36 -0
- metadata +7 -10
- data/.idea/encodings.xml +0 -5
- data/.idea/misc.xml +0 -5
- data/.idea/modules.xml +0 -9
- data/.idea/phantom.iml +0 -136
- data/.idea/scopes/scope_settings.xml +0 -5
- data/.idea/vcs.xml +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 47f827fefb5e4000af3228e84d26e5c34d05fc4d
|
4
|
+
data.tar.gz: 9542a09a4167842a2d262f708a4d57a0ef273b7e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ad1ba18d1df2c1815d851e2efcfc7502406baa70c14e197b7dc3c90e5bbac8dea7cb0851bf00979b671d7631b91b1b84600e59b8eec82e0c5a7b4fbfc152e1a9
|
7
|
+
data.tar.gz: ff5149a60a4fabd9cceb461383edc4b8a8b10f84523be856ea656d9aceda0aae2f5521693f7b0c535aa73030be7bf006fa08e916e58752716f5dd177f5fa15d8
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -28,7 +28,7 @@ Or install it yourself as:
|
|
28
28
|
begin
|
29
29
|
phantom = Phantom.run(pid_file: '/path/to/your.pid',
|
30
30
|
on_ok: method(:my_ok_callback),
|
31
|
-
|
31
|
+
on_error: method(:my_error_callback)) do
|
32
32
|
# Do your background job here
|
33
33
|
end
|
34
34
|
rescue Phantom::ForkError => e
|
@@ -47,6 +47,16 @@ None of the parameters is required.
|
|
47
47
|
|
48
48
|
If `pid_file` is given, `Phantom.run` first check the existence of the file, if exits, raises a `Phantom::ForkError`.
|
49
49
|
|
50
|
+
If you want a global mutex (i.e. mutex between multiple processes), you can use the `Phutex` instances.
|
51
|
+
|
52
|
+
```ruby
|
53
|
+
@phutex = Phantom::Phutex.new('path/to/your/lock/file')
|
54
|
+
|
55
|
+
@phutex.sync do
|
56
|
+
# do your job here
|
57
|
+
end
|
58
|
+
```
|
59
|
+
|
50
60
|
## TODO
|
51
61
|
|
52
62
|
Implement monitoring and intercepting mechanism
|
data/lib/phantom.rb
CHANGED
@@ -0,0 +1,16 @@
|
|
1
|
+
module Phantom
|
2
|
+
class Phutex
|
3
|
+
def initialize(lock_path)
|
4
|
+
@path = lock_path
|
5
|
+
end
|
6
|
+
|
7
|
+
def sync(&block)
|
8
|
+
raise ArgumentError.new('Block must be given.') if not block_given?
|
9
|
+
File.open(@path, 'w') do |f|
|
10
|
+
f.flock(File::LOCK_EX)
|
11
|
+
block.call
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
data/lib/phantom/version.rb
CHANGED
data/spec/phutex_spec.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
require 'phantom'
|
3
|
+
|
4
|
+
describe Phantom::Phutex do
|
5
|
+
|
6
|
+
def lock_file
|
7
|
+
'tmp/.lock'
|
8
|
+
end
|
9
|
+
|
10
|
+
def data_file
|
11
|
+
'tmp/test'
|
12
|
+
end
|
13
|
+
|
14
|
+
after do
|
15
|
+
File.delete(lock_file)
|
16
|
+
File.delete(data_file)
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should synchronize jobs in multiple processes' do
|
20
|
+
|
21
|
+
2.times do
|
22
|
+
Phantom.run do
|
23
|
+
Phantom::Phutex.new(lock_file).sync do
|
24
|
+
File.open(data_file, 'a') do |f|
|
25
|
+
f.write('hello, ')
|
26
|
+
sleep(2)
|
27
|
+
f.write('world. ')
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
sleep(6)
|
34
|
+
File.read(data_file).should == 'hello, world. ' * 2
|
35
|
+
end
|
36
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: phantom
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aetherus
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-11-
|
11
|
+
date: 2013-11-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -60,12 +60,6 @@ extensions: []
|
|
60
60
|
extra_rdoc_files: []
|
61
61
|
files:
|
62
62
|
- .gitignore
|
63
|
-
- .idea/encodings.xml
|
64
|
-
- .idea/misc.xml
|
65
|
-
- .idea/modules.xml
|
66
|
-
- .idea/phantom.iml
|
67
|
-
- .idea/scopes/scope_settings.xml
|
68
|
-
- .idea/vcs.xml
|
69
63
|
- Gemfile
|
70
64
|
- LICENSE.txt
|
71
65
|
- README.md
|
@@ -74,11 +68,13 @@ files:
|
|
74
68
|
- lib/phantom/base.rb
|
75
69
|
- lib/phantom/class_methods.rb
|
76
70
|
- lib/phantom/fork_error.rb
|
71
|
+
- lib/phantom/phutex.rb
|
77
72
|
- lib/phantom/status.rb
|
78
73
|
- lib/phantom/version.rb
|
79
74
|
- phantom.gemspec
|
80
75
|
- spec/base_spec.rb
|
81
76
|
- spec/phantom_spec.rb
|
77
|
+
- spec/phutex_spec.rb
|
82
78
|
homepage: https://github.com/Aetherus/phantom
|
83
79
|
licenses:
|
84
80
|
- MIT
|
@@ -94,9 +90,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
94
90
|
version: '0'
|
95
91
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
92
|
requirements:
|
97
|
-
- - '
|
93
|
+
- - '>'
|
98
94
|
- !ruby/object:Gem::Version
|
99
|
-
version:
|
95
|
+
version: 1.3.1
|
100
96
|
requirements: []
|
101
97
|
rubyforge_project:
|
102
98
|
rubygems_version: 2.1.9
|
@@ -107,3 +103,4 @@ summary: This gem is developed to implement callback mechanism to sub processes.
|
|
107
103
|
test_files:
|
108
104
|
- spec/base_spec.rb
|
109
105
|
- spec/phantom_spec.rb
|
106
|
+
- spec/phutex_spec.rb
|
data/.idea/encodings.xml
DELETED
data/.idea/misc.xml
DELETED
data/.idea/modules.xml
DELETED
@@ -1,9 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<project version="4">
|
3
|
-
<component name="ProjectModuleManager">
|
4
|
-
<modules>
|
5
|
-
<module fileurl="file://$PROJECT_DIR$/.idea/phantom.iml" filepath="$PROJECT_DIR$/.idea/phantom.iml" />
|
6
|
-
</modules>
|
7
|
-
</component>
|
8
|
-
</project>
|
9
|
-
|
data/.idea/phantom.iml
DELETED
@@ -1,136 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<module type="RUBY_MODULE" version="4">
|
3
|
-
<component name="FacetManager">
|
4
|
-
<facet type="gem" name="Gem">
|
5
|
-
<configuration>
|
6
|
-
<option name="GEM_APP_ROOT_PATH" value="$MODULE_DIR$" />
|
7
|
-
<option name="GEM_APP_TEST_PATH" value="$MODULE_DIR$/test" />
|
8
|
-
<option name="GEM_APP_LIB_PATH" value="$MODULE_DIR$/lib" />
|
9
|
-
</configuration>
|
10
|
-
</facet>
|
11
|
-
</component>
|
12
|
-
<component name="ModuleRunConfigurationManager">
|
13
|
-
<configuration default="false" name="Phantom: phantom" type="RSpecRunConfigurationType" factoryName="RSpec" temporary="true">
|
14
|
-
<predefined_log_file id="RUBY_RSPEC" enabled="true" />
|
15
|
-
<module name="phantom" />
|
16
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
|
17
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="WORK DIR" VALUE="$MODULE_DIR$" />
|
18
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SHOULD_USE_SDK" VALUE="false" />
|
19
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="ALTERN_SDK_NAME" VALUE="" />
|
20
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="myPassParentEnvs" VALUE="true" />
|
21
|
-
<envs>
|
22
|
-
<env name="JRUBY_OPTS" value="-X+O" />
|
23
|
-
</envs>
|
24
|
-
<EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="false" />
|
25
|
-
<EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
|
26
|
-
<EXTENSION ID="RubyCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" track_test_folders="true" runner="rcov">
|
27
|
-
<COVERAGE_PATTERN ENABLED="true">
|
28
|
-
<PATTERN REGEXPS="/.rvm/" INCLUDED="false" />
|
29
|
-
</COVERAGE_PATTERN>
|
30
|
-
</EXTENSION>
|
31
|
-
<EXTENSION ID="org.jetbrains.plugins.ruby.motion.run.MotionSimulatorRunExtension" />
|
32
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TESTS_FOLDER_PATH" VALUE="" />
|
33
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_SCRIPT_PATH" VALUE="$MODULE_DIR$/spec/phantom_spec.rb" />
|
34
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_RUNNER_PATH" VALUE="" />
|
35
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_FILE_MASK" VALUE="**/*_spec.rb" />
|
36
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_EXAMPLE_NAME" VALUE="Phantom" />
|
37
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_TEST_TYPE" VALUE="TEST_SCRIPT" />
|
38
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_ARGS" VALUE="" />
|
39
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="RUNNER_VERSION" VALUE="" />
|
40
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="USE_CUSTOM_SPEC_RUNNER" VALUE="false" />
|
41
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="DRB" VALUE="false" />
|
42
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="ZEUS" VALUE="false" />
|
43
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="FULL_BACKTRACE" VALUE="false" />
|
44
|
-
<RunnerSettings RunnerId="RubyRunner" />
|
45
|
-
<ConfigurationWrapper RunnerId="RubyRunner" />
|
46
|
-
<method />
|
47
|
-
</configuration>
|
48
|
-
<configuration default="false" name="phantom_spec: phantom" type="RSpecRunConfigurationType" factoryName="RSpec" temporary="true">
|
49
|
-
<predefined_log_file id="RUBY_RSPEC" enabled="true" />
|
50
|
-
<module name="phantom" />
|
51
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
|
52
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="WORK DIR" VALUE="$MODULE_DIR$" />
|
53
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SHOULD_USE_SDK" VALUE="false" />
|
54
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="ALTERN_SDK_NAME" VALUE="" />
|
55
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="myPassParentEnvs" VALUE="true" />
|
56
|
-
<envs>
|
57
|
-
<env name="JRUBY_OPTS" value="-X+O" />
|
58
|
-
</envs>
|
59
|
-
<EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="false" />
|
60
|
-
<EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
|
61
|
-
<EXTENSION ID="RubyCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" track_test_folders="true" runner="rcov">
|
62
|
-
<COVERAGE_PATTERN ENABLED="true">
|
63
|
-
<PATTERN REGEXPS="/.rvm/" INCLUDED="false" />
|
64
|
-
</COVERAGE_PATTERN>
|
65
|
-
</EXTENSION>
|
66
|
-
<EXTENSION ID="org.jetbrains.plugins.ruby.motion.run.MotionSimulatorRunExtension" />
|
67
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TESTS_FOLDER_PATH" VALUE="" />
|
68
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_SCRIPT_PATH" VALUE="$MODULE_DIR$/spec/phantom_spec.rb" />
|
69
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_RUNNER_PATH" VALUE="" />
|
70
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_FILE_MASK" VALUE="**/*_spec.rb" />
|
71
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_EXAMPLE_NAME" VALUE="" />
|
72
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_TEST_TYPE" VALUE="TEST_SCRIPT" />
|
73
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_ARGS" VALUE="" />
|
74
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="RUNNER_VERSION" VALUE="" />
|
75
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="USE_CUSTOM_SPEC_RUNNER" VALUE="false" />
|
76
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="DRB" VALUE="false" />
|
77
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="ZEUS" VALUE="false" />
|
78
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="FULL_BACKTRACE" VALUE="false" />
|
79
|
-
<RunnerSettings RunnerId="RubyCover" />
|
80
|
-
<RunnerSettings RunnerId="RubyRunner" />
|
81
|
-
<ConfigurationWrapper RunnerId="RubyCover" />
|
82
|
-
<ConfigurationWrapper RunnerId="RubyRunner" />
|
83
|
-
<method />
|
84
|
-
</configuration>
|
85
|
-
<configuration default="false" name="All specs in spec: phantom" type="RSpecRunConfigurationType" factoryName="RSpec" temporary="true">
|
86
|
-
<predefined_log_file id="RUBY_RSPEC" enabled="true" />
|
87
|
-
<module name="phantom" />
|
88
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
|
89
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="WORK DIR" VALUE="$MODULE_DIR$" />
|
90
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SHOULD_USE_SDK" VALUE="false" />
|
91
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="ALTERN_SDK_NAME" VALUE="" />
|
92
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="myPassParentEnvs" VALUE="true" />
|
93
|
-
<envs>
|
94
|
-
<env name="JRUBY_OPTS" value="-X+O" />
|
95
|
-
</envs>
|
96
|
-
<EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="false" />
|
97
|
-
<EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
|
98
|
-
<EXTENSION ID="RubyCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" track_test_folders="true" runner="rcov">
|
99
|
-
<COVERAGE_PATTERN ENABLED="true">
|
100
|
-
<PATTERN REGEXPS="/.rvm/" INCLUDED="false" />
|
101
|
-
</COVERAGE_PATTERN>
|
102
|
-
</EXTENSION>
|
103
|
-
<EXTENSION ID="org.jetbrains.plugins.ruby.motion.run.MotionSimulatorRunExtension" />
|
104
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TESTS_FOLDER_PATH" VALUE="$MODULE_DIR$/spec" />
|
105
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_SCRIPT_PATH" VALUE="" />
|
106
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_RUNNER_PATH" VALUE="" />
|
107
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_FILE_MASK" VALUE="**/*_spec.rb" />
|
108
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_EXAMPLE_NAME" VALUE="" />
|
109
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="TEST_TEST_TYPE" VALUE="ALL_IN_FOLDER" />
|
110
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="SPEC_ARGS" VALUE="" />
|
111
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="RUNNER_VERSION" VALUE="" />
|
112
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="USE_CUSTOM_SPEC_RUNNER" VALUE="false" />
|
113
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="DRB" VALUE="false" />
|
114
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="ZEUS" VALUE="false" />
|
115
|
-
<RSPEC_RUN_CONFIG_SETTINGS_ID NAME="FULL_BACKTRACE" VALUE="false" />
|
116
|
-
<RunnerSettings RunnerId="RubyRunner" />
|
117
|
-
<ConfigurationWrapper RunnerId="RubyRunner" />
|
118
|
-
<method />
|
119
|
-
</configuration>
|
120
|
-
</component>
|
121
|
-
<component name="NewModuleRootManager">
|
122
|
-
<content url="file://$MODULE_DIR$">
|
123
|
-
<sourceFolder url="file://$MODULE_DIR$/spec" isTestSource="true" />
|
124
|
-
</content>
|
125
|
-
<orderEntry type="inheritedJdk" />
|
126
|
-
<orderEntry type="sourceFolder" forTests="false" />
|
127
|
-
<orderEntry type="library" scope="PROVIDED" name="bundler (v1.3.5, RVM: ruby-2.0.0-p247) [gem]" level="application" />
|
128
|
-
<orderEntry type="library" scope="PROVIDED" name="diff-lcs (v1.2.4, RVM: ruby-2.0.0-p247) [gem]" level="application" />
|
129
|
-
<orderEntry type="library" scope="PROVIDED" name="rake (v10.1.0, RVM: ruby-2.0.0-p247) [gem]" level="application" />
|
130
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec (v2.14.1, RVM: ruby-2.0.0-p247) [gem]" level="application" />
|
131
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec-core (v2.14.7, RVM: ruby-2.0.0-p247) [gem]" level="application" />
|
132
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec-expectations (v2.14.4, RVM: ruby-2.0.0-p247) [gem]" level="application" />
|
133
|
-
<orderEntry type="library" scope="PROVIDED" name="rspec-mocks (v2.14.4, RVM: ruby-2.0.0-p247) [gem]" level="application" />
|
134
|
-
</component>
|
135
|
-
</module>
|
136
|
-
|