u-attributes 0.3.0 → 0.4.0

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
- SHA1:
3
- metadata.gz: 4ffcf4806ec9d80d37275acd60cae7b17e631eb1
4
- data.tar.gz: 097f3021f4926e30f1fae6f013546e720cdde813
2
+ SHA256:
3
+ metadata.gz: 724654639b33deda5424bc5e0ac320ff1a79c34aa1aed860aa9aa18ac77830be
4
+ data.tar.gz: 44c63295b620dd096b08aefe3b6d62604a09d857ff1541f74829f0df59076937
5
5
  SHA512:
6
- metadata.gz: 13d1ef7f388acad2924444ffc0895efe77f4dda23cbbe7bccb1043fb438bc5489d2da02b9497f79f5e60a0d9c6734a1df53e34be7411eaeebde66fbd94168d78
7
- data.tar.gz: 18adb33e86569aa4f0a0b6bb0c0f390bab59b895d71c79076f2e6ba158f1733b0f8df64a2926a34fe90deed491150fbe2f3553761593a70eebe4a32715505d33
6
+ metadata.gz: c9ad9a87ec9c9999f311e8f655c6ac186928718ea24fffd017173c78b2611c8879d7ae2f4011f835505f1cf73decb47a9e1b7566c134b5534fe4214606b7c00b
7
+ data.tar.gz: 9eec234c824538f536e2cd329034ca4954c9770b78c8f144da0b0e87ee84fc1979e7345e9d06e48936805d1bf3ec870c3ef74e693793938c2edd83fb73655da4
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- u-attributes (0.3.0)
4
+ u-attributes (0.4.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -58,6 +58,28 @@ puts person.age # 21
58
58
  #
59
59
  # person.name = 'Rodrigo'
60
60
  # NoMethodError (undefined method `name=' for #<Person:0x0000... @name="John Doe", @age=21>)
61
+
62
+ ####################
63
+ # self.attributes= #
64
+ ####################
65
+
66
+ # This protected method is added to make easier the assignment in a constructor.
67
+
68
+ class Person
69
+ include Micro::Attributes
70
+
71
+ attribute :name
72
+ attribute :age
73
+
74
+ def initialize(options)
75
+ self.attributes = options
76
+ end
77
+ end
78
+
79
+ person = Person.new('name' => 'John', age: 20)
80
+
81
+ puts person.name # John
82
+ puts person.age # 20
61
83
  ```
62
84
 
63
85
  ### How to define multiple attributes?
@@ -71,8 +93,8 @@ class Person
71
93
 
72
94
  attributes :name, :age
73
95
 
74
- def initialize(name, age)
75
- @name, @age = name, age
96
+ def initialize(options)
97
+ self.attributes = options
76
98
  end
77
99
  end
78
100
 
@@ -125,6 +147,7 @@ puts other_person.equal?(person) # false
125
147
  #########################################################
126
148
  # Inheritance will preserve the parent class attributes #
127
149
  #########################################################
150
+
128
151
  class Subclass < Person
129
152
  attribute :foo
130
153
  end
@@ -11,17 +11,13 @@ module Micro
11
11
  base.class_eval do
12
12
  private_class_method :__attribute
13
13
  private_class_method :__attributes
14
- private_class_method :__attributes_defaults
14
+ private_class_method :__attribute_data
15
+ private_class_method :__attributes_data
15
16
  end
16
17
 
17
18
  def base.inherited(subclass)
18
19
  self.attributes_data({}) do |data|
19
- values = data.each_with_object(a: [], h: {}) do |(k, v), m|
20
- v.nil? ? m[:a] << k : m[:h][k] = v
21
- end
22
-
23
- subclass.attributes(values[:a])
24
- subclass.attributes(values[:h])
20
+ data.each { |k, v| subclass.attribute(v.nil? ? k : {k => v}) }
25
21
  end
26
22
  end
27
23
  end
@@ -33,7 +29,6 @@ module Micro
33
29
 
34
30
  base.class_eval(<<-RUBY)
35
31
  def initialize(arg)
36
- raise ArgumentError, 'argument must be a Hash' unless arg.is_a?(Hash)
37
32
  self.attributes = arg
38
33
  end
39
34
 
@@ -53,8 +48,10 @@ module Micro
53
48
  self.class.attribute?(name)
54
49
  end
55
50
 
56
- def attributes=(params)
57
- self.class.attributes_data(params) do |data|
51
+ def attributes=(arg)
52
+ raise ArgumentError, 'argument must be a Hash' unless arg.is_a?(Hash)
53
+
54
+ self.class.attributes_data(arg) do |data|
58
55
  data.each do |name, value|
59
56
  instance_variable_set("@#{name}", data[name]) if attribute?(name)
60
57
  end
@@ -64,9 +61,9 @@ module Micro
64
61
  def attributes
65
62
  state =
66
63
  self.class.attributes.each_with_object({}) do |name, memo|
67
- iv_name = "@#{name}"
68
- is_defined = instance_variable_defined?(iv_name)
69
- memo[name] = instance_variable_get(iv_name) if is_defined
64
+ if instance_variable_defined?(iv_name = "@#{name}")
65
+ memo[name] = instance_variable_get(iv_name)
66
+ end
70
67
  end
71
68
 
72
69
  self.class.attributes_data(state) { |data| data }
@@ -3,10 +3,6 @@
3
3
  module Micro
4
4
  module Attributes
5
5
  module Macros
6
- def __attributes_defaults
7
- @__attributes_defaults ||= {}
8
- end
9
-
10
6
  def __attributes
11
7
  @__attributes ||= Set.new
12
8
  end
@@ -24,13 +20,18 @@ module Micro
24
20
  return true
25
21
  end
26
22
 
23
+ def __attributes_data
24
+ @__attributes_data ||= {}
25
+ end
26
+
27
+ def __attribute_data(name, value)
28
+ __attributes_data[name] = value if __attribute(name)
29
+ end
30
+
27
31
  def attribute(arg)
28
- return __attribute(arg.to_s) unless arg.is_a?(Hash)
32
+ return __attribute_data(arg.to_s, nil) unless arg.is_a?(Hash)
29
33
 
30
- arg.each do |key, value|
31
- name = key.to_s
32
- __attributes_defaults[name] = value if __attribute(name)
33
- end
34
+ arg.each { |key, value| __attribute_data(key.to_s, value) }
34
35
  end
35
36
 
36
37
  def attributes(*args)
@@ -40,17 +41,10 @@ module Micro
40
41
  end
41
42
 
42
43
  def attributes_data(arg)
43
- normalized_params = arg.keys.each_with_object({}) do |key, memo|
44
- memo[key.to_s] = arg[key]
45
- end
46
-
47
- undefineds = (self.attributes - normalized_params.keys)
48
- nil_params =
49
- undefineds.each_with_object({}) { |name, memo| memo[name] = nil }
44
+ normalized_arg =
45
+ arg.keys.each_with_object({}) { |key, memo| memo[key.to_s] = arg[key] }
50
46
 
51
- yield(
52
- nil_params.merge!(__attributes_defaults).merge!(normalized_params)
53
- )
47
+ yield(__attributes_data.merge(normalized_arg))
54
48
  end
55
49
  end
56
50
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Micro
4
4
  module Attributes
5
- VERSION = "0.3.0"
5
+ VERSION = "0.4.0"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: u-attributes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rodrigo Serradura
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-07-03 00:00:00.000000000 Z
11
+ date: 2019-07-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -80,8 +80,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
80
80
  - !ruby/object:Gem::Version
81
81
  version: '0'
82
82
  requirements: []
83
- rubyforge_project:
84
- rubygems_version: 2.4.5
83
+ rubygems_version: 3.0.3
85
84
  signing_key:
86
85
  specification_version: 4
87
86
  summary: Define read-only attributes