strokedb 0.0.2.1 → 0.0.2.2
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 +18 -20
- data/bench.html +4001 -0
- data/bin/strokedb +14 -0
- data/examples/movies.rb +105 -0
- data/examples/movies2.rb +97 -0
- data/examples/strokewiki/README +28 -0
- data/examples/strokewiki/view/edit.xhtml +27 -0
- data/examples/strokewiki/view/new.xhtml +26 -0
- data/examples/strokewiki/view/pages.xhtml +27 -0
- data/examples/strokewiki/view/show.xhtml +40 -0
- data/examples/strokewiki/view/versions.xhtml +25 -0
- data/examples/strokewiki/wiki.rb +106 -0
- data/examples/todo.rb +92 -0
- data/lib/strokedb.rb +85 -0
- data/lib/{config → strokedb}/config.rb +14 -9
- data/lib/strokedb/console.rb +87 -0
- data/lib/strokedb/core_ext.rb +10 -0
- data/lib/{util/ext → strokedb/core_ext}/blank.rb +1 -1
- data/lib/{util/ext → strokedb/core_ext}/enumerable.rb +0 -0
- data/lib/{util/ext → strokedb/core_ext}/fixnum.rb +0 -0
- data/lib/strokedb/core_ext/float.rb +4 -0
- data/lib/{util/ext → strokedb/core_ext}/hash.rb +0 -0
- data/lib/strokedb/core_ext/infinity.rb +33 -0
- data/lib/strokedb/core_ext/kernel.rb +41 -0
- data/lib/strokedb/core_ext/object.rb +16 -0
- data/lib/{util/ext → strokedb/core_ext}/string.rb +28 -1
- data/lib/strokedb/core_ext/symbol.rb +13 -0
- data/lib/strokedb/data_structures.rb +5 -0
- data/lib/strokedb/data_structures/chunked_skiplist.rb +123 -0
- data/lib/{data_structures → strokedb/data_structures}/inverted_list.rb +0 -0
- data/lib/{data_structures → strokedb/data_structures}/point_query.rb +0 -0
- data/lib/strokedb/data_structures/simple_skiplist.rb +350 -0
- data/lib/{data_structures → strokedb/data_structures}/skiplist.rb +1 -1
- data/lib/{document → strokedb}/document.rb +180 -71
- data/lib/{document → strokedb/document}/callback.rb +0 -0
- data/lib/{document → strokedb/document}/delete.rb +2 -2
- data/lib/strokedb/document/dsl.rb +4 -0
- data/lib/{document → strokedb/document/dsl}/associations.rb +0 -0
- data/lib/{document → strokedb/document/dsl}/coercions.rb +0 -0
- data/lib/strokedb/document/dsl/meta_dsl.rb +7 -0
- data/lib/{document → strokedb/document/dsl}/validations.rb +26 -21
- data/lib/{document → strokedb/document/dsl}/virtualize.rb +0 -0
- data/lib/{document → strokedb/document}/meta.rb +92 -29
- data/lib/{document → strokedb/document}/slot.rb +17 -5
- data/lib/{document → strokedb/document}/util.rb +0 -0
- data/lib/{document → strokedb/document}/versions.rb +2 -2
- data/lib/strokedb/index.rb +2 -0
- data/lib/strokedb/nsurl.rb +24 -0
- data/lib/strokedb/store.rb +149 -0
- data/lib/strokedb/stores.rb +6 -0
- data/lib/{stores → strokedb/stores}/chainable_storage.rb +20 -14
- data/lib/strokedb/stores/file_storage.rb +118 -0
- data/lib/{stores/inverted_list_index → strokedb/stores}/inverted_list_file_storage.rb +50 -0
- data/lib/strokedb/stores/memory_storage.rb +80 -0
- data/lib/{stores → strokedb/stores}/remote_store.rb +10 -4
- data/lib/strokedb/sync.rb +4 -0
- data/lib/{sync → strokedb/sync}/chain_sync.rb +0 -0
- data/lib/{sync → strokedb/sync}/diff.rb +12 -1
- data/lib/{sync/stroke_diff → strokedb/sync/diff}/array.rb +1 -1
- data/lib/{sync/stroke_diff → strokedb/sync/diff}/default.rb +0 -0
- data/lib/{sync/stroke_diff → strokedb/sync/diff}/hash.rb +1 -1
- data/lib/{sync/stroke_diff → strokedb/sync/diff}/string.rb +1 -1
- data/lib/{sync → strokedb/sync}/lamport_timestamp.rb +0 -0
- data/lib/{sync → strokedb/sync}/store_sync.rb +15 -7
- data/lib/strokedb/transaction.rb +78 -0
- data/lib/{util → strokedb}/util.rb +14 -7
- data/lib/strokedb/util/attach_dsl.rb +29 -0
- data/lib/{util → strokedb/util}/blankslate.rb +0 -0
- data/lib/strokedb/util/class_optimization.rb +93 -0
- data/lib/{util → strokedb/util}/inflect.rb +0 -0
- data/lib/strokedb/util/java_util.rb +13 -0
- data/lib/{util → strokedb/util}/lazy_array.rb +0 -0
- data/lib/{util → strokedb/util}/lazy_mapping_array.rb +4 -0
- data/lib/{util → strokedb/util}/lazy_mapping_hash.rb +0 -0
- data/lib/{util → strokedb/util}/serialization.rb +21 -0
- data/lib/strokedb/util/uuid.rb +159 -0
- data/lib/{util → strokedb/util}/xml.rb +0 -0
- data/lib/{view → strokedb}/view.rb +2 -2
- data/lib/strokedb/volumes.rb +5 -0
- data/lib/strokedb/volumes/archive_volume.rb +165 -0
- data/lib/strokedb/volumes/block_volume.rb +169 -0
- data/lib/strokedb/volumes/distributed_pointer.rb +43 -0
- data/lib/strokedb/volumes/fixed_length_skiplist_volume.rb +109 -0
- data/lib/strokedb/volumes/map_volume.rb +268 -0
- data/meta/MANIFEST +175 -0
- data/script/console +2 -70
- data/spec/integration/remote_store_spec.rb +70 -0
- data/spec/integration/search_spec.rb +76 -0
- data/spec/integration/spec_helper.rb +1 -0
- data/spec/lib/spec_helper.rb +1 -0
- data/spec/lib/strokedb/config_spec.rb +250 -0
- data/spec/lib/strokedb/core_ext/blank_spec.rb +20 -0
- data/spec/lib/strokedb/core_ext/extract_spec.rb +42 -0
- data/spec/lib/strokedb/core_ext/float_spec.rb +62 -0
- data/spec/lib/strokedb/core_ext/infinity_spec.rb +40 -0
- data/spec/lib/strokedb/core_ext/spec_helper.rb +1 -0
- data/spec/lib/strokedb/core_ext/string_spec.rb +25 -0
- data/spec/lib/strokedb/core_ext/symbol_spec.rb +8 -0
- data/spec/lib/strokedb/data_structures/chunked_skiplist_spec.rb +144 -0
- data/spec/lib/strokedb/data_structures/inverted_list_spec.rb +172 -0
- data/spec/lib/strokedb/data_structures/simple_skiplist_spec.rb +200 -0
- data/spec/lib/strokedb/data_structures/skiplist_spec.rb +253 -0
- data/spec/lib/strokedb/data_structures/spec_helper.rb +1 -0
- data/spec/lib/strokedb/document/associations_spec.rb +319 -0
- data/spec/lib/strokedb/document/callbacks_spec.rb +134 -0
- data/spec/lib/strokedb/document/coercions_spec.rb +110 -0
- data/spec/lib/strokedb/document/document_spec.rb +1063 -0
- data/spec/lib/strokedb/document/meta_meta_spec.rb +30 -0
- data/spec/lib/strokedb/document/meta_spec.rb +435 -0
- data/spec/lib/strokedb/document/metaslot_spec.rb +43 -0
- data/spec/lib/strokedb/document/slot_spec.rb +130 -0
- data/spec/lib/strokedb/document/spec_helper.rb +1 -0
- data/spec/lib/strokedb/document/validations_spec.rb +1081 -0
- data/spec/lib/strokedb/document/virtualize_spec.rb +80 -0
- data/spec/lib/strokedb/nsurl_spec.rb +73 -0
- data/spec/lib/strokedb/spec_helper.rb +1 -0
- data/spec/lib/strokedb/stores/chained_storages_spec.rb +116 -0
- data/spec/lib/strokedb/stores/spec_helper.rb +1 -0
- data/spec/lib/strokedb/stores/store_spec.rb +201 -0
- data/spec/lib/strokedb/stores/transaction_spec.rb +107 -0
- data/spec/lib/strokedb/sync/chain_sync_spec.rb +43 -0
- data/spec/lib/strokedb/sync/diff_spec.rb +111 -0
- data/spec/lib/strokedb/sync/lamport_timestamp_spec.rb +174 -0
- data/spec/lib/strokedb/sync/slot_diff_spec.rb +164 -0
- data/spec/lib/strokedb/sync/spec_helper.rb +1 -0
- data/spec/lib/strokedb/sync/store_sync_spec.rb +181 -0
- data/spec/lib/strokedb/sync/stroke_diff/array_spec.rb +97 -0
- data/spec/lib/strokedb/sync/stroke_diff/complex_spec.rb +58 -0
- data/spec/lib/strokedb/sync/stroke_diff/hash_spec.rb +144 -0
- data/spec/lib/strokedb/sync/stroke_diff/scalar_spec.rb +23 -0
- data/spec/lib/strokedb/sync/stroke_diff/spec_helper.rb +25 -0
- data/spec/lib/strokedb/sync/stroke_diff/string_spec.rb +61 -0
- data/spec/lib/strokedb/util/attach_dsl_spec.rb +45 -0
- data/spec/lib/strokedb/util/inflect_spec.rb +14 -0
- data/spec/lib/strokedb/util/lazy_array_spec.rb +157 -0
- data/spec/lib/strokedb/util/lazy_mapping_array_spec.rb +174 -0
- data/spec/lib/strokedb/util/lazy_mapping_hash_spec.rb +92 -0
- data/spec/lib/strokedb/util/spec_helper.rb +1 -0
- data/spec/lib/strokedb/util/uuid_spec.rb +46 -0
- data/spec/lib/strokedb/view_spec.rb +228 -0
- data/spec/lib/strokedb/volumes/archive_volume_spec.rb +105 -0
- data/spec/lib/strokedb/volumes/block_volume_spec.rb +100 -0
- data/spec/lib/strokedb/volumes/distributed_pointer_spec.rb +14 -0
- data/spec/lib/strokedb/volumes/fixed_length_skiplist_volume_spec.rb +177 -0
- data/spec/lib/strokedb/volumes/map_volume_spec.rb +172 -0
- data/spec/lib/strokedb/volumes/spec_helper.rb +1 -0
- data/spec/regression/docref_spec.rb +94 -0
- data/spec/regression/meta_spec.rb +23 -0
- data/spec/regression/spec_helper.rb +1 -0
- data/spec/regression/sync_spec.rb +36 -0
- data/spec/spec.opts +7 -0
- data/spec/spec_helper.rb +37 -0
- data/spec/temp/storages/TIMESTAMP +1 -0
- data/spec/temp/storages/UUID +1 -0
- data/spec/temp/storages/database-sync/TIMESTAMP +1 -0
- data/spec/temp/storages/database-sync/UUID +1 -0
- data/spec/temp/storages/database-sync/config +1 -0
- data/spec/temp/storages/database-sync/file/LAST +1 -0
- data/spec/temp/storages/database-sync/file/bd/f6/bdf675e5-8a7b-494e-97f2-f74a14ccd95d.av +0 -0
- data/spec/temp/storages/database-sync/file/uindex.wal +0 -0
- data/spec/temp/storages/database-sync/inverted_list_file/INVERTED_INDEX +1 -0
- data/spec/temp/storages/inverted_list_storage/INVERTED_INDEX +0 -0
- data/strokedb.gemspec +120 -0
- data/task/benchmark.task +9 -0
- data/task/ditz.task +30 -0
- data/task/echoe.rb +17 -0
- data/task/rcov.task +50 -0
- data/task/rdoc.task +10 -0
- data/task/rspec.task +0 -0
- data/vendor/java_inline.rb +106 -0
- data/vendor/rbmodexcl/mrimodexcl.rb +82 -0
- data/vendor/rbmodexcl/rbmodexcl.rb +5 -0
- data/vendor/rbmodexcl/rbxmodexcl.rb +48 -0
- data/vendor/rbmodexcl/spec/unextend_spec.rb +50 -0
- data/vendor/rbmodexcl/spec/uninclude_spec.rb +26 -0
- metadata +271 -79
- data/CONTRIBUTORS +0 -7
- data/CREDITS +0 -13
- data/bin/sdbc +0 -2
- data/lib/init.rb +0 -57
- data/lib/stores/inverted_list_index/inverted_list_index.rb +0 -49
- data/lib/stores/skiplist_store/chunk.rb +0 -119
- data/lib/stores/skiplist_store/chunk_storage.rb +0 -21
- data/lib/stores/skiplist_store/file_chunk_storage.rb +0 -44
- data/lib/stores/skiplist_store/memory_chunk_storage.rb +0 -37
- data/lib/stores/skiplist_store/skiplist_store.rb +0 -217
- data/lib/stores/store.rb +0 -5
- data/lib/sync/stroke_diff/stroke_diff.rb +0 -9
- data/lib/util/ext/object.rb +0 -8
- data/lib/util/java_util.rb +0 -9
- data/lib/util/trigger_partition.rb +0 -136
- data/strokedb.rb +0 -75
data/examples/todo.rb
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
#! /usr/bin/env ruby
|
|
2
|
+
$:.unshift File.dirname(__FILE__) + "/../lib"
|
|
3
|
+
require "strokedb"
|
|
4
|
+
|
|
5
|
+
StrokeDB::Config.build :default => true, :base_path => '.todo.strokedb'
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
TodoItem = StrokeDB::Meta.new do
|
|
9
|
+
def done!
|
|
10
|
+
self.done = true
|
|
11
|
+
save!
|
|
12
|
+
end
|
|
13
|
+
def to_s
|
|
14
|
+
status = done ? "X" : " "
|
|
15
|
+
"[#{status}] #{description}"
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
TodoList = StrokeDB::Meta.new do
|
|
20
|
+
has_many :items, :through => :todo_items
|
|
21
|
+
|
|
22
|
+
def to_s
|
|
23
|
+
s = "#{name}:\n"
|
|
24
|
+
items.each do |item|
|
|
25
|
+
s << " #{item}\n"
|
|
26
|
+
end
|
|
27
|
+
s
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def add_issue(prefix,description)
|
|
33
|
+
todo_list = TodoList.find_or_create(:name => prefix)
|
|
34
|
+
todo_item = TodoItem.find_or_create(:description => description, :done => false, :todo_list => todo_list)
|
|
35
|
+
list_issues
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def complete_issue(prefix,description)
|
|
39
|
+
todo_list = TodoList.find_or_create(:name => prefix)
|
|
40
|
+
return unless todo_list
|
|
41
|
+
if item = todo_list.items.first(:description => description)
|
|
42
|
+
item.done!
|
|
43
|
+
list_issues
|
|
44
|
+
else
|
|
45
|
+
puts "No such item found"
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def list_issues
|
|
50
|
+
todo_lists = TodoList.find
|
|
51
|
+
return [] if todo_lists.empty?
|
|
52
|
+
todo_lists.each { |list| puts list }
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def extract_prefix_item(str)
|
|
56
|
+
_, prefix, _, item = str.match(/(^\[(.*)\])?(.+)/).to_a
|
|
57
|
+
prefix ||= "[Main]"
|
|
58
|
+
prefix.gsub!(/(^\[|\]$)/,'')
|
|
59
|
+
item.lstrip!
|
|
60
|
+
[prefix,item]
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
if ARGV.empty?
|
|
64
|
+
if list_issues.empty?
|
|
65
|
+
puts "Type --help for program help"
|
|
66
|
+
end
|
|
67
|
+
exit
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
if ARGV.first.downcase == "--help"
|
|
71
|
+
puts %{
|
|
72
|
+
Usage: todo Do this Add item to 'Main' list
|
|
73
|
+
todo [project] Do that Add item to 'project' list
|
|
74
|
+
todo -d Do this Complete item in 'Main' list
|
|
75
|
+
todo -d [project] Do that Complete item in 'project' lis
|
|
76
|
+
todo List all items
|
|
77
|
+
todo --help This help message
|
|
78
|
+
}
|
|
79
|
+
exit
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
unless ARGV.first.downcase == "-d"
|
|
83
|
+
prefix,item = extract_prefix_item(ARGV.join(' '))
|
|
84
|
+
add_issue(prefix,item)
|
|
85
|
+
else
|
|
86
|
+
args = ARGV
|
|
87
|
+
args.shift
|
|
88
|
+
prefix,item = extract_prefix_item(args.join(' '))
|
|
89
|
+
complete_issue(prefix,item)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
|
data/lib/strokedb.rb
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__))
|
|
3
|
+
$LOAD_PATH.unshift( File.expand_path(File.join(File.dirname(__FILE__), 'strokedb')) ).uniq!
|
|
4
|
+
require 'strokedb/core_ext'
|
|
5
|
+
require File.join(File.dirname(__FILE__), '/../vendor/rbmodexcl/rbmodexcl')
|
|
6
|
+
require_one_of 'json', 'json_pure'
|
|
7
|
+
|
|
8
|
+
require 'set'
|
|
9
|
+
require 'fileutils'
|
|
10
|
+
|
|
11
|
+
module StrokeDB
|
|
12
|
+
# Version:
|
|
13
|
+
MAIN = 0
|
|
14
|
+
MAJOR = 0
|
|
15
|
+
MINOR = 2
|
|
16
|
+
PATCHLEVEL = 2
|
|
17
|
+
|
|
18
|
+
VERSION = [MAIN.to_s, MAJOR.to_s, MINOR.to_s, PATCHLEVEL.to_s].join('.')
|
|
19
|
+
VERSION_STRING = VERSION + (RUBY_PLATFORM =~ /java/ ? '-java' : '')
|
|
20
|
+
|
|
21
|
+
# Coverage threshold - bump this float anytime your changes increase the spec coverage
|
|
22
|
+
# DO NOT LOWER THIS NUMBER. EVER.
|
|
23
|
+
COVERAGE = 92
|
|
24
|
+
|
|
25
|
+
# UUID regexp (like 1e3d02cc-0769-4bd8-9113-e033b246b013)
|
|
26
|
+
UUID_RE = /([a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})/
|
|
27
|
+
|
|
28
|
+
# document version regexp
|
|
29
|
+
VERSION_RE = UUID_RE
|
|
30
|
+
|
|
31
|
+
# XML Schema time format
|
|
32
|
+
# Time.now.xmlschema(6)
|
|
33
|
+
# #=> "2008-04-27T23:39:09.920288+04:00"
|
|
34
|
+
# Time.xmlschema("2008-04-27T23:39:09.920288+04:00")
|
|
35
|
+
# #=> Sun Apr 27 19:39:09 UTC 2008
|
|
36
|
+
XMLSCHEMA_TIME_RE = /\A\s*(-?\d+)-(\d\d)-(\d\d)T(\d\d):(\d\d):(\d\d)(\.\d*)?(Z|[+-]\d\d:\d\d)?\s*\z/i
|
|
37
|
+
|
|
38
|
+
# STROKEDB NSURL
|
|
39
|
+
STROKEDB_NSURL = "http://strokedb.com/"
|
|
40
|
+
|
|
41
|
+
# so called Nil UUID
|
|
42
|
+
NIL_UUID = "00000000-0000-0000-0000-000000000000"
|
|
43
|
+
RAW_NIL_UUID = "\x00" * 16
|
|
44
|
+
|
|
45
|
+
RAW_FULL_UUID = "\xff" * 16
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class <<self
|
|
49
|
+
def default_store
|
|
50
|
+
StrokeDB.default_config.stores[:default] rescue nil
|
|
51
|
+
end
|
|
52
|
+
def default_store=(store)
|
|
53
|
+
cfg = Config.new
|
|
54
|
+
cfg.stores[:default] = store
|
|
55
|
+
StrokeDB.default_config = cfg
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
if ENV['DEBUG'] || $DEBUG
|
|
60
|
+
def DEBUG
|
|
61
|
+
yield
|
|
62
|
+
end
|
|
63
|
+
else
|
|
64
|
+
def DEBUG
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
OPTIMIZATIONS = []
|
|
69
|
+
OPTIMIZATIONS << :C unless RUBY_PLATFORM =~ /java/
|
|
70
|
+
OPTIMIZATIONS << :Java if RUBY_PLATFORM =~ /java/
|
|
71
|
+
|
|
72
|
+
class NoDefaultStoreError < Exception ; end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
require 'strokedb/nsurl'
|
|
76
|
+
require 'strokedb/util'
|
|
77
|
+
require 'strokedb/document'
|
|
78
|
+
require 'strokedb/config'
|
|
79
|
+
require 'strokedb/data_structures'
|
|
80
|
+
require 'strokedb/volumes'
|
|
81
|
+
require 'strokedb/sync'
|
|
82
|
+
require 'strokedb/index'
|
|
83
|
+
require 'strokedb/view'
|
|
84
|
+
require 'strokedb/transaction'
|
|
85
|
+
require 'strokedb/stores'
|
|
@@ -33,7 +33,7 @@ module StrokeDB
|
|
|
33
33
|
opts = opts.stringify_keys
|
|
34
34
|
|
|
35
35
|
config = new(opts['default'])
|
|
36
|
-
storages = opts['storages'] || [:
|
|
36
|
+
storages = opts['storages'] || [:memory, :file]
|
|
37
37
|
|
|
38
38
|
base_path = opts['base_path'] || './'
|
|
39
39
|
|
|
@@ -58,8 +58,8 @@ module StrokeDB
|
|
|
58
58
|
|
|
59
59
|
config.add_index(:default, opts['index'] || :inverted_list, index_storages.first)
|
|
60
60
|
|
|
61
|
-
config.add_store(:default, opts['store']
|
|
62
|
-
{ :storage => storages.first }.merge(opts['store_options'] || {}))
|
|
61
|
+
config.add_store(:default, opts['store'], # FIXME: nil here is a Bad Thing (tm)
|
|
62
|
+
{ :storage => storages.first, :path => base_path }.merge(opts['store_options'] || {}))
|
|
63
63
|
|
|
64
64
|
### save config ###
|
|
65
65
|
|
|
@@ -106,13 +106,14 @@ module StrokeDB
|
|
|
106
106
|
end
|
|
107
107
|
|
|
108
108
|
def add_store(key, type, options = {})
|
|
109
|
+
|
|
109
110
|
options[:storage] = @storages[options[:storage] || :default]
|
|
110
111
|
raise "Missing storage for store #{key}" unless options[:storage]
|
|
111
|
-
|
|
112
|
+
|
|
112
113
|
options[:index] ||= @indexes[options[:index] || :default]
|
|
113
|
-
|
|
114
|
+
|
|
114
115
|
store_instance = constantize(:store, type).new(options)
|
|
115
|
-
|
|
116
|
+
|
|
116
117
|
if options[:index]
|
|
117
118
|
options[:index].document_store = store_instance
|
|
118
119
|
end
|
|
@@ -120,6 +121,10 @@ module StrokeDB
|
|
|
120
121
|
@stores[key] = store_instance
|
|
121
122
|
end
|
|
122
123
|
|
|
124
|
+
def inspect
|
|
125
|
+
"#<StrokeDB::Config:0x#{object_id.to_s(16)}>"
|
|
126
|
+
end
|
|
127
|
+
|
|
123
128
|
private
|
|
124
129
|
|
|
125
130
|
def constantize(name,type)
|
|
@@ -134,9 +139,9 @@ module StrokeDB
|
|
|
134
139
|
end
|
|
135
140
|
end
|
|
136
141
|
|
|
137
|
-
class <<self
|
|
142
|
+
class << self
|
|
138
143
|
def use_perthread_default_config!
|
|
139
|
-
class <<self
|
|
144
|
+
class << self
|
|
140
145
|
def default_config
|
|
141
146
|
Thread.current['StrokeDB.default_config']
|
|
142
147
|
end
|
|
@@ -146,7 +151,7 @@ module StrokeDB
|
|
|
146
151
|
end
|
|
147
152
|
end
|
|
148
153
|
def use_global_default_config!
|
|
149
|
-
class <<self
|
|
154
|
+
class << self
|
|
150
155
|
def default_config
|
|
151
156
|
$strokedb_default_config
|
|
152
157
|
end
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
require 'irb'
|
|
2
|
+
require 'core_ext/string'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
module StrokeDB
|
|
6
|
+
|
|
7
|
+
module Console
|
|
8
|
+
RAM_BASE_PATH = '.console-ram.strokedb'
|
|
9
|
+
|
|
10
|
+
def self.included(klass)
|
|
11
|
+
klass.module_eval do
|
|
12
|
+
|
|
13
|
+
def setup
|
|
14
|
+
if ARGV.last.is_a? String
|
|
15
|
+
if (@@loc = ARGV.pop) == 'RAM'
|
|
16
|
+
puts 'Using in-memory storage.'
|
|
17
|
+
FileUtils.rm_rf RAM_BASE_PATH
|
|
18
|
+
::StrokeDB::Config.build :default => true, :storages => [:memory], :base_path => RAM_BASE_PATH
|
|
19
|
+
else
|
|
20
|
+
puts "Using #{@@loc} storage."
|
|
21
|
+
::StrokeDB::Config.build :default => true, :base_path => @@loc
|
|
22
|
+
end
|
|
23
|
+
else
|
|
24
|
+
@@loc = '.console.strokedb'
|
|
25
|
+
::StrokeDB::Config.build :default => true, :base_path => @@loc
|
|
26
|
+
end
|
|
27
|
+
@@store = ::StrokeDB::default_store
|
|
28
|
+
@@saved = false
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def save!
|
|
32
|
+
@@store.storage.sync_chained_storages!
|
|
33
|
+
@@saved = true
|
|
34
|
+
@@store
|
|
35
|
+
end
|
|
36
|
+
def saved?
|
|
37
|
+
@@saved
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def clear!
|
|
41
|
+
if @@loc == 'RAM'
|
|
42
|
+
FileUtils.rm_rf RAM_BASE_PATH
|
|
43
|
+
else
|
|
44
|
+
FileUtils.rm_rf @@loc
|
|
45
|
+
end
|
|
46
|
+
setup
|
|
47
|
+
"Database has been wiped out."
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def find(*args)
|
|
51
|
+
@@store.find(*args)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def store
|
|
55
|
+
@@store
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def sandbox?
|
|
59
|
+
@@sandbox
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def reload!
|
|
63
|
+
silence_warnings do
|
|
64
|
+
load "strokedb.rb"
|
|
65
|
+
end
|
|
66
|
+
StrokeDB
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def help!
|
|
70
|
+
puts ("
|
|
71
|
+
- save! Save the console's store (by default, a file in your current directory named console.strokedb)
|
|
72
|
+
- clear! Drop the console's store (destructive, and launches you out of the session)
|
|
73
|
+
- find <uuid> Find document by UUID in the console's store (example: find 'a4430ff1-6cb4-4428-a292-7ab8b77de467')
|
|
74
|
+
- Doc Alias for Document
|
|
75
|
+
- store Alias for the console's store's object
|
|
76
|
+
".unindent!)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
end
|
|
80
|
+
klass.send(:include, StrokeDB)
|
|
81
|
+
klass.send(:setup)
|
|
82
|
+
|
|
83
|
+
puts "StrokeDB #{::StrokeDB::VERSION} (help! for more info)"
|
|
84
|
+
end # self.included
|
|
85
|
+
end # Console
|
|
86
|
+
Doc = Document
|
|
87
|
+
end # StrokeDB
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
require 'core_ext/kernel'
|
|
2
|
+
require 'core_ext/object'
|
|
3
|
+
require 'core_ext/string'
|
|
4
|
+
require 'core_ext/symbol'
|
|
5
|
+
require 'core_ext/enumerable'
|
|
6
|
+
require 'core_ext/hash'
|
|
7
|
+
require 'core_ext/fixnum'
|
|
8
|
+
require 'core_ext/float'
|
|
9
|
+
require 'core_ext/infinity'
|
|
10
|
+
require 'core_ext/blank'
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# These are for use in Range arguments for View#find.
|
|
2
|
+
# We don't provide correct spaceship operator <=>
|
|
3
|
+
# to preserve performance.
|
|
4
|
+
#
|
|
5
|
+
class Object
|
|
6
|
+
def infinite?
|
|
7
|
+
false
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class Numeric
|
|
12
|
+
def infinite?
|
|
13
|
+
self.abs == Infinity
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
InfiniteString = Class.new(String) do
|
|
18
|
+
def infinite?
|
|
19
|
+
true
|
|
20
|
+
end
|
|
21
|
+
end.new.freeze
|
|
22
|
+
|
|
23
|
+
InfiniteTime = Class.new(Time) do
|
|
24
|
+
def infinite?
|
|
25
|
+
true
|
|
26
|
+
end
|
|
27
|
+
end.new.freeze
|
|
28
|
+
|
|
29
|
+
# Syntactic sugar: sweet aliases for daily use.
|
|
30
|
+
# For use like (SmallestString.."a") in View#find()
|
|
31
|
+
#
|
|
32
|
+
LargestString = SmallestString = StringInfinity = InfiniteString
|
|
33
|
+
LargestTime = SmallestTime = TimeInfinity = InfiniteTime
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module Kernel
|
|
2
|
+
def require_one_of(*args)
|
|
3
|
+
if args.first.class == Array
|
|
4
|
+
args = args.first
|
|
5
|
+
original_args = args[1]
|
|
6
|
+
end
|
|
7
|
+
original_args ||= args
|
|
8
|
+
|
|
9
|
+
begin
|
|
10
|
+
require args.shift
|
|
11
|
+
rescue LoadError
|
|
12
|
+
raise LoadError, "You need one of these gems: #{original_args.join(', ')}" if
|
|
13
|
+
args.empty?
|
|
14
|
+
require_one_of(args, original_args)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Helps to extract arguments for an overloaded methods:
|
|
20
|
+
# def some_method(*args)
|
|
21
|
+
# store, name, options = extract(Store, String, Hash, args)
|
|
22
|
+
# end
|
|
23
|
+
#
|
|
24
|
+
# This method tries to extract arguments according to their type.
|
|
25
|
+
# If the correct type is missing, var is set to nil.
|
|
26
|
+
# If some of the input arguments are not matched, ArgumentError is raised.
|
|
27
|
+
#
|
|
28
|
+
def extract(*template_and_args)
|
|
29
|
+
args = template_and_args.pop
|
|
30
|
+
result = []
|
|
31
|
+
|
|
32
|
+
args.each do |a|
|
|
33
|
+
unless while t = template_and_args.shift
|
|
34
|
+
t === a and result.push a and break 1 or result.push nil
|
|
35
|
+
end
|
|
36
|
+
raise ArgumentError, "Unexpected argument #{a.inspect} is passed!"
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
result + template_and_args.map{ nil }
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'inline'
|
|
2
|
+
|
|
3
|
+
# partially extracted from ActiveRecord (http://rubyforge.org/projects/activesupport/)
|
|
4
|
+
|
|
5
|
+
class Object
|
|
6
|
+
unless respond_to?(:send!)
|
|
7
|
+
# Anticipating Ruby 1.9 neutering send
|
|
8
|
+
alias send! send
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
# Tricky, tricky! (-:
|
|
12
|
+
def truthy?
|
|
13
|
+
!!self
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|