sishen-hbase-ruby 0.2

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt ADDED
@@ -0,0 +1,2 @@
1
+ v0.1 Jul 29, 2008
2
+ * initial version
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2007 Dingding Ye
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Manifest.txt ADDED
@@ -0,0 +1,30 @@
1
+ History.txt
2
+ MIT-LICENSE
3
+ Manifest.txt
4
+ README.txt
5
+ Rakefile
6
+ hbase-ruby.gemspec
7
+ lib/hbase.rb
8
+ lib/hbase/client.rb
9
+ lib/hbase/exception.rb
10
+ lib/hbase/model.rb
11
+ lib/hbase/model/column.rb
12
+ lib/hbase/model/column_descriptor.rb
13
+ lib/hbase/model/region_descriptor.rb
14
+ lib/hbase/model/row.rb
15
+ lib/hbase/model/table_descriptor.rb
16
+ lib/hbase/operation/meta_operation.rb
17
+ lib/hbase/operation/row_operation.rb
18
+ lib/hbase/operation/scanner_operation.rb
19
+ lib/hbase/operation/table_operation.rb
20
+ lib/hbase/request.rb
21
+ lib/hbase/request/basic_request.rb
22
+ lib/hbase/request/meta_request.rb
23
+ lib/hbase/request/row_request.rb
24
+ lib/hbase/request/scanner_request.rb
25
+ lib/hbase/request/table_request.rb
26
+ lib/hbase/response.rb
27
+ lib/hbase/response/basic_response.rb
28
+ lib/hbase/response/meta_response.rb
29
+ lib/hbase/response/row_response.rb
30
+ lib/hbase/response/table_response.rb
data/README.txt ADDED
@@ -0,0 +1,41 @@
1
+ hbase-ruby is a pure ruby client for HBase using REST interface
2
+
3
+ == USAGE
4
+
5
+ First launch HBase:
6
+
7
+ 1.
8
+ {{{
9
+ bin/start-hbase.sh
10
+ }}}
11
+
12
+ 2. ruby code
13
+ {{{
14
+ require 'hbase'
15
+
16
+ client = HBase::Client.new("http://localhost:60010/api") # this url is the default.
17
+ tables = client.list_tables # list available tables
18
+
19
+ table = client.show_table('users') # show the meta info of table users
20
+
21
+ row = client.show_row('users', 'sishen') # show the data of row 'sishen' in table 'users'
22
+
23
+ row2 = client.create_row('users', 'sishen', Time.now.to_i, {:name => 'habbit:football', :value => 'i like football'}) # create the row 'sishen' with the data in the table 'users'
24
+
25
+ client.delete_row('users', 'sishen', nil, 'habbit:football') # delete the row 'sishen' of table 'users' with the optional column 'habbit:football'
26
+ }}}
27
+
28
+
29
+ == INSTALLTION
30
+ build the gem:
31
+
32
+ rake gem
33
+
34
+ and install the versioned gem:
35
+
36
+ gem install pkg/hbase-ruby-x.x.x.gem
37
+
38
+ == Copyright
39
+
40
+ Copyright (c) 2007 Dingding Ye <yedingding@gmail.com>
41
+ Distributed under MIT License
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require 'rubygems'
2
+ require 'hoe'
3
+
4
+ Hoe.new('hbase-ruby', '0.1') do |p|
5
+ p.rubyforge_name = 'hbase-ruby'
6
+ p.author = 'Ye Dingding'
7
+ p.email = 'yedingding@gmail.com'
8
+ p.url = 'http://sishen.lifegoo.com'
9
+ p.summary = 'a pure ruby client for hbase using REST interface'
10
+ p.description = 'hbase-ruby is a pure ruby client for hbase and enable the ruby app enjoy the power of HBase'
11
+ end
@@ -0,0 +1,32 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = %q{hbase-ruby}
3
+ s.version = "0.2"
4
+
5
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
6
+ s.authors = ["Ye Dingding"]
7
+ s.date = %q{2008-08-09}
8
+ s.description = %q{hbase-ruby is a pure ruby client for hbase and enable the ruby app enjoy the power of HBase}
9
+ s.email = %q{yedingding@gmail.com}
10
+ s.extra_rdoc_files = ["History.txt", "Manifest.txt", "README.txt"]
11
+ s.files = ["History.txt", "MIT-LICENSE", "Manifest.txt", "README.txt", "Rakefile", "hbase-ruby.gemspec", "lib/hbase.rb", "lib/hbase/client.rb", "lib/hbase/exception.rb", "lib/hbase/model.rb", "lib/hbase/model/column.rb", "lib/hbase/model/column_descriptor.rb", "lib/hbase/model/region_descriptor.rb", "lib/hbase/model/row.rb", "lib/hbase/model/table_descriptor.rb", "lib/hbase/operation/meta_operation.rb", "lib/hbase/operation/row_operation.rb", "lib/hbase/operation/scanner_operation.rb", "lib/hbase/operation/table_operation.rb", "lib/hbase/request.rb", "lib/hbase/request/basic_request.rb", "lib/hbase/request/meta_request.rb", "lib/hbase/request/row_request.rb", "lib/hbase/request/scanner_request.rb", "lib/hbase/request/table_request.rb", "lib/hbase/response.rb", "lib/hbase/response/basic_response.rb", "lib/hbase/response/meta_response.rb", "lib/hbase/response/row_response.rb", "lib/hbase/response/table_response.rb"]
12
+ s.has_rdoc = true
13
+ s.homepage = %q{http://sishen.lifegoo.com}
14
+ s.rdoc_options = ["--main", "README.txt"]
15
+ s.require_paths = ["lib"]
16
+ s.rubyforge_project = %q{hbase-ruby}
17
+ s.rubygems_version = %q{1.2.0}
18
+ s.summary = %q{a pure ruby client for hbase using REST interface}
19
+
20
+ if s.respond_to? :specification_version then
21
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
22
+ s.specification_version = 2
23
+
24
+ if current_version >= 3 then
25
+ s.add_development_dependency(%q<hoe>, [">= 1.7.0"])
26
+ else
27
+ s.add_dependency(%q<hoe>, [">= 1.7.0"])
28
+ end
29
+ else
30
+ s.add_dependency(%q<hoe>, [">= 1.7.0"])
31
+ end
32
+ end
data/lib/hbase.rb ADDED
@@ -0,0 +1,44 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ require 'hbase/client'
5
+ require 'hbase/exception'
6
+ require 'hbase/model'
7
+ require 'hbase/request'
8
+ require 'hbase/response'
9
+
10
+ module HBase; end
11
+
12
+ class Object
13
+ def to_proc
14
+ proc { |obj, *args| obj.send(self, *args) }
15
+ end
16
+
17
+ def blank?
18
+ respond_to?(:empty?) ? empty? : !self
19
+ end
20
+ end
21
+
22
+ class NilClass #:nodoc:
23
+ def blank?
24
+ true
25
+ end
26
+ end
27
+
28
+ class Array #:nodoc:
29
+ alias_method :blank?, :empty?
30
+ end
31
+
32
+ class Hash #:nodoc:
33
+ alias_method :blank?, :empty?
34
+ end
35
+
36
+ class String #:nodoc:
37
+ def blank?
38
+ self !~ /\S/
39
+ end
40
+
41
+ def to_b
42
+ self == "true" ? true : false
43
+ end
44
+ end
@@ -0,0 +1,49 @@
1
+ require 'net/http'
2
+ require 'hbase/operation/meta_operation'
3
+ require 'hbase/operation/table_operation'
4
+ require 'hbase/operation/row_operation'
5
+ require 'hbase/operation/scanner_operation'
6
+
7
+ module HBase
8
+ class Client
9
+ include Operation::MetaOperation
10
+ include Operation::TableOperation
11
+ include Operation::RowOperation
12
+ include Operation::ScannerOperation
13
+
14
+ attr_reader :url, :connection
15
+
16
+ def initialize(url = "http://localhost:60010/api", opts = {})
17
+ @url = URI.parse(url)
18
+ unless @url.kind_of? URI::HTTP
19
+ raise "invalid http url: #{url}"
20
+ end
21
+
22
+ # Not actually opening the connection yet, just setting up the persistent connection.
23
+ @connection = Net::HTTP.new(@url.host, @url.port)
24
+ @connection.read_timeout = opts[:timeout] if opts[:timeout]
25
+ end
26
+
27
+ def get(path)
28
+ safe_request { @connection.get(@url.path + path) }
29
+ end
30
+
31
+ def post(path, data = nil)
32
+ safe_request { @connection.post(@url.path + path, data, {'Content-Type' => 'text/xml'}) }
33
+ end
34
+
35
+ def delete(path)
36
+ safe_request { @connection.delete(@url.path + path) }
37
+ end
38
+
39
+ private
40
+ def safe_request(&block)
41
+ response = yield
42
+ case response
43
+ when Net::HTTPSuccess then response.body
44
+ else
45
+ response.error!
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1 @@
1
+ class HBase::Exception < Exception; end
@@ -0,0 +1,20 @@
1
+ module HBase
2
+ module Model
3
+ class Record
4
+ def initialize (params)
5
+ return if params.nil?
6
+
7
+ params.each do |key, value|
8
+ name = key.to_s
9
+ instance_variable_set("@#{name}", value) if respond_to?(name)
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+
16
+ require 'hbase/model/column'
17
+ require 'hbase/model/column_descriptor'
18
+ require 'hbase/model/region_descriptor'
19
+ require 'hbase/model/row'
20
+ require 'hbase/model/table_descriptor'
@@ -0,0 +1,8 @@
1
+ module HBase
2
+ module Model
3
+ class Column < Record
4
+ attr_accessor :name
5
+ attr_accessor :value
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,32 @@
1
+ module HBase
2
+ module Model
3
+ module CompressionType
4
+ NONE = "NONE"
5
+ RECORD = "RECORD"
6
+ BLOCK = "BLOCK"
7
+
8
+ def to_compression_type(type_string)
9
+ case type_string
10
+ when "NONE" then NONE
11
+ when "RECORD" then RECORD
12
+ when "BLOCK" then BLOCK
13
+ else
14
+ NONE
15
+ end
16
+ end
17
+
18
+ module_function :to_compression_type
19
+ end
20
+
21
+ class ColumnDescriptor < Record
22
+ AVAILABLE_OPTS = { :name => "name", :max_versions => "max-versions", :compression => "compression",
23
+ :in_memory => "in-memory", :block_cache => "block-cache", :max_cell_size => "max-cell-size",
24
+ :ttl => "time-to-live", :bloomfilter => "bloomfilter"}
25
+ attr_accessor :name
26
+ attr_accessor :compression
27
+ attr_accessor :bloomfilter
28
+ attr_accessor :maximum_cell_size
29
+ attr_accessor :max_versions
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,9 @@
1
+ module HBase
2
+ module Model
3
+ class Region < Record
4
+ end
5
+
6
+ class RegionDescriptor < Record
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ module HBase
2
+ module Model
3
+ class Row < Record
4
+ attr_accessor :table_name
5
+ attr_accessor :name
6
+ attr_accessor :timestamp
7
+ attr_accessor :columns
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,8 @@
1
+ module HBase
2
+ module Model
3
+ class TableDescriptor < Record
4
+ attr_accessor :name
5
+ attr_accessor :column_families
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,10 @@
1
+ module HBase
2
+ module Operation
3
+ module MetaOperation
4
+ def list_tables
5
+ request = Request::MetaRequest.new
6
+ tables = Response::MetaResponse.new(get(request.list_tables), :list_tables).parse
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,35 @@
1
+ module HBase
2
+ module Operation
3
+ module RowOperation
4
+ def row_timestamps(table_name, name)
5
+ raise NotImplementedError, "Currently not supported in native hbase client"
6
+ end
7
+
8
+ def show_row(table_name, name, timestamp = nil, columns = nil)
9
+ request = Request::RowRequest.new(table_name, name, timestamp)
10
+ row = Response::RowResponse.new(get(request.show(columns))).parse
11
+ row.table_name = table_name
12
+ row.name = name
13
+ row.timestamp = timestamp
14
+ row
15
+ end
16
+
17
+ def create_row(table_name, name, timestamp = nil, data = { })
18
+ request = Request::RowRequest.new(table_name, name, timestamp)
19
+ xml_data =<<EOF
20
+ <?xml version='1.0' encoding='UTF-8'?>
21
+ <column>
22
+ <name>#{data[:name]}</name>
23
+ <value>#{[data[:value]].pack("m")}</value>
24
+ </column>
25
+ EOF
26
+ Response::RowResponse.new(post(request.create, xml_data))
27
+ end
28
+
29
+ def delete_row(table_name, name, timestamp = nil, columns = nil)
30
+ request = Request::RowRequest.new(table_name, name, timestamp)
31
+ Response::RowResponse.new(delete(request.delete(columns)))
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,6 @@
1
+ module HBase
2
+ module Operation
3
+ module ScannerOperation
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,53 @@
1
+ module HBase
2
+ module Operation
3
+ module TableOperation
4
+ def show_table(name)
5
+ request = Request::TableRequest.new(name)
6
+ table_descriptor = Response::TableResponse.new(get(request.show)).parse
7
+ end
8
+
9
+ def create_table(name, *args)
10
+ request = Request::TableRequest.new(nil)
11
+
12
+ raise StandardError, "Table name must be of type String" unless name.instance_of? String
13
+
14
+ xml_data = "<?xml version='1.0' encoding='UTF-8'?><table><name>#{name}</name><columnfamilies>"
15
+ for arg in args
16
+ if arg.instance_of? String
17
+ xml_data << "<columnfamily><name>#{arg}</name></columnfamily>"
18
+ elsif arg.instance_of? Hash
19
+ xml_data << "<columnfamily>"
20
+ arg.each do |k,v|
21
+ if Model::ColumnDescriptor::AVAILABLE_OPTS.include? k
22
+ xml_data << "<#{Model::ColumnDescriptor::AVAILABLE_OPTS[k]}>#{v}</#{Model::ColumnDescriptor::AVAILABLE_OPTS[k]}>"
23
+ end
24
+ end
25
+ xml_data << "</columnfamily>"
26
+ else
27
+ raise StandardError, "#{arg.class.to_s} of #{arg.to_s} is not of Hash Type"
28
+ end
29
+ end
30
+ xml_data << "</columnfamilies></table>"
31
+ Response::TableResponse.new(post(request.create, xml_data))
32
+ end
33
+
34
+ def delete_table(name)
35
+ request = Request::TableRequest.new(name)
36
+ Response::TableResponse.new(delete(request.delete))
37
+ end
38
+
39
+ def enalbe_table(name)
40
+ request = Request::TableRequest.new(name)
41
+ Response::TableResponse.new(post(request.enable))
42
+ end
43
+
44
+ def disable_table(name)
45
+ request = Request::TableRequest.new(name)
46
+ Response::TableResponse.new(post(request.disable))
47
+ end
48
+
49
+ def table_regions(name, start_row = nil, end_row = nil)
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,7 @@
1
+ module HBase; module Request; end; end
2
+
3
+ require 'hbase/request/basic_request'
4
+ require 'hbase/request/meta_request'
5
+ require 'hbase/request/table_request'
6
+ require 'hbase/request/row_request'
7
+ require 'hbase/request/scanner_request'
@@ -0,0 +1,11 @@
1
+ module HBase
2
+ module Request
3
+ class BasicRequest
4
+ attr_reader :path
5
+
6
+ def initialize(path)
7
+ @path = path
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,17 @@
1
+ module HBase
2
+ module Request
3
+ class MetaRequest < BasicRequest
4
+ def initialize
5
+ super("/")
6
+ end
7
+
8
+ def list_tables
9
+ @path
10
+ end
11
+
12
+ def create_table
13
+ @path << "/tables"
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,42 @@
1
+ module HBase
2
+ module Request
3
+ class RowRequest < BasicRequest
4
+ attr_reader :table_name
5
+ attr_reader :name
6
+ attr_reader :timestamp
7
+
8
+ def initialize(table_name, name, timestamp)
9
+ @table_name, @name, @timestamp = table_name, name, timestamp
10
+ path = "/#{table_name}/row/#{name}"
11
+ path << "/#{timestamp}" if timestamp
12
+ super(path)
13
+ end
14
+
15
+ def show(columns = nil)
16
+ if columns
17
+ if columns.is_a? String
18
+ columns = [columns]
19
+ elsif columns.is_a? Array
20
+ end
21
+ @path << "?column=#{columns.join(';')}"
22
+ end
23
+ @path
24
+ end
25
+
26
+ def create
27
+ @path
28
+ end
29
+
30
+ def delete(columns = nil)
31
+ if columns
32
+ if columns.is_a? String
33
+ columns = [columns]
34
+ elsif columns.is_a? Array
35
+ end
36
+ @path << "?column=#{columns.join(';')}"
37
+ end
38
+ @path
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,6 @@
1
+ module HBase
2
+ module Request
3
+ class ScannerRequest < BasicRequest
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,37 @@
1
+ module HBase
2
+ module Request
3
+ class TableRequest < BasicRequest
4
+ attr_reader :name
5
+ attr_reader :body
6
+
7
+ def initialize(name)
8
+ super("")
9
+ @name = name
10
+ end
11
+
12
+ def show
13
+ @path << "#{name}"
14
+ end
15
+
16
+ def regions(start_row = nil, end_row = nil)
17
+ @path << "/#{name}/regions"
18
+ end
19
+
20
+ def create
21
+ @path << "/tables"
22
+ end
23
+
24
+ def enable
25
+ @path << "/tables/#{name}/enable"
26
+ end
27
+
28
+ def disable
29
+ @path << "/tables/#{name}/disable"
30
+ end
31
+
32
+ def delete
33
+ @path << "/tables/#{name}"
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,6 @@
1
+ module HBase; module Response; end; end
2
+
3
+ require 'hbase/response/basic_response'
4
+ require 'hbase/response/meta_response'
5
+ require 'hbase/response/table_response'
6
+ require 'hbase/response/row_response'
@@ -0,0 +1,17 @@
1
+ require 'rexml/document'
2
+
3
+ module HBase
4
+ module Response
5
+ class BasicResponse
6
+
7
+ def initialize(raw_data)
8
+ puts raw_data
9
+ @raw_data = raw_data
10
+ end
11
+
12
+ def parse
13
+ parse_content @raw_data
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,33 @@
1
+ module HBase
2
+ module Response
3
+ class MetaResponse < BasicResponse
4
+ attr_reader :method
5
+
6
+ def initialize(raw_data, method)
7
+ @method = method
8
+ super(raw_data)
9
+ end
10
+
11
+ def parse_content(raw_data)
12
+ case @method
13
+ when :list_tables
14
+ if raw_data.blank?
15
+ puts "There are no available tables in the HBase"
16
+ return nil
17
+ end
18
+
19
+ doc = REXML::Document.new(raw_data)
20
+ entry = doc.elements["tables"]
21
+ tables = []
22
+ entry.elements.each("table") do |table|
23
+ t = Model::TableDescriptor.new(:name => table.text.strip)
24
+ tables << t
25
+ end
26
+ tables
27
+ else
28
+ puts "method '#{@method}' not supported yet"
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,18 @@
1
+ module HBase
2
+ module Response
3
+ class RowResponse < BasicResponse
4
+ def parse_content(raw_data)
5
+ doc = REXML::Document.new(raw_data)
6
+ row = doc.elements["row"]
7
+ columns = []
8
+ row.elements.each("column") do |col|
9
+ name = col.elements["name"].text.strip.unpack("m").first
10
+ value = col.elements["value"].text.strip.unpack("m").first
11
+ columns << Model::Column.new(:name => name,
12
+ :value => value)
13
+ end
14
+ Model::Row.new(:columns => columns)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,28 @@
1
+ module HBase
2
+ module Response
3
+ class TableResponse < BasicResponse
4
+ def parse_content(raw_data)
5
+ doc = REXML::Document.new(raw_data)
6
+ table = doc.elements["table"]
7
+
8
+ name = table.elements["name"].text.strip
9
+ column_families = []
10
+ table.elements["columnfamilies"].elements.each("columnfamily") do |columnfamily|
11
+ colname = columnfamily.elements["name"].text.strip
12
+ compression = columnfamily.elements["compression"].text.strip
13
+ bloomfilter = columnfamily.elements["bloomfilter"].text.strip.to_b
14
+ max_versions = columnfamily.elements["max-versions"].text.strip.to_i
15
+ maximum_cell_size = columnfamily.elements["maximum-cell-size"].text.strip.to_i
16
+
17
+ column_descriptor = Model::ColumnDescriptor.new(:name => colname,
18
+ :compression => Model::CompressionType.to_compression_type(compression),
19
+ :bloomfilter => bloomfilter,
20
+ :max_versions => max_versions,
21
+ :maximum_cell_size => maximum_cell_size)
22
+ column_families << column_descriptor
23
+ end
24
+ Model::TableDescriptor.new(:name => name, :column_families => column_families)
25
+ end
26
+ end
27
+ end
28
+ end
metadata ADDED
@@ -0,0 +1,93 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sishen-hbase-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: "0.2"
5
+ platform: ruby
6
+ authors:
7
+ - Ye Dingding
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-08-09 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: hoe
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.7.0
23
+ version:
24
+ description: hbase-ruby is a pure ruby client for hbase and enable the ruby app enjoy the power of HBase
25
+ email: yedingding@gmail.com
26
+ executables: []
27
+
28
+ extensions: []
29
+
30
+ extra_rdoc_files:
31
+ - History.txt
32
+ - Manifest.txt
33
+ - README.txt
34
+ files:
35
+ - History.txt
36
+ - MIT-LICENSE
37
+ - Manifest.txt
38
+ - README.txt
39
+ - Rakefile
40
+ - hbase-ruby.gemspec
41
+ - lib/hbase.rb
42
+ - lib/hbase/client.rb
43
+ - lib/hbase/exception.rb
44
+ - lib/hbase/model.rb
45
+ - lib/hbase/model/column.rb
46
+ - lib/hbase/model/column_descriptor.rb
47
+ - lib/hbase/model/region_descriptor.rb
48
+ - lib/hbase/model/row.rb
49
+ - lib/hbase/model/table_descriptor.rb
50
+ - lib/hbase/operation/meta_operation.rb
51
+ - lib/hbase/operation/row_operation.rb
52
+ - lib/hbase/operation/scanner_operation.rb
53
+ - lib/hbase/operation/table_operation.rb
54
+ - lib/hbase/request.rb
55
+ - lib/hbase/request/basic_request.rb
56
+ - lib/hbase/request/meta_request.rb
57
+ - lib/hbase/request/row_request.rb
58
+ - lib/hbase/request/scanner_request.rb
59
+ - lib/hbase/request/table_request.rb
60
+ - lib/hbase/response.rb
61
+ - lib/hbase/response/basic_response.rb
62
+ - lib/hbase/response/meta_response.rb
63
+ - lib/hbase/response/row_response.rb
64
+ - lib/hbase/response/table_response.rb
65
+ has_rdoc: true
66
+ homepage: http://sishen.lifegoo.com
67
+ post_install_message:
68
+ rdoc_options:
69
+ - --main
70
+ - README.txt
71
+ require_paths:
72
+ - lib
73
+ required_ruby_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: "0"
78
+ version:
79
+ required_rubygems_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: "0"
84
+ version:
85
+ requirements: []
86
+
87
+ rubyforge_project: hbase-ruby
88
+ rubygems_version: 1.2.0
89
+ signing_key:
90
+ specification_version: 2
91
+ summary: a pure ruby client for hbase using REST interface
92
+ test_files: []
93
+