hypostasis 0.1.1 → 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.
- checksums.yaml +4 -4
- data/.travis.yml +19 -19
- data/lib/hypostasis/data_models.rb +1 -0
- data/lib/hypostasis/data_models/key_value.rb +3 -23
- data/lib/hypostasis/data_models/utilities.rb +27 -0
- data/lib/hypostasis/document.rb +13 -30
- data/lib/hypostasis/version.rb +1 -1
- data/test/document_spec.rb +22 -0
- data/test/support/sample_document.rb +3 -3
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8f4adf685f294fec93972358ba0f44f733ca1711
|
4
|
+
data.tar.gz: 0430fec44b635d781d0d6a576cf4013afb7f0824
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c44ccc9c76c56b257e3f86782995efbe96e01ad400fb1f098861c1bb31482cb774539f9a35edeb6759c30bc7e60637205c918750a0294a29d3fb793020b8349c
|
7
|
+
data.tar.gz: 4651931a11a248d52845b6c57c8f697211983c28e6bb72fe2f1ae5b2319e8bfad43b778d20c7a74e4c8698e49985251e78a2df4264352082aa997b7c746cd8ce
|
data/.travis.yml
CHANGED
@@ -3,44 +3,44 @@ rvm:
|
|
3
3
|
- 1.9.3
|
4
4
|
- 2.0.0
|
5
5
|
- 2.1.0
|
6
|
-
- ruby-head
|
6
|
+
# - ruby-head
|
7
7
|
- jruby-19mode
|
8
|
-
- jruby-head
|
8
|
+
# - jruby-head
|
9
9
|
jdk:
|
10
10
|
- openjdk6
|
11
11
|
- openjdk7
|
12
12
|
- oraclejdk7
|
13
|
-
- oraclejdk8
|
13
|
+
# - oraclejdk8
|
14
14
|
matrix:
|
15
15
|
exclude:
|
16
16
|
- rvm: 1.9.3
|
17
17
|
jdk: openjdk6
|
18
18
|
- rvm: 1.9.3
|
19
19
|
jdk: oraclejdk7
|
20
|
-
- rvm: 1.9.3
|
21
|
-
jdk: oraclejdk8
|
20
|
+
# - rvm: 1.9.3
|
21
|
+
# jdk: oraclejdk8
|
22
22
|
- rvm: 2.0.0
|
23
23
|
jdk: openjdk6
|
24
24
|
- rvm: 2.0.0
|
25
25
|
jdk: oraclejdk7
|
26
|
-
- rvm: 2.0.0
|
27
|
-
jdk: oraclejdk8
|
26
|
+
# - rvm: 2.0.0
|
27
|
+
# jdk: oraclejdk8
|
28
28
|
- rvm: 2.1.0
|
29
29
|
jdk: openjdk6
|
30
30
|
- rvm: 2.1.0
|
31
31
|
jdk: oraclejdk7
|
32
|
-
- rvm: 2.1.0
|
33
|
-
jdk: oraclejdk8
|
34
|
-
- rvm: ruby-head
|
35
|
-
jdk: openjdk6
|
36
|
-
- rvm: ruby-head
|
37
|
-
jdk: oraclejdk7
|
38
|
-
- rvm: ruby-head
|
39
|
-
jdk: oraclejdk8
|
40
|
-
allow_failures:
|
41
|
-
- rvm: ruby-head
|
42
|
-
- rvm: jruby-head
|
43
|
-
- jdk: oraclejdk8
|
32
|
+
# - rvm: 2.1.0
|
33
|
+
# jdk: oraclejdk8
|
34
|
+
# - rvm: ruby-head
|
35
|
+
# jdk: openjdk6
|
36
|
+
# - rvm: ruby-head
|
37
|
+
# jdk: oraclejdk7
|
38
|
+
# - rvm: ruby-head
|
39
|
+
# jdk: oraclejdk8
|
40
|
+
# allow_failures:
|
41
|
+
# - rvm: ruby-head
|
42
|
+
# - rvm: jruby-head
|
43
|
+
# - jdk: oraclejdk8
|
44
44
|
before_install:
|
45
45
|
- wget https://foundationdb.com/downloads/I_accept_the_FoundationDB_Community_License_Agreement/1.0.1/foundationdb-clients_1.0.1-1_amd64.deb
|
46
46
|
- wget https://foundationdb.com/downloads/I_accept_the_FoundationDB_Community_License_Agreement/1.0.1/foundationdb-server_1.0.1-1_amd64.deb
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'date'
|
2
2
|
|
3
3
|
module Hypostasis::DataModels::KeyValue
|
4
|
+
include Hypostasis::DataModels::Utilities
|
5
|
+
|
4
6
|
def set(key, value)
|
5
7
|
key_path = "#{name}\\#{Hypostasis::Tuple.new(key.to_s, value.class.to_s).to_s}"
|
6
8
|
database.set(key_path, value.to_s)
|
@@ -10,28 +12,6 @@ module Hypostasis::DataModels::KeyValue
|
|
10
12
|
key_path = "#{name}\\#{Hypostasis::Tuple.new(key.to_s).to_s}"
|
11
13
|
key = database.get_range_start_with(key_path).first.key
|
12
14
|
value = database.get_range_start_with(key_path).first.value
|
13
|
-
|
14
|
-
case data_type
|
15
|
-
when 'Fixnum'
|
16
|
-
Integer(value)
|
17
|
-
when 'Bignum'
|
18
|
-
Integer(value)
|
19
|
-
when 'Float'
|
20
|
-
Float(value)
|
21
|
-
when 'String'
|
22
|
-
value
|
23
|
-
when 'Date'
|
24
|
-
Date.parse(value)
|
25
|
-
when 'DateTime'
|
26
|
-
DateTime.parse(value)
|
27
|
-
when 'Time'
|
28
|
-
Time.parse(value)
|
29
|
-
when 'TrueClass'
|
30
|
-
true
|
31
|
-
when 'FalseClass'
|
32
|
-
false
|
33
|
-
else
|
34
|
-
raise Hypostasis::Errors::UnknownValueType
|
35
|
-
end
|
15
|
+
reconstitute_value(Hypostasis::Tuple.unpack(key.to_s.split('\\').last), value)
|
36
16
|
end
|
37
17
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Hypostasis::DataModels::Utilities
|
2
|
+
def reconstitute_value(tuple, raw_value)
|
3
|
+
data_type = tuple.to_a.last
|
4
|
+
case data_type
|
5
|
+
when 'Fixnum'
|
6
|
+
Integer(raw_value)
|
7
|
+
when 'Bignum'
|
8
|
+
Integer(raw_value)
|
9
|
+
when 'Float'
|
10
|
+
Float(raw_value)
|
11
|
+
when 'String'
|
12
|
+
raw_value
|
13
|
+
when 'Date'
|
14
|
+
Date.parse(raw_value)
|
15
|
+
when 'DateTime'
|
16
|
+
DateTime.parse(raw_value)
|
17
|
+
when 'Time'
|
18
|
+
Time.parse(raw_value)
|
19
|
+
when 'TrueClass'
|
20
|
+
true
|
21
|
+
when 'FalseClass'
|
22
|
+
false
|
23
|
+
else
|
24
|
+
raise Hypostasis::Errors::UnknownValueType
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/hypostasis/document.rb
CHANGED
@@ -27,6 +27,12 @@ module Hypostasis::Document
|
|
27
27
|
self
|
28
28
|
end
|
29
29
|
|
30
|
+
def destroy
|
31
|
+
self.class.namespace.transact do |tr|
|
32
|
+
tr.clear_range_start_with(self.class.namespace.for_document(self))
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
30
36
|
def generate_id
|
31
37
|
@id ||= SecureRandom.uuid
|
32
38
|
end
|
@@ -36,6 +42,8 @@ module Hypostasis::Document
|
|
36
42
|
end
|
37
43
|
|
38
44
|
module ClassMethods
|
45
|
+
include Hypostasis::DataModels::Utilities
|
46
|
+
|
39
47
|
def use_namespace(namespace)
|
40
48
|
@@namespace = Hypostasis::Namespace.new(namespace.to_s, :document)
|
41
49
|
end
|
@@ -49,11 +57,8 @@ module Hypostasis::Document
|
|
49
57
|
end
|
50
58
|
|
51
59
|
def field(name, options = {})
|
52
|
-
named = name.to_s
|
53
|
-
raise Hypostasis::Errors::MustDefineFieldType if options[:type].nil?
|
54
|
-
raise Hypostasis::Errors::UnsupportedFieldType unless supported_field_types.include?(options[:type].to_s)
|
55
60
|
register_field(name.to_sym)
|
56
|
-
create_accessors(
|
61
|
+
create_accessors(name.to_s, options)
|
57
62
|
end
|
58
63
|
|
59
64
|
def fields
|
@@ -72,6 +77,10 @@ module Hypostasis::Document
|
|
72
77
|
end
|
73
78
|
end
|
74
79
|
|
80
|
+
def create(*attributes)
|
81
|
+
self.new(*attributes).save
|
82
|
+
end
|
83
|
+
|
75
84
|
def find(id)
|
76
85
|
document_keys = []
|
77
86
|
namespace.transact do |tr|
|
@@ -91,31 +100,5 @@ module Hypostasis::Document
|
|
91
100
|
document.set_id(id)
|
92
101
|
document
|
93
102
|
end
|
94
|
-
|
95
|
-
def reconstitute_value(tuple, raw_value)
|
96
|
-
data_type = tuple.to_a.last
|
97
|
-
case data_type
|
98
|
-
when 'Fixnum'
|
99
|
-
Integer(raw_value)
|
100
|
-
when 'Bignum'
|
101
|
-
Integer(raw_value)
|
102
|
-
when 'Float'
|
103
|
-
Float(raw_value)
|
104
|
-
when 'String'
|
105
|
-
raw_value
|
106
|
-
when 'Date'
|
107
|
-
Date.parse(raw_value)
|
108
|
-
when 'DateTime'
|
109
|
-
DateTime.parse(raw_value)
|
110
|
-
when 'Time'
|
111
|
-
Time.parse(raw_value)
|
112
|
-
when 'TrueClass'
|
113
|
-
true
|
114
|
-
when 'FalseClass'
|
115
|
-
false
|
116
|
-
else
|
117
|
-
raise Hypostasis::Errors::UnknownValueType
|
118
|
-
end
|
119
|
-
end
|
120
103
|
end
|
121
104
|
end
|
data/lib/hypostasis/version.rb
CHANGED
data/test/document_spec.rb
CHANGED
@@ -25,6 +25,24 @@ describe Hypostasis::Document do
|
|
25
25
|
|
26
26
|
it { subject.must_respond_to :save }
|
27
27
|
|
28
|
+
describe '#create' do
|
29
|
+
let(:subject) { SampleDocument.create(name: 'John', age: 21, dob: Date.today.prev_year(21)) }
|
30
|
+
let(:document_tuple) { Hypostasis::Tuple.new(SampleDocument.to_s, subject.id.to_s).to_s }
|
31
|
+
|
32
|
+
def field_path(name, type)
|
33
|
+
'sample_docs\\' + document_tuple + '\\' + Hypostasis::Tuple.new(name.to_s, type.to_s).to_s
|
34
|
+
end
|
35
|
+
|
36
|
+
after do
|
37
|
+
subject.destroy
|
38
|
+
end
|
39
|
+
|
40
|
+
it { subject.id.wont_be_nil }
|
41
|
+
it { database.get(field_path(:name, String)).must_equal 'John' }
|
42
|
+
it { database.get(field_path(:age, Fixnum)).must_equal '21' }
|
43
|
+
it { database.get(field_path(:dob, Date)).must_equal Date.today.prev_year(21).to_s }
|
44
|
+
end
|
45
|
+
|
28
46
|
describe '#save' do
|
29
47
|
let(:document_tuple) { Hypostasis::Tuple.new(SampleDocument.to_s, @document.id.to_s).to_s }
|
30
48
|
|
@@ -47,4 +65,8 @@ describe Hypostasis::Document do
|
|
47
65
|
it { SampleDocument.find(document_id).is_a?(SampleDocument).must_equal true }
|
48
66
|
it { SampleDocument.find(document_id).id.must_equal document_id }
|
49
67
|
end
|
68
|
+
|
69
|
+
describe 'indexing' do
|
70
|
+
|
71
|
+
end
|
50
72
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hypostasis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Thompson
|
@@ -86,6 +86,7 @@ files:
|
|
86
86
|
- lib/hypostasis/data_models.rb
|
87
87
|
- lib/hypostasis/data_models/document.rb
|
88
88
|
- lib/hypostasis/data_models/key_value.rb
|
89
|
+
- lib/hypostasis/data_models/utilities.rb
|
89
90
|
- lib/hypostasis/document.rb
|
90
91
|
- lib/hypostasis/errors.rb
|
91
92
|
- lib/hypostasis/key_path.rb
|