property-accessor 0.1.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ee7d889a50003bc95523507b5f890335757113e753a1a0eab8fa7af4a09894e3
4
- data.tar.gz: ad0dbc3ff7db1c41692759a1348e811287ae513b6e17db8c33e11ed9aceccb7c
3
+ metadata.gz: 656a96460b3704ee2a50e8bc6ac805c4a51269936a8c37c44e472db9566ba422
4
+ data.tar.gz: 7b3bb62aec91ad43555e2268c83d923a421972b0a5c46c1f140c23cc5a02b17f
5
5
  SHA512:
6
- metadata.gz: dd60658a1e4330f1d387d27f7a5ca2805213750529344b22c4683c4dc432de8f3a4567fcf22f2b094c3d7d9118cc38b57901b63db300b12ac3ab4006ee900275
7
- data.tar.gz: 042660f427218fabd8cbc9c77b7fb1e80dabcdee9b5529512e762bccd7b3ade2a4776aaabd4353c3cb81147909dc4b8c0cf8b0099135d8bdff1b715869bfbe73
6
+ metadata.gz: 05a363b9a6cb26535e9feff7a6c8b995f8a9db0cce37ea03eeb6c74fe99ec32fdfb43b0dc9bf19ad557bd655fd9902eeea8e3fb78c9365857efd77f8c33ff6da
7
+ data.tar.gz: 00b67a29759883132321d951d50d10df4ff9a7b671183ebb5e012aabe7731c40cf90a251429628787cb9ac0b488e260121e011abeda6716286c7db7df98581bf
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- property-accessor (0.1.0)
4
+ property-accessor (0.3.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -36,16 +36,14 @@ require 'date'
36
36
  class Person
37
37
  extend PropertyAccessor
38
38
 
39
- property(:first_name) do
40
- get { @name.upcase }
41
- set { |val| @name = val }
42
- end
43
-
44
- property(:last_name) { get; set }
45
- property(:full_name) { get { "#{first_name} #{last_name}" } }
46
- property(:birth_date) { get; set { |val| @birth_date = Date.parse(val.to_s) } }
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 proprty without specifing at least getter or setter'
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("initialize_#{property.name}") do
18
- if !instance_variable_defined?("@#{property.name}")
17
+ define_method(property.initializer_method_name) do
18
+ if !instance_variable_defined?(property.field_name)
19
19
  instance_variable_set(
20
- "@#{property.name}",
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 "initialize_#{property.name}"
28
+ private property.initializer_method_name
29
29
 
30
30
  if property.getter_defined?
31
- define_method(property.name) do
32
- send("initialize_#{property.name}")
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("#{property.name}=", property.setter_proc)
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
- if property.default_getter
42
- define_method(property.name) do
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
- if property.default_setter
49
- attr_writer property.name
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
- @property.default_value = value
18
+ property.default_value = value
14
19
  else
15
- @property.default_value_proc = block
20
+ property.default_value_proc = block
16
21
  end
17
22
  end
18
23
 
19
- def get(&block)
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
- @property.getter_proc = block
43
+ property.getter_proc = block
22
44
  else
23
- @property.default_getter = true
45
+ property.default_getter = true
24
46
  end
47
+
48
+ @property.getter_method_name
25
49
  end
26
50
 
27
- def set(&block)
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
- @property.setter_proc = block
58
+ property.setter_proc = block
30
59
  else
31
- @property.default_setter = true
60
+ property.default_setter = true
32
61
  end
62
+
63
+ property.setter_method_name
33
64
  end
34
65
  end
35
66
  end
@@ -1,3 +1,3 @@
1
1
  module PropertyAccessor
2
- VERSION = "0.1.0"
2
+ VERSION = "0.3.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: property-accessor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evgeny Stepanov