hanswurst 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data/README.md +30 -0
  2. data/VERSION +1 -1
  3. data/lib/hanswurst.rb +37 -1
  4. data/test/test_hanswurst.rb +34 -5
  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.2.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
- add_roles klass.dependancies if klass.respond_to?(:dependancies)
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
@@ -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.person___firstname = "Dagobert"
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.do___d
184
- assert_equal "Dagobert", o.person___firstname
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.2.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-06 00:00:00.000000000Z
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: &27901180 !ruby/object:Gem::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: *27901180
24
+ version_requirements: *27848040
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: yard
27
- requirement: &27900580 !ruby/object:Gem::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: *27900580
35
+ version_requirements: *27847420
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: bundler
38
- requirement: &27899980 !ruby/object:Gem::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: *27899980
46
+ version_requirements: *27842680
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: jeweler
49
- requirement: &27890820 !ruby/object:Gem::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: *27890820
57
+ version_requirements: *27842200
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rcov
60
- requirement: &27890320 !ruby/object:Gem::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: *27890320
68
+ version_requirements: *27841700
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: mocha
71
- requirement: &27889780 !ruby/object:Gem::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: *27889780
79
+ version_requirements: *27841200
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: shoulda
82
- requirement: &27889300 !ruby/object:Gem::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: *27889300
90
+ version_requirements: *27840680
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: linecache19
93
- requirement: &27888760 !ruby/object:Gem::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: *27888760
101
+ version_requirements: *27840180
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: ruby-debug19
104
- requirement: &27888240 !ruby/object:Gem::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: *27888240
112
+ version_requirements: *27839620
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: couch_potato
115
- requirement: &27887700 !ruby/object:Gem::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: *27887700
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: -1466396056601351153
158
+ hash: 3450462200731043631
159
159
  required_rubygems_version: !ruby/object:Gem::Requirement
160
160
  none: false
161
161
  requirements: