koine-attributes 0.1.0 → 0.1.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
  SHA1:
3
- metadata.gz: 688f7b4338c71beed07a114dd6db4a590a4d66dd
4
- data.tar.gz: 3800bfd795ebe7e49e565a192b2bfec7bcdcb13b
3
+ metadata.gz: 84fd9c66ed60fd758c16146613035919a09520ea
4
+ data.tar.gz: 6ea3a4d2842457224c9d38f62611b93e8a227df3
5
5
  SHA512:
6
- metadata.gz: 865663b76ada1c397c68b1059a6e28acbccda9465a8fb5caebe3458fd4e2065b289cbb5052ee8dcd40c8886c1f08374e6350efa20ad5be39d33a73522acf5ac3
7
- data.tar.gz: 9f421ed25a4de3640922463dd0075e968c2a89164b46ac81bc8eb0d731ba9681eddee9b98c4616f20e54b9b0d544c365aa628cf4f2f4254c06f5c525a91c5a58
6
+ metadata.gz: 3dec0398fc288f205625ae0aa634de9a74494f29f25ecb0f718d56d6ce053f17d2b43935dfedc10364bf5fc47076c513a9cb0f4fdd7bab7dca91d5bc9ada3f7b
7
+ data.tar.gz: 296f2461691b32d0e31f6c68134ec3905c3853edcf60418708842b3a36fa8039fe05f4c6a0d6f5058c23b4a4b811c4ae1e603a8ee9481dc157773494a3ba24b3
data/README.md CHANGED
@@ -2,11 +2,15 @@
2
2
 
3
3
  Strong attributes for ruby ruby objects.
4
4
 
