shadydb 0.1.0 → 0.2.0
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.markdown +0 -1
- data/VERSION +1 -1
- data/lib/shadydb/attributes.rb +20 -1
- data/lib/shadydb/document.rb +3 -3
- data/lib/shadydb/finders.rb +7 -4
- data/lib/shadydb/persistence.rb +5 -4
- data/shadydb.gemspec +2 -2
- data/test/attributes_test.rb +23 -0
- data/test/finders_test.rb +14 -0
- metadata +3 -3
data/README.markdown
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/lib/shadydb/attributes.rb
CHANGED
@@ -4,10 +4,21 @@ module ShadyDB
|
|
4
4
|
|
5
5
|
def self.included(base)
|
6
6
|
base.class_eval do
|
7
|
-
|
7
|
+
extend ClassMethods
|
8
|
+
|
9
|
+
cattr_accessor :fields
|
10
|
+
self.fields = {}
|
11
|
+
|
12
|
+
field :id
|
13
|
+
|
14
|
+
attr_accessor :attributes
|
8
15
|
end
|
9
16
|
end
|
10
17
|
|
18
|
+
def id
|
19
|
+
self[:id]
|
20
|
+
end
|
21
|
+
|
11
22
|
def [](key)
|
12
23
|
attributes[key.to_s]
|
13
24
|
end
|
@@ -29,6 +40,14 @@ module ShadyDB
|
|
29
40
|
end
|
30
41
|
end
|
31
42
|
|
43
|
+
module ClassMethods
|
44
|
+
|
45
|
+
def field(name, options = {})
|
46
|
+
self.fields[name.to_s] = options[:default]
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
32
51
|
end
|
33
52
|
|
34
53
|
end
|
data/lib/shadydb/document.rb
CHANGED
@@ -4,8 +4,8 @@ module ShadyDB
|
|
4
4
|
extend ActiveModel::Callbacks
|
5
5
|
include ActiveModel::Validations
|
6
6
|
include ShadyDB::Attributes
|
7
|
-
include ShadyDB::Persistence
|
8
7
|
include ShadyDB::Finders
|
8
|
+
include ShadyDB::Persistence
|
9
9
|
|
10
10
|
before_save :validate
|
11
11
|
|
@@ -13,8 +13,8 @@ module ShadyDB
|
|
13
13
|
@new_record = true
|
14
14
|
@destroyed = false
|
15
15
|
|
16
|
-
self.attributes =
|
17
|
-
self.attributes
|
16
|
+
self.attributes = attribs.stringify_keys
|
17
|
+
self.attributes.reverse_merge!(self.class.fields)
|
18
18
|
end
|
19
19
|
|
20
20
|
def to_model
|
data/lib/shadydb/finders.rb
CHANGED
@@ -10,18 +10,21 @@ module ShadyDB
|
|
10
10
|
|
11
11
|
module ClassMethods
|
12
12
|
def find(id)
|
13
|
-
|
14
|
-
document.instance_variable_set('@id', id)
|
13
|
+
return false unless self.exists?(id)
|
15
14
|
|
16
|
-
|
15
|
+
document = self.new :id => id
|
17
16
|
storage = File.read(document.path)
|
18
17
|
|
19
18
|
document.send(:restore!, storage)
|
20
19
|
document.instance_variable_set('@new_record', false)
|
21
20
|
document
|
22
21
|
end
|
22
|
+
|
23
|
+
def exists?(id)
|
24
|
+
document = self.new :id => id
|
25
|
+
File.exist?(document.path)
|
26
|
+
end
|
23
27
|
end
|
24
|
-
|
25
28
|
end
|
26
29
|
|
27
30
|
end
|
data/lib/shadydb/persistence.rb
CHANGED
@@ -60,7 +60,7 @@ module ShadyDB
|
|
60
60
|
end
|
61
61
|
|
62
62
|
def path
|
63
|
-
File.join(self.class.data_directory,
|
63
|
+
File.join(self.class.data_directory, id)
|
64
64
|
end
|
65
65
|
|
66
66
|
protected
|
@@ -79,7 +79,7 @@ module ShadyDB
|
|
79
79
|
|
80
80
|
def create
|
81
81
|
_run_create_callbacks do
|
82
|
-
|
82
|
+
generate_id
|
83
83
|
persist!
|
84
84
|
@new_record = false
|
85
85
|
|
@@ -107,9 +107,10 @@ module ShadyDB
|
|
107
107
|
send(:"from_#{ShadyDB.configuration.format}" ,xml_or_json)
|
108
108
|
end
|
109
109
|
|
110
|
-
# TODO: should check if ID is already taken
|
111
110
|
def generate_id
|
112
|
-
|
111
|
+
while(id.nil? || self.class.exists?(id)) do
|
112
|
+
self.id = ActiveSupport::SecureRandom.hex()
|
113
|
+
end
|
113
114
|
end
|
114
115
|
|
115
116
|
end
|
data/shadydb.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{shadydb}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["jdpace"]
|
12
|
-
s.date = %q{2010-05-
|
12
|
+
s.date = %q{2010-05-19}
|
13
13
|
s.description = %q{ORM that persists to file system using either XML or JSON with optional encryption layer.}
|
14
14
|
s.email = %q{jared@codewordstudios.com}
|
15
15
|
s.extra_rdoc_files = [
|
data/test/attributes_test.rb
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
|
+
class SampleDocument < ShadyDB::Document
|
4
|
+
field :name
|
5
|
+
field :role, :default => 'developer'
|
6
|
+
end
|
7
|
+
|
3
8
|
class AttributesTest < Test::Unit::TestCase
|
4
9
|
|
5
10
|
subject do
|
@@ -32,4 +37,22 @@ class AttributesTest < Test::Unit::TestCase
|
|
32
37
|
end
|
33
38
|
end
|
34
39
|
|
40
|
+
context 'Defined fields' do
|
41
|
+
should "allow defined fields which are always created" do
|
42
|
+
document = SampleDocument.new
|
43
|
+
assert document.attributes.key?('name')
|
44
|
+
assert document.name.nil?
|
45
|
+
end
|
46
|
+
|
47
|
+
should "allow default values for defined fields" do
|
48
|
+
document = SampleDocument.new
|
49
|
+
assert document[:role] == 'developer'
|
50
|
+
end
|
51
|
+
|
52
|
+
should "be able to override default values" do
|
53
|
+
document = SampleDocument.new :role => 'admin'
|
54
|
+
assert document[:role] == 'admin'
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
35
58
|
end
|
data/test/finders_test.rb
CHANGED
@@ -13,4 +13,18 @@ class FindersTest < Test::Unit::TestCase
|
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
+
context "Checking whether or not a Document exists" do
|
17
|
+
should "return true if a document is persited" do
|
18
|
+
document = ShadyDB::Document.create :name => 'Sawyer'
|
19
|
+
assert document.persisted?
|
20
|
+
assert ShadyDB::Document.exists?(document.id)
|
21
|
+
end
|
22
|
+
|
23
|
+
should "return false if a document is not persited" do
|
24
|
+
document = ShadyDB::Document.new :id => 'fake-id', :name => 'Sawyer'
|
25
|
+
assert !document.persisted?
|
26
|
+
assert !ShadyDB::Document.exists?(document.id)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
16
30
|
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
7
|
+
- 2
|
8
8
|
- 0
|
9
|
-
version: 0.
|
9
|
+
version: 0.2.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- jdpace
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-05-
|
17
|
+
date: 2010-05-19 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|