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 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