5
+ Yes, there are [so many alternative solutions already](#alternative-solutions)! Why then? Cause some times people need distractions at the airports.
6
+
5
7
  [![Build Status](https://travis-ci.org/mjacobus/koine-attributes.svg?branch=master)](https://travis-ci.org/mjacobus/koine-attributes)
6
8
  [![Coverage Status](https://coveralls.io/repos/github/mjacobus/koine-attributes/badge.svg?branch=master)](https://coveralls.io/github/mjacobus/koine-attributes?branch=master)
7
9
  [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/mjacobus/koine-attributes/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/mjacobus/koine-attributes/?branch=master)
8
10
  [![Code Climate](https://codeclimate.com/github/mjacobus/koine-attributes/badges/gpa.svg)](https://codeclimate.com/github/mjacobus/koine-attributes)
9
11
  [![Issue Count](https://codeclimate.com/github/mjacobus/koine-attributes/badges/issue_count.svg)](https://codeclimate.com/github/mjacobus/koine-attributes)
12
+
13
+ [![Gem Version](https://badge.fury.io/rb/koine-attributes.svg)](https://badge.fury.io/rb/koine-command_bus)
10
14
  [![Dependency Status](https://gemnasium.com/badges/github.com/mjacobus/koine-attributes.svg)](https://gemnasium.com/github.com/mjacobus/koine-attributes)
11
15
 
12
16
  ## Installation
@@ -29,8 +33,6 @@ Or install it yourself as:
29
33
 
30
34
  ```ruby
31
35
  class Person
32
- include Koine::Attributes
33
-
34
36
  attributes do
35
37
  attribute :name, :string
36
38
  attribute :birthday, :date
@@ -63,8 +65,6 @@ Options:
63
65
 
64
66
  ```ruby
65
67
  class Person
66
- include Koine::Attributes
67
-
68
68
  attributes initializer: true do
69
69
  attribute :name, :string
70
70
  attribute :birthday, :date
@@ -81,8 +81,6 @@ Options:
81
81
 
82
82
  ```ruby
83
83
  class Person
84
- include Koine::Attributes
85
-
86
84
  attributes initializer: { strict: false } do
87
85
  attribute :name, :string
88
86
  attribute :birthday, :date
@@ -139,22 +137,6 @@ product.price = { currency: 'USD', value: 100 }
139
137
  product.price = "100 USD"
140
138
  ```
141
139
 
142
- ### Value objects
143
-
144
- ```ruby
145
- class Location
146
- include Koine::Attributes
147
-
148
- attributes initializer: { freeze: true } do
149
- attribute :lat, :float
150
- attribute :lon, :float
151
- end
152
- end
153
-
154
- location = Location.new(lat: 1, lon: 2)
155
- new_location = location.with_lon(3)
156
- ```
157
-
158
140
  ### Standard types
159
141
 
160
142
  ```ruby
@@ -166,6 +148,12 @@ new_location = location.with_lon(3)
166
148
  :time
167
149
  ```
168
150
 
151
+ ### Alternative solutions
152
+
153
+ - [attributed_object](https://github.com/jgroeneveld/attributed_object)
154
+ - [virtus](https://github.com/solnic/virtus)
155
+ - [dry-struct](https://github.com/dry-rb/dry-struct)
156
+
169
157
  ## Development
170
158
 
171
159
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -6,8 +6,6 @@ require 'koine/attributes/adapter/base'
6
6
  #
7
7
  # @example using attributes
8
8
  # class Person
9
- # include Koine::Attributes
10
- #
11
9
  # attributes do
12
10
  # attribute :name, :string
13
11
  # attribute :birthday, :date
@@ -36,8 +34,6 @@ require 'koine/attributes/adapter/base'
36
34
  # @example Constructor for attributes
37
35
  #
38
36
  # class Person
39
- # include Koine::Attributes
40
- #
41
37
  # attributes initializer: true do
42
38
  # attribute :name, :string
43
39
  # attribute :birthday, :date
@@ -52,8 +48,6 @@ require 'koine/attributes/adapter/base'
52
48
  # @example Constructor for attributes withouth strict mode
53
49
  #
54
50
  # class Person
55
- # include Koine::Attributes
56
- #
57
51
  # attributes initializer: { strict: false } do
58
52
  # attribute :name, :string
59
53
  # attribute :birthday, :date
@@ -66,8 +60,6 @@ require 'koine/attributes/adapter/base'
66
60
  # @example Override constructor
67
61
  #
68
62
  # class Person
69
- # include Koine::Attributes
70
- #
71
63
  # attr_reader :foo
72
64
  #
73
65
  # attributes initializer: true do
@@ -85,19 +77,6 @@ require 'koine/attributes/adapter/base'
85
77
  # person = Person.new(name: 'John Doe', birthday: '2001-01-31', foo: :bar)
86
78
  # person.foo # => :bar
87
79
  #
88
- # @example
89
- # class Location
90
- # include Koine::Attributes
91
- #
92
- # attributes initializer: { freeze: true } do
93
- # attribute :lat, :flaot
94
- # attribute :lon, :flaot
95
- # end
96
- # end
97
- #
98
- # location = Location.new(lat: 1, lon: 2)
99
- # new_location = location.with_lon(3)
100
- #
101
80
  module Koine
102
81
  module Attributes
103
82
  module Adapter
@@ -35,7 +35,7 @@ module Koine
35
35
  end
36
36
  end
37
37
 
38
- def build_constructor(strict: true, freeze: false)
38
+ def build_constructor(strict: true)
39
39
  valid_attributes = attributes
40
40
 
41
41
  target.class_eval do
@@ -49,10 +49,10 @@ module Koine
49
49
  invalid_attributes = []
50
50
  constructor_args = HashHelper.new.symbolize_keys(constructor_args)
51
51
 
52
- constructor_args.each do |name, value|
52
+ constructor_args.each do |name, _value|
53
53
  if valid_attributes.include?(name)
54
54
  setter = "#{name}=".to_sym
55
- send(setter, value)
55
+ send(setter, constructor_args[name])
56
56
  next
57
57
  end
58
58
 
@@ -64,55 +64,6 @@ module Koine
64
64
  attributes = invalid_attributes.join(', ')
65
65
  raise ArgumentError, "Invalid attributes (#{attributes})"
66
66
  end
67
-
68
- self.freeze if freeze
69
- end
70
- end
71
-
72
- if strict
73
- make_setters_private
74
- create_with_methods
75
- create_comparator
76
- end
77
- end
78
-
79
- protected
80
-
81
- def make_setters_private
82
- attrs = attributes
83
-
84
- target.instance_eval do
85
- attrs.each do |attr|
86
- protected "#{attr}="
87
- end
88
- end
89
- end
90
-
91
- def create_with_methods
92
- attributes.each do |attr|
93
- create_with_method(attr)
94
- end
95
- end
96
-
97
- def create_with_method(attr)
98
- target.class_eval do
99
- define_method "with_#{attr}" do |*args|
100
- dup.tap do |new_object|
101
- new_object.send("#{attr}=", *args)
102
- new_object.freeze
103
- end
104
- end
105
- end
106
- end
107
-
108
- def create_comparator
109
- attrs = attributes
110
-
111
- target.class_eval do
112
- define_method :== do |that|
113
- a = attrs.map { |attr| send(attr) }
114
- b = attrs.map { |attr| that.send(attr) }
115
- a == b
116
67
  end
117
68
  end
118
69
  end
@@ -1,5 +1,5 @@
1
1
  module Koine
2
2
  module Attributes
3
- VERSION = "0.1.0"
3
+ VERSION = "0.1.1"
4
4
  end
5
5
  end
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.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcelo Jacobus