micro_sql 0.3.2 → 0.4.1
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.
- data/.gitignore +49 -0
- data/Gemfile +3 -1
- data/Gemfile.lock +11 -16
- data/Rakefile +3 -14
- data/lib/micro_sql/key_value_table.rb +14 -2
- data/lib/micro_sql/pg_adapter.rb +6 -1
- data/micro_sql.gemspec +40 -66
- data/test/test_micro_sql_pg.rb +14 -3
- metadata +17 -55
data/.gitignore
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# rcov generated
|
2
|
+
coverage
|
3
|
+
coverage.data
|
4
|
+
|
5
|
+
# rdoc generated
|
6
|
+
rdoc
|
7
|
+
|
8
|
+
# yard generated
|
9
|
+
doc
|
10
|
+
.yardoc
|
11
|
+
|
12
|
+
# bundler
|
13
|
+
.bundle
|
14
|
+
|
15
|
+
# jeweler generated
|
16
|
+
pkg
|
17
|
+
|
18
|
+
# Have editor/IDE/OS specific files you need to ignore? Consider using a global gitignore:
|
19
|
+
#
|
20
|
+
# * Create a file at ~/.gitignore
|
21
|
+
# * Include files you want ignored
|
22
|
+
# * Run: git config --global core.excludesfile ~/.gitignore
|
23
|
+
#
|
24
|
+
# After doing this, these files will be ignored in all your git projects,
|
25
|
+
# saving you from having to 'pollute' every project you touch with them
|
26
|
+
#
|
27
|
+
# Not sure what to needs to be ignored for particular editors/OSes? Here's some ideas to get you started. (Remember, remove the leading # of the line)
|
28
|
+
#
|
29
|
+
# For MacOS:
|
30
|
+
#
|
31
|
+
#.DS_Store
|
32
|
+
|
33
|
+
# For TextMate
|
34
|
+
#*.tmproj
|
35
|
+
#tmtags
|
36
|
+
|
37
|
+
# For emacs:
|
38
|
+
#*~
|
39
|
+
#\#*
|
40
|
+
#.\#*
|
41
|
+
|
42
|
+
# For vim:
|
43
|
+
#*.swp
|
44
|
+
|
45
|
+
# For redcar:
|
46
|
+
#.redcar
|
47
|
+
|
48
|
+
# For rubinius:
|
49
|
+
#*.rbc
|
data/Gemfile
CHANGED
@@ -9,8 +9,10 @@ gem "sqlite3"
|
|
9
9
|
# Add dependencies to develop your gem here.
|
10
10
|
# Include everything needed to run rake, tests, features, etc.
|
11
11
|
group :development do
|
12
|
+
gem "rake"
|
13
|
+
gem "rdoc"
|
14
|
+
|
12
15
|
gem "bundler"
|
13
|
-
gem "jeweler"
|
14
16
|
gem 'simplecov', :require => false
|
15
17
|
gem "ruby-debug19"
|
16
18
|
end
|
data/Gemfile.lock
CHANGED
@@ -3,19 +3,13 @@ GEM
|
|
3
3
|
specs:
|
4
4
|
archive-tar-minitar (0.5.2)
|
5
5
|
columnize (0.3.6)
|
6
|
-
|
7
|
-
jeweler (1.8.3)
|
8
|
-
bundler (~> 1.0)
|
9
|
-
git (>= 1.2.5)
|
10
|
-
rake
|
11
|
-
rdoc
|
12
|
-
json (1.6.6)
|
6
|
+
json (1.7.7)
|
13
7
|
linecache19 (0.5.12)
|
14
8
|
ruby_core_source (>= 0.1.4)
|
15
|
-
multi_json (1.2
|
16
|
-
pg (0.
|
17
|
-
rake (0.
|
18
|
-
rdoc (
|
9
|
+
multi_json (1.7.2)
|
10
|
+
pg (0.15.0)
|
11
|
+
rake (10.0.4)
|
12
|
+
rdoc (4.0.1)
|
19
13
|
json (~> 1.4)
|
20
14
|
ruby-debug-base19 (0.11.25)
|
21
15
|
columnize (>= 0.3.1)
|
@@ -27,19 +21,20 @@ GEM
|
|
27
21
|
ruby-debug-base19 (>= 0.11.19)
|
28
22
|
ruby_core_source (0.1.5)
|
29
23
|
archive-tar-minitar (>= 0.5.2)
|
30
|
-
simplecov (0.
|
24
|
+
simplecov (0.7.1)
|
31
25
|
multi_json (~> 1.0)
|
32
|
-
simplecov-html (~> 0.
|
33
|
-
simplecov-html (0.
|
34
|
-
sqlite3 (1.3.
|
26
|
+
simplecov-html (~> 0.7.1)
|
27
|
+
simplecov-html (0.7.1)
|
28
|
+
sqlite3 (1.3.7)
|
35
29
|
|
36
30
|
PLATFORMS
|
37
31
|
ruby
|
38
32
|
|
39
33
|
DEPENDENCIES
|
40
34
|
bundler
|
41
|
-
jeweler
|
42
35
|
pg
|
36
|
+
rake
|
37
|
+
rdoc
|
43
38
|
ruby-debug19
|
44
39
|
simplecov
|
45
40
|
sqlite3
|
data/Rakefile
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
require 'rubygems'
|
4
4
|
require 'bundler'
|
5
|
+
require "bundler/gem_tasks"
|
6
|
+
|
5
7
|
begin
|
6
8
|
Bundler.setup(:default, :development)
|
7
9
|
rescue Bundler::BundlerError => e
|
@@ -11,20 +13,6 @@ rescue Bundler::BundlerError => e
|
|
11
13
|
end
|
12
14
|
require 'rake'
|
13
15
|
|
14
|
-
require 'jeweler'
|
15
|
-
Jeweler::Tasks.new do |gem|
|
16
|
-
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
17
|
-
gem.name = "micro_sql"
|
18
|
-
gem.homepage = "http://github.com/radiospiel/micro_sql"
|
19
|
-
gem.license = "MIT"
|
20
|
-
gem.summary = %Q{A minimal ruby interface for SQL databases}
|
21
|
-
gem.description = %Q{You only need a single method to talk to your database...}
|
22
|
-
gem.email = "eno@open-lab.org"
|
23
|
-
gem.authors = ["radiospiel"]
|
24
|
-
# dependencies defined in Gemfile
|
25
|
-
end
|
26
|
-
Jeweler::RubygemsDotOrgTasks.new
|
27
|
-
|
28
16
|
require 'rake/testtask'
|
29
17
|
Rake::TestTask.new(:test) do |test|
|
30
18
|
test.libs << 'lib' << 'test'
|
@@ -51,3 +39,4 @@ Rake::RDocTask.new do |rdoc|
|
|
51
39
|
rdoc.rdoc_files.include('README*')
|
52
40
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
53
41
|
end
|
42
|
+
|
@@ -4,7 +4,13 @@ require "json"
|
|
4
4
|
|
5
5
|
class MicroSql::KeyValueTable < MicroSql::Table
|
6
6
|
def initialize(db, table_name = "settings")
|
7
|
-
|
7
|
+
sql = if db.is_a?(MicroSql::PgAdapter)
|
8
|
+
"CREATE TABLE #{table_name}_b(uid TEXT PRIMARY KEY, value BYTEA, ttl INTEGER NOT NULL)"
|
9
|
+
else
|
10
|
+
"CREATE TABLE #{table_name}(uid TEXT PRIMARY KEY, value TEXT, ttl INTEGER NOT NULL)"
|
11
|
+
end
|
12
|
+
|
13
|
+
super db, sql
|
8
14
|
end
|
9
15
|
|
10
16
|
def [](key)
|
@@ -46,10 +52,16 @@ class MicroSql::KeyValueTable < MicroSql::Table
|
|
46
52
|
|
47
53
|
def decode(io)
|
48
54
|
return unless io
|
55
|
+
return PG::Connection.unescape_bytea(io) if db.is_a?(MicroSql::PgAdapter)
|
56
|
+
|
49
57
|
JSON.parse("[#{io}]").first
|
50
58
|
end
|
51
59
|
|
52
60
|
def encode(value)
|
53
|
-
|
61
|
+
return unless value
|
62
|
+
|
63
|
+
return db.connection.escape_bytea(value.to_s) if db.is_a?(MicroSql::PgAdapter)
|
64
|
+
|
65
|
+
value.to_json
|
54
66
|
end
|
55
67
|
end
|
data/lib/micro_sql/pg_adapter.rb
CHANGED
@@ -15,6 +15,10 @@ class MicroSql::PgAdapter < MicroSql
|
|
15
15
|
|
16
16
|
TRANSACTION_STATUSES = %w(PQTRANS_IDLE PQTRANS_ACTIVE PQTRANS_INTRANS PQTRANS_INERROR PQTRANS_UNKNOWN)
|
17
17
|
|
18
|
+
def connection
|
19
|
+
@impl
|
20
|
+
end
|
21
|
+
|
18
22
|
def transaction_status
|
19
23
|
TRANSACTION_STATUSES[@impl.transaction_status]
|
20
24
|
end
|
@@ -137,9 +141,10 @@ class MicroSql::PgAdapter < MicroSql
|
|
137
141
|
|
138
142
|
def nop; end
|
139
143
|
|
140
|
-
def string(s);
|
144
|
+
def string(s); s; end
|
141
145
|
def unknown(s); s; end
|
142
146
|
def integer(s); s.to_i; end
|
147
|
+
def bytea(s); PG::Connection.unescape_bytea(s); end
|
143
148
|
end
|
144
149
|
|
145
150
|
def conversion_for(ftype, fmod)
|
data/micro_sql.gemspec
CHANGED
@@ -1,72 +1,46 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
class Gem::Specification
|
2
|
+
class GemfileEvaluator
|
3
|
+
def initialize(scope)
|
4
|
+
@scope = scope
|
5
|
+
end
|
6
|
+
|
7
|
+
def load_dependencies(path)
|
8
|
+
instance_eval File.read(path)
|
9
|
+
end
|
10
|
+
|
11
|
+
def source(*args); end
|
12
|
+
def group(*args); end
|
13
|
+
|
14
|
+
def gem(name, options = {})
|
15
|
+
@scope.add_dependency(name)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def load_dependencies(file)
|
20
|
+
GemfileEvaluator.new(self).load_dependencies(file)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
Gem::Specification.new do |gem|
|
25
|
+
gem.name = "micro_sql"
|
26
|
+
gem.authors = ["radiospiel"]
|
27
|
+
gem.email = ["eno@open-lab.org"]
|
28
|
+
gem.description = "You only need a single method to talk to your database..."
|
29
|
+
gem.summary = gem.description
|
30
|
+
gem.homepage = "http://github.com/radiospiel/micro_sql"
|
31
|
+
gem.licenses = ["MIT"]
|
5
32
|
|
6
|
-
|
7
|
-
|
8
|
-
|
33
|
+
gem.load_dependencies "Gemfile"
|
34
|
+
|
35
|
+
gem.files = `git ls-files`.split($\)
|
36
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
37
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
38
|
+
gem.require_paths = ["lib"]
|
39
|
+
gem.version = "0.4.1"
|
40
|
+
gem.date = Time.now.strftime "%Y-%m-%d"
|
9
41
|
|
10
|
-
|
11
|
-
s.authors = ["radiospiel"]
|
12
|
-
s.date = "2012-04-04"
|
13
|
-
s.description = "You only need a single method to talk to your database..."
|
14
|
-
s.email = "eno@open-lab.org"
|
15
|
-
s.extra_rdoc_files = [
|
42
|
+
gem.extra_rdoc_files = [
|
16
43
|
"LICENSE.txt",
|
17
44
|
"README.rdoc"
|
18
45
|
]
|
19
|
-
s.files = [
|
20
|
-
".document",
|
21
|
-
"Gemfile",
|
22
|
-
"Gemfile.lock",
|
23
|
-
"LICENSE.txt",
|
24
|
-
"README.rdoc",
|
25
|
-
"Rakefile",
|
26
|
-
"VERSION",
|
27
|
-
"lib/micro_sql.rb",
|
28
|
-
"lib/micro_sql/key_value_table.rb",
|
29
|
-
"lib/micro_sql/pg_adapter.rb",
|
30
|
-
"lib/micro_sql/sqlite_adapter.rb",
|
31
|
-
"lib/micro_sql/table.rb",
|
32
|
-
"micro_sql.gemspec",
|
33
|
-
"script/watchr",
|
34
|
-
"test/helper.rb",
|
35
|
-
"test/test_micro_sql.rb",
|
36
|
-
"test/test_micro_sql_pg.rb",
|
37
|
-
"test/test_micro_sql_sqlite3.rb"
|
38
|
-
]
|
39
|
-
s.homepage = "http://github.com/radiospiel/micro_sql"
|
40
|
-
s.licenses = ["MIT"]
|
41
|
-
s.require_paths = ["lib"]
|
42
|
-
s.rubygems_version = "1.8.17"
|
43
|
-
s.summary = "A minimal ruby interface for SQL databases"
|
44
|
-
|
45
|
-
if s.respond_to? :specification_version then
|
46
|
-
s.specification_version = 3
|
47
|
-
|
48
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
49
|
-
s.add_runtime_dependency(%q<pg>, [">= 0"])
|
50
|
-
s.add_runtime_dependency(%q<sqlite3>, [">= 0"])
|
51
|
-
s.add_development_dependency(%q<bundler>, [">= 0"])
|
52
|
-
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
53
|
-
s.add_development_dependency(%q<simplecov>, [">= 0"])
|
54
|
-
s.add_development_dependency(%q<ruby-debug19>, [">= 0"])
|
55
|
-
else
|
56
|
-
s.add_dependency(%q<pg>, [">= 0"])
|
57
|
-
s.add_dependency(%q<sqlite3>, [">= 0"])
|
58
|
-
s.add_dependency(%q<bundler>, [">= 0"])
|
59
|
-
s.add_dependency(%q<jeweler>, [">= 0"])
|
60
|
-
s.add_dependency(%q<simplecov>, [">= 0"])
|
61
|
-
s.add_dependency(%q<ruby-debug19>, [">= 0"])
|
62
|
-
end
|
63
|
-
else
|
64
|
-
s.add_dependency(%q<pg>, [">= 0"])
|
65
|
-
s.add_dependency(%q<sqlite3>, [">= 0"])
|
66
|
-
s.add_dependency(%q<bundler>, [">= 0"])
|
67
|
-
s.add_dependency(%q<jeweler>, [">= 0"])
|
68
|
-
s.add_dependency(%q<simplecov>, [">= 0"])
|
69
|
-
s.add_dependency(%q<ruby-debug19>, [">= 0"])
|
70
|
-
end
|
71
46
|
end
|
72
|
-
|
data/test/test_micro_sql_pg.rb
CHANGED
@@ -134,14 +134,14 @@ class TestMicroSqlPg < Test::Unit::TestCase
|
|
134
134
|
|
135
135
|
def test_kv_table
|
136
136
|
kv = db.key_value_table("kv")
|
137
|
-
assert_equal [ "
|
137
|
+
assert_equal [ "kv_b" ], db.tables
|
138
138
|
|
139
139
|
kv["x"] = "y"
|
140
|
-
assert_equal 1, db.ask("SELECT COUNT(*) FROM
|
140
|
+
assert_equal 1, db.ask("SELECT COUNT(*) FROM kv_b")
|
141
141
|
assert_equal "y", kv["x"]
|
142
142
|
|
143
143
|
kv["x"] = nil
|
144
|
-
assert_equal 0, db.ask("SELECT COUNT(*) FROM
|
144
|
+
assert_equal 0, db.ask("SELECT COUNT(*) FROM kv_b")
|
145
145
|
assert_equal nil, kv["x"]
|
146
146
|
|
147
147
|
count = 0
|
@@ -152,4 +152,15 @@ class TestMicroSqlPg < Test::Unit::TestCase
|
|
152
152
|
r = kv.cached "x" do raise "Yo"; "y" end
|
153
153
|
assert_equal(r, "y")
|
154
154
|
end
|
155
|
+
|
156
|
+
|
157
|
+
def test_kv_table_binary
|
158
|
+
s = (0..255).to_a.pack('c*')
|
159
|
+
|
160
|
+
kv = db.key_value_table("kv")
|
161
|
+
|
162
|
+
kv["bin"] = s
|
163
|
+
assert_equal 1, db.ask("SELECT COUNT(*) FROM kv_b")
|
164
|
+
assert_equal s, kv["bin"]
|
165
|
+
end
|
155
166
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: micro_sql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-04-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: pg
|
16
|
-
requirement: &
|
16
|
+
requirement: &70229637156100 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70229637156100
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: sqlite3
|
27
|
-
requirement: &
|
27
|
+
requirement: &70229637155300 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,53 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: bundler
|
38
|
-
requirement: &70179126167420 !ruby/object:Gem::Requirement
|
39
|
-
none: false
|
40
|
-
requirements:
|
41
|
-
- - ! '>='
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version: '0'
|
44
|
-
type: :development
|
45
|
-
prerelease: false
|
46
|
-
version_requirements: *70179126167420
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: jeweler
|
49
|
-
requirement: &70179126166660 !ruby/object:Gem::Requirement
|
50
|
-
none: false
|
51
|
-
requirements:
|
52
|
-
- - ! '>='
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
|
-
type: :development
|
56
|
-
prerelease: false
|
57
|
-
version_requirements: *70179126166660
|
58
|
-
- !ruby/object:Gem::Dependency
|
59
|
-
name: simplecov
|
60
|
-
requirement: &70179126165880 !ruby/object:Gem::Requirement
|
61
|
-
none: false
|
62
|
-
requirements:
|
63
|
-
- - ! '>='
|
64
|
-
- !ruby/object:Gem::Version
|
65
|
-
version: '0'
|
66
|
-
type: :development
|
67
|
-
prerelease: false
|
68
|
-
version_requirements: *70179126165880
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: ruby-debug19
|
71
|
-
requirement: &70179126165220 !ruby/object:Gem::Requirement
|
72
|
-
none: false
|
73
|
-
requirements:
|
74
|
-
- - ! '>='
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
version: '0'
|
77
|
-
type: :development
|
78
|
-
prerelease: false
|
79
|
-
version_requirements: *70179126165220
|
35
|
+
version_requirements: *70229637155300
|
80
36
|
description: You only need a single method to talk to your database...
|
81
|
-
email:
|
37
|
+
email:
|
38
|
+
- eno@open-lab.org
|
82
39
|
executables: []
|
83
40
|
extensions: []
|
84
41
|
extra_rdoc_files:
|
@@ -86,6 +43,7 @@ extra_rdoc_files:
|
|
86
43
|
- README.rdoc
|
87
44
|
files:
|
88
45
|
- .document
|
46
|
+
- .gitignore
|
89
47
|
- Gemfile
|
90
48
|
- Gemfile.lock
|
91
49
|
- LICENSE.txt
|
@@ -118,7 +76,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
118
76
|
version: '0'
|
119
77
|
segments:
|
120
78
|
- 0
|
121
|
-
hash:
|
79
|
+
hash: 304612758120307793
|
122
80
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
81
|
none: false
|
124
82
|
requirements:
|
@@ -127,8 +85,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
127
85
|
version: '0'
|
128
86
|
requirements: []
|
129
87
|
rubyforge_project:
|
130
|
-
rubygems_version: 1.8.
|
88
|
+
rubygems_version: 1.8.10
|
131
89
|
signing_key:
|
132
90
|
specification_version: 3
|
133
|
-
summary:
|
134
|
-
test_files:
|
91
|
+
summary: You only need a single method to talk to your database...
|
92
|
+
test_files:
|
93
|
+
- test/helper.rb
|
94
|
+
- test/test_micro_sql.rb
|
95
|
+
- test/test_micro_sql_pg.rb
|
96
|
+
- test/test_micro_sql_sqlite3.rb
|