phantom 0.0.1 → 0.0.2.pre
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
|