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 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
-