sqlite_object_store 0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/README.rdoc +11 -0
  2. data/Rakefile +12 -0
  3. data/lib/sqlite_object_store.rb +60 -0
  4. 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: []