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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e5395b53c7f1561a2687b7df2cbafff5ee34c5e1
4
- data.tar.gz: 74be7c0eb42b6e2fbc896677b8a1d514d9e582ee
3
+ metadata.gz: 47f827fefb5e4000af3228e84d26e5c34d05fc4d
4
+ data.tar.gz: 9542a09a4167842a2d262f708a4d57a0ef273b7e
5
5
  SHA512:
6
- metadata.gz: c371d61bdcd53237401c978780fdd98250ed368a09b3db89e91943af4cc700beb3d8d00c9b06bfce608fcf866af220fc2ce824067d22285c6f2410f24601456a
7
- data.tar.gz: 914f9d6314cad126cc03e37dcee6872f986bec63d621f03b9ed04a2b21db0b3f28a07e50921e893f72c0a5e96b180d60a9cd4e156f123dbfb2d7d29dae614555
6
+ metadata.gz: ad1ba18d1df2c1815d851e2efcfc7502406baa70c14e197b7dc3c90e5bbac8dea7cb0851bf00979b671d7631b91b1b84600e59b8eec82e0c5a7b4fbfc152e1a9
7
+ data.tar.gz: ff5149a60a4fabd9cceb461383edc4b8a8b10f84523be856ea656d9aceda0aae2f5521693f7b0c535aa73030be7bf006fa08e916e58752716f5dd177f5fa15d8
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ .idea/
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
- on_error: method(:my_error_callback)) do
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
@@ -2,6 +2,7 @@ require 'phantom/fork_error'
2
2
  require 'phantom/base'
3
3
  require 'phantom/status'
4
4
  require 'phantom/class_methods'
5
+ require 'phantom/phutex'
5
6
 
6
7
  module Phantom
7
8
 
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Phantom
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2.pre"
3
3
  end
@@ -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.1
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 00:00:00.000000000 Z
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: '0'
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
@@ -1,5 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
4
- </project>
5
-
data/.idea/misc.xml DELETED
@@ -1,5 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ProjectRootManager" version="2" project-jdk-name="RVM: ruby-2.0.0-p247" project-jdk-type="RUBY_SDK" />
4
- </project>
5
-
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
-
@@ -1,5 +0,0 @@
1
- <component name="DependencyValidationManager">
2
- <state>
3
- <option name="SKIP_IMPORT_STATEMENTS" value="false" />
4
- </state>
5
- </component>
data/.idea/vcs.xml DELETED
@@ -1,7 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="VcsDirectoryMappings">
4
- <mapping directory="$PROJECT_DIR$" vcs="Git" />
5
- </component>
6
- </project>
7
-