jason-orm 0.1
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/.gitignore +3 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +41 -0
- data/Readme.md +130 -0
- data/jason.gemspec +28 -0
- data/lib/jason/core_ext/string.rb +7 -0
- data/lib/jason/crypt/document_id.rb +15 -0
- data/lib/jason/encoding/deletable.rb +30 -0
- data/lib/jason/encoding/persistable.rb +102 -0
- data/lib/jason/encoding/persistence_handler.rb +33 -0
- data/lib/jason/encoding/persistence_object.rb +26 -0
- data/lib/jason/encoding/restorable.rb +83 -0
- data/lib/jason/errors.rb +13 -0
- data/lib/jason/operations/file.rb +41 -0
- data/lib/jason/persistence.rb +191 -0
- data/lib/jason/reflection/base.rb +19 -0
- data/lib/jason/relation.rb +127 -0
- data/lib/jason.rb +71 -0
- data/lib/version.rb +3 -0
- data/spec/core_ext/string_spec.rb +22 -0
- data/spec/persistence/persistence_spec.rb +259 -0
- data/spec/relation/relation_spec.rb +105 -0
- data/spec/spec_helper.rb +28 -0
- metadata +127 -0
@@ -0,0 +1,105 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Jason::Relation" do
|
4
|
+
|
5
|
+
#class Person
|
6
|
+
class Person
|
7
|
+
include Jason::Persistence
|
8
|
+
include Jason::Relation
|
9
|
+
|
10
|
+
attribute :firstname, String
|
11
|
+
attribute :lastname, String
|
12
|
+
attribute :age, Integer
|
13
|
+
|
14
|
+
has_many :children
|
15
|
+
belongs_to :wife
|
16
|
+
end
|
17
|
+
|
18
|
+
context "class methods" do
|
19
|
+
|
20
|
+
subject{Person}
|
21
|
+
|
22
|
+
it{should respond_to :has_many}
|
23
|
+
it{should respond_to :belongs_to}
|
24
|
+
it{should respond_to :reflect_on_relation}
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
context "persisting relations" do
|
29
|
+
|
30
|
+
let(:person){Person.new(:firstname => "Bob",:age => 23)}
|
31
|
+
|
32
|
+
context "belongs_to" do
|
33
|
+
|
34
|
+
before do
|
35
|
+
Wife = Class.new do
|
36
|
+
include Jason::Persistence
|
37
|
+
|
38
|
+
attribute :name, String
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
let(:wife){Wife.new(:name => "Hanne")}
|
44
|
+
|
45
|
+
it "automatically persist" do
|
46
|
+
|
47
|
+
person.wife = wife
|
48
|
+
person.save
|
49
|
+
|
50
|
+
expect{Wife.find(wife.id)}.to_not raise_error Jason::Errors::DocumentNotFoundError
|
51
|
+
expected_wife = Wife.find(wife.id)
|
52
|
+
|
53
|
+
expected_wife.id.should eq wife.id
|
54
|
+
expected_wife.name.should eq wife.name
|
55
|
+
|
56
|
+
pperson = Person.find(person.id)
|
57
|
+
|
58
|
+
pperson.wife.id.should eq expected_wife.id
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
context "has_many" do
|
64
|
+
|
65
|
+
before(:all) do
|
66
|
+
Child = Class.new do
|
67
|
+
include Jason::Persistence
|
68
|
+
|
69
|
+
attribute :name, String
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
let(:children) do
|
74
|
+
c = []
|
75
|
+
["Claudia", "Peter", "Max"].each do |name|
|
76
|
+
c << Child.new(:name => name)
|
77
|
+
end
|
78
|
+
c
|
79
|
+
end
|
80
|
+
|
81
|
+
it "respond to children" do
|
82
|
+
person.should respond_to(:children)
|
83
|
+
end
|
84
|
+
|
85
|
+
it "respond to children=" do
|
86
|
+
person.should respond_to(:children=)
|
87
|
+
end
|
88
|
+
|
89
|
+
it "automatically persists" do
|
90
|
+
person.children = children
|
91
|
+
person.save
|
92
|
+
|
93
|
+
aperson = Person.find(person.id)
|
94
|
+
aperson.children.each do |child|
|
95
|
+
children.map(&:id).should include child.id
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
|
101
|
+
|
102
|
+
end
|
103
|
+
|
104
|
+
|
105
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
require 'rspec'
|
4
|
+
|
5
|
+
require 'jason'
|
6
|
+
require 'chronic'
|
7
|
+
|
8
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
9
|
+
|
10
|
+
def fixtures_path
|
11
|
+
File.expand_path(File.join(File.dirname(__FILE__), 'fixtures'))
|
12
|
+
end
|
13
|
+
|
14
|
+
class JasonSpecObject
|
15
|
+
include Jason::Persistence
|
16
|
+
end
|
17
|
+
|
18
|
+
RSpec.configure do |config|
|
19
|
+
|
20
|
+
config.before(:all) do
|
21
|
+
Jason.setup do |config|
|
22
|
+
|
23
|
+
config.persistence_path = fixtures_path
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
metadata
ADDED
@@ -0,0 +1,127 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jason-orm
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Daniel Schmidt
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-08-19 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: activesupport
|
16
|
+
requirement: &70203141202620 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70203141202620
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rake
|
27
|
+
requirement: &70203141202180 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70203141202180
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rspec
|
38
|
+
requirement: &70203141201720 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70203141201720
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: fuubar
|
49
|
+
requirement: &70203141201300 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70203141201300
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: chronic
|
60
|
+
requirement: &70203141200880 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70203141200880
|
69
|
+
description: A persistence framework based on json files.
|
70
|
+
email:
|
71
|
+
- dsci@code79.net
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- .gitignore
|
77
|
+
- Gemfile
|
78
|
+
- Gemfile.lock
|
79
|
+
- Readme.md
|
80
|
+
- jason.gemspec
|
81
|
+
- lib/jason.rb
|
82
|
+
- lib/jason/core_ext/string.rb
|
83
|
+
- lib/jason/crypt/document_id.rb
|
84
|
+
- lib/jason/encoding/deletable.rb
|
85
|
+
- lib/jason/encoding/persistable.rb
|
86
|
+
- lib/jason/encoding/persistence_handler.rb
|
87
|
+
- lib/jason/encoding/persistence_object.rb
|
88
|
+
- lib/jason/encoding/restorable.rb
|
89
|
+
- lib/jason/errors.rb
|
90
|
+
- lib/jason/operations/file.rb
|
91
|
+
- lib/jason/persistence.rb
|
92
|
+
- lib/jason/reflection/base.rb
|
93
|
+
- lib/jason/relation.rb
|
94
|
+
- lib/version.rb
|
95
|
+
- spec/core_ext/string_spec.rb
|
96
|
+
- spec/persistence/persistence_spec.rb
|
97
|
+
- spec/relation/relation_spec.rb
|
98
|
+
- spec/spec_helper.rb
|
99
|
+
homepage: ''
|
100
|
+
licenses: []
|
101
|
+
post_install_message:
|
102
|
+
rdoc_options: []
|
103
|
+
require_paths:
|
104
|
+
- lib
|
105
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
112
|
+
none: false
|
113
|
+
requirements:
|
114
|
+
- - ! '>='
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
117
|
+
requirements: []
|
118
|
+
rubyforge_project:
|
119
|
+
rubygems_version: 1.8.17
|
120
|
+
signing_key:
|
121
|
+
specification_version: 3
|
122
|
+
summary: JSON persistence framework
|
123
|
+
test_files:
|
124
|
+
- spec/core_ext/string_spec.rb
|
125
|
+
- spec/persistence/persistence_spec.rb
|
126
|
+
- spec/relation/relation_spec.rb
|
127
|
+
- spec/spec_helper.rb
|