hanswurst 0.2.0 → 0.3.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.
- data/README.md +30 -0
- data/VERSION +1 -1
- data/lib/hanswurst.rb +37 -1
- data/test/test_hanswurst.rb +34 -5
- metadata +23 -23
data/README.md
CHANGED
@@ -51,6 +51,7 @@ later...
|
|
51
51
|
|
52
52
|
you may also declare that roles are depending on other roles
|
53
53
|
when you add that role, the others are also automatically added
|
54
|
+
|
54
55
|
class Address
|
55
56
|
include CouchPotato::Persistence
|
56
57
|
|
@@ -70,11 +71,40 @@ when you add that role, the others are also automatically added
|
|
70
71
|
property :first_name
|
71
72
|
end
|
72
73
|
|
74
|
+
hw = Hanswurst.new
|
75
|
+
hw.add_role 'employee', Person
|
76
|
+
hw.employee___last_name = 'Hessling'
|
77
|
+
hw.employee__address_privat___city = 'Berlin'
|
78
|
+
hw.employee__address_work___city = 'Potsdam'
|
79
|
+
|
80
|
+
or as shared dependancy without prefix
|
81
|
+
|
82
|
+
class Address
|
83
|
+
include CouchPotato::Persistence
|
84
|
+
|
85
|
+
property :street
|
86
|
+
property :zip
|
87
|
+
property :city
|
88
|
+
end
|
89
|
+
|
90
|
+
class Person
|
91
|
+
include CouchPotato::Persistence
|
92
|
+
include Hanswurst::Shares
|
93
|
+
|
94
|
+
shares 'address_privat', Address
|
95
|
+
shares 'address_work', Address
|
96
|
+
|
97
|
+
property :last_name
|
98
|
+
property :first_name
|
99
|
+
end
|
100
|
+
|
73
101
|
hw = Hanswurst.new
|
74
102
|
hw.add_role 'employee', Person
|
75
103
|
hw.employee___last_name = 'Hessling'
|
76
104
|
hw.address_privat___city = 'Berlin'
|
77
105
|
hw.address_work___city = 'Potsdam'
|
106
|
+
|
107
|
+
|
78
108
|
|
79
109
|
All views are attached to the hanswurst design document
|
80
110
|
You may create general views:
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/lib/hanswurst.rb
CHANGED
@@ -18,6 +18,21 @@ class Hanswurst
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
+
module Shares
|
22
|
+
def self.included(mod)
|
23
|
+
mod.instance_eval do
|
24
|
+
def shares(aliasname, role)
|
25
|
+
@shared_dependancies ||= {}
|
26
|
+
@shared_dependancies[aliasname] = role
|
27
|
+
end
|
28
|
+
|
29
|
+
def shared_dependancies
|
30
|
+
@shared_dependancies || {}
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
21
36
|
# error raised when a role is not valid
|
22
37
|
class RoleNotValid < Exception
|
23
38
|
def initialize(role, value)
|
@@ -110,13 +125,34 @@ class Hanswurst
|
|
110
125
|
add_roles(role => klass)
|
111
126
|
end
|
112
127
|
|
128
|
+
def handle_dependancies(role, klass)
|
129
|
+
if klass.respond_to?(:dependancies)
|
130
|
+
deps = {}
|
131
|
+
klass.dependancies.each do |dep_role, dep_class|
|
132
|
+
deps["#{role}__#{dep_role}"] = dep_class
|
133
|
+
end
|
134
|
+
add_roles deps
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def handle_shared(role, klass)
|
139
|
+
if klass.respond_to?(:shared_dependancies)
|
140
|
+
shared = {}
|
141
|
+
klass.shared_dependancies.each do |shared_role, shared_class|
|
142
|
+
shared[shared_role] = shared_class unless role_exists? shared_role
|
143
|
+
end
|
144
|
+
add_roles shared
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
113
148
|
# add more roles at once
|
114
149
|
def add_roles(hsh)
|
115
150
|
self.data ||= {}
|
116
151
|
self.roles ||= {}
|
117
152
|
hsh.each do |role,klass|
|
118
153
|
raise "class expected: #{klass.inspect}" unless klass.is_a? Class
|
119
|
-
|
154
|
+
handle_dependancies(role, klass)
|
155
|
+
handle_shared(role, klass)
|
120
156
|
self.roles.update role.to_s => klass.name
|
121
157
|
end
|
122
158
|
self.roles
|
data/test/test_hanswurst.rb
CHANGED
@@ -36,6 +36,15 @@ class D
|
|
36
36
|
|
37
37
|
end
|
38
38
|
|
39
|
+
class E
|
40
|
+
include CouchPotato::Persistence
|
41
|
+
include Hanswurst::Shares
|
42
|
+
|
43
|
+
shares 'person', Pers
|
44
|
+
|
45
|
+
property :e
|
46
|
+
end
|
47
|
+
|
39
48
|
Hanswurst.list_for :pers, :complete_name, %q|
|
40
49
|
function(head, req) {
|
41
50
|
var row;
|
@@ -175,14 +184,34 @@ class TestCouch < Test::Unit::TestCase
|
|
175
184
|
o = Hanswurst.new
|
176
185
|
o.add_role 'do', D
|
177
186
|
o.do___d = "4AD"
|
178
|
-
o.
|
187
|
+
o.do__person___firstname = "Dagobert"
|
188
|
+
o.do__person___lastname = "Duck"
|
189
|
+
o.do__prod___name = "Comic Hero"
|
190
|
+
save o
|
191
|
+
o = load(o._id)
|
192
|
+
|
193
|
+
q = Hanswurst.new
|
194
|
+
q.add_role 'done', D
|
195
|
+
q.done = D.new( :d => '5AD')
|
196
|
+
q.done__person___firstname = "Dagobert"
|
197
|
+
q.done__person___lastname = "Duck"
|
198
|
+
q.done__prod___name = "Comic Hero"
|
199
|
+
save q
|
200
|
+
q = load(q._id)
|
201
|
+
assert_equal "5AD", q.done___d
|
202
|
+
assert_equal "Dagobert", q.done__person___firstname
|
203
|
+
assert_equal "Comic Hero", q.done__prod___name
|
204
|
+
end
|
205
|
+
|
206
|
+
should "create shared dependancies based on definitions" do
|
207
|
+
o = Hanswurst.new
|
208
|
+
o.add_role 'do', E
|
209
|
+
o.do___e = "4AD"
|
179
210
|
o.person___lastname = "Duck"
|
180
|
-
o.prod___name = "Comic Hero"
|
181
211
|
save o
|
182
212
|
o = load(o._id)
|
183
|
-
assert_equal "4AD", o.
|
184
|
-
assert_equal "
|
185
|
-
assert_equal "Comic Hero", o.prod___name
|
213
|
+
assert_equal "4AD", o.do___e
|
214
|
+
assert_equal "Duck", o.person___lastname
|
186
215
|
end
|
187
216
|
end
|
188
217
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hanswurst
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-01-
|
12
|
+
date: 2012-01-07 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: couch_potato
|
16
|
-
requirement: &
|
16
|
+
requirement: &27848040 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *27848040
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: yard
|
27
|
-
requirement: &
|
27
|
+
requirement: &27847420 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 0.6.0
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *27847420
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: bundler
|
38
|
-
requirement: &
|
38
|
+
requirement: &27842680 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 1.0.0
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *27842680
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: jeweler
|
49
|
-
requirement: &
|
49
|
+
requirement: &27842200 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.5.2
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *27842200
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rcov
|
60
|
-
requirement: &
|
60
|
+
requirement: &27841700 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *27841700
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: mocha
|
71
|
-
requirement: &
|
71
|
+
requirement: &27841200 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *27841200
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: shoulda
|
82
|
-
requirement: &
|
82
|
+
requirement: &27840680 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *27840680
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: linecache19
|
93
|
-
requirement: &
|
93
|
+
requirement: &27840180 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *27840180
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: ruby-debug19
|
104
|
-
requirement: &
|
104
|
+
requirement: &27839620 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: '0'
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *27839620
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: couch_potato
|
115
|
-
requirement: &
|
115
|
+
requirement: &27839100 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ! '>='
|
@@ -120,7 +120,7 @@ dependencies:
|
|
120
120
|
version: '0'
|
121
121
|
type: :runtime
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *27839100
|
124
124
|
description: flexible enhancement of couch potato
|
125
125
|
email: ! 'Base64.decode64(''bGludXhAbWFyY3JlbmVhcm5zLmRl
|
126
126
|
|
@@ -155,7 +155,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
155
155
|
version: '0'
|
156
156
|
segments:
|
157
157
|
- 0
|
158
|
-
hash:
|
158
|
+
hash: 3450462200731043631
|
159
159
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
160
160
|
none: false
|
161
161
|
requirements:
|