hanswurst 0.3.0 → 0.4.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.
Files changed (5) hide show
  1. data/README.md +13 -1
  2. data/VERSION +1 -1
  3. data/lib/hanswurst.rb +31 -31
  4. data/test/test_hanswurst.rb +35 -15
  5. metadata +23 -23
data/README.md CHANGED
@@ -5,7 +5,19 @@ Hanswurst is a library that uses couch potato to create arbitrary
5
5
  objects that may have different roles. The roles determine the
6
6
  properties and they can be mixed and matched at will.
7
7
 
8
- Hanswurst is only tested with ruby 1.9.2 and above.
8
+
9
+ Installation
10
+ ------------
11
+ _hanswurst_ is only tested with ruby 1.9.2 and above.
12
+
13
+ Install it as a gem:
14
+
15
+ sudo gem install hanswurst
16
+
17
+ or in rvm:
18
+
19
+ gem install hanswurst
20
+
9
21
 
10
22
  Example:
11
23
  --------
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.4.0
data/lib/hanswurst.rb CHANGED
@@ -44,7 +44,7 @@ class Hanswurst
44
44
  errors = @value.errors.messages.collect do |field, err|
45
45
  "#{field} #{err.join('/')}"
46
46
  end.join(" # ")
47
- "role not valid #{@role}: #{errors}"
47
+ "#{@role} not valid: #{errors}"
48
48
  end
49
49
  end
50
50
 
@@ -61,7 +61,7 @@ class Hanswurst
61
61
  # I keep this commented out to inform the reader that we don't want this in order to easily reuse general lists
62
62
  #options[:list] &&= :"#{role_alias}_#{options[:list]}"
63
63
  options[:conditions] &&= " && ( #{options[:conditions]} )"
64
- options[:conditions] = "(doc.roles.#{role_alias} !== undefined)#{options[:conditions]}"
64
+ options[:conditions] = "(doc.hanswurst_roles.#{role_alias} !== undefined)#{options[:conditions]}"
65
65
  self.view :"#{role_alias}_#{viewname}", options
66
66
  end
67
67
 
@@ -106,12 +106,12 @@ class Hanswurst
106
106
  end
107
107
  end
108
108
 
109
- property :roles
110
- property :data
109
+ property :hanswurst_roles
110
+ property :hanswurst_data
111
111
 
112
112
  # check if every role is valid before saving
113
113
  before_save do
114
- self.data.each do |role,val|
114
+ self.hanswurst_data.each do |role,val|
115
115
  unless val.valid?
116
116
  raise RoleNotValid.new(role, val)
117
117
  end
@@ -145,33 +145,33 @@ class Hanswurst
145
145
  end
146
146
  end
147
147
 
148
- # add more roles at once
148
+ # add more hanswurst_roles at once
149
149
  def add_roles(hsh)
150
- self.data ||= {}
151
- self.roles ||= {}
150
+ self.hanswurst_data ||= {}
151
+ self.hanswurst_roles ||= {}
152
152
  hsh.each do |role,klass|
153
153
  raise "class expected: #{klass.inspect}" unless klass.is_a? Class
154
154
  handle_dependancies(role, klass)
155
155
  handle_shared(role, klass)
156
- self.roles.update role.to_s => klass.name
156
+ self.hanswurst_roles.update role.to_s => klass.name
157
157
  end
158
- self.roles
158
+ self.hanswurst_roles
159
159
  end
160
160
 
161
161
  # does he have a role
162
162
  def role_exists?(role)
163
- self.roles and self.roles[role.to_s]
163
+ self.hanswurst_roles and self.hanswurst_roles[role.to_s]
164
164
  end
165
165
 
166
- # does he have data for the role
167
- def data_exists?(role)
168
- self.data and self.data[role.to_s]
166
+ # does he have hanswurst_data for the role
167
+ def hanswurst_data_exists?(role)
168
+ self.hanswurst_data and self.hanswurst_data[role.to_s]
169
169
  end
170
170
 
171
171
  # set a property of a role
172
172
  def set_property(role, property, value)
173
173
  return unless role_exists? role
174
- create(role) unless data_exists? role
174
+ create(role) unless hanswurst_data_exists? role
175
175
  update role, property, value
176
176
  end
177
177
 
@@ -182,46 +182,46 @@ class Hanswurst
182
182
 
183
183
  # delete a role
184
184
  def delete_role(role)
185
- delete role # delete the data
186
- self.roles.delete role.to_s # and the role itself
185
+ delete role # delete the hanswurst_data
186
+ self.hanswurst_roles.delete role.to_s # and the role itself
187
187
  end
188
188
 
189
189
  # set instance for a role
190
190
  def set(role, val)
191
- self.data ||= {}
192
- self.data.update role.to_s => val
191
+ self.hanswurst_data ||= {}
192
+ self.hanswurst_data.update role.to_s => val
193
193
  end
194
194
 
195
195
  # create a new instance of a role
