mortar 0.9.3 → 0.9.4
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/mortar/auth.rb +0 -8
- data/lib/mortar/command/local.rb +14 -2
- data/lib/mortar/generators/characterize_generator.rb +105 -0
- data/lib/mortar/generators/generator_base.rb +1 -1
- data/lib/mortar/generators/project_generator.rb +0 -4
- data/lib/mortar/helpers.rb +13 -0
- data/lib/mortar/local/controller.rb +11 -3
- data/lib/mortar/local/installutil.rb +66 -6
- data/lib/mortar/local/jython.rb +11 -5
- data/lib/mortar/local/pig.rb +6 -9
- data/lib/mortar/local/python.rb +43 -23
- data/lib/mortar/plugin.rb +1 -0
- data/lib/mortar/templates/characterize/README.md +7 -0
- data/lib/mortar/templates/characterize/controlscripts/lib/__init__.py +0 -0
- data/lib/mortar/templates/characterize/controlscripts/lib/characterize_control.py +27 -0
- data/lib/mortar/templates/characterize/fixtures/gitkeep +0 -0
- data/lib/mortar/templates/characterize/gitignore +8 -0
- data/lib/mortar/templates/{project → characterize}/macros/characterize_macro.pig +0 -0
- data/lib/mortar/templates/characterize/macros/gitkeep +0 -0
- data/lib/mortar/templates/{project → characterize}/pigscripts/characterize.pig +0 -0
- data/lib/mortar/templates/characterize/pigscripts/pigscript.pig +38 -0
- data/lib/mortar/templates/characterize/udfs/java/gitkeep +0 -0
- data/lib/mortar/templates/characterize/udfs/jython/gitkeep +0 -0
- data/lib/mortar/templates/{project → characterize}/udfs/jython/top_5_tuple.py +0 -0
- data/lib/mortar/templates/characterize/udfs/python/python_udf.py +13 -0
- data/lib/mortar/templates/characterize/vendor/controlscripts/lib/__init__.py +0 -0
- data/lib/mortar/templates/characterize/vendor/macros/gitkeep +0 -0
- data/lib/mortar/templates/characterize/vendor/pigscripts/gitkeep +0 -0
- data/lib/mortar/templates/characterize/vendor/udfs/java/gitkeep +0 -0
- data/lib/mortar/templates/characterize/vendor/udfs/jython/gitkeep +0 -0
- data/lib/mortar/templates/characterize/vendor/udfs/python/gitkeep +0 -0
- data/lib/mortar/version.rb +1 -1
- data/spec/mortar/command/local_spec.rb +29 -2
- data/spec/mortar/command/projects_spec.rb +0 -4
- data/spec/mortar/local/installutil_spec.rb +69 -1
- data/spec/mortar/local/pig_spec.rb +2 -2
- metadata +173 -132
- data/lib/mortar/templates/project/controlscripts/lib/characterize_control.py +0 -23
data/lib/mortar/plugin.rb
CHANGED
@@ -55,6 +55,7 @@ module Mortar
|
|
55
55
|
# TODO: Deal with the bundler as a runtime dependency issue
|
56
56
|
# before moving these require statements to the top.
|
57
57
|
begin
|
58
|
+
require 'bundler'
|
58
59
|
require 'bundler/cli'
|
59
60
|
require 'bundler/friendly_errors'
|
60
61
|
require 'monkey_patch/bundler/bundler'
|
@@ -0,0 +1,7 @@
|
|
1
|
+
# Welcome to Mortar!
|
2
|
+
|
3
|
+
Mortar is a platform-as-a-service for Hadoop. With Mortar, you can run jobs on Hadoop using Apache Pig and Python without any special training. You create your project using the Mortar Development Framework, deploy code using the Git revision control system, and Mortar does the rest.
|
4
|
+
|
5
|
+
# Getting Started
|
6
|
+
|
7
|
+
For help getting started with Mortar, check out the [Mortar Help](http://help.mortardata.com/) site.
|
File without changes
|
@@ -0,0 +1,27 @@
|
|
1
|
+
from org.apache.pig.scripting import Pig
|
2
|
+
import os
|
3
|
+
import sys
|
4
|
+
|
5
|
+
if __name__ == "__main__":
|
6
|
+
params = Pig.getParameters()
|
7
|
+
loader = params["LOADER"]
|
8
|
+
input_source = params["INPUT_SRC"]
|
9
|
+
output_path = params["OUTPUT_PATH"]
|
10
|
+
infer_types = params["INFER_TYPES"]
|
11
|
+
|
12
|
+
if os.path.exists("../%s" % output_path):
|
13
|
+
sys.stderr.write("ERROR: Output directory file: %s exists...Aborting!\n" % output_path)
|
14
|
+
else:
|
15
|
+
Pig.compileFromFile("../pigscripts/characterize.pig").bind({
|
16
|
+
"LOADER" : loader,
|
17
|
+
"INPUT_SRC" : input_source,
|
18
|
+
"OUTPUT_PATH" : output_path,
|
19
|
+
"INFER_TYPES" : infer_types
|
20
|
+
}).runSingle()
|
21
|
+
|
22
|
+
for root, _, files in os.walk("../%s" % output_path):
|
23
|
+
for f in files:
|
24
|
+
if f[0] != '.':
|
25
|
+
fullpath = os.path.join(root, f)
|
26
|
+
copypath = os.path.join(root, f + '.csv')
|
27
|
+
os.system ("cp %s %s" % (fullpath, copypath))
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,38 @@
|
|
1
|
+
/**
|
2
|
+
* <%= project_name %>
|
3
|
+
*/
|
4
|
+
|
5
|
+
/**
|
6
|
+
* Parameters - set default values here; you can override with -p on the command-line.
|
7
|
+
*/
|
8
|
+
|
9
|
+
<%= '%default'%> INPUT_PATH 's3n://mortar-example-data/tutorial/excite.log.bz2'
|
10
|
+
<%= '%default'%> OUTPUT_PATH 's3n://my-output-bucket/$MORTAR_EMAIL_S3_ESCAPED/<%= project_name %>'
|
11
|
+
|
12
|
+
/**
|
13
|
+
* User-Defined Functions (UDFs)
|
14
|
+
*/
|
15
|
+
|
16
|
+
REGISTER '../udfs/python/<%= project_name %>.py' USING streaming_python AS <%= project_name_alias %>;
|
17
|
+
|
18
|
+
-- This is an example of loading up input data
|
19
|
+
my_input_data = LOAD '$INPUT_PATH'
|
20
|
+
USING PigStorage('\t')
|
21
|
+
AS (field0:chararray, field1:chararray, field2:chararray);
|
22
|
+
|
23
|
+
-- This is an example pig operation
|
24
|
+
filtered = FILTER my_input_data
|
25
|
+
BY field0 IS NOT NULL;
|
26
|
+
|
27
|
+
-- This is an example call to a python user-defined function
|
28
|
+
with_udf_output = FOREACH filtered
|
29
|
+
GENERATE field0..field2,
|
30
|
+
<%= project_name_alias %>.example_udf(field0) AS example_udf_field;
|
31
|
+
|
32
|
+
-- remove any existing data
|
33
|
+
rmf $OUTPUT_PATH;
|
34
|
+
|
35
|
+
-- store the results
|
36
|
+
STORE with_udf_output
|
37
|
+
INTO '$OUTPUT_PATH'
|
38
|
+
USING PigStorage('\t');
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,13 @@
|
|
1
|
+
from pig_util import outputSchema
|
2
|
+
|
3
|
+
#
|
4
|
+
# This is where we write python UDFs (User-Defined Functions) that we can call from pig.
|
5
|
+
# Pig needs to know the schema of the data coming out of the function,
|
6
|
+
# which we specify using the @outputSchema decorator.
|
7
|
+
#
|
8
|
+
@outputSchema('example_udf:int')
|
9
|
+
def example_udf(input_str):
|
10
|
+
"""
|
11
|
+
A simple example function that just returns the length of the string passed in.
|
12
|
+
"""
|
13
|
+
return len(input_str) if input_str else None
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/lib/mortar/version.rb
CHANGED
@@ -18,6 +18,7 @@ require 'spec_helper'
|
|
18
18
|
require 'fakefs/spec_helpers'
|
19
19
|
require 'mortar/command/local'
|
20
20
|
require 'launchy'
|
21
|
+
require 'fileutils'
|
21
22
|
|
22
23
|
module Mortar::Command
|
23
24
|
describe Local do
|
@@ -104,6 +105,33 @@ STDERR
|
|
104
105
|
# run
|
105
106
|
end
|
106
107
|
|
108
|
+
context("characterize") do
|
109
|
+
# TODO - oleiman: some tests for characterize should go here
|
110
|
+
|
111
|
+
it "should clean up after itself" do
|
112
|
+
@tmpdir = Dir.mktmpdir
|
113
|
+
Dir.chdir(@tmpdir)
|
114
|
+
|
115
|
+
File.open("test.params", 'w') do |file|
|
116
|
+
file.write(<<PARAMS
|
117
|
+
LOADER=org.apache.pig.piggybank.storage.JsonLoader()
|
118
|
+
INPUT_SRC=s3n://twitter-gardenhose-mortar/example
|
119
|
+
OUTPUT_PATH=twitter_char
|
120
|
+
INFER_TYPES=true
|
121
|
+
PARAMS
|
122
|
+
)
|
123
|
+
end
|
124
|
+
stderr, stdout = execute("generate:project Test")
|
125
|
+
stderr, stdout = execute("local:characterize -f test.params --project_root Test")
|
126
|
+
File.exists?("Test/pigscripts/characterize.pig").should be_false
|
127
|
+
File.exists?("Test/macros/characterize_macro.pig").should be_false
|
128
|
+
File.exists?("Test/udfs/jython/top_5_tuple.py").should be_false
|
129
|
+
File.exists?("Test/controlscripts/lib/characterize_control.py").should be_false
|
130
|
+
File.delete("test.params")
|
131
|
+
end
|
132
|
+
|
133
|
+
end
|
134
|
+
|
107
135
|
context("configure") do
|
108
136
|
|
109
137
|
it "errors if the project root doesn't exist or we can't cd there" do
|
@@ -142,8 +170,7 @@ STDERR
|
|
142
170
|
end
|
143
171
|
any_instance_of(Mortar::Local::Python) do |j|
|
144
172
|
mock(j).check_or_install.returns(true)
|
145
|
-
|
146
|
-
any_instance_of(Mortar::Local::Python) do |j|
|
173
|
+
mock(j).check_virtualenv.returns(true)
|
147
174
|
mock(j).setup_project_python_environment.returns(true)
|
148
175
|
end
|
149
176
|
any_instance_of(Mortar::Local::Jython) do |j|
|
@@ -130,14 +130,11 @@ STDOUT
|
|
130
130
|
\e[1;32m create\e[0m .gitignore
|
131
131
|
\e[1;32m create\e[0m pigscripts
|
132
132
|
\e[1;32m create\e[0m pigscripts/some_new_project.pig
|
133
|
-
\e[1;32m create\e[0m pigscripts/characterize.pig
|
134
133
|
\e[1;32m create\e[0m controlscripts
|
135
134
|
\e[1;32m create\e[0m controlscripts/lib
|
136
135
|
\e[1;32m create\e[0m controlscripts/lib/__init__.py
|
137
|
-
\e[1;32m create\e[0m controlscripts/lib/characterize_control.py
|
138
136
|
\e[1;32m create\e[0m macros
|
139
137
|
\e[1;32m create\e[0m macros/.gitkeep
|
140
|
-
\e[1;32m create\e[0m macros/characterize_macro.pig
|
141
138
|
\e[1;32m create\e[0m fixtures
|
142
139
|
\e[1;32m create\e[0m fixtures/.gitkeep
|
143
140
|
\e[1;32m create\e[0m udfs
|
@@ -145,7 +142,6 @@ STDOUT
|
|
145
142
|
\e[1;32m create\e[0m udfs/python/some_new_project.py
|
146
143
|
\e[1;32m create\e[0m udfs/jython
|
147
144
|
\e[1;32m create\e[0m udfs/jython/.gitkeep
|
148
|
-
\e[1;32m create\e[0m udfs/jython/top_5_tuple.py
|
149
145
|
\e[1;32m create\e[0m udfs/java
|
150
146
|
\e[1;32m create\e[0m udfs/java/.gitkeep
|
151
147
|
\e[1;32m create\e[0m vendor
|
@@ -106,7 +106,11 @@ module Mortar::Local
|
|
106
106
|
|
107
107
|
it "returns an epoch" do
|
108
108
|
excon_response = Excon::Response.new(:headers => {"Last-Modified" => "Mon, 11 Mar 2013 15:03:55 GMT"})
|
109
|
-
mock(Excon).head("http://foo/bar"
|
109
|
+
mock(Excon).head("http://foo/bar",
|
110
|
+
:headers => {"User-Agent"=>Mortar::USER_AGENT},
|
111
|
+
:query => {}
|
112
|
+
).returns(excon_response)
|
113
|
+
|
110
114
|
actual_epoch = @installutil.url_date("http://foo/bar")
|
111
115
|
expect(actual_epoch).to eq(1363014235)
|
112
116
|
end
|
@@ -122,5 +126,69 @@ module Mortar::Local
|
|
122
126
|
|
123
127
|
end
|
124
128
|
|
129
|
+
context "download_file" do
|
130
|
+
|
131
|
+
it "follows redirect" do
|
132
|
+
excon_first_response = Excon::Response.new(:headers => {"Location" => "http://foo/bar2"}, :status => 302)
|
133
|
+
mock(Excon).get("http://foo/bar",
|
134
|
+
:headers => {'User-Agent' => Mortar::USER_AGENT},
|
135
|
+
:query => {}
|
136
|
+
).returns(excon_first_response)
|
137
|
+
|
138
|
+
excon_second_response = Excon::Response.new(:status => 200, :body => "content")
|
139
|
+
mock(Excon).get("http://foo/bar2",
|
140
|
+
:headers => {'User-Agent' => Mortar::USER_AGENT},
|
141
|
+
:query => {}
|
142
|
+
).returns(excon_second_response)
|
143
|
+
|
144
|
+
local_install_directory = @installutil.local_install_directory
|
145
|
+
expected_file_path = File.join(local_install_directory, 'bar2')
|
146
|
+
FakeFS do
|
147
|
+
FileUtils.mkdir_p(local_install_directory)
|
148
|
+
@installutil.download_file('http://foo/bar', expected_file_path)
|
149
|
+
expect(File.exists?(expected_file_path)).to be_true
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
end
|
154
|
+
|
155
|
+
context "get_resource" do
|
156
|
+
it "too many redirects" do
|
157
|
+
response = Excon::Response.new(:headers => {"Location" => "http://foo/bar"}, :status => 302)
|
158
|
+
mock(Excon).get("http://foo/bar",
|
159
|
+
:headers => {'User-Agent' => Mortar::USER_AGENT},
|
160
|
+
:query => {}
|
161
|
+
).times(5).returns(response)
|
162
|
+
|
163
|
+
lambda { @installutil.get_resource("http://foo/bar") }.should raise_error(RuntimeError, /Too many redirects/)
|
164
|
+
end
|
165
|
+
|
166
|
+
it "too many errors" do
|
167
|
+
response = Excon::Response.new(:status => 500)
|
168
|
+
mock(@installutil).make_call_sleep_seconds().times(5).returns(0)
|
169
|
+
mock(Excon).get("http://foo/bar",
|
170
|
+
:headers => {'User-Agent' => Mortar::USER_AGENT},
|
171
|
+
:query => {}
|
172
|
+
).times(5).returns(response)
|
173
|
+
|
174
|
+
lambda { @installutil.get_resource("http://foo/bar") }.should raise_error(RuntimeError, /Server Error/)
|
175
|
+
end
|
176
|
+
|
177
|
+
end
|
178
|
+
|
179
|
+
context "head_resource" do
|
180
|
+
it "too many redirects" do
|
181
|
+
ENV['MORTAR_TEST_NAME'] = "Unit Testor"
|
182
|
+
response = Excon::Response.new(:headers => {"Location" => "http://foo/bar"}, :status => 302)
|
183
|
+
mock(Excon).head("http://foo/bar",
|
184
|
+
:headers => {'User-Agent' => Mortar::USER_AGENT},
|
185
|
+
:query => { :test_name => "Unit Testor" }
|
186
|
+
).times(5).returns(response)
|
187
|
+
|
188
|
+
lambda { @installutil.head_resource("http://foo/bar") }.should raise_error(RuntimeError, /Too many redirects/)
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
|
125
193
|
end
|
126
194
|
end
|
@@ -34,8 +34,8 @@ module Mortar::Local
|
|
34
34
|
# chmods bin/pig, removes tgz, and notes the installation
|
35
35
|
FakeFS do
|
36
36
|
pig = Mortar::Local::Pig.new
|
37
|
-
local_pig_archive = File.join(pig.local_install_directory,
|
38
|
-
mock(pig).download_file(pig.pig_archive_url,
|
37
|
+
local_pig_archive = File.join(pig.local_install_directory, Mortar::Local::Pig::PIG_TGZ_NAME)
|
38
|
+
mock(pig).download_file(pig.pig_archive_url, local_pig_archive) do
|
39
39
|
# Simulate the tgz file being downloaded, this should be deleted
|
40
40
|
# before the method finishes executing
|
41
41
|
FileUtils.touch(local_pig_archive)
|
metadata
CHANGED
@@ -1,167 +1,180 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: mortar
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 51
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 9
|
9
|
+
- 4
|
10
|
+
version: 0.9.4
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- Mortar Data
|
9
14
|
autorequire:
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
+
|
18
|
+
date: 2013-08-02 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: rdoc
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
17
24
|
none: false
|
18
|
-
requirements:
|
19
|
-
- -
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 63
|
29
|
+
segments:
|
30
|
+
- 4
|
31
|
+
- 0
|
32
|
+
- 0
|
33
|
+
version: 4.0.0
|
22
34
|
type: :runtime
|
35
|
+
version_requirements: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: mortar-api-ruby
|
23
38
|
prerelease: false
|
24
|
-
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
25
40
|
none: false
|
26
|
-
requirements:
|
41
|
+
requirements:
|
27
42
|
- - ~>
|
28
|
-
- !ruby/object:Gem::Version
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 1
|
45
|
+
segments:
|
46
|
+
- 0
|
47
|
+
- 6
|
48
|
+
- 3
|
29
49
|
version: 0.6.3
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
|
-
name: netrc
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
|
-
requirements:
|
35
|
-
- - ~>
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: '0.7'
|
38
50
|
type: :runtime
|
51
|
+
version_requirements: *id002
|
52
|
+
- !ruby/object:Gem::Dependency
|
53
|
+
name: netrc
|
39
54
|
prerelease: false
|
40
|
-
|
55
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
41
56
|
none: false
|
42
|
-
requirements:
|
57
|
+
requirements:
|
43
58
|
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
requirements:
|
51
|
-
- - ~>
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '2.1'
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
hash: 5
|
61
|
+
segments:
|
62
|
+
- 0
|
63
|
+
- 7
|
64
|
+
version: "0.7"
|
54
65
|
type: :runtime
|
66
|
+
version_requirements: *id003
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
name: launchy
|
55
69
|
prerelease: false
|
56
|
-
|
70
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
57
71
|
none: false
|
58
|
-
requirements:
|
72
|
+
requirements:
|
59
73
|
- - ~>
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
|
62
|
-
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
hash: 1
|
76
|
+
segments:
|
77
|
+
- 2
|
78
|
+
- 1
|
79
|
+
version: "2.1"
|
80
|
+
type: :runtime
|
81
|
+
version_requirements: *id004
|
82
|
+
- !ruby/object:Gem::Dependency
|
63
83
|
name: excon
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
|
-
requirements:
|
67
|
-
- - ~>
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '0.15'
|
70
|
-
type: :development
|
71
84
|
prerelease: false
|
72
|
-
|
85
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
73
86
|
none: false
|
74
|
-
requirements:
|
87
|
+
requirements:
|
75
88
|
- - ~>
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
requirements:
|
83
|
-
- - ~>
|
84
|
-
- !ruby/object:Gem::Version
|
85
|
-
version: 0.4.2
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
hash: 21
|
91
|
+
segments:
|
92
|
+
- 0
|
93
|
+
- 15
|
94
|
+
version: "0.15"
|
86
95
|
type: :development
|
96
|
+
version_requirements: *id005
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: fakefs
|
87
99
|
prerelease: false
|
88
|
-
|
100
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
89
101
|
none: false
|
90
|
-
requirements:
|
102
|
+
requirements:
|
91
103
|
- - ~>
|
92
|
-
- !ruby/object:Gem::Version
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
hash: 11
|
106
|
+
segments:
|
107
|
+
- 0
|
108
|
+
- 4
|
109
|
+
- 2
|
93
110
|
version: 0.4.2
|
94
|
-
- !ruby/object:Gem::Dependency
|
95
|
-
name: gem-release
|
96
|
-
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
|
-
requirements:
|
99
|
-
- - ! '>='
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
version: '0'
|
102
111
|
type: :development
|
112
|
+
version_requirements: *id006
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: gem-release
|
103
115
|
prerelease: false
|
104
|
-
|
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
|
116
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
113
117
|
none: false
|
114
|
-
requirements:
|
115
|
-
- -
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
|
118
|
+
requirements:
|
119
|
+
- - ">="
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
hash: 3
|
122
|
+
segments:
|
123
|
+
- 0
|
124
|
+
version: "0"
|
118
125
|
type: :development
|
126
|
+
version_requirements: *id007
|
127
|
+
- !ruby/object:Gem::Dependency
|
128
|
+
name: rake
|
119
129
|
prerelease: false
|
120
|
-
|
121
|
-
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
|
130
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
129
131
|
none: false
|
130
|
-
requirements:
|
131
|
-
- -
|
132
|
-
- !ruby/object:Gem::Version
|
133
|
-
|
132
|
+
requirements:
|
133
|
+
- - ">="
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
hash: 3
|
136
|
+
segments:
|
137
|
+
- 0
|
138
|
+
version: "0"
|
134
139
|
type: :development
|
140
|
+
version_requirements: *id008
|
141
|
+
- !ruby/object:Gem::Dependency
|
142
|
+
name: rr
|
135
143
|
prerelease: false
|
136
|
-
|
144
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
137
145
|
none: false
|
138
|
-
requirements:
|
139
|
-
- -
|
140
|
-
- !ruby/object:Gem::Version
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
none: false
|
146
|
-
requirements:
|
147
|
-
- - ! '>='
|
148
|
-
- !ruby/object:Gem::Version
|
149
|
-
version: '0'
|
146
|
+
requirements:
|
147
|
+
- - ">="
|
148
|
+
- !ruby/object:Gem::Version
|
149
|
+
hash: 3
|
150
|
+
segments:
|
151
|
+
- 0
|
152
|
+
version: "0"
|
150
153
|
type: :development
|
154
|
+
version_requirements: *id009
|
155
|
+
- !ruby/object:Gem::Dependency
|
156
|
+
name: rspec
|
151
157
|
prerelease: false
|
152
|
-
|
158
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
153
159
|
none: false
|
154
|
-
requirements:
|
155
|
-
- -
|
156
|
-
- !ruby/object:Gem::Version
|
157
|
-
|
160
|
+
requirements:
|
161
|
+
- - ">="
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
hash: 3
|
164
|
+
segments:
|
165
|
+
- 0
|
166
|
+
version: "0"
|
167
|
+
type: :development
|
168
|
+
version_requirements: *id010
|
158
169
|
description: Client library and command-line tool to interact with the Mortar service.
|
159
170
|
email: support@mortardata.com
|
160
|
-
executables:
|
171
|
+
executables:
|
161
172
|
- mortar
|
162
173
|
extensions: []
|
174
|
+
|
163
175
|
extra_rdoc_files: []
|
164
|
-
|
176
|
+
|
177
|
+
files:
|
165
178
|
- README.md
|
166
179
|
- bin/mortar
|
167
180
|
- css/illustrate.css
|
@@ -192,6 +205,7 @@ files:
|
|
192
205
|
- lib/mortar/command/validate.rb
|
193
206
|
- lib/mortar/command/version.rb
|
194
207
|
- lib/mortar/errors.rb
|
208
|
+
- lib/mortar/generators/characterize_generator.rb
|
195
209
|
- lib/mortar/generators/controlscript_generator.rb
|
196
210
|
- lib/mortar/generators/generator_base.rb
|
197
211
|
- lib/mortar/generators/macro_generator.rb
|
@@ -208,22 +222,37 @@ files:
|
|
208
222
|
- lib/mortar/local/python.rb
|
209
223
|
- lib/mortar/plugin.rb
|
210
224
|
- lib/mortar/project.rb
|
225
|
+
- lib/mortar/templates/characterize/README.md
|
226
|
+
- lib/mortar/templates/characterize/controlscripts/lib/__init__.py
|
227
|
+
- lib/mortar/templates/characterize/controlscripts/lib/characterize_control.py
|
228
|
+
- lib/mortar/templates/characterize/fixtures/gitkeep
|
229
|
+
- lib/mortar/templates/characterize/gitignore
|
230
|
+
- lib/mortar/templates/characterize/macros/characterize_macro.pig
|
231
|
+
- lib/mortar/templates/characterize/macros/gitkeep
|
232
|
+
- lib/mortar/templates/characterize/pigscripts/characterize.pig
|
233
|
+
- lib/mortar/templates/characterize/pigscripts/pigscript.pig
|
234
|
+
- lib/mortar/templates/characterize/udfs/java/gitkeep
|
235
|
+
- lib/mortar/templates/characterize/udfs/jython/gitkeep
|
236
|
+
- lib/mortar/templates/characterize/udfs/jython/top_5_tuple.py
|
237
|
+
- lib/mortar/templates/characterize/udfs/python/python_udf.py
|
238
|
+
- lib/mortar/templates/characterize/vendor/controlscripts/lib/__init__.py
|
239
|
+
- lib/mortar/templates/characterize/vendor/macros/gitkeep
|
240
|
+
- lib/mortar/templates/characterize/vendor/pigscripts/gitkeep
|
241
|
+
- lib/mortar/templates/characterize/vendor/udfs/java/gitkeep
|
242
|
+
- lib/mortar/templates/characterize/vendor/udfs/jython/gitkeep
|
243
|
+
- lib/mortar/templates/characterize/vendor/udfs/python/gitkeep
|
211
244
|
- lib/mortar/templates/controlscript/controlscript.py
|
212
245
|
- lib/mortar/templates/macro/macro.pig
|
213
246
|
- lib/mortar/templates/pigscript/pigscript.pig
|
214
247
|
- lib/mortar/templates/pigscript/python_udf.py
|
215
248
|
- lib/mortar/templates/project/README.md
|
216
249
|
- lib/mortar/templates/project/controlscripts/lib/__init__.py
|
217
|
-
- lib/mortar/templates/project/controlscripts/lib/characterize_control.py
|
218
250
|
- lib/mortar/templates/project/fixtures/gitkeep
|
219
251
|
- lib/mortar/templates/project/gitignore
|
220
|
-
- lib/mortar/templates/project/macros/characterize_macro.pig
|
221
252
|
- lib/mortar/templates/project/macros/gitkeep
|
222
|
-
- lib/mortar/templates/project/pigscripts/characterize.pig
|
223
253
|
- lib/mortar/templates/project/pigscripts/pigscript.pig
|
224
254
|
- lib/mortar/templates/project/udfs/java/gitkeep
|
225
255
|
- lib/mortar/templates/project/udfs/jython/gitkeep
|
226
|
-
- lib/mortar/templates/project/udfs/jython/top_5_tuple.py
|
227
256
|
- lib/mortar/templates/project/udfs/python/python_udf.py
|
228
257
|
- lib/mortar/templates/project/vendor/controlscripts/lib/__init__.py
|
229
258
|
- lib/mortar/templates/project/vendor/macros/gitkeep
|
@@ -268,26 +297,38 @@ files:
|
|
268
297
|
- spec/support/display_message_matcher.rb
|
269
298
|
homepage: http://mortardata.com/
|
270
299
|
licenses: []
|
300
|
+
|
271
301
|
post_install_message:
|
272
302
|
rdoc_options: []
|
273
|
-
|
303
|
+
|
304
|
+
require_paths:
|
274
305
|
- lib
|
275
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
306
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
276
307
|
none: false
|
277
|
-
requirements:
|
278
|
-
- -
|
279
|
-
- !ruby/object:Gem::Version
|
308
|
+
requirements:
|
309
|
+
- - ">="
|
310
|
+
- !ruby/object:Gem::Version
|
311
|
+
hash: 57
|
312
|
+
segments:
|
313
|
+
- 1
|
314
|
+
- 8
|
315
|
+
- 7
|
280
316
|
version: 1.8.7
|
281
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
317
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
282
318
|
none: false
|
283
|
-
requirements:
|
284
|
-
- -
|
285
|
-
- !ruby/object:Gem::Version
|
286
|
-
|
319
|
+
requirements:
|
320
|
+
- - ">="
|
321
|
+
- !ruby/object:Gem::Version
|
322
|
+
hash: 3
|
323
|
+
segments:
|
324
|
+
- 0
|
325
|
+
version: "0"
|
287
326
|
requirements: []
|
327
|
+
|
288
328
|
rubyforge_project:
|
289
|
-
rubygems_version: 1.8.
|
329
|
+
rubygems_version: 1.8.25
|
290
330
|
signing_key:
|
291
331
|
specification_version: 3
|
292
332
|
summary: Client library and CLI to interact with the Mortar service.
|
293
333
|
test_files: []
|
334
|
+
|