kalimba 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +1 -1
- data/lib/kalimba/reflection.rb +2 -2
- data/lib/kalimba/resource.rb +41 -16
- data/lib/kalimba/version.rb +1 -1
- data/spec/lib/kalimba/persistence_spec.rb +22 -1
- data/spec/lib/kalimba/reflection_spec.rb +34 -0
- data/spec/lib/kalimba/resource_spec.rb +4 -0
- metadata +7 -8
- data/.gitignore +0 -22
- data/Gemfile +0 -6
- data/kalimba-redlander.gemspec +0 -19
- data/kalimba.gemspec +0 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7fd069de6d00e1c65056fff0475c77f7fdaee85d
|
4
|
+
data.tar.gz: af303d1b91dec1a12f2d98eb34d5fbd725092460
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 83c57ef31bf5328e4db51c63cfe1536c7c8610603f7b50ebb85be9319f33e6c4d8ed9646a723db97b4020d608770b6440a93d275c07a77cb3897c2146b1435cf
|
7
|
+
data.tar.gz: 386202bcead3ac436ca01dd2a25914a507cb99dcdc6932af5772f0e9e96efe2cfacbe43c49b03f2a9cb6f7167f2dac3c3d5f9bbbb70eaae23306d159c34f7816
|
data/LICENSE
CHANGED
data/lib/kalimba/reflection.rb
CHANGED
@@ -9,8 +9,8 @@ module Kalimba
|
|
9
9
|
@reflections ||= {}
|
10
10
|
end
|
11
11
|
|
12
|
-
def create_reflection(name,
|
13
|
-
reflections[name] = AssociationReflection.new(name, {class_name:
|
12
|
+
def create_reflection(name, klass)
|
13
|
+
reflections[name] = AssociationReflection.new(name, {class_name: klass})
|
14
14
|
end
|
15
15
|
|
16
16
|
def reflect_on_association(association)
|
data/lib/kalimba/resource.rb
CHANGED
@@ -96,24 +96,18 @@ module Kalimba
|
|
96
96
|
name = name.to_s
|
97
97
|
|
98
98
|
params[:predicate] = URI(params[:predicate])
|
99
|
-
|
100
|
-
if
|
101
|
-
params[:datatype] =
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
def #{name}_id=(value)
|
108
|
-
self.#{name} = value.blank? ? nil : #{association}.for(value)
|
109
|
-
end
|
110
|
-
HERE
|
99
|
+
association_class = Kalimba::Resource.from_datatype(params[:datatype])
|
100
|
+
if association_class
|
101
|
+
params[:datatype] = association_class
|
102
|
+
if params[:collection]
|
103
|
+
define_collection(name, association_class)
|
104
|
+
else
|
105
|
+
define_resource(name, association_class)
|
106
|
+
end
|
111
107
|
else
|
112
108
|
params[:datatype] = URI(params[:datatype])
|
113
109
|
end
|
114
110
|
|
115
|
-
define_collection(name, params) if params[:collection]
|
116
|
-
|
117
111
|
self.properties[name] = params
|
118
112
|
|
119
113
|
define_attribute_method name if self.is_a?(Class)
|
@@ -152,6 +146,9 @@ module Kalimba
|
|
152
146
|
# @example
|
153
147
|
# has_many :duties, :predicate => "http://works.com#duty", :datatype => NS::XMLSchema["string"]
|
154
148
|
#
|
149
|
+
# Note however, that if given datatype does not refer to a Kalimba::Resource class,
|
150
|
+
# no reflections and `_ids` and `_ids=` accessors will be created in that case.
|
151
|
+
#
|
155
152
|
# @param (see #property)
|
156
153
|
def has_many(name, params = {})
|
157
154
|
property name, params.merge(:collection => true)
|
@@ -162,6 +159,8 @@ module Kalimba
|
|
162
159
|
# @param [String, URI, Symbol] uri
|
163
160
|
# @return [Kalimba::Resource]
|
164
161
|
def from_datatype(datatype)
|
162
|
+
return datatype if datatype.is_a?(Class) && datatype.ancestors.include?(Kalimba::Resource)
|
163
|
+
|
165
164
|
datatype =
|
166
165
|
case datatype
|
167
166
|
when URI
|
@@ -192,8 +191,21 @@ module Kalimba
|
|
192
191
|
child.properties = properties.dup
|
193
192
|
end
|
194
193
|
|
195
|
-
def
|
196
|
-
|
194
|
+
def define_resource(name, klass)
|
195
|
+
class_eval <<-HERE, __FILE__, __LINE__
|
196
|
+
def #{name}_id
|
197
|
+
self.#{name}.try(:id)
|
198
|
+
end
|
199
|
+
|
200
|
+
def #{name}_id=(value)
|
201
|
+
self.#{name} = value.blank? ? nil : #{klass}.for(value)
|
202
|
+
end
|
203
|
+
HERE
|
204
|
+
end
|
205
|
+
|
206
|
+
def define_collection(name, klass)
|
207
|
+
# Rails reflections require symbolized names
|
208
|
+
create_reflection(name.to_sym, klass)
|
197
209
|
|
198
210
|
class_eval <<-HERE, __FILE__, __LINE__
|
199
211
|
def #{name.singularize}_ids
|
@@ -258,6 +270,19 @@ module Kalimba
|
|
258
270
|
subject
|
259
271
|
end
|
260
272
|
|
273
|
+
# Resource equality
|
274
|
+
#
|
275
|
+
# Two Kalimba resources are equal if their subjects are equal.
|
276
|
+
# We do not tell between persisted or not persisted RDF resources.
|
277
|
+
# However, "new" resources (those without a subject) are never equal.
|
278
|
+
#
|
279
|
+
# @param [Kalimba::Resource] other other Kalimba::Resource
|
280
|
+
# @return [Boolean]
|
281
|
+
def eql?(other)
|
282
|
+
other.is_a?(Kalimba::Resource) && !subject.nil? && other.subject == subject
|
283
|
+
end
|
284
|
+
alias == eql?
|
285
|
+
|
261
286
|
private
|
262
287
|
|
263
288
|
include Kalimba::Callbacks
|
data/lib/kalimba/version.rb
CHANGED
@@ -260,7 +260,7 @@ describe Kalimba::Persistence do
|
|
260
260
|
end
|
261
261
|
end
|
262
262
|
|
263
|
-
context "to collections" do
|
263
|
+
context "to collections of non-Kalimba resources" do
|
264
264
|
before { person.duties = %w(building designing) }
|
265
265
|
|
266
266
|
context "when saved" do
|
@@ -269,6 +269,27 @@ describe Kalimba::Persistence do
|
|
269
269
|
it "should be added statements with changed attributes (type + duties*2)" do
|
270
270
|
expect(Kalimba.repository.size).to eql 3
|
271
271
|
end
|
272
|
+
|
273
|
+
it "should include the collection" do
|
274
|
+
person.reload
|
275
|
+
expect(person.duties).to eql %w(building designing)
|
276
|
+
end
|
277
|
+
end
|
278
|
+
end
|
279
|
+
|
280
|
+
context "to collections of Kalimba resources" do
|
281
|
+
before do
|
282
|
+
@berk = Engineer.for("Berk")
|
283
|
+
person.coworkers = [@berk]
|
284
|
+
end
|
285
|
+
|
286
|
+
context "when saved" do
|
287
|
+
before { person.save }
|
288
|
+
|
289
|
+
it "should retain the list of coworkers" do
|
290
|
+
person.reload
|
291
|
+
expect(person.coworkers).to eql [@berk]
|
292
|
+
end
|
272
293
|
end
|
273
294
|
end
|
274
295
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "reflection" do
|
4
|
+
before :all do
|
5
|
+
class ReflectionTestOilRig < Kalimba::Resource
|
6
|
+
type "http://schema.org/ReflectionTestOilRig"
|
7
|
+
base_uri "http://example.org/reflection_oil_rigs"
|
8
|
+
|
9
|
+
has_many :neighbours, :predicate => "http://example.org/reflection_oil_rigs", :datatype => :ReflectionTestOilRig
|
10
|
+
has_many :saboteurs, :predicate => "http://example.org/reflection_saboteur", :datatype => "http://schema.org/ReflectionTestSaboteur"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
subject { ReflectionTestOilRig.reflections }
|
15
|
+
|
16
|
+
context "for a non-Kalimba resource" do
|
17
|
+
it { should_not have_key :saboteurs }
|
18
|
+
end
|
19
|
+
|
20
|
+
context "for a Kalimba::Resource association" do
|
21
|
+
it { should have_key :neighbours }
|
22
|
+
|
23
|
+
context ":neighbours" do
|
24
|
+
subject { ReflectionTestOilRig.reflect_on_association(:neighbours) }
|
25
|
+
|
26
|
+
it "should have proper accessors" do
|
27
|
+
expect(subject.macro).to eql :has_many
|
28
|
+
expect(subject.name).to eql :neighbours
|
29
|
+
expect(subject.klass).to eql ReflectionTestOilRig
|
30
|
+
expect(subject.class_name).to eql "ReflectionTestOilRig"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -39,6 +39,8 @@ describe Kalimba::Resource do
|
|
39
39
|
|
40
40
|
it { should respond_to :attributes }
|
41
41
|
|
42
|
+
it { should_not eql ResourceTestPerson.new }
|
43
|
+
|
42
44
|
context "created via 'for'" do
|
43
45
|
subject { ResourceTestPerson.for "charlie" }
|
44
46
|
|
@@ -47,6 +49,8 @@ describe Kalimba::Resource do
|
|
47
49
|
it "should set subject to the given URI" do
|
48
50
|
expect(subject.subject).to eql URI("http://example.org/people/#charlie")
|
49
51
|
end
|
52
|
+
|
53
|
+
it { should eql ResourceTestPerson.for("charlie") }
|
50
54
|
end
|
51
55
|
|
52
56
|
describe "serialization" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kalimba
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Slava Kravchenko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-05-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -74,13 +74,9 @@ executables: []
|
|
74
74
|
extensions: []
|
75
75
|
extra_rdoc_files: []
|
76
76
|
files:
|
77
|
-
- .gitignore
|
78
|
-
- Gemfile
|
79
77
|
- LICENSE
|
80
78
|
- README.md
|
81
79
|
- Rakefile
|
82
|
-
- kalimba-redlander.gemspec
|
83
|
-
- kalimba.gemspec
|
84
80
|
- lib/kalimba.rb
|
85
81
|
- lib/kalimba/attribute_assignment.rb
|
86
82
|
- lib/kalimba/callbacks.rb
|
@@ -96,12 +92,14 @@ files:
|
|
96
92
|
- spec/lib/kalimba/attributes_spec.rb
|
97
93
|
- spec/lib/kalimba/callbacks_spec.rb
|
98
94
|
- spec/lib/kalimba/persistence_spec.rb
|
95
|
+
- spec/lib/kalimba/reflection_spec.rb
|
99
96
|
- spec/lib/kalimba/resource_spec.rb
|
100
97
|
- spec/lib/kalimba/validations_spec.rb
|
101
98
|
- spec/spec_helper.rb
|
102
99
|
- spec/support/resource_ext.rb
|
103
100
|
homepage: https://github.com/cordawyn/kalimba
|
104
|
-
licenses:
|
101
|
+
licenses:
|
102
|
+
- The MIT License (MIT)
|
105
103
|
metadata: {}
|
106
104
|
post_install_message:
|
107
105
|
rdoc_options: []
|
@@ -119,7 +117,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
119
117
|
version: '0'
|
120
118
|
requirements: []
|
121
119
|
rubyforge_project:
|
122
|
-
rubygems_version: 2.0.
|
120
|
+
rubygems_version: 2.0.3
|
123
121
|
signing_key:
|
124
122
|
specification_version: 4
|
125
123
|
summary: Kalimba provides ActiveRecord-like capabilities for RDF resources.
|
@@ -127,6 +125,7 @@ test_files:
|
|
127
125
|
- spec/lib/kalimba/attributes_spec.rb
|
128
126
|
- spec/lib/kalimba/callbacks_spec.rb
|
129
127
|
- spec/lib/kalimba/persistence_spec.rb
|
128
|
+
- spec/lib/kalimba/reflection_spec.rb
|
130
129
|
- spec/lib/kalimba/resource_spec.rb
|
131
130
|
- spec/lib/kalimba/validations_spec.rb
|
132
131
|
- spec/spec_helper.rb
|
data/.gitignore
DELETED
data/Gemfile
DELETED
data/kalimba-redlander.gemspec
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
require File.expand_path('../lib/kalimba/version', __FILE__)
|
2
|
-
|
3
|
-
Gem::Specification.new do |gem|
|
4
|
-
gem.name = "kalimba-redlander"
|
5
|
-
gem.version = Kalimba::VERSION
|
6
|
-
gem.authors = ["Slava Kravchenko"]
|
7
|
-
gem.email = ["slava.kravchenko@gmail.com"]
|
8
|
-
gem.description = %q{Redlander adapter for Kalimba. It provides the RDF storage backend for Kalimba.}
|
9
|
-
gem.summary = %q{Redlander adapter for Kalimba}
|
10
|
-
gem.homepage = "https://github.com/cordawyn/kalimba-redlander"
|
11
|
-
|
12
|
-
gem.files = ["lib/kalimba/persistence/redlander.rb"]
|
13
|
-
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
14
|
-
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
15
|
-
gem.require_paths = ["lib"]
|
16
|
-
|
17
|
-
gem.add_runtime_dependency "kalimba"
|
18
|
-
gem.add_runtime_dependency "redlander", "~> 0.6.0"
|
19
|
-
end
|
data/kalimba.gemspec
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
require File.expand_path('../lib/kalimba/version', __FILE__)
|
2
|
-
|
3
|
-
Gem::Specification.new do |gem|
|
4
|
-
gem.authors = ["Slava Kravchenko"]
|
5
|
-
gem.email = ["slava.kravchenko@gmail.com"]
|
6
|
-
gem.description = %q{ActiveModel-based framework, which allows the developer to combine RDF resources into ActiveRecord-like models.}
|
7
|
-
gem.summary = %q{Kalimba provides ActiveRecord-like capabilities for RDF resources.}
|
8
|
-
gem.homepage = "https://github.com/cordawyn/kalimba"
|
9
|
-
|
10
|
-
gem.files = `git ls-files`.split($\) - ["lib/kalimba/persistence/redlander.rb"]
|
11
|
-
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
12
|
-
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
13
|
-
gem.name = "kalimba"
|
14
|
-
gem.require_paths = ["lib"]
|
15
|
-
gem.version = Kalimba::VERSION
|
16
|
-
|
17
|
-
gem.add_runtime_dependency "activemodel", "~> 3.2"
|
18
|
-
gem.add_runtime_dependency "activesupport", "~> 3.2"
|
19
|
-
|
20
|
-
gem.add_development_dependency "rspec", "~> 2.11.0"
|
21
|
-
gem.add_development_dependency "kalimba-redlander"
|
22
|
-
end
|