kalimba 0.0.1 → 0.0.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.
- 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
|