diplomat 0.1.9 → 0.1.10

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: d375c62cdbdf8190c936ef5da0b9072843da44b8
4
- data.tar.gz: 8a741e51bf5c356087ae1f5ca3becb5aded2a211
3
+ metadata.gz: a23e42c39267a3f6bff598a5775ec170787be1bf
4
+ data.tar.gz: 0778158f0ee8e2ba9210f1fc469b1a1b4fefff49
5
5
  SHA512:
6
- metadata.gz: 5b53bd12baab01f46776a0281f7f9fd916804f5f9acd94df001cf6686e4da1787001a2593f88b4ffde22f88d34e70b8fffd193f4ce7c528d78e335f884db4315
7
- data.tar.gz: ac4e242dec87848a8e7991d75670bcad81a1ead33e8c9c6169f89b0344fd5d0b98bdd1c4f1de5e3f0a693ec3d894956da4f09d1277976b3db2b2a91a209474d2
6
+ metadata.gz: 943740a0d4bb06217d8cb55d5a74cb7b72a2575f768f278f606a5aa2390992c7055424566a94043ae4a8bb81bda054ec587ab45419db326e983564d43c5a59f2
7
+ data.tar.gz: 976565fa6452fd2d96089297d5a312187461d09dedb49258f1856e25599d40ef607e5bdb866678ec745f0ae5c7e2511d2072476f690b8ed007af2df28eb1ce61
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
+ Gemfile.lock
1
2
  *.gem
2
3
  *.rbc
3
4
  /.config
data/.travis.yml CHANGED
@@ -5,4 +5,4 @@ rvm:
5
5
  - "2.1.0"
6
6
  addons:
7
7
  code_climate:
8
- repo_token: 17481039ac7b5ef8779ab644b28a4d95dd7523c3c1fee560311eb4af63de006f
8
+ repo_token: c910d8f8af55cc2d2f38170d5362be4e16be8ce232df9c565057985af264b7b
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  # Diplomat
2
- [![Gem Version](https://badge.fury.io/rb/diplomat.svg)](http://badge.fury.io/rb/diplomat) [![Build Status](https://travis-ci.org/johnhamelink/diplomat.svg?branch=master)](https://travis-ci.org/johnhamelink/diplomat) [![Code Climate](https://codeclimate.com/github/johnhamelink/diplomat.png)](https://codeclimate.com/github/johnhamelink/diplomat)
2
+ [![Gem Version](https://badge.fury.io/rb/diplomat.svg)](http://badge.fury.io/rb/diplomat) [![Build Status](https://travis-ci.org/WeAreFarmGeek/diplomat.svg?branch=master)](https://travis-ci.org/WeAreFarmGeek/diplomat) [![Code Climate](https://codeclimate.com/github/johnhamelink/diplomat.png)](https://codeclimate.com/github/WeAreFarmGeek/diplomat)
3
3
  ### A HTTP Ruby API for [Consul](http://www.consul.io/)
4
4
 
5
5
  ![Diplomacy Boad Game](http://i.imgur.com/Nkuy4b7.jpg)
@@ -41,7 +41,7 @@ production:
41
41
 
42
42
  ## Usage
43
43
 
44
- [The most up to date place to read about the API is here.](http://rubydoc.info/github/johnhamelink/diplomat)
44
+ [The most up to date place to read about the API is here.](http://rubydoc.info/github/WeAreFarmGeek/diplomat)
45
45
 
46
46
  Here's a few examples of how diplomat works:
47
47
 
data/diplomat.gemspec CHANGED
@@ -24,6 +24,6 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency "rspec", "~> 2.14"
25
25
  spec.add_development_dependency "fakes-rspec", "~> 1.0"
26
26
  spec.add_development_dependency "json", "~> 1.8"
27
- spec.add_development_dependency "codeclimate-test-reporter"
27
+ spec.add_development_dependency "codeclimate-test-reporter", "~> 0.3.0"
28
28
  spec.add_dependency "faraday", "~> 0.9"
29
29
  end
data/lib/diplomat.rb CHANGED
@@ -32,6 +32,6 @@ module Diplomat
32
32
 
33
33
 
34
34
 
35
- require_libs "rest_client", "kv", "service"
35
+ require_libs "rest_client", "kv", "service", "members", "check", "health"
36
36
 
37
37
  end
@@ -0,0 +1,127 @@
1
+ require 'base64'
2
+ require 'faraday'
3
+
4
+ module Diplomat
5
+ class Check < Diplomat::RestClient
6
+
7
+ # Get registered checks
8
+ # @return [OpenStruct] all data associated with the service
9
+ def checks
10
+ ret = @conn.get "/v1/agent/checks"
11
+ return JSON.parse(ret.body)
12
+ end
13
+
14
+ # Register a check
15
+ # @param check_id [String] the unique id of the check
16
+ # @param name [String] the name
17
+ # @param notes [String] notes about the check
18
+ # @param script [String] command to be run for check
19
+ # @param interval [String] frequency (with units) of the check execution
20
+ # @param ttl [String] time (with units) to mark a check down
21
+ # @return [Integer] Status code
22
+ def register_script check_id, name, notes, script, interval
23
+ json = JSON.generate(
24
+ {
25
+ "ID" => check_id,
26
+ "Name" => name,
27
+ "Notes" => notes,
28
+ "Script" => script,
29
+ "Interval" => interval
30
+ }
31
+ )
32
+
33
+ ret = @conn.put do |req|
34
+ req.url "/v1/agent/check/register"
35
+ req.body = json
36
+ end
37
+
38
+ return true if ret.status == 200
39
+ end
40
+
41
+ def register_ttl check_id, name, notes, ttl
42
+ json = JSON.generate(
43
+ {
44
+ "ID" => check_id,
45
+ "Name" => name,
46
+ "Notes" => notes,
47
+ "TTL" => ttl,
48
+ }
49
+ )
50
+
51
+ ret = @conn.put do |req|
52
+ req.url "/v1/agent/check/register"
53
+ req.body = json
54
+ end
55
+
56
+ return true if ret.status == 200
57
+ end
58
+
59
+ # Deregister a check
60
+ # @param check_id [String] the unique id of the check
61
+ # @return [Integer] Status code
62
+ def deregister check_id
63
+ ret = @conn.get "/v1/agent/check/deregister/#{check_id}"
64
+ return true if ret.status == 200
65
+ end
66
+
67
+ # Pass a check
68
+ # @param check_id [String] the unique id of the check
69
+ # @return [Integer] Status code
70
+ def pass check_id
71
+ ret = @conn.get "/v1/agent/check/pass/#{check_id}"
72
+ return true if ret.status == 200
73
+ end
74
+
75
+ # Warn a check
76
+ # @param check_id [String] the unique id of the check
77
+ # @return [Integer] Status code
78
+ def warn check_id
79
+ ret = @conn.get "/v1/agent/check/warn/#{check_id}"
80
+ return true if ret.status == 200
81
+ end
82
+
83
+ # Warn a check
84
+ # @param check_id [String] the unique id of the check
85
+ # @return [Integer] Status code
86
+ def fail check_id
87
+ ret = @conn.get "/v1/agent/check/fail/#{check_id}"
88
+ return true if ret.status == 200
89
+ end
90
+
91
+ # @note This is sugar, see (#checks)
92
+ def self.checks
93
+ Diplomat::Check.new.checks
94
+ end
95
+
96
+ # @note This is sugar, see (#register_script)
97
+ def self.register_script *args
98
+ Diplomat::Check.new.register_script *args
99
+ end
100
+
101
+ # @note This is sugar, see (#register_ttl)
102
+ def self.register_ttl *args
103
+ Diplomat::Check.new.register_ttl *args
104
+ end
105
+
106
+ # @note This is sugar, see (#deregister)
107
+ def self.deregister *args
108
+ Diplomat::Check.new.deregister *args
109
+ end
110
+
111
+ # @note This is sugar, see (#pass)
112
+ def self.pass *args
113
+ Diplomat::Check.new.pass *args
114
+ end
115
+
116
+ # @note This is sugar, see (#warn)
117
+ def self.warn *args
118
+ Diplomat::Check.new.warn *args
119
+ end
120
+
121
+ # @note This is sugar, see (#fail)
122
+ def self.fail *args
123
+ Diplomat::Check.new.fail *args
124
+ end
125
+
126
+ end
127
+ end
@@ -0,0 +1,101 @@
1
+ require 'base64'
2
+ require 'faraday'
3
+
4
+ module Diplomat
5
+ class Health < Diplomat::RestClient
6
+
7
+ # Get node health
8
+ # @param n [String] the node
9
+ # @return [OpenStruct] all data associated with the node
10
+ def node n
11
+ ret = @conn.get "/v1/health/node/#{n}"
12
+ return JSON.parse(ret.body)
13
+ end
14
+
15
+ # Get service checks
16
+ # @param s [String] the service
17
+ # @return [OpenStruct] all data associated with the node
18
+ def checks s
19
+ ret = @conn.get "/v1/health/checks/#{s}"
20
+ return JSON.parse(ret.body)
21
+ end
22
+
23
+ # Get service health
24
+ # @param s [String] the service
25
+ # @return [OpenStruct] all data associated with the node
26
+ def service s
27
+ ret = @conn.get "/v1/health/service/#{s}"
28
+ return JSON.parse(ret.body)
29
+ end
30
+
31
+ # Get service health
32
+ # @param s [String] the state ("unknown", "passing", "warning", or "critical")
33
+ # @return [OpenStruct] all data associated with the node
34
+ def state s
35
+ ret = @conn.get "/v1/health/state/#{s}"
36
+ return JSON.parse(ret.body)
37
+ end
38
+
39
+ # Convenience method to get services in unknown state
40
+ def unknown
41
+ state("unknown")
42
+ end
43
+
44
+ # Convenience method to get services in passing state
45
+ def passing
46
+ state("passing")
47
+ end
48
+
49
+ # Convenience method to get services in warning state
50
+ def warning
51
+ state("warning")
52
+ end
53
+
54
+ # Convenience method to get services in critical state
55
+ def critical
56
+ state("critical")
57
+ end
58
+
59
+
60
+ # @note This is sugar, see (#node)
61
+ def self.node *args
62
+ Diplomat::Health.new.node *args
63
+ end
64
+
65
+ # @note This is sugar, see (#checks)
66
+ def self.checks *args
67
+ Diplomat::Health.new.checks *args
68
+ end
69
+
70
+ # @note This is sugar, see (#service)
71
+ def self.service *args
72
+ Diplomat::Health.new.service *args
73
+ end
74
+
75
+ # @note This is sugar, see (#state)
76
+ def self.state *args
77
+ Diplomat::Health.new.state *args
78
+ end
79
+
80
+ # @note This is sugar, see (#unknown)
81
+ def self.unknown
82
+ Diplomat::Health.new.unknown
83
+ end
84
+
85
+ # @note This is sugar, see (#passing)
86
+ def self.passing
87
+ Diplomat::Health.new.passing
88
+ end
89
+
90
+ # @note This is sugar, see (#warning)
91
+ def self.warning
92
+ Diplomat::Health.new.warning
93
+ end
94
+
95
+ # @note This is sugar, see (#critical)
96
+ def self.critical
97
+ Diplomat::Health.new.critical
98
+ end
99
+
100
+ end
101
+ end
@@ -0,0 +1,20 @@
1
+ require 'base64'
2
+ require 'faraday'
3
+
4
+ module Diplomat
5
+ class Members < Diplomat::RestClient
6
+
7
+ # Get all members
8
+ # @return [OpenStruct] all data associated with the service
9
+ def get
10
+ ret = @conn.get "/v1/agent/members"
11
+ return JSON.parse(ret.body)
12
+ end
13
+
14
+ # @note This is sugar, see (#get)
15
+ def self.get
16
+ Diplomat::Members.new.get
17
+ end
18
+
19
+ end
20
+ end
@@ -1,3 +1,3 @@
1
1
  module Diplomat
2
- VERSION = "0.1.9"
2
+ VERSION = "0.1.10"
3
3
  end
@@ -0,0 +1,71 @@
1
+ require 'spec_helper'
2
+ require 'json'
3
+ require 'base64'
4
+
5
+ describe Diplomat::Check do
6
+
7
+ let(:faraday) { fake }
8
+
9
+ context "check" do
10
+
11
+ it "checks" do
12
+ json = JSON.generate(
13
+ {
14
+ "service:redis"=> {
15
+ "Node"=>"foobar",
16
+ "CheckID"=>"service:redis",
17
+ "Name"=>"Service 'redis' check",
18
+ "Status"=>"passing",
19
+ "Notes"=>"",
20
+ "Output"=>"",
21
+ "ServiceID"=>"redis",
22
+ "ServiceName"=>"redis"}
23
+ }
24
+ )
25
+
26
+ faraday.stub(:get).and_return(OpenStruct.new({ body: json }))
27
+
28
+ check = Diplomat::Check.new(faraday)
29
+
30
+ expect(check.checks["service:redis"]["Node"]).to eq("foobar")
31
+ end
32
+
33
+ it "register_script" do
34
+ faraday.stub(:put).and_return(OpenStruct.new({ body: '', status: 200 }))
35
+ check = Diplomat::Check.new(faraday)
36
+ expect(check.register_script("foobar-1", "Foobar", "Foobar test", "/script/test", "10s")).to eq(true)
37
+ end
38
+
39
+ it "register_ttl" do
40
+ faraday.stub(:put).and_return(OpenStruct.new({ body: '', status: 200 }))
41
+ check = Diplomat::Check.new(faraday)
42
+ expect(check.register_ttl("foobar-1", "Foobar", "Foobar test", "15s")).to eq(true)
43
+ end
44
+
45
+ it "deregister" do
46
+ faraday.stub(:get).and_return(OpenStruct.new({ body: '', status: 200 }))
47
+ check = Diplomat::Check.new(faraday)
48
+ expect(check.deregister("foobar-1")).to eq(true)
49
+ end
50
+
51
+ it "pass" do
52
+ faraday.stub(:get).and_return(OpenStruct.new({ body: '', status: 200 }))
53
+ check = Diplomat::Check.new(faraday)
54
+ expect(check.pass("foobar-1")).to eq(true)
55
+ end
56
+
57
+ it "warn" do
58
+ faraday.stub(:get).and_return(OpenStruct.new({ body: '', status: 200 }))
59
+ check = Diplomat::Check.new(faraday)
60
+ expect(check.warn("foobar-1")).to eq(true)
61
+ end
62
+
63
+ it "fail" do
64
+ faraday.stub(:get).and_return(OpenStruct.new({ body: '', status: 200 }))
65
+ check = Diplomat::Check.new(faraday)
66
+ expect(check.fail("foobar-1")).to eq(true)
67
+ end
68
+
69
+ end
70
+
71
+ end
@@ -0,0 +1,150 @@
1
+ require 'spec_helper'
2
+ require 'json'
3
+ require 'base64'
4
+
5
+ describe Diplomat::Health do
6
+
7
+ let(:faraday) { fake }
8
+
9
+ context "health" do
10
+
11
+ it "node" do
12
+ json = <<EOF
13
+ [
14
+ {
15
+ "Node": "foobar",
16
+ "CheckID": "serfHealth",
17
+ "Name": "Serf Health Status",
18
+ "Status": "passing",
19
+ "Notes": "",
20
+ "Output": "",
21
+ "ServiceID": "",
22
+ "ServiceName": ""
23
+ },
24
+ {
25
+ "Node": "foobar",
26
+ "CheckID": "service:redis",
27
+ "Name": "Service 'redis' check",
28
+ "Status": "passing",
29
+ "Notes": "",
30
+ "Output": "",
31
+ "ServiceID": "redis",
32
+ "ServiceName": "redis"
33
+ }
34
+ ]
35
+ EOF
36
+
37
+ faraday.stub(:get).and_return(OpenStruct.new({ body: json }))
38
+
39
+ health = Diplomat::Health.new(faraday)
40
+
41
+ expect(health.node("foobar")[0]["Node"]).to eq("foobar")
42
+ end
43
+
44
+ it "checks" do
45
+ json = <<EOF
46
+ [
47
+ {
48
+ "Node": "foobar",
49
+ "CheckID": "service:redis",
50
+ "Name": "Service 'redis' check",
51
+ "Status": "passing",
52
+ "Notes": "",
53
+ "Output": "",
54
+ "ServiceID": "redis",
55
+ "ServiceName": "redis"
56
+ }
57
+ ]
58
+ EOF
59
+
60
+ faraday.stub(:get).and_return(OpenStruct.new({ body: json }))
61
+
62
+ health = Diplomat::Health.new(faraday)
63
+
64
+ expect(health.checks("foobar")[0]["Node"]).to eq("foobar")
65
+ end
66
+
67
+ it "service" do
68
+ json = <<EOF
69
+ [
70
+ {
71
+ "Node": {
72
+ "Node": "foobar",
73
+ "Address": "10.1.10.12"
74
+ },
75
+ "Service": {
76
+ "ID": "redis",
77
+ "Service": "redis",
78
+ "Tags": null,
79
+ "Port": 8000
80
+ },
81
+ "Checks": [
82
+ {
83
+ "Node": "foobar",
84
+ "CheckID": "service:redis",
85
+ "Name": "Service 'redis' check",
86
+ "Status": "passing",
87
+ "Notes": "",
88
+ "Output": "",
89
+ "ServiceID": "redis",
90
+ "ServiceName": "redis"
91
+ },
92
+ {
93
+ "Node": "foobar",
94
+ "CheckID": "serfHealth",
95
+ "Name": "Serf Health Status",
96
+ "Status": "passing",
97
+ "Notes": "",
98
+ "Output": "",
99
+ "ServiceID": "",
100
+ "ServiceName": ""
101
+ }
102
+ ]
103
+ }
104
+ ]
105
+ EOF
106
+
107
+ faraday.stub(:get).and_return(OpenStruct.new({ body: json }))
108
+
109
+ health = Diplomat::Health.new(faraday)
110
+
111
+ expect(health.service("foobar")[0]["Node"]["Node"]).to eq("foobar")
112
+ end
113
+
114
+ it "state" do
115
+ json = <<EOF
116
+ [
117
+ {
118
+ "Node": "foobar",
119
+ "CheckID": "serfHealth",
120
+ "Name": "Serf Health Status",
121
+ "Status": "passing",
122
+ "Notes": "",
123
+ "Output": "",
124
+ "ServiceID": "",
125
+ "ServiceName": ""
126
+ },
127
+ {
128
+ "Node": "foobar",
129
+ "CheckID": "service:redis",
130
+ "Name": "Service 'redis' check",
131
+ "Status": "passing",
132
+ "Notes": "",
133
+ "Output": "",
134
+ "ServiceID": "redis",
135
+ "ServiceName": "redis"
136
+ }
137
+ ]
138
+ EOF
139
+
140
+ faraday.stub(:get).and_return(OpenStruct.new({ body: json }))
141
+
142
+ health = Diplomat::Health.new(faraday)
143
+
144
+ expect(health.state("foobar")[0]["Node"]).to eq("foobar")
145
+ end
146
+
147
+
148
+ end
149
+
150
+ end
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+ require 'json'
3
+ require 'base64'
4
+
5
+ describe Diplomat::Members do
6
+
7
+ let(:faraday) { fake }
8
+
9
+ context "member" do
10
+
11
+ it "GET" do
12
+ json = JSON.generate(
13
+ [{
14
+ "Name" => "foobar",
15
+ "Addr" => "10.1.10.12",
16
+ "Port" => 8301,
17
+ "Tags" => {
18
+ "bootstrap" => "1",
19
+ "dc" => "dc1",
20
+ "port" => 8300,
21
+ "role" => "consul",
22
+ },
23
+ "Status" => 1,
24
+ "ProtocolMin" => 1,
25
+ "ProtocolMax" => 2,
26
+ "ProtocolCur" => 2,
27
+ "DelegateMin" => 1,
28
+ "DelegateMax" => 3,
29
+ "DelegateCur" => 3
30
+ }]
31
+ )
32
+
33
+ faraday.stub(:get).and_return(OpenStruct.new({ body: json }))
34
+
35
+ members = Diplomat::Members.new(faraday)
36
+
37
+ expect(members.get[0]["Name"]).to eq("foobar")
38
+ end
39
+
40
+ end
41
+
42
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: diplomat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Hamelink
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-19 00:00:00.000000000 Z
11
+ date: 2014-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -98,16 +98,16 @@ dependencies:
98
98
  name: codeclimate-test-reporter
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ">="
101
+ - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '0'
103
+ version: 0.3.0
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ">="
108
+ - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '0'
110
+ version: 0.3.0
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: faraday
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -133,17 +133,22 @@ files:
133
133
  - ".rspec"
134
134
  - ".travis.yml"
135
135
  - Gemfile
136
- - Gemfile.lock
137
136
  - LICENSE
138
137
  - README.md
139
138
  - Rakefile
140
139
  - diplomat.gemspec
141
140
  - lib/diplomat.rb
141
+ - lib/diplomat/check.rb
142
+ - lib/diplomat/health.rb
142
143
  - lib/diplomat/kv.rb
144
+ - lib/diplomat/members.rb
143
145
  - lib/diplomat/rest_client.rb
144
146
  - lib/diplomat/service.rb
145
147
  - lib/diplomat/version.rb
148
+ - spec/check_spec.rb
149
+ - spec/health_spec.rb
146
150
  - spec/kv_spec.rb
151
+ - spec/members_spec.rb
147
152
  - spec/spec_helper.rb
148
153
  homepage: https://github.com/johnhamelink/diplomat
149
154
  licenses:
@@ -170,6 +175,9 @@ signing_key:
170
175
  specification_version: 4
171
176
  summary: Diplomat is a simple wrapper for Consul
172
177
  test_files:
178
+ - spec/check_spec.rb
179
+ - spec/health_spec.rb
173
180
  - spec/kv_spec.rb
181
+ - spec/members_spec.rb
174
182
  - spec/spec_helper.rb
175
183
  has_rdoc:
data/Gemfile.lock DELETED
@@ -1,55 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- diplomat (0.1.7)
5
- faraday (~> 0.9)
6
-
7
- GEM
8
- remote: https://rubygems.org/
9
- specs:
10
- codeclimate-test-reporter (0.3.0)
11
- simplecov (>= 0.7.1, < 1.0.0)
12
- coderay (1.1.0)
13
- diff-lcs (1.2.5)
14
- docile (1.1.3)
15
- fakes (1.1.4)
16
- fakes-rspec (1.0.5)
17
- fakes
18
- faraday (0.9.0)
19
- multipart-post (>= 1.2, < 3)
20
- json (1.8.1)
21
- method_source (0.8.2)
22
- multi_json (1.9.2)
23
- multipart-post (2.0.0)
24
- pry (0.9.12.6)
25
- coderay (~> 1.0)
26
- method_source (~> 0.8)
27
- slop (~> 3.4)
28
- rake (10.3.1)
29
- rspec (2.14.1)
30
- rspec-core (~> 2.14.0)
31
- rspec-expectations (~> 2.14.0)
32
- rspec-mocks (~> 2.14.0)
33
- rspec-core (2.14.8)
34
- rspec-expectations (2.14.5)
35
- diff-lcs (>= 1.1.3, < 2.0)
36
- rspec-mocks (2.14.6)
37
- simplecov (0.8.2)
38
- docile (~> 1.1.0)
39
- multi_json
40
- simplecov-html (~> 0.8.0)
41
- simplecov-html (0.8.0)
42
- slop (3.4.7)
43
-
44
- PLATFORMS
45
- ruby
46
-
47
- DEPENDENCIES
48
- bundler (~> 1.3)
49
- codeclimate-test-reporter
50
- diplomat!
51
- fakes-rspec (~> 1.0)
52
- json (~> 1.8)
53
- pry (~> 0.9)
54
- rake (~> 10.3)
55
- rspec (~> 2.14)