quartz 0.3.0 → 1.0.0

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
- SHA1:
3
- metadata.gz: 54fa8d117c07a217078603aa35356d7e22375b5a
4
- data.tar.gz: 4b1fd80f82faff8ecddc5799c5a4ace3ea382e14
2
+ SHA256:
3
+ metadata.gz: 4a5901b08fbf0d36cc847822fd1798004bb974045002d490e94f1672e158ba77
4
+ data.tar.gz: 4855108303c8db1da953ba64ce893b8ceed7d5402a22ad1e41ee7b827cc1365d
5
5
  SHA512:
6
- metadata.gz: 49d594adafa5f15cc926ad8c2317bbfcc80949d3c48f828189f8112c995e9804fe491f3649230f65bbe7b68954c65bd2c32e060491693ed0b49e1fa7dc9d7a7c
7
- data.tar.gz: a04a4b95f0b7d1e349940b4cc140fde0f7ab8b86adc2e400366558fac453f127838c5049342eeb8b7ea53d040baf2aa4dfbb431725de4b11f5a4ba3664f13396
6
+ metadata.gz: bea12833a8a77a9c08f3b3f2da13a5480d94fd2710535d7f7bf54711ab2339cc1fc890e7869aa748b9df15f2843108611adb97c9b4476ac16875e3a4ef8226e4
7
+ data.tar.gz: 1104a944a663d87238ddd25b8e2e293e1f04d3c95e3b0ccd7f37cce45764b522b1c4872d2273188a011aecaa46866a08ac46177ee63e37ce7f2329bf5e66116e
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.1.5
1
+ 2.5.1
data/.travis.yml CHANGED
@@ -1,17 +1,12 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
4
- - 2.0.0
5
- - 2.1.5
6
- - 2.2.0
3
+ - 2.5.1
7
4
  before_script:
8
5
  - sudo apt-get install build-essential
9
- - git clone --branch=go1.4.1 --depth=1 https://github.com/golang/go.git ~/go
10
- - pushd ~/go/src && ./make.bash && popd
6
+ - pushd /tmp && wget https://dl.google.com/go/go1.10.2.linux-amd64.tar.gz && tar -xf go1.10.2.linux-amd64.tar.gz && sudo cp -R go /usr/local/ && popd
11
7
  - mkdir -p ~/src/github.com/DavidHuie
12
8
  - ln -s `pwd` ~/src/github.com/DavidHuie/quartz
13
9
  env:
14
- - GOROOT=~/go GOPATH=~/ PATH=$GOROOT/bin:$GOPATH/bin:$PATH
10
+ - GOROOT=/usr/local/go GOPATH=~/ PATH=$GOROOT/bin:$GOPATH/bin:$PATH
15
11
  script:
16
12
  - bundle exec rake
17
- - go test ./go/quartz
data/Gemfile CHANGED
@@ -1,9 +1,10 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
+ gem 'multi_json', '~> 1.13'
4
+
3
5
  group :development do
4
- gem 'jeweler', '~> 2.0'
5
- gem 'rspec', '~> 3.1'
6
- gem 'ruby-prof', '~> 0.15'
7
- gem 'simplecov', '~> 0.9'
8
- gem 'multi_json', '~> 1.4'
6
+ gem 'jeweler', '~> 2.3'
7
+ gem 'rspec', '~> 3.7'
8
+ gem 'ruby-prof', '~> 0.17'
9
+ gem 'simplecov', '~> 0.16'
9
10
  end
data/Gemfile.lock CHANGED
@@ -1,79 +1,85 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- addressable (2.3.7)
5
- builder (3.2.2)
4
+ addressable (2.4.0)
5
+ builder (3.2.3)
6
6
  descendants_tracker (0.0.4)
7
7
  thread_safe (~> 0.3, >= 0.3.1)
8
- diff-lcs (1.2.5)
9
- docile (1.1.5)
10
- faraday (0.9.1)
8
+ diff-lcs (1.3)
9
+ docile (1.3.1)
10
+ faraday (0.9.2)
11
11
  multipart-post (>= 1.2, < 3)
12
- git (1.2.9.1)
13
- github_api (0.12.3)
14
- addressable (~> 2.3)
12
+ git (1.4.0)
13
+ github_api (0.16.0)
14
+ addressable (~> 2.4.0)
15
15
  descendants_tracker (~> 0.0.4)
16
16
  faraday (~> 0.8, < 0.10)
17
- hashie (>= 3.3)
18
- multi_json (>= 1.7.5, < 2.0)
19
- nokogiri (~> 1.6.3)
20
- oauth2
21
- hashie (3.4.0)
22
- highline (1.7.1)
23
- jeweler (2.0.1)
17
+ hashie (>= 3.4)
18
+ mime-types (>= 1.16, < 3.0)
19
+ oauth2 (~> 1.0)
20
+ hashie (3.5.7)
21
+ highline (1.7.10)
22
+ jeweler (2.3.9)
24
23
  builder
25
- bundler (>= 1.0)
24
+ bundler
26
25
  git (>= 1.2.5)
27
- github_api
26
+ github_api (~> 0.16.0)
28
27
  highline (>= 1.6.15)
29
28
  nokogiri (>= 1.5.10)
29
+ psych
30
30
  rake
31
31
  rdoc
32
- json (1.8.2)
33
- jwt (1.3.0)
34
- mini_portile (0.6.2)
35
- multi_json (1.10.1)
36
- multi_xml (0.5.5)
32
+ semver2
33
+ json (2.1.0)
34
+ jwt (1.5.6)
35
+ mime-types (2.99.3)
36
+ mini_portile2 (2.3.0)
37
+ multi_json (1.13.1)
38
+ multi_xml (0.6.0)
37
39
  multipart-post (2.0.0)
38
- nokogiri (1.6.6.2)
39
- mini_portile (~> 0.6.0)
40
- oauth2 (1.0.0)
41
- faraday (>= 0.8, < 0.10)
40
+ nokogiri (1.8.2)
41
+ mini_portile2 (~> 2.3.0)
42
+ oauth2 (1.4.0)
43
+ faraday (>= 0.8, < 0.13)
42
44
  jwt (~> 1.0)
43
45
  multi_json (~> 1.3)
44
46
  multi_xml (~> 0.5)
45
- rack (~> 1.2)
46
- rack (1.6.0)
47
- rake (10.4.2)
48
- rdoc (4.2.0)
49
- json (~> 1.4)
50
- rspec (3.2.0)
51
- rspec-core (~> 3.2.0)
52
- rspec-expectations (~> 3.2.0)
53
- rspec-mocks (~> 3.2.0)
54
- rspec-core (3.2.1)
55
- rspec-support (~> 3.2.0)
56
- rspec-expectations (3.2.0)
47
+ rack (>= 1.2, < 3)
48
+ psych (3.0.2)
49
+ rack (2.0.5)
50
+ rake (12.3.1)
51
+ rdoc (6.0.4)
52
+ rspec (3.7.0)
53
+ rspec-core (~> 3.7.0)
54
+ rspec-expectations (~> 3.7.0)
55
+ rspec-mocks (~> 3.7.0)
56
+ rspec-core (3.7.1)
57
+ rspec-support (~> 3.7.0)
58
+ rspec-expectations (3.7.0)
57
59
  diff-lcs (>= 1.2.0, < 2.0)
58
- rspec-support (~> 3.2.0)
59
- rspec-mocks (3.2.1)
60
+ rspec-support (~> 3.7.0)
61
+ rspec-mocks (3.7.0)
60
62
  diff-lcs (>= 1.2.0, < 2.0)
61
- rspec-support (~> 3.2.0)
62
- rspec-support (3.2.2)
63
- ruby-prof (0.15.6)
64
- simplecov (0.9.2)
65
- docile (~> 1.1.0)
66
- multi_json (~> 1.0)
67
- simplecov-html (~> 0.9.0)
68
- simplecov-html (0.9.0)
69
- thread_safe (0.3.4)
63
+ rspec-support (~> 3.7.0)
64
+ rspec-support (3.7.1)
65
+ ruby-prof (0.17.0)
66
+ semver2 (3.4.2)
67
+ simplecov (0.16.1)
68
+ docile (~> 1.1)
69
+ json (>= 1.8, < 3)
70
+ simplecov-html (~> 0.10.0)
71
+ simplecov-html (0.10.2)
72
+ thread_safe (0.3.6)
70
73
 
71
74
  PLATFORMS
72
75
  ruby
73
76
 
74
77
  DEPENDENCIES
75
- jeweler (~> 2.0)
76
- multi_json (~> 1.4)
77
- rspec (~> 3.1)
78
- ruby-prof (~> 0.15)
79
- simplecov (~> 0.9)
78
+ jeweler (~> 2.3)
79
+ multi_json (~> 1.13)
80
+ rspec (~> 3.7)
81
+ ruby-prof (~> 0.17)
82
+ simplecov (~> 0.16)
83
+
84
+ BUNDLED WITH
85
+ 1.16.2
data/README.md CHANGED
@@ -117,6 +117,14 @@ client[:my_adder].call('Add', 'A' => 2, 'B' => 5)
117
117
  => { 'Sum' => 7 }
118
118
  ```
119
119
 
120
+ By default the unix socket is created under `/tmp`. If you want to change that
121
+ you can pass the `socket_dir` option.
122
+
123
+
124
+ ```ruby
125
+ client = Quartz::Client.new(bin_path: 'my_adder_binary', socket_dir: '/apps/my_app/tmp')
126
+ ```
127
+
120
128
  ## Copyright
121
129
 
122
- Copyright (c) 2014 David Huie. See LICENSE.txt for further details.
130
+ Copyright (c) 2018 David Huie. See LICENSE.txt for further details.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 1.0.0
data/go/quartz/quartz.go CHANGED
@@ -7,10 +7,11 @@ import (
7
7
  "os"
8
8
  "os/signal"
9
9
  "reflect"
10
+ "strings"
10
11
  "syscall"
11
12
  )
12
13
 
13
- // This holds information about exported structs.
14
+ // Quartz holds information about exported structs.
14
15
  type Quartz struct {
15
16
  Registry *Registry
16
17
  }
@@ -19,7 +20,8 @@ func newQuartz() *Quartz {
19
20
  return &Quartz{newRegistry()}
20
21
  }
21
22
 
22
- // Exports a struct via RPC and generates metadata for each of the struct's methods.
23
+ // RegisterName exports a struct via RPC and generates metadata for
24
+ // each of the struct's methods.
23
25
  func (q *Quartz) RegisterName(name string, s interface{}) error {
24
26
  q.Registry.data[name] = newStructMetadata(s)
25
27
  t := reflect.TypeOf(s)
@@ -36,6 +38,7 @@ func (q *Quartz) RegisterName(name string, s interface{}) error {
36
38
  return rpc.RegisterName(name, s)
37
39
  }
38
40
 
41
+ // Start launches the server.
39
42
  func (q *Quartz) Start() {
40
43
  // The Ruby gem sets this environment variable for us.
41
44
  socketPath := "/tmp/quartz.socket"
@@ -67,6 +70,10 @@ func (q *Quartz) Start() {
67
70
  for {
68
71
  conn, err := listener.Accept()
69
72
  if err != nil {
73
+ // The connection was closed by a signal.
74
+ if strings.Contains(err.Error(), "use of closed network connection") {
75
+ return
76
+ }
70
77
  panic(err)
71
78
  }
72
79
  go jsonrpc.ServeConn(conn)
@@ -10,7 +10,8 @@ class Quartz::GoProcess
10
10
 
11
11
  def initialize(opts)
12
12
  @seed = SecureRandom.hex
13
- @socket_path = "/tmp/quartz_#{seed}.sock"
13
+ socket_dir = opts.fetch(:socket_dir) { '/tmp' }
14
+ @socket_path = File.join(socket_dir, "quartz_#{seed}.sock")
14
15
  ENV['QUARTZ_SOCKET'] = @socket_path
15
16
 
16
17
  if opts[:file_path]
data/quartz.gemspec CHANGED
@@ -2,18 +2,18 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: quartz 0.3.0 ruby lib
5
+ # stub: quartz 1.0.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
- s.name = "quartz"
9
- s.version = "0.3.0"
8
+ s.name = "quartz".freeze
9
+ s.version = "1.0.0"
10
10
 
11
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
- s.require_paths = ["lib"]
13
- s.authors = ["David Huie"]
14
- s.date = "2015-04-28"
15
- s.description = "A gem for calling Go code from Ruby"
16
- s.email = "dahuie@gmail.com"
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib".freeze]
13
+ s.authors = ["David Huie".freeze]
14
+ s.date = "2018-06-06"
15
+ s.description = "A gem for calling Go code from Ruby".freeze
16
+ s.email = "dahuie@gmail.com".freeze
17
17
  s.extra_rdoc_files = [
18
18
  "LICENSE.txt",
19
19
  "README.md"
@@ -52,33 +52,33 @@ Gem::Specification.new do |s|
52
52
  "spec/spec_helper.rb",
53
53
  "spec/test.go"
54
54
  ]
55
- s.homepage = "http://github.com/DavidHuie/quartz"
56
- s.licenses = ["MIT"]
57
- s.rubygems_version = "2.4.3"
58
- s.summary = "A gem for calling Go code from Ruby"
55
+ s.homepage = "http://github.com/DavidHuie/quartz".freeze
56
+ s.licenses = ["MIT".freeze]
57
+ s.rubygems_version = "2.7.6".freeze
58
+ s.summary = "A gem for calling Go code from Ruby".freeze
59
59
 
60
60
  if s.respond_to? :specification_version then
61
61
  s.specification_version = 4
62
62
 
63
63
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
64
- s.add_development_dependency(%q<jeweler>, ["~> 2.0"])
65
- s.add_development_dependency(%q<rspec>, ["~> 3.1"])
66
- s.add_development_dependency(%q<ruby-prof>, ["~> 0.15"])
67
- s.add_development_dependency(%q<simplecov>, ["~> 0.9"])
68
- s.add_development_dependency(%q<multi_json>, ["~> 1.4"])
64
+ s.add_runtime_dependency(%q<multi_json>.freeze, ["~> 1.13"])
65
+ s.add_development_dependency(%q<jeweler>.freeze, ["~> 2.3"])
66
+ s.add_development_dependency(%q<rspec>.freeze, ["~> 3.7"])
67
+ s.add_development_dependency(%q<ruby-prof>.freeze, ["~> 0.17"])
68
+ s.add_development_dependency(%q<simplecov>.freeze, ["~> 0.16"])
69
69
  else
70
- s.add_dependency(%q<jeweler>, ["~> 2.0"])
71
- s.add_dependency(%q<rspec>, ["~> 3.1"])
72
- s.add_dependency(%q<ruby-prof>, ["~> 0.15"])
73
- s.add_dependency(%q<simplecov>, ["~> 0.9"])
74
- s.add_dependency(%q<multi_json>, ["~> 1.4"])
70
+ s.add_dependency(%q<multi_json>.freeze, ["~> 1.13"])
71
+ s.add_dependency(%q<jeweler>.freeze, ["~> 2.3"])
72
+ s.add_dependency(%q<rspec>.freeze, ["~> 3.7"])
73
+ s.add_dependency(%q<ruby-prof>.freeze, ["~> 0.17"])
74
+ s.add_dependency(%q<simplecov>.freeze, ["~> 0.16"])
75
75
  end
76
76
  else
77
- s.add_dependency(%q<jeweler>, ["~> 2.0"])
78
- s.add_dependency(%q<rspec>, ["~> 3.1"])
79
- s.add_dependency(%q<ruby-prof>, ["~> 0.15"])
80
- s.add_dependency(%q<simplecov>, ["~> 0.9"])
81
- s.add_dependency(%q<multi_json>, ["~> 1.4"])
77
+ s.add_dependency(%q<multi_json>.freeze, ["~> 1.13"])
78
+ s.add_dependency(%q<jeweler>.freeze, ["~> 2.3"])
79
+ s.add_dependency(%q<rspec>.freeze, ["~> 3.7"])
80
+ s.add_dependency(%q<ruby-prof>.freeze, ["~> 0.17"])
81
+ s.add_dependency(%q<simplecov>.freeze, ["~> 0.16"])
82
82
  end
83
83
  end
84
84
 
@@ -34,6 +34,25 @@ describe Quartz::GoProcess do
34
34
  File.delete(temp_file)
35
35
  end
36
36
 
37
+ context 'when custom socket directory is used' do
38
+
39
+ before { Dir.mkdir(socket_dir) unless File.directory?(socket_dir) }
40
+
41
+ let(:socket_dir) { '/tmp/x' }
42
+ let(:process) { Quartz::GoProcess.new(file_path: 'spec/test.go', socket_dir: socket_dir) }
43
+
44
+ it 'works with custom socket directory' do
45
+ expect(File.exists?(process.socket_path)).to be_truthy
46
+ process.cleanup
47
+ expect(File.exists?(process.socket_path)).to be_falsey
48
+ end
49
+
50
+ it 'creates the socket in the socket dir' do
51
+ expect(process.socket_path).to match(/^#{socket_dir}\/quartz_[a-f\d]+\.sock/)
52
+ end
53
+
54
+ end
55
+
37
56
  describe '.cleanup' do
38
57
 
39
58
  context 'files' do
metadata CHANGED
@@ -1,85 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quartz
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Huie
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-28 00:00:00.000000000 Z
11
+ date: 2018-06-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: jeweler
14
+ name: multi_json
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.0'
20
- type: :development
19
+ version: '1.13'
20
+ type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2.0'
26
+ version: '1.13'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rspec
28
+ name: jeweler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '3.1'
33
+ version: '2.3'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '3.1'
40
+ version: '2.3'
41
41
  - !ruby/object:Gem::Dependency
42
- name: ruby-prof
42
+ name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0.15'
47
+ version: '3.7'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0.15'
54
+ version: '3.7'
55
55
  - !ruby/object:Gem::Dependency
56
- name: simplecov
56
+ name: ruby-prof
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0.9'
61
+ version: '0.17'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0.9'
68
+ version: '0.17'
69
69
  - !ruby/object:Gem::Dependency
70
- name: multi_json
70
+ name: simplecov
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '1.4'
75
+ version: '0.16'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '1.4'
82
+ version: '0.16'
83
83
  description: A gem for calling Go code from Ruby
84
84
  email: dahuie@gmail.com
85
85
  executables: []
@@ -140,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
140
140
  version: '0'
141
141
  requirements: []
142
142
  rubyforge_project:
143
- rubygems_version: 2.4.3
143
+ rubygems_version: 2.7.6
144
144
  signing_key:
145
145
  specification_version: 4
146
146
  summary: A gem for calling Go code from Ruby