sequel-fusiontables 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +31 -0
- data/UNLICENSE +24 -0
- data/lib/sequel/adapters/fusiontables.rb +74 -0
- data/sequel-fusiontables.gemspec +20 -0
- data/test/sequel/adapters/fusiontables.rb +34 -0
- metadata +71 -0
data/README.md
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
Fusion Tables adapter for Sequel
|
2
|
+
================================
|
3
|
+
|
4
|
+
Experimental adapter to use Fusion Tables in [Sequel](http://sequel.rubyforge.org).
|
5
|
+
|
6
|
+
Usage
|
7
|
+
-----
|
8
|
+
|
9
|
+
require "sequel"
|
10
|
+
|
11
|
+
db = Sequel.connect("fusiontables:///")
|
12
|
+
|
13
|
+
# In Fusion, table IDs are numbers.
|
14
|
+
table = db[579353]
|
15
|
+
|
16
|
+
puts table.select("Country", "Name").where("Active Reactors" => 0).all
|
17
|
+
|
18
|
+
# {"Country"=>"BELGIUM", "Name"=>"BR"}
|
19
|
+
# {"Country"=>"CANADA", "Name"=>"DOUGLAS POINT"}
|
20
|
+
# {"Country"=>"CANADA", "Name"=>"NPD"}
|
21
|
+
# {"Country"=>"CHINA", "Name"=>"LINGAO"}
|
22
|
+
# ...
|
23
|
+
|
24
|
+
|
25
|
+
Known issues
|
26
|
+
------------
|
27
|
+
|
28
|
+
I just started experimenting with this so there are a few features missing:
|
29
|
+
|
30
|
+
* `CREATE TABLE`, `INSERT`, `UPDATE`, `DELETE` aren't implemented yet. Soon though.
|
31
|
+
* Typecasting.
|
data/UNLICENSE
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
This is free and unencumbered software released into the public domain.
|
2
|
+
|
3
|
+
Anyone is free to copy, modify, publish, use, compile, sell, or
|
4
|
+
distribute this software, either in source code form or as a compiled
|
5
|
+
binary, for any purpose, commercial or non-commercial, and by any
|
6
|
+
means.
|
7
|
+
|
8
|
+
In jurisdictions that recognize copyright laws, the author or authors
|
9
|
+
of this software dedicate any and all copyright interest in the
|
10
|
+
software to the public domain. We make this dedication for the benefit
|
11
|
+
of the public at large and to the detriment of our heirs and
|
12
|
+
successors. We intend this dedication to be an overt act of
|
13
|
+
relinquishment in perpetuity of all present and future rights to this
|
14
|
+
software under copyright law.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
19
|
+
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
20
|
+
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
21
|
+
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
22
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
23
|
+
|
24
|
+
For more information, please refer to <http://unlicense.org/>
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require "sequel"
|
2
|
+
require "csv"
|
3
|
+
require "net/http/persistent"
|
4
|
+
require "ft"
|
5
|
+
|
6
|
+
module Sequel
|
7
|
+
module FusionTables
|
8
|
+
class Database < ::Sequel::Database
|
9
|
+
set_adapter_scheme :fusiontables
|
10
|
+
|
11
|
+
def dataset(opts = nil)
|
12
|
+
FusionTables::Dataset.new(self, opts)
|
13
|
+
end
|
14
|
+
|
15
|
+
def execute(sql, opts={}, &block)
|
16
|
+
_execute(:select, sql, opts, &block)
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.uri_to_options(uri)
|
20
|
+
{:database => uri.registry}
|
21
|
+
end
|
22
|
+
|
23
|
+
def connect(server)
|
24
|
+
::FusionTables::Connection.new
|
25
|
+
end
|
26
|
+
|
27
|
+
protected
|
28
|
+
|
29
|
+
def _execute(type, sql, opts, &block)
|
30
|
+
begin
|
31
|
+
synchronize do |conn|
|
32
|
+
log_args = opts[:arguments]
|
33
|
+
args = opts.fetch(:arguments, [])
|
34
|
+
case type
|
35
|
+
when :select
|
36
|
+
log_yield(sql, log_args) { yield(conn.query(sql)) }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
rescue ::FusionTables::Error => e
|
40
|
+
raise_error(e)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
class Dataset < ::Sequel::Dataset
|
46
|
+
def complex_expression_sql(op, args)
|
47
|
+
case op
|
48
|
+
when *TWO_ARITY_OPERATORS
|
49
|
+
"#{literal(args.at(0))} #{op} #{literal(args.at(1))}"
|
50
|
+
when *N_ARITY_OPERATORS
|
51
|
+
"#{args.collect{|a| literal(a)}.join(" #{op} ")}"
|
52
|
+
else
|
53
|
+
super
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def fetch_rows(sql)
|
58
|
+
execute(sql) do |result|
|
59
|
+
@columns = result.shift
|
60
|
+
|
61
|
+
result.each do |values|
|
62
|
+
row = {}
|
63
|
+
|
64
|
+
@columns.each_with_index do |col, i|
|
65
|
+
row[col] = values[i]
|
66
|
+
end
|
67
|
+
|
68
|
+
yield(row)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = "sequel-fusiontables"
|
3
|
+
s.version = "0.0.1"
|
4
|
+
s.summary = "Fusion Tables adapter for Sequel"
|
5
|
+
s.authors = ["Damian Janowski"]
|
6
|
+
s.email = ["djanowski@dimaion.com"]
|
7
|
+
s.homepage = "http://github.com/djanowski/sequel-fusiontables"
|
8
|
+
|
9
|
+
s.add_dependency("ft")
|
10
|
+
|
11
|
+
s.files = Dir[
|
12
|
+
"*.gemspec",
|
13
|
+
"*LICENSE",
|
14
|
+
"README*",
|
15
|
+
"Rakefile",
|
16
|
+
"bin/*",
|
17
|
+
"lib/**/*",
|
18
|
+
"test/**/*",
|
19
|
+
]
|
20
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require "cutest"
|
2
|
+
require "./lib/sequel/adapters/fusion_tables"
|
3
|
+
|
4
|
+
setup do
|
5
|
+
Sequel.connect("fusiontables:///")[1310767]
|
6
|
+
end
|
7
|
+
|
8
|
+
test "simple SELECT" do |db|
|
9
|
+
ds = db.select("Name", "Order").all
|
10
|
+
|
11
|
+
assert_equal ds[0]["Name"], "rake"
|
12
|
+
assert_equal ds[0]["Order"], "1"
|
13
|
+
|
14
|
+
assert_equal ds[1]["Name"], "rack"
|
15
|
+
assert_equal ds[1]["Order"], "2"
|
16
|
+
end
|
17
|
+
|
18
|
+
test "simple WHERE" do |db|
|
19
|
+
sql = db.select("Name", "Order").where("Name" => "rake").sql
|
20
|
+
|
21
|
+
assert_equal sql, "SELECT 'Name', 'Order' FROM 1310767 WHERE 'Name' = 'rake'"
|
22
|
+
end
|
23
|
+
|
24
|
+
test "complex WHERE" do |db|
|
25
|
+
sql = db.select("Name", "Order").where("Name" => "rake", "Order" => "1").sql
|
26
|
+
|
27
|
+
assert_equal sql, "SELECT 'Name', 'Order' FROM 1310767 WHERE 'Name' = 'rake' AND 'Order' = '1'"
|
28
|
+
end
|
29
|
+
|
30
|
+
test "Fusion Tables errors" do |db|
|
31
|
+
assert_raise(Sequel::DatabaseError) do
|
32
|
+
db.select("Foo").all
|
33
|
+
end
|
34
|
+
end
|
metadata
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sequel-fusiontables
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.0.1
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Damian Janowski
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-08-18 00:00:00 -03:00
|
14
|
+
default_executable:
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: ft
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: "0"
|
25
|
+
type: :runtime
|
26
|
+
version_requirements: *id001
|
27
|
+
description:
|
28
|
+
email:
|
29
|
+
- djanowski@dimaion.com
|
30
|
+
executables: []
|
31
|
+
|
32
|
+
extensions: []
|
33
|
+
|
34
|
+
extra_rdoc_files: []
|
35
|
+
|
36
|
+
files:
|
37
|
+
- sequel-fusiontables.gemspec
|
38
|
+
- UNLICENSE
|
39
|
+
- README.md
|
40
|
+
- lib/sequel/adapters/fusiontables.rb
|
41
|
+
- test/sequel/adapters/fusiontables.rb
|
42
|
+
has_rdoc: true
|
43
|
+
homepage: http://github.com/djanowski/sequel-fusiontables
|
44
|
+
licenses: []
|
45
|
+
|
46
|
+
post_install_message:
|
47
|
+
rdoc_options: []
|
48
|
+
|
49
|
+
require_paths:
|
50
|
+
- lib
|
51
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: "0"
|
57
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: "0"
|
63
|
+
requirements: []
|
64
|
+
|
65
|
+
rubyforge_project:
|
66
|
+
rubygems_version: 1.6.2
|
67
|
+
signing_key:
|
68
|
+
specification_version: 3
|
69
|
+
summary: Fusion Tables adapter for Sequel
|
70
|
+
test_files: []
|
71
|
+
|