koine-attributes 0.1.3 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -1
- data/lib/koine/attributes/adapter/time.rb +2 -0
- data/lib/koine/attributes/attributes.rb +18 -0
- data/lib/koine/attributes/builder.rb +23 -1
- data/lib/koine/attributes/version.rb +1 -1
- data/lib/koine/attributes.rb +4 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2bc29763169638e976dbce7e8a8fd34e64fa1661
|
4
|
+
data.tar.gz: 8c92de7bb50fc754426854fdafca7e74a8820105
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9142060ec750bffb182c31d71cde2983bf4507f4867f6dfd72491c165b15ac78d3ef15e7f1b9abb581717d3542a9ca422a378009d3ff224b3952f5da0a16506f
|
7
|
+
data.tar.gz: e37af654cd64875ab1b39b2197de56aff89870da607403df12e7676291b43a5ef1c4cafb53d8fb643bc9d7075f92cacb1bd6167e5c4b48e1084cc8e7283c15a2
|
data/README.md
CHANGED
@@ -49,7 +49,12 @@ Or install it yourself as:
|
|
49
49
|
person.birtday = '2001-02-31' # Date Object can also be given
|
50
50
|
|
51
51
|
person.name # => 'John Doe'
|
52
|
-
person.
|
52
|
+
person.birthday # => #<Date 2001-02-31>
|
53
|
+
|
54
|
+
person.attributes.to_h # => {
|
55
|
+
# name: 'John Doe',
|
56
|
+
# birthday: #<Date 2001-02-31>
|
57
|
+
# }
|
53
58
|
```
|
54
59
|
|
55
60
|
Options:
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Koine
|
2
|
+
module Attributes
|
3
|
+
class Attributes
|
4
|
+
def initialize(object, attributes:)
|
5
|
+
@object = object
|
6
|
+
@attributes = attributes
|
7
|
+
end
|
8
|
+
|
9
|
+
def to_h
|
10
|
+
{}.tap do |hash|
|
11
|
+
@attributes.each do |name|
|
12
|
+
hash[name.to_sym] = @object.send(name)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -13,6 +13,7 @@ module Koine
|
|
13
13
|
@getter = GetterBuilder.new(attributes: attributes, target: target)
|
14
14
|
@setter = SetterBuilder.new(attributes: attributes, target: target)
|
15
15
|
@constructor = ConstructorBuilder.new(attributes: attributes, target: target)
|
16
|
+
@lazy_attributes = LazyAttributesBuilder.new(attributes: attributes, target: target)
|
16
17
|
end
|
17
18
|
|
18
19
|
def build(name, driver)
|
@@ -24,6 +25,10 @@ module Koine
|
|
24
25
|
def build_constructor(strict: true, freeze: false)
|
25
26
|
@constructor.build(strict: strict, freeze: freeze)
|
26
27
|
end
|
28
|
+
|
29
|
+
def build_lazy_attributes
|
30
|
+
@lazy_attributes.build
|
31
|
+
end
|
27
32
|
end
|
28
33
|
|
29
34
|
class BaseBuilder
|
@@ -57,15 +62,32 @@ module Koine
|
|
57
62
|
end
|
58
63
|
end
|
59
64
|
|
65
|
+
class LazyAttributesBuilder < BaseBuilder
|
66
|
+
def build
|
67
|
+
valid_attributes = attributes
|
68
|
+
|
69
|
+
target.class_eval do
|
70
|
+
define_method :attributes do
|
71
|
+
@_koine_attributes ||= Koine::Attributes::Attributes.new(self, attributes: valid_attributes)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
60
77
|
class ConstructorBuilder < BaseBuilder
|
61
78
|
def build(strict: true, freeze: false)
|
62
79
|
valid_attributes = attributes
|
63
80
|
|
64
81
|
target.class_eval do
|
65
|
-
|
82
|
+
define_method :initialize do |args = {}|
|
83
|
+
@_koine_attributes ||= Koine::Attributes::Attributes.new(self, attributes: valid_attributes)
|
66
84
|
initialize_attributes(args)
|
67
85
|
end
|
68
86
|
|
87
|
+
def attributes
|
88
|
+
@_koine_attributes
|
89
|
+
end
|
90
|
+
|
69
91
|
protected
|
70
92
|
|
71
93
|
define_method(:initialize_attributes) do |constructor_args|
|
data/lib/koine/attributes.rb
CHANGED
@@ -100,6 +100,8 @@ require 'koine/attributes/adapter/base'
|
|
100
100
|
#
|
101
101
|
module Koine
|
102
102
|
module Attributes
|
103
|
+
autoload :Attributes, 'koine/attributes/attributes'
|
104
|
+
|
103
105
|
module Adapter
|
104
106
|
autoload :Boolean, 'koine/attributes/adapter/boolean'
|
105
107
|
autoload :Date, 'koine/attributes/adapter/date'
|
@@ -126,6 +128,8 @@ module Koine
|
|
126
128
|
initializer_options = {} unless initializer_options.is_a?(Hash)
|
127
129
|
|
128
130
|
@builder.build_constructor(initializer_options)
|
131
|
+
else
|
132
|
+
@builder.build_lazy_attributes
|
129
133
|
end
|
130
134
|
|
131
135
|
@builder = nil
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: koine-attributes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marcelo Jacobus
|
@@ -106,6 +106,7 @@ files:
|
|
106
106
|
- lib/koine/attributes/adapter/integer.rb
|
107
107
|
- lib/koine/attributes/adapter/string.rb
|
108
108
|
- lib/koine/attributes/adapter/time.rb
|
109
|
+
- lib/koine/attributes/attributes.rb
|
109
110
|
- lib/koine/attributes/builder.rb
|
110
111
|
- lib/koine/attributes/hash_helper.rb
|
111
112
|
- lib/koine/attributes/version.rb
|
@@ -130,7 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
130
131
|
version: '0'
|
131
132
|
requirements: []
|
132
133
|
rubyforge_project:
|
133
|
-
rubygems_version: 2.
|
134
|
+
rubygems_version: 2.5.2.1
|
134
135
|
signing_key:
|
135
136
|
specification_version: 4
|
136
137
|
summary: Stronger setters and getters
|