funkr 0.0.19 → 0.0.20
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/funkr/types/simple_record.rb +46 -15
- data/lib/funkr/version.rb +1 -1
- data/test/tests.rb +3 -1
- metadata +2 -2
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
1
2
|
module Funkr
|
2
3
|
module Types
|
3
4
|
|
@@ -14,37 +15,67 @@ module Funkr
|
|
14
15
|
class << self; attr_accessor :fields_list; end
|
15
16
|
@fields_list = nil
|
16
17
|
|
17
|
-
def self.fields(*flds)
|
18
|
+
def self.fields(*flds)
|
19
|
+
self.fields_list = flds
|
20
|
+
flds.each do |f|
|
21
|
+
getter = f.to_sym
|
22
|
+
setter = format("%s=", f.to_s).to_sym
|
23
|
+
define_method(getter){ @key_vals[f] }
|
24
|
+
define_method(setter){|nv| @key_vals[f] = nv; rebuild_array}
|
25
|
+
end
|
26
|
+
end
|
18
27
|
|
19
28
|
def initialize(key_vals)
|
20
29
|
fields = self.class.fields_list
|
21
|
-
if not fields.nil?
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
30
|
+
if not fields.nil? then # record paramétré
|
31
|
+
if fields == key_vals.keys then # tout va bien
|
32
|
+
@allowed_keys = fields
|
33
|
+
@key_vals = key_vals
|
34
|
+
rebuild_array
|
35
|
+
else raise "#{self.class.to_s} wrong initialization, expected #{fields}" end
|
36
|
+
else # record anonyme
|
37
|
+
@allowed_keys = key_vals.keys
|
38
|
+
@key_vals = key_vals
|
39
|
+
key_vals.each do |k,v|
|
40
|
+
getter = k.to_sym
|
41
|
+
setter = format("%s=", k.to_s).to_sym
|
42
|
+
define_singleton_method(getter){ @key_vals[k] }
|
43
|
+
define_singleton_method(setter){|nv| @key_vals[k] = nv; rebuild_array}
|
44
|
+
self.push(v)
|
45
|
+
end
|
31
46
|
end
|
32
47
|
end
|
33
|
-
|
48
|
+
|
34
49
|
def with(new_key_vals)
|
50
|
+
check_keys(new_key_vals.keys)
|
35
51
|
self.class.new(@key_vals.merge(new_key_vals))
|
36
52
|
end
|
37
53
|
|
38
54
|
def update!(new_key_vals)
|
55
|
+
check_keys(new_key_vals.keys)
|
39
56
|
@key_vals.merge!(new_key_vals)
|
57
|
+
rebuild_array
|
40
58
|
self
|
41
59
|
end
|
42
|
-
|
60
|
+
|
43
61
|
def to_hash; @key_vals; end
|
44
|
-
|
62
|
+
|
45
63
|
def to_s; @key_vals.to_s; end
|
46
|
-
|
64
|
+
|
47
65
|
end
|
48
66
|
|
67
|
+
private
|
68
|
+
|
69
|
+
def rebuild_array
|
70
|
+
self.replace(@key_vals.values)
|
71
|
+
end
|
72
|
+
|
73
|
+
def check_keys(keys)
|
74
|
+
unless keys.all?{|k| @allowed_keys.include?(k)} then
|
75
|
+
raise "#{self.class.to_s} forbidden key in update"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
|
49
80
|
end
|
50
81
|
end
|
data/lib/funkr/version.rb
CHANGED
data/test/tests.rb
CHANGED
@@ -119,10 +119,12 @@ puts format("%s is back to %s and really lives in %s", r.name, r.age, r.city)
|
|
119
119
|
r.name = "Paul R"
|
120
120
|
puts r.to_s
|
121
121
|
r.update!(name: "Paul")
|
122
|
-
|
122
|
+
n, _x, _y = r
|
123
|
+
puts n
|
123
124
|
|
124
125
|
class Person < SimpleRecord; fields :name, :age, :city; end
|
125
126
|
r = Person.new(name: "Paul", age: 27, city: "Rennes")
|
127
|
+
puts r.to_s
|
126
128
|
x = Person.new(name: "Paul", age: 27, city: "Rennes", genre: "Male") rescue "Forbidden"
|
127
129
|
y = Person.new(name: "Paul", age: 27) rescue "Forbidden"
|
128
130
|
|