quartz 0.2.4 → 0.2.5

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: 91e68a31484058746ae143cb282f937a99b10b63
4
- data.tar.gz: c7b3119b2f4628dbcdc7888d478d8e6f533778e1
3
+ metadata.gz: ebfd7d4019c4952c5fa8c089d1e40c7bd99d3383
4
+ data.tar.gz: 7383e1077dc7f67d1040b7249c84cf7504da6c41
5
5
  SHA512:
6
- metadata.gz: 090d499ed69646a90a667f09b4d8bfc27cb9fbfab492943dcc8bb76da79ed28b799022457b57a0165defe8a3b587988e304f92050d15e855668c69f38408a691
7
- data.tar.gz: 53b8de60e6f2acc60c5af92e130b70ac3405a49f72633c426c44d97bd02bd654c59577c6320ba28212da39ecd122b37b350383d2d7584e6439692e6a8711ac7b
6
+ metadata.gz: 6d2874247cf7b5f25156452ccdb81c9a3d0a749fdeb125498e628f911edbf6c0c14fc1f24108579056b5bb3202011e2376d864dc7b31ebfd33b3fb23639e5641
7
+ data.tar.gz: 28c083a54b0191ece7ab3e735de9b41aa8d459535a8ca2bc2ef7db01ad19036fa0d6d2509ed7bb0969f189460bb594db5d9127099472ece45a25c18f6e1f0667
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ quartz
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.1.5
data/.travis.yml CHANGED
@@ -1,7 +1,17 @@
1
- language: go
2
-
3
- go: 1.2.1
4
-
5
- before_script: bundle install
6
-
7
- script: bundle exec rake
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
5
+ - 2.1.5
6
+ - 2.2.0
7
+ before_script:
8
+ - 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
11
+ - mkdir -p ~/src/github.com/DavidHuie
12
+ - ln -s `pwd` ~/src/github.com/DavidHuie/quartz
13
+ env:
14
+ - GOROOT=~/go GOPATH=~/ PATH=$GOROOT/bin:$GOPATH/bin:$PATH
15
+ script:
16
+ - bundle exec rake
17
+ - go test ./go/quartz
data/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ # 0.2.5
2
+ - [#12] Make seeds in Go process wrappers threadsafe
3
+ - Destroy socket files upon exit inside Go processes
4
+ - Upgrade development environment to Ruby 2.1.5 and Go 1.4
5
+ - Use long suffixes when naming domain sockets
data/Gemfile CHANGED
@@ -1,7 +1,8 @@
1
1
  source 'http://rubygems.org'
2
2
 
3
3
  group :development do
4
- gem 'rspec', '~> 2.8.0'
5
- gem 'jeweler', '~> 2.0.1'
6
- gem 'simplecov', '~> 0.8.2'
4
+ gem 'jeweler', '~> 2.0'
5
+ gem 'rspec', '~> 3.1'
6
+ gem 'ruby-prof', '~> 0.15'
7
+ gem 'simplecov', '~> 0.9'
7
8
  end
data/Gemfile.lock CHANGED
@@ -5,7 +5,7 @@ GEM
5
5
  builder (3.2.2)
6
6
  descendants_tracker (0.0.4)
7
7
  thread_safe (~> 0.3, >= 0.3.1)
8
- diff-lcs (1.1.3)
8
+ diff-lcs (1.2.5)
9
9
  docile (1.1.5)
10
10
  faraday (0.9.0)
11
11
  multipart-post (>= 1.2, < 3)
@@ -47,17 +47,22 @@ GEM
47
47
  rake (10.3.2)
48
48
  rdoc (3.12.2)
49
49
  json (~> 1.4)
50
- rspec (2.8.0)
51
- rspec-core (~> 2.8.0)
52
- rspec-expectations (~> 2.8.0)
53
- rspec-mocks (~> 2.8.0)
54
- rspec-core (2.8.0)
55
- rspec-expectations (2.8.0)
56
- diff-lcs (~> 1.1.2)
57
- rspec-mocks (2.8.0)
58
- simplecov (0.8.2)
50
+ rspec (3.1.0)
51
+ rspec-core (~> 3.1.0)
52
+ rspec-expectations (~> 3.1.0)
53
+ rspec-mocks (~> 3.1.0)
54
+ rspec-core (3.1.7)
55
+ rspec-support (~> 3.1.0)
56
+ rspec-expectations (3.1.2)
57
+ diff-lcs (>= 1.2.0, < 2.0)
58
+ rspec-support (~> 3.1.0)
59
+ rspec-mocks (3.1.3)
60
+ rspec-support (~> 3.1.0)
61
+ rspec-support (3.1.2)
62
+ ruby-prof (0.15.3)
63
+ simplecov (0.9.1)
59
64
  docile (~> 1.1.0)
60
- multi_json
65
+ multi_json (~> 1.0)
61
66
  simplecov-html (~> 0.8.0)
62
67
  simplecov-html (0.8.0)
63
68
  thread_safe (0.3.4)
@@ -66,6 +71,7 @@ PLATFORMS
66
71
  ruby
67
72
 
68
73
  DEPENDENCIES
69
- jeweler (~> 2.0.1)
70
- rspec (~> 2.8.0)
71
- simplecov (~> 0.8.2)
74
+ jeweler (~> 2.0)
75
+ rspec (~> 3.1)
76
+ ruby-prof (~> 0.15)
77
+ simplecov (~> 0.9)
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # quartz
2
2
 
3
3
  [![Build Status](https://travis-ci.org/DavidHuie/quartz.svg?branch=master)](https://travis-ci.org/DavidHuie/quartz) [![Code Climate](https://codeclimate.com/github/DavidHuie/quartz.png)](https://codeclimate.com/github/DavidHuie/quartz)
4
+ [![Gem Version](https://badge.fury.io/rb/quartz.svg)](http://badge.fury.io/rb/quartz)
4
5
 
5
6
  Quartz enables you to call Go code from within your
6
7
  Ruby code. This is accomplished by running a Go program
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.4
1
+ 0.2.5
@@ -0,0 +1,20 @@
1
+ package quartz
2
+
3
+ import "reflect"
4
+
5
+ type structMetadata struct {
6
+ NameToMethodMetadata map[string]*methodMetadata
7
+ TargetStruct interface{} `json:"-"`
8
+ }
9
+
10
+ func newStructMetadata(targetStruct interface{}) *structMetadata {
11
+ return &structMetadata{
12
+ make(map[string]*methodMetadata),
13
+ targetStruct,
14
+ }
15
+ }
16
+
17
+ type methodMetadata struct {
18
+ Method reflect.Method `json:"-"`
19
+ ArgumentToType map[string]string
20
+ }
@@ -0,0 +1,13 @@
1
+ package quartz
2
+
3
+ var (
4
+ quartz = newQuartz()
5
+ )
6
+
7
+ func RegisterName(name string, s interface{}) error {
8
+ return quartz.RegisterName(name, s)
9
+ }
10
+
11
+ func Start() {
12
+ quartz.Start()
13
+ }
data/go/quartz/quartz.go CHANGED
@@ -12,83 +12,44 @@ import (
12
12
 
13
13
  // This holds information about exported structs.
14
14
  type Quartz struct {
15
- Registry map[string]*StructMetadata
15
+ Registry *Registry
16
16
  }
17
17
 
18
- // Returns the struct registry. This method is exported via RPC
19
- // so that the Ruby client can have knowledge about which structs and
20
- // which methods are exported.
21
- func (q *Quartz) GetMetadata(_ interface{}, value *map[string]*StructMetadata) error {
22
- *value = q.Registry
23
- return nil
24
- }
25
-
26
- var (
27
- quartz = &Quartz{
28
- Registry: make(map[string]*StructMetadata),
29
- }
30
- socketPath = "/tmp/quartz.socket"
31
- )
32
-
33
- type StructMetadata struct {
34
- NameToMethodMetadata map[string]*MethodMetadata
35
- TargetStruct interface{} `json:"-"`
36
- }
37
-
38
- func NewStructMetadata(targetStruct interface{}) *StructMetadata {
39
- return &StructMetadata{
40
- make(map[string]*MethodMetadata),
41
- targetStruct,
42
- }
43
- }
44
-
45
- type MethodMetadata struct {
46
- Method reflect.Method `json:"-"`
47
- ArgumentToType map[string]string
18
+ func newQuartz() *Quartz {
19
+ return &Quartz{newRegistry()}
48
20
  }
49
21
 
50
22
  // Exports a struct via RPC and generates metadata for each of the struct's methods.
51
- func RegisterName(name string, s interface{}) error {
52
- quartz.Registry[name] = NewStructMetadata(s)
23
+ func (q *Quartz) RegisterName(name string, s interface{}) error {
24
+ q.Registry.data[name] = newStructMetadata(s)
53
25
  t := reflect.TypeOf(s)
54
26
  for i := 0; i < t.NumMethod(); i++ {
55
27
  method := t.Method(i)
56
28
  // TODO: only export methods with JSON serializable arguments
57
29
  // and responses.
58
- metadata := &MethodMetadata{
30
+ metadata := &methodMetadata{
59
31
  method,
60
- StructFieldToType(method.Type.In(1)),
32
+ structFieldToType(method.Type.In(1)),
61
33
  }
62
- quartz.Registry[name].NameToMethodMetadata[method.Name] = metadata
34
+ q.Registry.data[name].NameToMethodMetadata[method.Name] = metadata
63
35
  }
64
36
  return rpc.RegisterName(name, s)
65
37
  }
66
38
 
67
- // Given a struct type, creates a mapping of field name
68
- // to string representation of the field name's type.
69
- func StructFieldToType(t reflect.Type) map[string]string {
70
- fieldToType := make(map[string]string)
71
- for i := 0; i < t.NumField(); i++ {
72
- fieldToType[t.Field(i).Name] = t.Field(i).Type.String()
39
+ func (q *Quartz) Start() {
40
+ // The Ruby gem sets this environment variable for us.
41
+ socketPath := "/tmp/quartz.socket"
42
+ if os.Getenv("QUARTZ_SOCKET") != "" {
43
+ socketPath = os.Getenv("QUARTZ_SOCKET")
73
44
  }
74
- return fieldToType
75
- }
76
45
 
77
- func Start() {
78
46
  // Start the server and accept connections on a
79
47
  // UNIX domain socket.
80
- rpc.Register(quartz)
48
+ rpc.RegisterName("Quartz", q.Registry)
81
49
  listener, err := net.Listen("unix", socketPath)
82
50
  if err != nil {
83
51
  panic(err)
84
52
  }
85
- for {
86
- conn, err := listener.Accept()
87
- if err != nil {
88
- panic(err)
89
- }
90
- go jsonrpc.ServeConn(conn)
91
- }
92
53
 
93
54
  // Destroy the socket file when the server is killed.
94
55
  sigc := make(chan os.Signal)
@@ -101,11 +62,13 @@ func Start() {
101
62
  }
102
63
  os.Exit(0)
103
64
  }()
104
- }
105
65
 
106
- func init() {
107
- // The Ruby gem sets this environment variable for us.
108
- if os.Getenv("QUARTZ_SOCKET") != "" {
109
- socketPath = os.Getenv("QUARTZ_SOCKET")
66
+ // Accept connections
67
+ for {
68
+ conn, err := listener.Accept()
69
+ if err != nil {
70
+ panic(err)
71
+ }
72
+ go jsonrpc.ServeConn(conn)
110
73
  }
111
74
  }
@@ -0,0 +1,19 @@
1
+ package quartz
2
+
3
+ type Registry struct {
4
+ data map[string]*structMetadata
5
+ }
6
+
7
+ func newRegistry() *Registry {
8
+ r := &Registry{}
9
+ r.data = make(map[string]*structMetadata)
10
+ return r
11
+ }
12
+
13
+ // Returns the entire registry. This method is exported via RPC
14
+ // so that the Ruby client can have knowledge about which structs and
15
+ // which methods are exported.
16
+ func (r *Registry) GetMetadata(_ interface{}, value *map[string]*structMetadata) error {
17
+ *value = r.data
18
+ return nil
19
+ }
data/go/quartz/util.go ADDED
@@ -0,0 +1,13 @@
1
+ package quartz
2
+
3
+ import "reflect"
4
+
5
+ // Given a struct type, creates a mapping of field name
6
+ // to string representation of the field name's type.
7
+ func structFieldToType(t reflect.Type) map[string]string {
8
+ fieldToType := make(map[string]string)
9
+ for i := 0; i < t.NumField(); i++ {
10
+ fieldToType[t.Field(i).Name] = t.Field(i).Type.String()
11
+ }
12
+ return fieldToType
13
+ }
data/lib/quartz.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'json'
2
+ require 'securerandom'
2
3
  require 'socket'
3
4
 
4
5
  module Quartz
@@ -1,13 +1,14 @@
1
1
  class Quartz::GoProcess
2
2
 
3
- attr_reader :temp_file_path
3
+ attr_reader :seed, :socket_path, :temp_file_path
4
4
 
5
5
  def self.processes
6
6
  @processes ||= []
7
7
  end
8
8
 
9
9
  def initialize(opts)
10
- @socket_path = "/tmp/quartz_#{rand(10000)}.sock"
10
+ @seed = SecureRandom.hex
11
+ @socket_path = "/tmp/quartz_#{seed}.sock"
11
12
  ENV['QUARTZ_SOCKET'] = @socket_path
12
13
 
13
14
  if opts[:file_path]
@@ -23,7 +24,7 @@ class Quartz::GoProcess
23
24
  end
24
25
 
25
26
  def compile_and_run(path)
26
- @temp_file_path = "/tmp/quartz_runner_#{rand(10000)}"
27
+ @temp_file_path = "/tmp/quartz_runner_#{seed}"
27
28
 
28
29
  unless system('go', 'build', '-o', @temp_file_path, path)
29
30
  raise 'Go compilation failed'
@@ -37,7 +38,7 @@ class Quartz::GoProcess
37
38
  end
38
39
 
39
40
  def socket
40
- Thread.current[:quartz_socket] ||= UNIXSocket.new(@socket_path)
41
+ Thread.current["quartz_socket_#{seed}".to_sym] ||= UNIXSocket.new(@socket_path)
41
42
  end
42
43
 
43
44
  def block_until_server_starts
@@ -1,19 +1,30 @@
1
1
  module Quartz::Validations
2
2
 
3
+ GO_FILE_LOCATION = 'src/github.com/DavidHuie/quartz/go/quartz/quartz.go'
4
+
3
5
  def self.check_for_go
4
6
  go_exists = ENV['PATH'].split(File::PATH_SEPARATOR).any? do |directory|
5
7
  File.exist?(File.join(directory, 'go'))
6
8
  end
7
9
 
8
- raise 'Go not installed' unless go_exists
10
+ raise 'Go not installed.' unless go_exists
9
11
  end
10
12
 
11
13
  def self.check_go_quartz_version
12
- current_pulse = File.read(File.join(File.dirname(__FILE__), '../../go/quartz/quartz.go'))
13
- installed_pulse = File.read(File.join(ENV['GOPATH'],
14
- 'src/github.com/DavidHuie/quartz/go/quartz/quartz.go'))
14
+ current_quartz = File.read(File.join(File.dirname(__FILE__), '../../go/quartz/quartz.go'))
15
+
16
+ installed_quartz_dir = ENV['GOPATH'].split(File::PATH_SEPARATOR).select do |directory|
17
+ File.exist?(File.join(directory, Quartz::Validations::GO_FILE_LOCATION))
18
+ end[0]
19
+
20
+ unless installed_quartz_dir
21
+ raise "GOPATH not configured."
22
+ end
23
+
24
+ installed_quartz = File.read(File.join(installed_quartz_dir,
25
+ Quartz::Validations::GO_FILE_LOCATION))
15
26
 
16
- if current_pulse != installed_pulse
27
+ if current_quartz != installed_quartz
17
28
  STDERR.write <<-EOS
18
29
  Warning: the version of Quartz in $GOPATH does not match
19
30
  the version packaged with the gem. Please update the Go
data/quartz.gemspec CHANGED
@@ -2,15 +2,16 @@
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.2.4 ruby lib
5
+ # stub: quartz 0.2.5 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "quartz"
9
- s.version = "0.2.4"
9
+ s.version = "0.2.5"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib"]
12
13
  s.authors = ["David Huie"]
13
- s.date = "2014-06-23"
14
+ s.date = "2015-02-02"
14
15
  s.description = "A gem for calling Go code from Ruby"
15
16
  s.email = "dahuie@gmail.com"
16
17
  s.extra_rdoc_files = [
@@ -19,7 +20,10 @@ Gem::Specification.new do |s|
19
20
  ]
20
21
  s.files = [
21
22
  ".rspec",
23
+ ".ruby-gemset",
24
+ ".ruby-version",
22
25
  ".travis.yml",
26
+ "CHANGELOG.md",
23
27
  "Gemfile",
24
28
  "Gemfile.lock",
25
29
  "LICENSE.txt",
@@ -28,7 +32,11 @@ Gem::Specification.new do |s|
28
32
  "VERSION",
29
33
  "examples/lookup_dns.go",
30
34
  "examples/lookup_dns.rb",
35
+ "go/quartz/metadata.go",
36
+ "go/quartz/public.go",
31
37
  "go/quartz/quartz.go",
38
+ "go/quartz/registry.go",
39
+ "go/quartz/util.go",
32
40
  "lib/quartz.rb",
33
41
  "lib/quartz/client.rb",
34
42
  "lib/quartz/go_process.rb",
@@ -43,26 +51,28 @@ Gem::Specification.new do |s|
43
51
  ]
44
52
  s.homepage = "http://github.com/DavidHuie/quartz"
45
53
  s.licenses = ["MIT"]
46
- s.require_paths = ["lib"]
47
- s.rubygems_version = "2.1.11"
54
+ s.rubygems_version = "2.4.3"
48
55
  s.summary = "A gem for calling Go code from Ruby"
49
56
 
50
57
  if s.respond_to? :specification_version then
51
58
  s.specification_version = 4
52
59
 
53
60
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
54
- s.add_development_dependency(%q<rspec>, ["~> 2.8.0"])
55
- s.add_development_dependency(%q<jeweler>, ["~> 2.0.1"])
56
- s.add_development_dependency(%q<simplecov>, ["~> 0.8.2"])
61
+ s.add_development_dependency(%q<jeweler>, ["~> 2.0"])
62
+ s.add_development_dependency(%q<rspec>, ["~> 3.1"])
63
+ s.add_development_dependency(%q<ruby-prof>, ["~> 0.15"])
64
+ s.add_development_dependency(%q<simplecov>, ["~> 0.9"])
57
65
  else
58
- s.add_dependency(%q<rspec>, ["~> 2.8.0"])
59
- s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
60
- s.add_dependency(%q<simplecov>, ["~> 0.8.2"])
66
+ s.add_dependency(%q<jeweler>, ["~> 2.0"])
67
+ s.add_dependency(%q<rspec>, ["~> 3.1"])
68
+ s.add_dependency(%q<ruby-prof>, ["~> 0.15"])
69
+ s.add_dependency(%q<simplecov>, ["~> 0.9"])
61
70
  end
62
71
  else
63
- s.add_dependency(%q<rspec>, ["~> 2.8.0"])
64
- s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
65
- s.add_dependency(%q<simplecov>, ["~> 0.8.2"])
72
+ s.add_dependency(%q<jeweler>, ["~> 2.0"])
73
+ s.add_dependency(%q<rspec>, ["~> 3.1"])
74
+ s.add_dependency(%q<ruby-prof>, ["~> 0.15"])
75
+ s.add_dependency(%q<simplecov>, ["~> 0.9"])
66
76
  end
67
77
  end
68
78
 
data/spec/client_spec.rb CHANGED
@@ -6,7 +6,7 @@ describe Quartz::Client do
6
6
 
7
7
  it 'creates structs internally' do
8
8
  result = client[:adder].call('Add', 'A' => 2, 'B' => 5)
9
- result.should eq({'X' => 7})
9
+ expect(result).to eq({'X' => 7})
10
10
  end
11
11
 
12
12
  end
@@ -9,7 +9,7 @@ describe Quartz::GoProcess do
9
9
  context 'with a go file' do
10
10
 
11
11
  it 'pulls metadata' do
12
- process.get_metadata.should eq("adder" => {"NameToMethodMetadata"=>{"Add"=>{"ArgumentToType"=>{"A"=>"int", "B"=>"int"}}, "AddError"=>{"ArgumentToType"=>{"A"=>"int", "B"=>"int"}}}})
12
+ expect(process.get_metadata).to eq("adder" => {"NameToMethodMetadata"=>{"Add"=>{"ArgumentToType"=>{"A"=>"int", "B"=>"int"}}, "AddError"=>{"ArgumentToType"=>{"A"=>"int", "B"=>"int"}}}})
13
13
  end
14
14
 
15
15
  end
@@ -20,7 +20,7 @@ describe Quartz::GoProcess do
20
20
 
21
21
  it 'is able to call a method on a struct' do
22
22
  result = process.call('adder', 'Add', { 'A' => 5, 'B' => 6 })
23
- result.should eq({"id"=>1, "result"=>{"X"=>11}, "error"=>nil})
23
+ expect(result).to eq({"id"=>1, "result"=>{"X"=>11}, "error"=>nil})
24
24
  end
25
25
 
26
26
  end
@@ -30,7 +30,7 @@ describe Quartz::GoProcess do
30
30
  system('go', 'build', '-o', temp_file, 'spec/test.go')
31
31
  process = Quartz::GoProcess.new(bin_path: temp_file)
32
32
  result = process.call('adder', 'Add', { 'A' => 5, 'B' => 6 })
33
- result.should eq({"id"=>1, "result"=>{"X"=>11}, "error"=>nil})
33
+ expect(result).to eq({"id"=>1, "result"=>{"X"=>11}, "error"=>nil})
34
34
  File.delete(temp_file)
35
35
  end
36
36
 
@@ -39,9 +39,9 @@ describe Quartz::GoProcess do
39
39
  context 'files' do
40
40
 
41
41
  it "it deletes temporary files" do
42
- File.exists?(process.temp_file_path).should be_true
42
+ expect(File.exists?(process.temp_file_path)).to be_truthy
43
43
  process.cleanup
44
- File.exists?(process.temp_file_path).should be_false
44
+ expect(File.exists?(process.temp_file_path)).to be_falsey
45
45
  end
46
46
 
47
47
  end
@@ -49,9 +49,18 @@ describe Quartz::GoProcess do
49
49
  context 'processes' do
50
50
 
51
51
  it "it kills child processes" do
52
- File.exists?(process.temp_file_path).should be_true
52
+ expect(File.exists?(process.temp_file_path)).to be_truthy
53
53
  process.cleanup
54
- $?.exited?.should be_true
54
+ expect($?.exited?).to be_truthy
55
+ end
56
+
57
+ end
58
+
59
+ context 'sockets' do
60
+
61
+ it 'cleans up sockets created by the go application' do
62
+ process.cleanup
63
+ expect(File.exists?(process.socket_path)).to be_falsey
55
64
  end
56
65
 
57
66
  end
@@ -15,7 +15,7 @@ describe Quartz::GoStruct do
15
15
 
16
16
  it 'is able to call a struct' do
17
17
  response = struct.call('Add', 'A' => 2, 'B' => 4)
18
- response.should eq({'X' => 6})
18
+ expect(response).to eq({'X' => 6})
19
19
  end
20
20
 
21
21
  it 'raises an exception when an error is returned' do
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require 'ruby-prof'
1
2
  require 'simplecov'
2
3
 
3
4
  ENV['COVERAGE'] && SimpleCov.start
@@ -7,3 +8,17 @@ $LOAD_PATH.unshift(File.dirname(__FILE__))
7
8
 
8
9
  require 'rspec'
9
10
  require 'quartz'
11
+
12
+ def profile(wall_time = false, &block)
13
+ if wall_time
14
+ RubyProf.measure_mode = RubyProf::WALL_TIME
15
+ end
16
+ RubyProf.start
17
+ call_result = block.call
18
+ result = RubyProf.stop
19
+ File.open('profile', 'w') do |f|
20
+ printer = RubyProf::FlatPrinter.new(result)
21
+ printer.print(f)
22
+ end
23
+ return call_result
24
+ end
metadata CHANGED
@@ -1,57 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quartz
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Huie
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-23 00:00:00.000000000 Z
11
+ date: 2015-02-02 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: jeweler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: rspec
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
- - - ~>
31
+ - - "~>"
18
32
  - !ruby/object:Gem::Version
19
- version: 2.8.0
33
+ version: '3.1'
20
34
  type: :development
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
- - - ~>
38
+ - - "~>"
25
39
  - !ruby/object:Gem::Version
26
- version: 2.8.0
40
+ version: '3.1'
27
41
  - !ruby/object:Gem::Dependency
28
- name: jeweler
42
+ name: ruby-prof
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - ~>
45
+ - - "~>"
32
46
  - !ruby/object:Gem::Version
33
- version: 2.0.1
47
+ version: '0.15'
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - ~>
52
+ - - "~>"
39
53
  - !ruby/object:Gem::Version
40
- version: 2.0.1
54
+ version: '0.15'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: simplecov
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
- - - ~>
59
+ - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: 0.8.2
61
+ version: '0.9'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
- - - ~>
66
+ - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: 0.8.2
68
+ version: '0.9'
55
69
  description: A gem for calling Go code from Ruby
56
70
  email: dahuie@gmail.com
57
71
  executables: []
@@ -60,8 +74,11 @@ extra_rdoc_files:
60
74
  - LICENSE.txt
61
75
  - README.md
62
76
  files:
63
- - .rspec
64
- - .travis.yml
77
+ - ".rspec"
78
+ - ".ruby-gemset"
79
+ - ".ruby-version"
80
+ - ".travis.yml"
81
+ - CHANGELOG.md
65
82
  - Gemfile
66
83
  - Gemfile.lock
67
84
  - LICENSE.txt
@@ -70,7 +87,11 @@ files:
70
87
  - VERSION
71
88
  - examples/lookup_dns.go
72
89
  - examples/lookup_dns.rb
90
+ - go/quartz/metadata.go
91
+ - go/quartz/public.go
73
92
  - go/quartz/quartz.go
93
+ - go/quartz/registry.go
94
+ - go/quartz/util.go
74
95
  - lib/quartz.rb
75
96
  - lib/quartz/client.rb
76
97
  - lib/quartz/go_process.rb
@@ -92,17 +113,17 @@ require_paths:
92
113
  - lib
93
114
  required_ruby_version: !ruby/object:Gem::Requirement
94
115
  requirements:
95
- - - '>='
116
+ - - ">="
96
117
  - !ruby/object:Gem::Version
97
118
  version: '0'
98
119
  required_rubygems_version: !ruby/object:Gem::Requirement
99
120
  requirements:
100
- - - '>='
121
+ - - ">="
101
122
  - !ruby/object:Gem::Version
102
123
  version: '0'
103
124
  requirements: []
104
125
  rubyforge_project:
105
- rubygems_version: 2.1.11
126
+ rubygems_version: 2.4.3
106
127
  signing_key:
107
128
  specification_version: 4
108
129
  summary: A gem for calling Go code from Ruby