196
196
  def create(role)
197
197
  raise "unknown role #{role.inspect}" unless role_exists? role.to_s
198
- self.data ||= {}
199
- self.data[role.to_s] = self.class.getClass(self.roles[role.to_s]).new
198
+ self.hanswurst_data ||= {}
199
+ self.hanswurst_data[role.to_s] = self.class.getClass(self.hanswurst_roles[role.to_s]).new
200
200
  end
201
201
 
202
202
  # delete a role
203
203
  def delete(role)
204
- self.data ||= {}
205
- hsh = self.data
204
+ self.hanswurst_data ||= {}
205
+ hsh = self.hanswurst_data
206
206
  hsh.delete(role.to_s)
207
- self.data = {} # we have to do this, otherwise it won't save?!
208
- self.data = hsh
207
+ self.hanswurst_data = {} # we have to do this, otherwise it won't save?!
208
+ self.hanswurst_data = hsh
209
209
  end
210
210
 
211
211
  # read a property of a role
212
212
  def read(role, property)
213
- return self.data[role.to_s].send(property.to_sym) if data_exists?(role.to_s)
213
+ return self.hanswurst_data[role.to_s].send(property.to_sym) if hanswurst_data_exists?(role.to_s)
214
214
  nil
215
215
  end
216
216
 
217
217
  # update a property of a role
218
218
  # we have to use this method in order to make sure that everything is saved
219
219
  def update(role, property, value)
220
- if data_exists? role
221
- self.data[role.to_s].send(:"#{property}=", value)
222
- hsh = self.data.merge(role.to_s => self.data[role.to_s])
223
- self.data = {} # we have to do this, otherwise it won't save?!
224
- self.data = hsh
220
+ if hanswurst_data_exists? role
221
+ self.hanswurst_data[role.to_s].send(:"#{property}=", value)
222
+ hsh = self.hanswurst_data.merge(role.to_s => self.hanswurst_data[role.to_s])
223
+ self.hanswurst_data = {} # we have to do this, otherwise it won't save?!
224
+ self.hanswurst_data = hsh
225
225
  end
226
226
  end
227
227
  end
@@ -45,15 +45,24 @@ class E
45
45
  property :e
46
46
  end
47
47
 
48
+
49
+ class F
50
+ include CouchPotato::Persistence
51
+ include Hanswurst::Depends
52
+
53
+ depends_on 'd', D
54
+ property :f
55
+
56
+ end
48
57
  Hanswurst.list_for :pers, :complete_name, %q|
