dalton 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +19 -0
- data/.jrubyrc +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +8 -0
- data/Jarfile +7 -0
- data/README.md +35 -0
- data/Rakefile +7 -0
- data/dalton.gemspec +23 -0
- data/epl-v10.html +261 -0
- data/examples/posts_controller.rb +48 -0
- data/lib/dalton.rb +37 -0
- data/lib/dalton/attribute.rb +16 -0
- data/lib/dalton/connection.rb +104 -0
- data/lib/dalton/database.rb +48 -0
- data/lib/dalton/datomization.rb +18 -0
- data/lib/dalton/entity.rb +75 -0
- data/lib/dalton/exception.rb +68 -0
- data/lib/dalton/transaction_result.rb +33 -0
- data/lib/dalton/translation.rb +65 -0
- data/lib/dalton/undatomization.rb +11 -0
- data/lib/dalton/utility.rb +91 -0
- data/lib/dalton/version.rb +3 -0
- data/spec/dalton/connection_spec.rb +133 -0
- data/spec/dalton/database_spec.rb +85 -0
- data/spec/dalton/datomization_spec.rb +94 -0
- data/spec/dalton/entity_spec.rb +37 -0
- data/spec/dalton/translation_spec.rb +126 -0
- data/spec/dalton/utility_spec.rb +37 -0
- data/spec/spec_helper.rb +21 -0
- data/spec/support/clojure_equal_matcher.rb +52 -0
- data/spec/support/datomic_context.rb +19 -0
- metadata +101 -0
@@ -0,0 +1,126 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
java_import "clojure.lang.PersistentHashSet"
|
4
|
+
java_import "java.util.HashSet"
|
5
|
+
java_import "clojure.lang.Keyword"
|
6
|
+
|
7
|
+
describe Dalton::Translation do
|
8
|
+
|
9
|
+
let(:ruby_set) { Set.new([:a, 1, Set.new([:b, 2])]) }
|
10
|
+
let(:clojure_set) {
|
11
|
+
PersistentHashSet.create([Keyword.intern('a'),
|
12
|
+
1,
|
13
|
+
PersistentHashSet.create([Keyword.intern('b'),
|
14
|
+
2
|
15
|
+
])
|
16
|
+
])
|
17
|
+
}
|
18
|
+
|
19
|
+
let(:datomic_entity) { Java::DatomicQuery::EntityMap.new(1, 2, 3, 4) }
|
20
|
+
let(:dalton_entity) { Dalton::Entity.new(datomic_entity) }
|
21
|
+
|
22
|
+
let(:ruby_keyword) { :xorn }
|
23
|
+
let(:clojure_keyword) { Keyword.intern('xorn') }
|
24
|
+
|
25
|
+
let(:ruby_keyword_datalog_variable) { :'?e' }
|
26
|
+
let(:clojure_symbol_datalog_variable) { Java::ClojureLang::Symbol.intern('?e') }
|
27
|
+
|
28
|
+
let(:ruby_keyword_datalog_source) { :'$' }
|
29
|
+
let(:clojure_symbol_datalog_source) { Java::ClojureLang::Symbol.intern('$') }
|
30
|
+
|
31
|
+
describe "#from_clj" do
|
32
|
+
context "with a (clojure) IPersistentSet" do
|
33
|
+
subject { Dalton::Translation.from_clj(clojure_set) }
|
34
|
+
|
35
|
+
it 'returns a ruby Set with translated members' do
|
36
|
+
expect(subject).to eq(ruby_set)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context "with a (clojure) Datomic entity" do
|
41
|
+
subject { Dalton::Translation.from_clj(datomic_entity) }
|
42
|
+
|
43
|
+
it 'wraps it in a Dalton entity' do
|
44
|
+
expect(subject).to eq(dalton_entity)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
context "with a clojure Keyword" do
|
49
|
+
subject { Dalton::Translation.from_clj(clojure_keyword) }
|
50
|
+
|
51
|
+
it 'returns the equivalent ruby keyword' do
|
52
|
+
expect(subject).to eq(ruby_keyword)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context "with a clojure Symbol" do
|
57
|
+
subject { Dalton::Translation.from_clj(clojure_symbol_datalog_variable) }
|
58
|
+
|
59
|
+
it 'returns the equivalent ruby keyword' do
|
60
|
+
expect(subject).to eq(ruby_keyword_datalog_variable)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
context "with a java.util.Date" do
|
65
|
+
subject {
|
66
|
+
format = Java::JavaText::SimpleDateFormat.new("yyyy-MM-dd HH:mm:ss Z")
|
67
|
+
Dalton::Translation.from_clj(format.parse("1998-07-05 07:00:00 -0000"))
|
68
|
+
}
|
69
|
+
|
70
|
+
it 'returns the equivalent ruby DateTime' do
|
71
|
+
expect(subject).to eq(DateTime.parse("1998-07-05 07:00:00 -0000"))
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
describe "#from_ruby" do
|
78
|
+
context "with a ruby Set" do
|
79
|
+
subject { Dalton::Translation.from_ruby(ruby_set) }
|
80
|
+
|
81
|
+
it 'returns a PersistentHashSet with translated members' do
|
82
|
+
expect(subject).to clojure_equal(clojure_set)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
context "with a (ruby) Dalton entity" do
|
87
|
+
subject { Dalton::Translation.from_ruby(dalton_entity) }
|
88
|
+
|
89
|
+
it 'returns the enclosed Datomic entity' do
|
90
|
+
expect(subject).to equal(datomic_entity)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
context "with a ruby Keyword starting with '?' (e.g. for use as a datalog variable)" do
|
95
|
+
subject { Dalton::Translation.from_ruby(ruby_keyword_datalog_variable) }
|
96
|
+
|
97
|
+
it 'returns the equivalent clojure symbol' do
|
98
|
+
expect(subject).to clojure_equal(clojure_symbol_datalog_variable)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
context "with a ruby Keyword starting with '$' (e.g. for use as a datalog source)" do
|
103
|
+
subject { Dalton::Translation.from_ruby(ruby_keyword_datalog_source) }
|
104
|
+
|
105
|
+
it 'returns the equivalent clojure symbol' do
|
106
|
+
expect(subject).to clojure_equal(clojure_symbol_datalog_source)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
context "with a ruby DateTime" do
|
111
|
+
subject {
|
112
|
+
Dalton::Translation.from_ruby(DateTime.parse("1998-07-05 07:00:00 -0000"))
|
113
|
+
}
|
114
|
+
|
115
|
+
let(:expected) {
|
116
|
+
format = Java::JavaText::SimpleDateFormat.new("yyyy-MM-dd HH:mm:ss Z")
|
117
|
+
format.parse("1998-07-05 07:00:00 -0000")
|
118
|
+
}
|
119
|
+
|
120
|
+
it 'returns the equivalent ruby DateTime' do
|
121
|
+
expect(subject).to eq(expected)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
java_import "clojure.lang.Keyword"
|
4
|
+
java_import "clojure.lang.PersistentVector"
|
5
|
+
java_import "clojure.lang.IPersistentMap"
|
6
|
+
|
7
|
+
describe Dalton::Utility do
|
8
|
+
include Dalton::Utility
|
9
|
+
|
10
|
+
describe '#read_edn' do
|
11
|
+
it 'reads EDN' do
|
12
|
+
read_data = read_edn('[1 2 3]')
|
13
|
+
expected_data = PersistentVector.create([1, 2, 3])
|
14
|
+
expect(read_data).to eq(expected_data)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'understands tempid literal tags (#db/id)' do
|
18
|
+
tempid = read_edn('#db/id[:db.part/db]')
|
19
|
+
expect(tempid).to be_a(IPersistentMap)
|
20
|
+
expect(tempid[Keyword.intern('part')]).to eq(Keyword.intern('db.part/db'))
|
21
|
+
expect(tempid[Keyword.intern('idx')]).to be_a(Numeric)
|
22
|
+
expect(tempid[Keyword.intern('idx')]).to be < 0
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'understands database function literal tags (#db/fn)' do
|
26
|
+
database_function = read_edn('#db/fn{:lang "clojure" :params [db foo] :code "(reverse foo)"}')
|
27
|
+
expect(database_function).to be_a(IPersistentMap)
|
28
|
+
# with complicated structure we probably don't need to test...
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "#tag" do
|
33
|
+
it "tag a symbol with metadata" do
|
34
|
+
expect(meta(tag(sym('foo'), sym('String'))).to_edn).to eq('{:tag String}')
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
require 'jbundler'
|
3
|
+
Bundler.require
|
4
|
+
|
5
|
+
require 'wrong/adapters/rspec'
|
6
|
+
|
7
|
+
def reload!
|
8
|
+
Object.send(:remove_const, :Dalton) if defined?(Dalton)
|
9
|
+
load './lib/dalton.rb'
|
10
|
+
|
11
|
+
Dir[File.join(File.dirname(__FILE__), 'support/**/*.rb')].each {|f| load(f)}
|
12
|
+
|
13
|
+
true
|
14
|
+
end
|
15
|
+
|
16
|
+
reload!
|
17
|
+
|
18
|
+
RSpec.configure do |config|
|
19
|
+
config.backtrace_exclusion_patterns = []
|
20
|
+
config.backtrace_inclusion_patterns = []
|
21
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'rspec/matchers'
|
2
|
+
|
3
|
+
module RSpec
|
4
|
+
module Matchers
|
5
|
+
module Dalton
|
6
|
+
class ClojureEqual < BuiltIn::BaseMatcher
|
7
|
+
def match(expected, actual)
|
8
|
+
::Dalton::Utility.clojure_equal?(actual, expected)
|
9
|
+
end
|
10
|
+
|
11
|
+
def failure_message_for_should
|
12
|
+
return <<-MESSAGE
|
13
|
+
|
14
|
+
expected #{inspect_object(expected)}
|
15
|
+
got #{inspect_object(actual)}
|
16
|
+
|
17
|
+
Compared using clojure_equal?, which compares using clojure.core/=
|
18
|
+
|
19
|
+
MESSAGE
|
20
|
+
end
|
21
|
+
|
22
|
+
def failure_message_for_should_not
|
23
|
+
return <<-MESSAGE
|
24
|
+
|
25
|
+
expected not #{inspect_object(actual)}
|
26
|
+
got #{inspect_object(expected)}
|
27
|
+
|
28
|
+
Compared using clojure_equal?, which compares using clojure.core/=
|
29
|
+
|
30
|
+
MESSAGE
|
31
|
+
end
|
32
|
+
|
33
|
+
def diffable?; true; end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def inspect_object(o)
|
38
|
+
"#<#{o.class}:#{o.object_id}> => #{o.to_edn}"
|
39
|
+
end
|
40
|
+
|
41
|
+
def eq_expression
|
42
|
+
Expectations::Syntax.positive_expression("actual", "clojure_equal?(expected)")
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def clojure_equal(expected)
|
48
|
+
Dalton::ClojureEqual.new(expected)
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module DatomicContext
|
2
|
+
def self.included(base)
|
3
|
+
base.module_eval do
|
4
|
+
let(:uri) { 'datomic:mem://spec' }
|
5
|
+
# let(:uri) { 'datomic:dev://localhost:4334/spec' }
|
6
|
+
let(:conn) { Dalton::Connection.new(uri) }
|
7
|
+
let(:db) { conn.refresh }
|
8
|
+
|
9
|
+
before do
|
10
|
+
conn.create
|
11
|
+
conn.connect
|
12
|
+
end
|
13
|
+
|
14
|
+
after do
|
15
|
+
conn.destroy
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
metadata
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dalton
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Brian Jenkins
|
8
|
+
- Joshua Bates
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2015-06-02 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: zweikopf
|
16
|
+
version_requirements: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - '='
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: 0.4.0
|
21
|
+
requirement: !ruby/object:Gem::Requirement
|
22
|
+
requirements:
|
23
|
+
- - '='
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: 0.4.0
|
26
|
+
prerelease: false
|
27
|
+
type: :runtime
|
28
|
+
description: Dalton attempts to give low level access to Datomic from JRuby
|
29
|
+
email:
|
30
|
+
- brian@brianjenkins.org
|
31
|
+
- joshua@goodguide.com
|
32
|
+
executables: []
|
33
|
+
extensions: []
|
34
|
+
extra_rdoc_files: []
|
35
|
+
files:
|
36
|
+
- .gitignore
|
37
|
+
- .jrubyrc
|
38
|
+
- .ruby-version
|
39
|
+
- Gemfile
|
40
|
+
- Jarfile
|
41
|
+
- README.md
|
42
|
+
- Rakefile
|
43
|
+
- dalton.gemspec
|
44
|
+
- epl-v10.html
|
45
|
+
- examples/posts_controller.rb
|
46
|
+
- lib/dalton.rb
|
47
|
+
- lib/dalton/attribute.rb
|
48
|
+
- lib/dalton/connection.rb
|
49
|
+
- lib/dalton/database.rb
|
50
|
+
- lib/dalton/datomization.rb
|
51
|
+
- lib/dalton/entity.rb
|
52
|
+
- lib/dalton/exception.rb
|
53
|
+
- lib/dalton/transaction_result.rb
|
54
|
+
- lib/dalton/translation.rb
|
55
|
+
- lib/dalton/undatomization.rb
|
56
|
+
- lib/dalton/utility.rb
|
57
|
+
- lib/dalton/version.rb
|
58
|
+
- spec/dalton/connection_spec.rb
|
59
|
+
- spec/dalton/database_spec.rb
|
60
|
+
- spec/dalton/datomization_spec.rb
|
61
|
+
- spec/dalton/entity_spec.rb
|
62
|
+
- spec/dalton/translation_spec.rb
|
63
|
+
- spec/dalton/utility_spec.rb
|
64
|
+
- spec/spec_helper.rb
|
65
|
+
- spec/support/clojure_equal_matcher.rb
|
66
|
+
- spec/support/datomic_context.rb
|
67
|
+
homepage: ''
|
68
|
+
licenses:
|
69
|
+
- EPL
|
70
|
+
metadata: {}
|
71
|
+
post_install_message:
|
72
|
+
rdoc_options: []
|
73
|
+
require_paths:
|
74
|
+
- lib
|
75
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - '>='
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
80
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - '>='
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
85
|
+
requirements: []
|
86
|
+
rubyforge_project:
|
87
|
+
rubygems_version: 2.1.9
|
88
|
+
signing_key:
|
89
|
+
specification_version: 4
|
90
|
+
summary: A thin Datomic driver for JRuby
|
91
|
+
test_files:
|
92
|
+
- spec/dalton/connection_spec.rb
|
93
|
+
- spec/dalton/database_spec.rb
|
94
|
+
- spec/dalton/datomization_spec.rb
|
95
|
+
- spec/dalton/entity_spec.rb
|
96
|
+
- spec/dalton/translation_spec.rb
|
97
|
+
- spec/dalton/utility_spec.rb
|
98
|
+
- spec/spec_helper.rb
|
99
|
+
- spec/support/clojure_equal_matcher.rb
|
100
|
+
- spec/support/datomic_context.rb
|
101
|
+
has_rdoc:
|