hog 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/lib/hog/field.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  module Hog
2
2
  class Field
3
3
  attr_reader :opts
4
+ attr_reader :name
5
+ attr_reader :type
4
6
 
5
7
  def initialize(type, name, opts={})
6
8
  @name = name
@@ -0,0 +1,12 @@
1
+ require 'hog/pig_schema'
2
+ module Hog
3
+ class HiveSchema < PigSchema
4
+ XLATEMAP = {
5
+ "chararray" => "string"
6
+ }
7
+ def field(f)
8
+ "#{f.name} #{XLATEMAP[f.type] || f.type}"
9
+ end
10
+
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ module Hog
2
+ class PigSchema
3
+ def schema(tuple)
4
+ "\n--\n-- This schema was auto generated by Hog v#{Hog::VERSION}.\n--\n#{tuple.fields.map{|f| "\t#{field(f)} -- #{f.opts.to_s}" }.join(",\n")}"
5
+ end
6
+
7
+ def field(f)
8
+ "#{f.name}:#{f.type}"
9
+ end
10
+
11
+ end
12
+ end
data/lib/hog/tuple.rb CHANGED
@@ -4,10 +4,20 @@
4
4
 
5
5
  module Hog
6
6
  class Tuple
7
+ attr_reader :fields
8
+ attr_reader :name
9
+
10
+ SCHEMAS = {
11
+ :udf => UdfSchema.new,
12
+ :pig => PigSchema.new,
13
+ :hive => HiveSchema.new
14
+ }
15
+
16
+
7
17
  def initialize(name, block)
8
18
  @name = name
9
19
  @fields = []
10
- self.instance_eval &block
20
+ self.instance_eval(&block)
11
21
  end
12
22
 
13
23
  def process(hsh)
@@ -27,6 +37,10 @@ module Hog
27
37
  "(#{@fields.map{|f| f.to_s }.join(',')})"
28
38
  end
29
39
 
40
+ def schema(kind=:udf)
41
+ SCHEMAS[kind].schema(self)
42
+ end
43
+
30
44
  def method_missing(meth, *args, &block)
31
45
  if [:chararray, :float, :double, :int, :long, :map].include?(meth)
32
46
  f = Field.new(meth.to_s, *args)
@@ -35,7 +49,7 @@ module Hog
35
49
  else
36
50
  super
37
51
  end
38
- end
52
+ end
39
53
  end
40
54
  end
41
55
 
@@ -0,0 +1,11 @@
1
+ module Hog
2
+ class UdfSchema
3
+ def schema(tuple)
4
+ "(#{@fields.map{|f| field(f) }.join(',')})"
5
+ end
6
+
7
+ def field(f)
8
+ f.to_s
9
+ end
10
+ end
11
+ end
data/lib/hog/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Hog
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/hog.rb CHANGED
@@ -1,8 +1,11 @@
1
1
  require "hog/version"
2
2
  require 'json'
3
- require 'hog/tuple'
4
3
  require 'hog/field'
5
4
  require 'hog/utils'
5
+ require 'hog/pig_schema'
6
+ require 'hog/hive_schema'
7
+ require 'hog/udf_schema'
8
+ require 'hog/tuple'
6
9
 
7
10
  module Hog
8
11
  class << self
metadata CHANGED
@@ -1,48 +1,50 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
5
- prerelease:
4
+ version: 0.0.2
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - jondot
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-06-18 00:00:00.000000000 Z
12
+ date: 2014-08-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
16
- requirement: !ruby/object:Gem::Requirement
17
- none: false
16
+ version_requirements: !ruby/object:Gem::Requirement
18
17
  requirements:
19
- - - ~>
18
+ - - "~>"
20
19
  - !ruby/object:Gem::Version
21
20
  version: '1.6'
22
- type: :development
23
- prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
21
  none: false
22
+ requirement: !ruby/object:Gem::Requirement
26
23
  requirements:
27
- - - ~>
24
+ - - "~>"
28
25
  - !ruby/object:Gem::Version
29
26
  version: '1.6'
27
+ none: false
28
+ prerelease: false
29
+ type: :development
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: rake
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
32
+ version_requirements: !ruby/object:Gem::Requirement
34
33
  requirements:
35
- - - ! '>='
34
+ - - ">="
36
35
  - !ruby/object:Gem::Version
37
- version: '0'
38
- type: :development
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
36
+ version: !binary |-
37
+ MA==
41
38
  none: false
39
+ requirement: !ruby/object:Gem::Requirement
42
40
  requirements:
43
- - - ! '>='
41
+ - - ">="
44
42
  - !ruby/object:Gem::Version
45
- version: '0'
43
+ version: !binary |-
44
+ MA==
45
+ none: false
46
+ prerelease: false
47
+ type: :development
46
48
  description: ''
47
49
  email:
48
50
  - jondotan@gmail.com
@@ -51,7 +53,7 @@ executables:
51
53
  extensions: []
52
54
  extra_rdoc_files: []
53
55
  files:
54
- - .gitignore
56
+ - ".gitignore"
55
57
  - Gemfile
56
58
  - LICENSE.txt
57
59
  - README.md
@@ -63,33 +65,38 @@ files:
63
65
  - hog.gemspec
64
66
  - lib/hog.rb
65
67
  - lib/hog/field.rb
68
+ - lib/hog/hive_schema.rb
69
+ - lib/hog/pig_schema.rb
66
70
  - lib/hog/testing/pig_stubs.rb
67
71
  - lib/hog/tuple.rb
72
+ - lib/hog/udf_schema.rb
68
73
  - lib/hog/utils.rb
69
74
  - lib/hog/version.rb
70
75
  homepage: ''
71
76
  licenses:
72
77
  - MIT
73
- post_install_message:
78
+ post_install_message:
74
79
  rdoc_options: []
75
80
  require_paths:
76
81
  - lib
77
82
  required_ruby_version: !ruby/object:Gem::Requirement
78
- none: false
79
83
  requirements:
80
- - - ! '>='
84
+ - - ">="
81
85
  - !ruby/object:Gem::Version
82
- version: '0'
83
- required_rubygems_version: !ruby/object:Gem::Requirement
86
+ version: !binary |-
87
+ MA==
84
88
  none: false
89
+ required_rubygems_version: !ruby/object:Gem::Requirement
85
90
  requirements:
86
- - - ! '>='
91
+ - - ">="
87
92
  - !ruby/object:Gem::Version
88
- version: '0'
93
+ version: !binary |-
94
+ MA==
95
+ none: false
89
96
  requirements: []
90
- rubyforge_project:
91
- rubygems_version: 1.8.23
92
- signing_key:
97
+ rubyforge_project:
98
+ rubygems_version: 1.8.24
99
+ signing_key:
93
100
  specification_version: 3
94
101
  summary: ''
95
102
  test_files: []