49
58
  function(head, req) {
50
59
  var row;
51
60
  var rows = [];
52
61
  send('{"rows": ');
53
62
  while(row = getRow()) {
54
- row.doc.data.q = req.query;
55
- if(req.query["startkey_docid"] && row.doc.data.pers.firstname == req.query["startkey_docid"]){
56
- row.doc.data.pers.complete_name = row.doc.data.pers.firstname + ' ' + row.doc.data.pers.lastname;
63
+ row.doc.hanswurst_data.q = req.query;
64
+ if(req.query["startkey_docid"] && row.doc.hanswurst_data.pers.firstname == req.query["startkey_docid"]){
65
+ row.doc.hanswurst_data.pers.complete_name = row.doc.hanswurst_data.pers.firstname + ' ' + row.doc.hanswurst_data.pers.lastname;
57
66
  rows[rows.length] = row;
58
67
  }
59
68
  };
@@ -107,14 +116,14 @@ class TestCouch < Test::Unit::TestCase
107
116
  o.person = Pers.new( :firstname => 'Donald', :lastname => 'Duck' )
108
117
  save o
109
118
  o = load(o._id)
110
- roles = {'person' => 'Pers', 'product' => 'Prod'}
111
- assert_equal roles, o.roles
112
- assert_equal 'prod1', o.data["product"].name
113
- assert_equal 'Donald', o.data["person"].firstname
119
+ hanswurst_roles = {'person' => 'Pers', 'product' => 'Prod'}
120
+ assert_equal hanswurst_roles, o.hanswurst_roles
121
+ assert_equal 'prod1', o.hanswurst_data["product"].name
122
+ assert_equal 'Donald', o.hanswurst_data["person"].firstname
114
123
  assert_equal 'Donald', o.person___firstname
115
124
  end
116
125
 
117
- should "save roles" do
126
+ should "save hanswurst_roles" do
118
127
  o = Hanswurst.new
119
128
  o.add_role 'person', Pers
120
129
  o.add_role 'product', Prod
@@ -124,8 +133,8 @@ class TestCouch < Test::Unit::TestCase
124
133
  o.person___lastname = "Bunny"
125
134
  save o
126
135
  o = load(o._id)
127
- roles = {'person' => 'Pers', 'product' => 'Prod'}
128
- assert_equal roles, o.roles
136
+ hanswurst_roles = {'person' => 'Pers', 'product' => 'Prod'}
137
+ assert_equal hanswurst_roles, o.hanswurst_roles
129
138
  assert_equal 'Bugs', o.person___firstname
130
139
  assert_equal 'Bunny', o.person___lastname
131
140
  assert_equal 'abc', o.product___article_number
@@ -141,7 +150,7 @@ class TestCouch < Test::Unit::TestCase
141
150
  save o
142
151
  o = load(o._id)
143
152
  assert_equal nil, o.product___name
144
- assert !o.roles.has_key?("product")
153
+ assert !o.hanswurst_roles.has_key?("product")
145
154
  assert_equal 'Bugs', o.person___firstname
146
155
  assert_equal nil, o.product___article_number
147
156
  end
@@ -152,8 +161,8 @@ class TestCouch < Test::Unit::TestCase
152
161
  o.thing___a = "hiho"
153
162
  save o
154
163
  o = load(o._id)
155
- roles = {'thing' => 'Thing::A'}
156
- assert_equal roles, o.roles
164
+ hanswurst_roles = {'thing' => 'Thing::A'}
165
+ assert_equal hanswurst_roles, o.hanswurst_roles
157
166
  assert_equal 'hiho', o.thing___a
158
167
  end
159
168
 
@@ -176,8 +185,8 @@ class TestCouch < Test::Unit::TestCase
176
185
  a.add_role 'pers', Pers
177
186
  a.pers = Pers.new :firstname => "Mickey", :lastname => "Mouse"
178
187
  save a
179
- assert_equal "Donald Duck", view(Hanswurst.pers_all_names(:startkey_docid => "Donald")).first.data["pers"].complete_name
180
- assert_equal "Donald", view(Hanswurst.pers_all_names(:startkey_docid => "Donald")).first.data["pers"].firstname
188
+ assert_equal "Donald Duck", view(Hanswurst.pers_all_names(:startkey_docid => "Donald")).first.hanswurst_data["pers"].complete_name
189
+ assert_equal "Donald", view(Hanswurst.pers_all_names(:startkey_docid => "Donald")).first.hanswurst_data["pers"].firstname
181
190
  end
182
191
 
183
192
  should "create dependancies based on definitions" do
@@ -213,6 +222,17 @@ class TestCouch < Test::Unit::TestCase
213
222
  assert_equal "4AD", o.do___e
214
223
  assert_equal "Duck", o.person___lastname
215
224
  end
225
+
226
+ should "create shared dependancies based on definitions" do
227
+ o = Hanswurst.new
228
+ o.add_role 'fff', F
229
+ o.fff___f = "FFF"
230
+ o.fff__d__person___lastname = "Duck"
231
+ save o
232
+ q = load(o._id)
233
+ assert_equal "FFF", q.fff___f
234
+ assert_equal "Duck", q.fff__d__person___lastname
235
+ end
216
236
  end
217
237
 
218
238
  end
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.3.0
4
+ version: 0.4.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-07 00:00:00.000000000Z
12
+ date: 2012-01-14 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: couch_potato
16
- requirement: &27848040 !ruby/object:Gem::Requirement
16
+ requirement: &15343840 !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: *27848040
24
+ version_requirements: *15343840
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: yard
27
- requirement: &27847420 !ruby/object:Gem::Requirement
27
+ requirement: &15343060 !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: *27847420
35
+ version_requirements: *15343060
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: bundler
38
- requirement: &27842680 !ruby/object:Gem::Requirement
38
+ requirement: &15342300 !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: *27842680
46
+ version_requirements: *15342300
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: jeweler
49
- requirement: &27842200 !ruby/object:Gem::Requirement
49
+ requirement: &15341560 !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: *27842200
57
+ version_requirements: *15341560
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rcov
60
- requirement: &27841700 !ruby/object:Gem::Requirement
60
+ requirement: &15340960 !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: *27841700
68
+ version_requirements: *15340960
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: mocha
71
- requirement: &27841200 !ruby/object:Gem::Requirement
71
+ requirement: &15340260 !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: *27841200
79
+ version_requirements: *15340260
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: shoulda
82
- requirement: &27840680 !ruby/object:Gem::Requirement
82
+ requirement: &15339560 !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: *27840680
90
+ version_requirements: *15339560
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: linecache19
93
- requirement: &27840180 !ruby/object:Gem::Requirement
93
+ requirement: &15322280 !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: *27840180
101
+ version_requirements: *15322280
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: ruby-debug19
104
- requirement: &27839620 !ruby/object:Gem::Requirement
104
+ requirement: &15321680 !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: *27839620
112
+ version_requirements: *15321680
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: couch_potato
115
- requirement: &27839100 !ruby/object:Gem::Requirement
115
+ requirement: &15321080 !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: *27839100
123
+ version_requirements: *15321080
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: 3450462200731043631
158
+ hash: -2504078645592477714
159
159
  required_rubygems_version: !ruby/object:Gem::Requirement
160
160
  none: false
161
161
  requirements: