property-accessor 0.1.0 → 0.3.1
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.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +8 -10
- data/lib/property_accessor/class_methods.rb +24 -15
- data/lib/property_accessor/property.rb +15 -1
- data/lib/property_accessor/property_builder.rb +39 -8
- data/lib/property_accessor/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 656a96460b3704ee2a50e8bc6ac805c4a51269936a8c37c44e472db9566ba422
|
4
|
+
data.tar.gz: 7b3bb62aec91ad43555e2268c83d923a421972b0a5c46c1f140c23cc5a02b17f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 05a363b9a6cb26535e9feff7a6c8b995f8a9db0cce37ea03eeb6c74fe99ec32fdfb43b0dc9bf19ad557bd655fd9902eeea8e3fb78c9365857efd77f8c33ff6da
|
7
|
+
data.tar.gz: 00b67a29759883132321d951d50d10df4ff9a7b671183ebb5e012aabe7731c40cf90a251429628787cb9ac0b488e260121e011abeda6716286c7db7df98581bf
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -36,16 +36,14 @@ require 'date'
|
|
36
36
|
class Person
|
37
37
|
extend PropertyAccessor
|
38
38
|
|
39
|
-
property(:first_name)
|
40
|
-
get
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
property(:
|
45
|
-
property(:
|
46
|
-
property(:
|
47
|
-
property(:age) { get { (Time.now - birth_date.to_time).to_i / 60 / 60 / 24 / 365 } }
|
48
|
-
property(:meta) { default { {} }; get }
|
39
|
+
property(:first_name) { get { @name.upcase }; set(:family_name) { |val| @name = val } }
|
40
|
+
property(:last_name) { get; set }
|
41
|
+
property(:full_name) { get { "#{first_name} #{last_name}" } }
|
42
|
+
property(:birth_date) { get; set { |val| @birth_date = Date.parse(val.to_s) } }
|
43
|
+
property(:age) { get { (Time.now - birth_date.to_time).to_i / 60 / 60 / 24 / 365 } }
|
44
|
+
property(:confidential) { private get; public set; }
|
45
|
+
property(:middle_name) { get(:get_middle_name); set(:set_middle_name); }
|
46
|
+
property(:meta) { default { {} }; get }
|
49
47
|
end
|
50
48
|
|
51
49
|
p = Person.new
|
@@ -9,15 +9,15 @@ module PropertyAccessor
|
|
9
9
|
builder = PropertyBuilder.new(property)
|
10
10
|
|
11
11
|
if block.nil?
|
12
|
-
raise UndefinedPropertyError, 'cannot define a
|
12
|
+
raise UndefinedPropertyError, 'cannot define a property without specifying at least getter or setter'
|
13
13
|
end
|
14
14
|
|
15
15
|
builder.instance_exec(&block)
|
16
16
|
|
17
|
-
define_method(
|
18
|
-
if !instance_variable_defined?(
|
17
|
+
define_method(property.initializer_method_name) do
|
18
|
+
if !instance_variable_defined?(property.field_name)
|
19
19
|
instance_variable_set(
|
20
|
-
|
20
|
+
property.field_name,
|
21
21
|
property.default_value_proc ?
|
22
22
|
instance_exec(&property.default_value_proc) :
|
23
23
|
property.default_value
|
@@ -25,30 +25,39 @@ module PropertyAccessor
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
private
|
28
|
+
private property.initializer_method_name
|
29
29
|
|
30
30
|
if property.getter_defined?
|
31
|
-
define_method(property.
|
32
|
-
send(
|
31
|
+
define_method(property.getter_method_name) do
|
32
|
+
send(property.initializer_method_name)
|
33
33
|
instance_exec(&property.getter_proc)
|
34
34
|
end
|
35
|
+
elsif property.default_getter
|
36
|
+
define_method(property.getter_method_name) do
|
37
|
+
send(property.initializer_method_name)
|
38
|
+
instance_variable_get(property.field_name)
|
39
|
+
end
|
35
40
|
end
|
36
41
|
|
37
42
|
if property.setter_defined?
|
38
|
-
define_method(
|
43
|
+
define_method(property.setter_method_name, property.setter_proc)
|
44
|
+
elsif property.default_setter
|
45
|
+
define_method(property.setter_method_name) do |val|
|
46
|
+
instance_variable_set(property.field_name, val)
|
47
|
+
end
|
39
48
|
end
|
40
49
|
|
41
|
-
|
42
|
-
|
43
|
-
send("initialize_#{property.name}")
|
44
|
-
instance_variable_get("@#{property.name}")
|
45
|
-
end
|
50
|
+
property.private_method_names.each do |method_name|
|
51
|
+
private method_name
|
46
52
|
end
|
47
53
|
|
48
|
-
|
49
|
-
|
54
|
+
property.protected_method_names.each do |method_name|
|
55
|
+
protected method_name
|
50
56
|
end
|
51
57
|
|
58
|
+
property.public_method_names.each do |method_name|
|
59
|
+
public method_name
|
60
|
+
end
|
52
61
|
end
|
53
62
|
end
|
54
63
|
end
|
@@ -10,7 +10,14 @@ module PropertyAccessor
|
|
10
10
|
:default_getter,
|
11
11
|
:default_setter,
|
12
12
|
:default_value,
|
13
|
-
:default_value_proc
|
13
|
+
:default_value_proc,
|
14
|
+
:setter_method_name,
|
15
|
+
:getter_method_name,
|
16
|
+
:initializer_method_name,
|
17
|
+
:field_name,
|
18
|
+
:public_method_names,
|
19
|
+
:private_method_names,
|
20
|
+
:protected_method_names
|
14
21
|
|
15
22
|
def initialize(name)
|
16
23
|
@name = name
|
@@ -21,6 +28,13 @@ module PropertyAccessor
|
|
21
28
|
@default_value = nil
|
22
29
|
@default_value_proc = nil
|
23
30
|
@value = nil
|
31
|
+
@setter_method_name = "#{name}="
|
32
|
+
@getter_method_name = name
|
33
|
+
@field_name = "@#{name}"
|
34
|
+
@public_method_names = []
|
35
|
+
@private_method_names = []
|
36
|
+
@protected_method_names = []
|
37
|
+
@initializer_method_name = "__initialize_#{name}"
|
24
38
|
end
|
25
39
|
|
26
40
|
def setter_defined?
|
@@ -3,6 +3,11 @@
|
|
3
3
|
module PropertyAccessor
|
4
4
|
class PropertyBuilder
|
5
5
|
|
6
|
+
private
|
7
|
+
attr_reader :property
|
8
|
+
|
9
|
+
public
|
10
|
+
|
6
11
|
# @param property [PropertyAccessor::Property]
|
7
12
|
def initialize(property)
|
8
13
|
@property = property
|
@@ -10,26 +15,52 @@ module PropertyAccessor
|
|
10
15
|
|
11
16
|
def default(value = nil, &block)
|
12
17
|
if value
|
13
|
-
|
18
|
+
property.default_value = value
|
14
19
|
else
|
15
|
-
|
20
|
+
property.default_value_proc = block
|
16
21
|
end
|
17
22
|
end
|
18
23
|
|
19
|
-
def
|
24
|
+
def private(method_name)
|
25
|
+
property.private_method_names << method_name
|
26
|
+
end
|
27
|
+
|
28
|
+
def protected(method_name)
|
29
|
+
property.protected_method_names << method_name
|
30
|
+
end
|
31
|
+
|
32
|
+
def public(method_name)
|
33
|
+
property.public_method_names << method_name
|
34
|
+
end
|
35
|
+
|
36
|
+
# @param method_name [String, Symbol] override getter method name
|
37
|
+
def get(method_name = nil, &block)
|
38
|
+
if method_name
|
39
|
+
property.getter_method_name = method_name
|
40
|
+
end
|
41
|
+
|
20
42
|
if block
|
21
|
-
|
43
|
+
property.getter_proc = block
|
22
44
|
else
|
23
|
-
|
45
|
+
property.default_getter = true
|
24
46
|
end
|
47
|
+
|
48
|
+
@property.getter_method_name
|
25
49
|
end
|
26
50
|
|
27
|
-
|
51
|
+
# @param method_name [String, Symbol] override setter method name
|
52
|
+
def set(method_name = nil, &block)
|
53
|
+
if method_name
|
54
|
+
property.setter_method_name = method_name
|
55
|
+
end
|
56
|
+
|
28
57
|
if block
|
29
|
-
|
58
|
+
property.setter_proc = block
|
30
59
|
else
|
31
|
-
|
60
|
+
property.default_setter = true
|
32
61
|
end
|
62
|
+
|
63
|
+
property.setter_method_name
|
33
64
|
end
|
34
65
|
end
|
35
66
|
end
|