hanswurst 0.1.0 → 0.2.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 +31 -5
- data/VERSION +1 -1
- data/lib/hanswurst.rb +19 -3
- data/test/test_hanswurst.rb +24 -0
- metadata +23 -23
data/README.md
CHANGED
@@ -31,8 +31,8 @@ first you have to build your roles as normal couch potato classes
|
|
31
31
|
then you may use them as you like
|
32
32
|
|
33
33
|
hw = Hanswurst.new
|
34
|
-
hw.add_role Person
|
35
|
-
hw.add_role Product
|
34
|
+
hw.add_role 'person', Person # first role then class
|
35
|
+
hw.add_role 'product', Product
|
36
36
|
|
37
37
|
hw.person___first_name = 'Diederich'
|
38
38
|
hw.person___last_name = 'Hessling' # an RoleNotValid error is raised if person___last_name is missing
|
@@ -40,7 +40,7 @@ then you may use them as you like
|
|
40
40
|
# this is also possible
|
41
41
|
hw.product = Product.new :price => 20, :in_stock => 1
|
42
42
|
|
43
|
-
id = CouchPotato.database.save_document
|
43
|
+
id = CouchPotato.database.save_document hw
|
44
44
|
|
45
45
|
later...
|
46
46
|
|
@@ -49,7 +49,33 @@ later...
|
|
49
49
|
hw.person___first_name # => 'Diederich'
|
50
50
|
hw.product___price # => 20
|
51
51
|
|
52
|
+
you may also declare that roles are depending on other roles
|
53
|
+
when you add that role, the others are also automatically added
|
54
|
+
class Address
|
55
|
+
include CouchPotato::Persistence
|
56
|
+
|
57
|
+
property :street
|
58
|
+
property :zip
|
59
|
+
property :city
|
60
|
+
end
|
61
|
+
|
62
|
+
class Person
|
63
|
+
include CouchPotato::Persistence
|
64
|
+
include Hanswurst::Depends
|
52
65
|
|
66
|
+
depends_on 'address_privat', Address
|
67
|
+
depends_on 'address_work', Address
|
68
|
+
|
69
|
+
property :last_name
|
70
|
+
property :first_name
|
71
|
+
end
|
72
|
+
|
73
|
+
hw = Hanswurst.new
|
74
|
+
hw.add_role 'employee', Person
|
75
|
+
hw.employee___last_name = 'Hessling'
|
76
|
+
hw.address_privat___city = 'Berlin'
|
77
|
+
hw.address_work___city = 'Potsdam'
|
78
|
+
|
53
79
|
All views are attached to the hanswurst design document
|
54
80
|
You may create general views:
|
55
81
|
|
@@ -57,10 +83,10 @@ You may create general views:
|
|
57
83
|
|
58
84
|
or views specific for a role
|
59
85
|
|
60
|
-
Hanswurst.view_for :
|
86
|
+
Hanswurst.view_for :employee, :all, :key => :created_at
|
61
87
|
|
62
88
|
# execute them this way
|
63
|
-
CouchPotato.database.view Hanswurst.
|
89
|
+
CouchPotato.database.view Hanswurst.employee_all
|
64
90
|
|
65
91
|
the same works with lists.
|
66
92
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/lib/hanswurst.rb
CHANGED
@@ -3,6 +3,21 @@ require 'couch_potato'
|
|
3
3
|
# Each Hanswurst may have a different combination of roles. It's a very flexible way to be a couch potato.
|
4
4
|
class Hanswurst
|
5
5
|
|
6
|
+
module Depends
|
7
|
+
def self.included(mod)
|
8
|
+
mod.instance_eval do
|
9
|
+
def depends_on(aliasname, role)
|
10
|
+
@dependancies ||= {}
|
11
|
+
@dependancies[aliasname] = role
|
12
|
+
end
|
13
|
+
|
14
|
+
def dependancies
|
15
|
+
@dependancies || {}
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
6
21
|
# error raised when a role is not valid
|
7
22
|
class RoleNotValid < Exception
|
8
23
|
def initialize(role, value)
|
@@ -98,12 +113,13 @@ class Hanswurst
|
|
98
113
|
# add more roles at once
|
99
114
|
def add_roles(hsh)
|
100
115
|
self.data ||= {}
|
101
|
-
|
116
|
+
self.roles ||= {}
|
102
117
|
hsh.each do |role,klass|
|
103
118
|
raise "class expected: #{klass.inspect}" unless klass.is_a? Class
|
104
|
-
|
119
|
+
add_roles klass.dependancies if klass.respond_to?(:dependancies)
|
120
|
+
self.roles.update role.to_s => klass.name
|
105
121
|
end
|
106
|
-
self.roles
|
122
|
+
self.roles
|
107
123
|
end
|
108
124
|
|
109
125
|
# does he have a role
|
data/test/test_hanswurst.rb
CHANGED
@@ -26,6 +26,16 @@ module Thing
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
+
class D
|
30
|
+
include CouchPotato::Persistence
|
31
|
+
include Hanswurst::Depends
|
32
|
+
|
33
|
+
depends_on 'person', Pers
|
34
|
+
depends_on 'prod', Prod
|
35
|
+
property :d
|
36
|
+
|
37
|
+
end
|
38
|
+
|
29
39
|
Hanswurst.list_for :pers, :complete_name, %q|
|
30
40
|
function(head, req) {
|
31
41
|
var row;
|
@@ -160,6 +170,20 @@ class TestCouch < Test::Unit::TestCase
|
|
160
170
|
assert_equal "Donald Duck", view(Hanswurst.pers_all_names(:startkey_docid => "Donald")).first.data["pers"].complete_name
|
161
171
|
assert_equal "Donald", view(Hanswurst.pers_all_names(:startkey_docid => "Donald")).first.data["pers"].firstname
|
162
172
|
end
|
173
|
+
|
174
|
+
should "create dependancies based on definitions" do
|
175
|
+
o = Hanswurst.new
|
176
|
+
o.add_role 'do', D
|
177
|
+
o.do___d = "4AD"
|
178
|
+
o.person___firstname = "Dagobert"
|
179
|
+
o.person___lastname = "Duck"
|
180
|
+
o.prod___name = "Comic Hero"
|
181
|
+
save o
|
182
|
+
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
|
186
|
+
end
|
163
187
|
end
|
164
188
|
|
165
189
|
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.
|
4
|
+
version: 0.2.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-06 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: couch_potato
|
16
|
-
requirement: &
|
16
|
+
requirement: &27901180 !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: *27901180
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: yard
|
27
|
-
requirement: &
|
27
|
+
requirement: &27900580 !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: *27900580
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: bundler
|
38
|
-
requirement: &
|
38
|
+
requirement: &27899980 !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: *27899980
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: jeweler
|
49
|
-
requirement: &
|
49
|
+
requirement: &27890820 !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: *27890820
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rcov
|
60
|
-
requirement: &
|
60
|
+
requirement: &27890320 !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: *27890320
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: mocha
|
71
|
-
requirement: &
|
71
|
+
requirement: &27889780 !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: *27889780
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: shoulda
|
82
|
-
requirement: &
|
82
|
+
requirement: &27889300 !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: *27889300
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: linecache19
|
93
|
-
requirement: &
|
93
|
+
requirement: &27888760 !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: *27888760
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: ruby-debug19
|
104
|
-
requirement: &
|
104
|
+
requirement: &27888240 !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: *27888240
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: couch_potato
|
115
|
-
requirement: &
|
115
|
+
requirement: &27887700 !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: *27887700
|
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: -1466396056601351153
|
159
159
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
160
160
|
none: false
|
161
161
|
requirements:
|