mortar 0.6.2 → 0.7.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.
@@ -0,0 +1,70 @@
1
+ #
2
+ # Copyright 2012 Mortar Data Inc.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'spec_helper'
18
+ require 'fakefs/spec_helpers'
19
+ require 'mortar/local/installutil'
20
+ require 'launchy'
21
+
22
+ module Mortar::Local
23
+ describe InstallUtil do
24
+ include FakeFS::SpecHelpers
25
+
26
+ class InstallUtilClass
27
+ end
28
+
29
+ before(:each) do
30
+ @installutil = InstallUtilClass.new
31
+ @installutil.extend(Mortar::Local::InstallUtil)
32
+ end
33
+
34
+ context("install_date") do
35
+
36
+ it "nil if never installed" do
37
+ expect(@installutil.install_date('foo')).to be_nil
38
+ end
39
+
40
+ it "contents of file if present, converted to int" do
41
+ install_file_path = @installutil.install_file_for("foo")
42
+ install_date = 123456
43
+ FakeFS do
44
+ FileUtils.mkdir_p(File.dirname(install_file_path))
45
+ File.open(install_file_path, "w") do |file|
46
+ file.puts(install_date.to_s)
47
+ end
48
+ expect(@installutil.install_date('foo')).to eq(install_date)
49
+ end
50
+ end
51
+
52
+ end
53
+
54
+ context("note-install") do
55
+
56
+ it "creates a file in the directory with the current time" do
57
+ install_file_path = @installutil.install_file_for("foo")
58
+ current_date = 123456
59
+ stub(Time).now.returns(current_date)
60
+ FakeFS do
61
+ FileUtils.mkdir_p(File.dirname(install_file_path))
62
+ @installutil.note_install("foo")
63
+ expect(File.exists?(install_file_path)).to be_true
64
+ end
65
+ end
66
+
67
+ end
68
+
69
+ end
70
+ end
@@ -0,0 +1,62 @@
1
+ #
2
+ # Copyright 2012 Mortar Data Inc.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'spec_helper'
18
+ require 'fakefs/spec_helpers'
19
+ require 'mortar/local/java'
20
+ require 'launchy'
21
+
22
+
23
+ class Mortar::Local::Java
24
+ attr_reader :command
25
+ end
26
+
27
+
28
+ module Mortar::Local
29
+ describe Java do
30
+
31
+ context("check_install") do
32
+
33
+ it "sets java command if JAVA_HOME is present and exists" do
34
+ java_home = "/foo/bar/jvm"
35
+ ENV['JAVA_HOME'] = java_home
36
+ j = Mortar::Local::Java.new
37
+ FakeFS do
38
+ FileUtils.mkdir_p(java_home + "/bin")
39
+ FileUtils.touch(java_home + "/bin/java")
40
+ j.check_install
41
+ expect(j.command).to eq("/foo/bar/jvm/bin/java")
42
+ end
43
+ end
44
+
45
+ it "calls java_home if present and no JAVA_HOME" do
46
+ ENV.delete('JAVA_HOME')
47
+ j = Mortar::Local::Java.new
48
+ exec_path = "/usr/libexec/java_home"
49
+ FakeFS do
50
+ FileUtils.mkdir_p(File.dirname(exec_path))
51
+ FileUtils.touch(exec_path)
52
+ mock(j).run_java_home.returns("/foo/bar/other-jvm")
53
+ j.check_install
54
+ expect(j.command).to eq("/foo/bar/other-jvm/bin/java")
55
+ end
56
+ end
57
+
58
+ end
59
+
60
+
61
+ end
62
+ end
@@ -0,0 +1,157 @@
1
+ #
2
+ # Copyright 2012 Mortar Data Inc.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ #
16
+
17
+ require 'spec_helper'
18
+ require 'fakefs/spec_helpers'
19
+ require 'mortar/local/pig'
20
+ require 'launchy'
21
+
22
+
23
+ class Mortar::Local::Pig
24
+ attr_reader :command
25
+ end
26
+
27
+
28
+ module Mortar::Local
29
+ describe Pig do
30
+
31
+ context("install") do
32
+
33
+ it "does nothing if told not to" do
34
+ pig = Mortar::Local::Pig.new
35
+ mock(pig).should_do_pig_install?.returns(false)
36
+ FakeFS do
37
+ FileUtils.mkdir_p(File.dirname(pig.local_install_directory))
38
+ FileUtils.rm_rf(pig.local_install_directory, :force => true)
39
+ pig.install
40
+ expect(File.exists?(pig.local_install_directory)).to be_false
41
+ end
42
+ end
43
+
44
+ it "handles necessary installation steps" do
45
+ # creates the parent directory, downloads the tgz, extracts it,
46
+ # chmods bin/pig, removes tgz, and notes the installation
47
+ FakeFS do
48
+ pig = Mortar::Local::Pig.new
49
+ local_pig_archive = File.join(pig.local_install_directory, pig.pig_archive_file)
50
+ mock(pig).should_do_pig_install?.returns(true)
51
+ mock(pig).download_file(pig.pig_archive_url, pig.local_install_directory) do
52
+ # Simulate the tgz file being downloaded, this should be deleted
53
+ # before the method finishes executing
54
+ FileUtils.touch(local_pig_archive)
55
+ end
56
+ mock(pig).extract_tgz(local_pig_archive, pig.local_install_directory)
57
+ mock(pig).note_install("pig")
58
+ begin
59
+ previous_stdout, $stdout = $stdout, StringIO.new
60
+ pig.install
61
+ ensure
62
+ $stdout = previous_stdout
63
+ end
64
+ expect(File.exists?(local_pig_archive)).to be_false
65
+ end
66
+ end
67
+
68
+ end
69
+
70
+ context "show_illustrate_output" do
71
+
72
+ it "takes a path to a json file, renders the html template, and opens it" do
73
+ fake_illustrate_data = {
74
+ "tables" => [
75
+ {
76
+ "Op" => "LOStore",
77
+ "alias" => "some_relation",
78
+ "notices" => ["things are fouled up", "no just kidding, it's fine"],
79
+ "fields" => ["person_id", "first_name", "last_name"],
80
+ "data" => [
81
+ ["1", "mike", "jones"],
82
+ ["2", "cleopatra", "jones"],
83
+ ["3", "john paul", "jones"],
84
+ ],
85
+ },
86
+ ],
87
+ "udf_output" => "hey, I'm a udf",
88
+ }
89
+ pig = Mortar::Local::Pig.new
90
+ template_location = pig.resource_locations["illustrate_template"]
91
+ template_contents = File.read(template_location)
92
+ output_path = pig.resource_destinations["illustrate_html"]
93
+ mock(pig).decode_illustrate_input_file("foo/bar/file.json").returns(fake_illustrate_data)
94
+
95
+ # TODO: test that these files are copied
96
+ ["illustrate_css",
97
+ "jquery", "jquery_transit", "jquery_stylestack",
98
+ "mortar_table", "zeroclipboard", "zeroclipboard_swf"].each { |resource|
99
+ mock(pig).copy_if_not_present_at_dest.with(
100
+ File.expand_path(pig.resource_locations[resource]),
101
+ pig.resource_destinations[resource]
102
+ ).returns(nil)
103
+ }
104
+
105
+ mock(Launchy).open(File.expand_path(output_path))
106
+ FakeFS do
107
+ FileUtils.mkdir_p(File.dirname(template_location))
108
+ File.open(template_location, 'w') { |f| f.write(template_contents) }
109
+ begin
110
+ previous_stdout, $stdout = $stdout, StringIO.new
111
+ pig.show_illustrate_output("foo/bar/file.json")
112
+ ensure
113
+ $stdout = previous_stdout
114
+ end
115
+ expect(File.exists?(output_path)).to be_true
116
+ end
117
+ end
118
+
119
+ end
120
+
121
+ context "decode_illustrate_input_file" do
122
+
123
+ it "decodes the contents of the file" do
124
+ json = %{[{"alias": "some_relation", "Op": "LOStore"}]}
125
+ expected_data = [ {
126
+ "Op" => "LOStore",
127
+ "alias" => "some_relation",
128
+ }
129
+ ]
130
+ pig = Mortar::Local::Pig.new
131
+ illustrate_output_file = 'illustrate-output.json'
132
+ FakeFS do
133
+ File.open(illustrate_output_file, 'w') { |f| f.write(json) }
134
+ actual_data = pig.decode_illustrate_input_file(illustrate_output_file)
135
+ expect(actual_data).to eq(expected_data)
136
+ end
137
+ end
138
+
139
+ it "handles invalid unicode characters" do
140
+ json = %{{"tables": [ "hi \255"], "udf_output": [ ]}}
141
+ expected_data = {
142
+ 'tables' => ['hi '],
143
+ 'udf_output' => [],
144
+ }
145
+ pig = Mortar::Local::Pig.new
146
+ illustrate_output_file = 'illustrate-output.json'
147
+ FakeFS do
148
+ File.open(illustrate_output_file, 'w') { |f| f.write(json) }
149
+ actual_data = pig.decode_illustrate_input_file(illustrate_output_file)
150
+ expect(actual_data).to eq(expected_data)
151
+ end
152
+ end
153
+
154
+ end
155
+
156
+ end
157
+ end
@@ -32,6 +32,17 @@ module Mortar
32
32
  end
33
33
  end
34
34
 
35
+ context "controlscripts" do
36
+
37
+ it "does not raise an error when unable to find controlscripts dir" do
38
+ with_blank_project do |p|
39
+ FileUtils.rm_rf p.controlscripts_path
40
+ lambda { p.controlscripts_path }.should_not raise_error(Mortar::Project::ProjectError)
41
+ end
42
+ end
43
+
44
+ end
45
+
35
46
  context "pigscripts" do
36
47
 
37
48
  it "raise when unable to find pigscripts dir" do
data/spec/spec_helper.rb CHANGED
@@ -160,6 +160,7 @@ def with_blank_project(&block)
160
160
  FileUtils.mkdir_p(project_path)
161
161
 
162
162
  # setup project subdirectories
163
+ FileUtils.mkdir_p(File.join(project_path, "controlscripts"))
163
164
  FileUtils.mkdir_p(File.join(project_path, "pigscripts"))
164
165
  FileUtils.mkdir_p(File.join(project_path, "macros"))
165
166
 
metadata CHANGED
@@ -1,167 +1,164 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: mortar
3
- version: !ruby/object:Gem::Version
4
- version: 0.6.2
3
+ version: !ruby/object:Gem::Version
4
+ hash: 3
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 7
9
+ - 0
10
+ version: 0.7.0
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Mortar Data
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2013-03-04 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
17
+
18
+ date: 2013-03-14 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
15
21
  name: mortar-api-ruby
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
18
- requirements:
19
- - - ~>
20
- - !ruby/object:Gem::Version
21
- version: 0.5.2
22
- type: :runtime
23
22
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ~>
28
- - !ruby/object:Gem::Version
29
- version: 0.5.2
30
- - !ruby/object:Gem::Dependency
31
- name: netrc
32
- requirement: !ruby/object:Gem::Requirement
23
+ requirement: &id001 !ruby/object:Gem::Requirement
33
24
  none: false
34
- requirements:
25
+ requirements:
35
26
  - - ~>
36
- - !ruby/object:Gem::Version
37
- version: '0.7'
27
+ - !ruby/object:Gem::Version
28
+ hash: 7
29
+ segments:
30
+ - 0
31
+ - 6
32
+ - 0
33
+ version: 0.6.0
38
34
  type: :runtime
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: netrc
39
38
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
39
+ requirement: &id002 !ruby/object:Gem::Requirement
41
40
  none: false
42
- requirements:
41
+ requirements:
43
42
  - - ~>
44
- - !ruby/object:Gem::Version
45
- version: '0.7'
46
- - !ruby/object:Gem::Dependency
47
- name: launchy
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ~>
52
- - !ruby/object:Gem::Version
53
- version: '2.1'
43
+ - !ruby/object:Gem::Version
44
+ hash: 5
45
+ segments:
46
+ - 0
47
+ - 7
48
+ version: "0.7"
54
49
  type: :runtime
50
+ version_requirements: *id002
51
+ - !ruby/object:Gem::Dependency
52
+ name: launchy
55
53
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
54
+ requirement: &id003 !ruby/object:Gem::Requirement
57
55
  none: false
58
- requirements:
56
+ requirements:
59
57
  - - ~>
60
- - !ruby/object:Gem::Version
61
- version: '2.1'
62
- - !ruby/object:Gem::Dependency
58
+ - !ruby/object:Gem::Version
59
+ hash: 1
60
+ segments:
61
+ - 2
62
+ - 1
63
+ version: "2.1"
64
+ type: :runtime
65
+ version_requirements: *id003
66
+ - !ruby/object:Gem::Dependency
63
67
  name: excon
64
- requirement: !ruby/object:Gem::Requirement
68
+ prerelease: false
69
+ requirement: &id004 !ruby/object:Gem::Requirement
65
70
  none: false
66
- requirements:
71
+ requirements:
67
72
  - - ~>
68
- - !ruby/object:Gem::Version
69
- version: '0.15'
73
+ - !ruby/object:Gem::Version
74
+ hash: 21
75
+ segments:
76
+ - 0
77
+ - 15
78
+ version: "0.15"
70
79
  type: :development
80
+ version_requirements: *id004
81
+ - !ruby/object:Gem::Dependency
82
+ name: fakefs
71
83
  prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
84
+ requirement: &id005 !ruby/object:Gem::Requirement
73
85
  none: false
74
- requirements:
86
+ requirements:
75
87
  - - ~>
76
- - !ruby/object:Gem::Version
77
- version: '0.15'
78
- - !ruby/object:Gem::Dependency
79
- name: fakefs
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ! '>='
84
- - !ruby/object:Gem::Version
85
- version: '0'
88
+ - !ruby/object:Gem::Version
89
+ hash: 11
90
+ segments:
91
+ - 0
92
+ - 4
93
+ - 2
94
+ version: 0.4.2
86
95
  type: :development
87
- prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
93
- version: '0'
94
- - !ruby/object:Gem::Dependency
96
+ version_requirements: *id005
97
+ - !ruby/object:Gem::Dependency
95
98
  name: gem-release
96
- requirement: !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
99
- - - ! '>='
100
- - !ruby/object:Gem::Version
101
- version: '0'
102
- type: :development
103
99
  prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '0'
110
- - !ruby/object:Gem::Dependency
111
- name: rake
112
- requirement: !ruby/object:Gem::Requirement
100
+ requirement: &id006 !ruby/object:Gem::Requirement
113
101
  none: false
114
- requirements:
115
- - - ! '>='
116
- - !ruby/object:Gem::Version
117
- version: '0'
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ hash: 3
106
+ segments:
107
+ - 0
108
+ version: "0"
118
109
  type: :development
110
+ version_requirements: *id006
111
+ - !ruby/object:Gem::Dependency
112
+ name: rake
119
113
  prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
114
+ requirement: &id007 !ruby/object:Gem::Requirement
121
115
  none: false
122
- requirements:
123
- - - ! '>='
124
- - !ruby/object:Gem::Version
125
- version: '0'
126
- - !ruby/object:Gem::Dependency
127
- name: rr
128
- requirement: !ruby/object:Gem::Requirement
129
- none: false
130
- requirements:
131
- - - ! '>='
132
- - !ruby/object:Gem::Version
133
- version: '0'
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ hash: 3
120
+ segments:
121
+ - 0
122
+ version: "0"
134
123
  type: :development
124
+ version_requirements: *id007
125
+ - !ruby/object:Gem::Dependency
126
+ name: rr
135
127
  prerelease: false
136
- version_requirements: !ruby/object:Gem::Requirement
128
+ requirement: &id008 !ruby/object:Gem::Requirement
137
129
  none: false
138
- requirements:
139
- - - ! '>='
140
- - !ruby/object:Gem::Version
141
- version: '0'
142
- - !ruby/object:Gem::Dependency
143
- name: rspec
144
- requirement: !ruby/object:Gem::Requirement
145
- none: false
146
- requirements:
147
- - - ! '>='
148
- - !ruby/object:Gem::Version
149
- version: '0'
130
+ requirements:
131
+ - - ">="
132
+ - !ruby/object:Gem::Version
133
+ hash: 3
134
+ segments:
135
+ - 0
136
+ version: "0"
150
137
  type: :development
138
+ version_requirements: *id008
139
+ - !ruby/object:Gem::Dependency
140
+ name: rspec
151
141
  prerelease: false
152
- version_requirements: !ruby/object:Gem::Requirement
142
+ requirement: &id009 !ruby/object:Gem::Requirement
153
143
  none: false
154
- requirements:
155
- - - ! '>='
156
- - !ruby/object:Gem::Version
157
- version: '0'
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ hash: 3
148
+ segments:
149
+ - 0
150
+ version: "0"
151
+ type: :development
152
+ version_requirements: *id009
158
153
  description: Client library and command-line tool to interact with the Mortar service.
159
154
  email: support@mortardata.com
160
- executables:
155
+ executables:
161
156
  - mortar
162
157
  extensions: []
158
+
163
159
  extra_rdoc_files: []
164
- files:
160
+
161
+ files:
165
162
  - README.md
166
163
  - bin/mortar
167
164
  - lib/mortar.rb
@@ -177,6 +174,7 @@ files:
177
174
  - lib/mortar/command/help.rb
178
175
  - lib/mortar/command/illustrate.rb
179
176
  - lib/mortar/command/jobs.rb
177
+ - lib/mortar/command/local.rb
180
178
  - lib/mortar/command/pigscripts.rb
181
179
  - lib/mortar/command/projects.rb
182
180
  - lib/mortar/command/validate.rb
@@ -189,6 +187,11 @@ files:
189
187
  - lib/mortar/generators/udf_generator.rb
190
188
  - lib/mortar/git.rb
191
189
  - lib/mortar/helpers.rb
190
+ - lib/mortar/local/controller.rb
191
+ - lib/mortar/local/installutil.rb
192
+ - lib/mortar/local/java.rb
193
+ - lib/mortar/local/pig.rb
194
+ - lib/mortar/local/python.rb
192
195
  - lib/mortar/project.rb
193
196
  - lib/mortar/templates/macro/macro.pig
194
197
  - lib/mortar/templates/pigscript/pigscript.pig
@@ -199,6 +202,8 @@ files:
199
202
  - lib/mortar/templates/project/macros/gitkeep
200
203
  - lib/mortar/templates/project/pigscripts/pigscript.pig
201
204
  - lib/mortar/templates/project/udfs/python/python_udf.py
205
+ - lib/mortar/templates/report/illustrate-report.html
206
+ - lib/mortar/templates/script/runpig.sh
202
207
  - lib/mortar/templates/udf/python_udf.py
203
208
  - lib/mortar/updater.rb
204
209
  - lib/mortar/version.rb
@@ -213,12 +218,17 @@ files:
213
218
  - spec/mortar/command/generate_spec.rb
214
219
  - spec/mortar/command/illustrate_spec.rb
215
220
  - spec/mortar/command/jobs_spec.rb
221
+ - spec/mortar/command/local_spec.rb
216
222
  - spec/mortar/command/pigscripts_spec.rb
217
223
  - spec/mortar/command/projects_spec.rb
218
224
  - spec/mortar/command/validate_spec.rb
219
225
  - spec/mortar/command_spec.rb
220
226
  - spec/mortar/git_spec.rb
221
227
  - spec/mortar/helpers_spec.rb
228
+ - spec/mortar/local/controller_spec.rb
229
+ - spec/mortar/local/installutil_spec.rb
230
+ - spec/mortar/local/java_spec.rb
231
+ - spec/mortar/local/pig_spec.rb
222
232
  - spec/mortar/project_spec.rb
223
233
  - spec/mortar/updater_spec.rb
224
234
  - spec/spec.opts
@@ -226,26 +236,38 @@ files:
226
236
  - spec/support/display_message_matcher.rb
227
237
  homepage: http://mortardata.com/
228
238
  licenses: []
239
+
229
240
  post_install_message:
230
241
  rdoc_options: []
231
- require_paths:
242
+
243
+ require_paths:
232
244
  - lib
233
- required_ruby_version: !ruby/object:Gem::Requirement
245
+ required_ruby_version: !ruby/object:Gem::Requirement
234
246
  none: false
235
- requirements:
236
- - - ! '>='
237
- - !ruby/object:Gem::Version
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ hash: 57
251
+ segments:
252
+ - 1
253
+ - 8
254
+ - 7
238
255
  version: 1.8.7
239
- required_rubygems_version: !ruby/object:Gem::Requirement
256
+ required_rubygems_version: !ruby/object:Gem::Requirement
240
257
  none: false
241
- requirements:
242
- - - ! '>='
243
- - !ruby/object:Gem::Version
244
- version: '0'
258
+ requirements:
259
+ - - ">="
260
+ - !ruby/object:Gem::Version
261
+ hash: 3
262
+ segments:
263
+ - 0
264
+ version: "0"
245
265
  requirements: []
266
+
246
267
  rubyforge_project:
247
268
  rubygems_version: 1.8.24
248
269
  signing_key:
249
270
  specification_version: 3
250
271
  summary: Client library and CLI to interact with the Mortar service.
251
272
  test_files: []
273
+