sqlite_object_store 0.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/README.rdoc +11 -0
- data/Rakefile +12 -0
- data/lib/sqlite_object_store.rb +60 -0
- metadata +95 -0
data/README.rdoc
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
= sqlite_object_store
|
2
|
+
|
3
|
+
Use sqlite3 databases like a hash. Uses json to store object values.
|
4
|
+
|
5
|
+
== Usage
|
6
|
+
require 'sqlite_object_store'
|
7
|
+
db = SqliteObjectStore.new("somefile.sqlite3")
|
8
|
+
db["somekey"] = {:my => 'fancy object'}
|
9
|
+
db["somekey"]
|
10
|
+
=> {:my => 'fancy object'}
|
11
|
+
db.close
|
data/Rakefile
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'rake'
|
2
|
+
|
3
|
+
require "rspec/core/rake_task"
|
4
|
+
|
5
|
+
RSpec::Core::RakeTask.new(:core) do |spec|
|
6
|
+
spec.ruby_opts << '-rubygems'
|
7
|
+
spec.libs << 'lib' << 'spec'
|
8
|
+
spec.pattern = FileList['spec/*_spec.rb']
|
9
|
+
spec.rspec_opts = ['--options', 'spec/spec.opts']
|
10
|
+
end
|
11
|
+
|
12
|
+
task :default => [:spec]
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'oj'
|
2
|
+
require 'sqlite3'
|
3
|
+
|
4
|
+
class SqliteObjectStore
|
5
|
+
include Enumerable
|
6
|
+
|
7
|
+
attr_accessor :db, :table_name, :database_path
|
8
|
+
def initialize(database_path, table_name = "default_table")
|
9
|
+
@database_path = database_path
|
10
|
+
@db = open_database(database_path)
|
11
|
+
@table_name = table_name
|
12
|
+
create_table(table_name)
|
13
|
+
end
|
14
|
+
|
15
|
+
def open_database(path)
|
16
|
+
full_path = File.expand_path(path)
|
17
|
+
@@databases ||= {}
|
18
|
+
@@databases[full_path] ||= SQLite3::Database.new(full_path)
|
19
|
+
end
|
20
|
+
|
21
|
+
def [](key)
|
22
|
+
db.execute "select value from #{table_name} where key = ?", String(key) do |row|
|
23
|
+
return Oj.load(row.first)
|
24
|
+
end
|
25
|
+
return nil
|
26
|
+
end
|
27
|
+
|
28
|
+
def []=(key, value)
|
29
|
+
db.execute "insert or replace into #{table_name} (key, value) values (?, ?)", String(key), Oj.dump(value)
|
30
|
+
end
|
31
|
+
|
32
|
+
def each
|
33
|
+
db.execute "select key, value from #{table_name}" do |row|
|
34
|
+
yield [row[0], Oj.load(row[1])]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def keys
|
39
|
+
key_list = []
|
40
|
+
db.execute "select key from #{table_name}" do |row|
|
41
|
+
key_list << row[0]
|
42
|
+
end
|
43
|
+
key_list
|
44
|
+
end
|
45
|
+
|
46
|
+
def size
|
47
|
+
db.execute "select count(*) from #{table_name}" do |row|
|
48
|
+
return row.first
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def create_table(table_name)
|
53
|
+
db.execute "create table if not exists #{table_name} (key string primary key, value blob)"
|
54
|
+
end
|
55
|
+
|
56
|
+
def close
|
57
|
+
db.close
|
58
|
+
@@databases.delete(File.expand_path(database_path))
|
59
|
+
end
|
60
|
+
end
|
metadata
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sqlite_object_store
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Eric Mason
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-05-21 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: sqlite3-ruby
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: sqlite3
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
description:
|
63
|
+
email: eric@ericmason.net
|
64
|
+
executables: []
|
65
|
+
extensions: []
|
66
|
+
extra_rdoc_files: []
|
67
|
+
files:
|
68
|
+
- lib/sqlite_object_store.rb
|
69
|
+
- Rakefile
|
70
|
+
- README.rdoc
|
71
|
+
homepage: https://github.com/ericmason/sqlite_object_store
|
72
|
+
licenses: []
|
73
|
+
post_install_message:
|
74
|
+
rdoc_options: []
|
75
|
+
require_paths:
|
76
|
+
- lib
|
77
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
78
|
+
none: false
|
79
|
+
requirements:
|
80
|
+
- - ! '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ! '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
requirements: []
|
90
|
+
rubyforge_project:
|
91
|
+
rubygems_version: 1.8.23
|
92
|
+
signing_key:
|
93
|
+
specification_version: 3
|
94
|
+
summary: Use sqlite3 databases like a hash
|
95
|
+
test_files: []
|