tainbox 0.2.0 → 0.2.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: c180884b0471d64ec257abcb626c43cd59a79fe8
4
- data.tar.gz: fcfd7c4fd5e0ab7f3f0ada8b04409363e55032a9
3
+ metadata.gz: f97ba89e290c39aa627d72acdd087f15d8425535
4
+ data.tar.gz: 4187cef87c10dea2fc9be5cf80c26f0bc936ff40
5
5
  SHA512:
6
- metadata.gz: a0f2941c17de11c3e083d3303ae87602d6f542b7ebfb7d586058278789c4e6c3e45f192b0193d6ecdbb23f24556e37052dab07e6d665bdb33b6a88602731b7bc
7
- data.tar.gz: 77c030002c12e6f0e3aa7e1abe0b3135bded6d9d39cdf0d4a808e56decb99cc40180dfa44cddbff9b686f169c2ca52ef7826742d1b4560c5615c5946291ef023
6
+ metadata.gz: d445dad53f0615cd342ec4adb1bd80885328e68308d933f13c7993066fd168255d7703c4540354b02f698051082ff2a665649d36cfeea4c0062ca1b8aee7bc57
7
+ data.tar.gz: 103da0ff13be9e547dfa04f40a63d8507de78bbcde8e0a3a63e43273a265b24f6e233e555ba68b00fcd24db379866e0b8bf80039fa44d4c09dd3c2b55c527404
data/README.md ADDED
@@ -0,0 +1,95 @@
1
+ # Tainbox
2
+
3
+ Tainbox is a utility gem that can be used to inject attributes into ruby objects. It is similar to <a href="https://github.com/solnic/virtus">Virtus</a>, but works a bit more sensibly (hopefully) and throws in some additional features.
4
+
5
+ ## But we already have attr_accessor!
6
+
7
+ Consider this code:
8
+
9
+ ``` ruby
10
+ class Person
11
+ include Tainbox
12
+ attribute :name, default: -> { "person_#{age}" }
13
+ attribute :age, Integer, default: 20
14
+ end
15
+ ```
16
+
17
+ Here are the basic features you get:
18
+
19
+ ``` ruby
20
+ person = Person.new(name: 'John', age: '30')
21
+ person.attributes # => { :name => "John", :age => 30 }
22
+ person.age = 50
23
+ person.age # => 50
24
+ person.attributes = {}
25
+ person.attributes # => { :name => "person_20", :age => 20 }
26
+ ```
27
+
28
+ ## Additional features
29
+
30
+ ### Method overrides
31
+
32
+ Tainbox attributes can be freely overriden:
33
+
34
+ ``` ruby
35
+ def name
36
+ super.strip
37
+ end
38
+ ```
39
+
40
+ ``` ruby
41
+ def name=(value)
42
+ super('Stupid example')
43
+ end
44
+ ```
45
+
46
+ ### #attribute_provided?
47
+
48
+ Attribute is considered provided if its setter was explicitly invoked via a setter, `.new`, or `#attributes=` or it has a default value.
49
+
50
+ ``` ruby
51
+ class Person
52
+ include Tainbox
53
+ attribute :name, default: 'John'
54
+ attribute :age
55
+ end
56
+
57
+ person = Person.new
58
+ person.attribute_provided?(:age) # => false
59
+ person.attribute_provided?(:name) # => true
60
+ ```
61
+
62
+ ### readonly and writeonly attributes
63
+
64
+ Speaks for itself:
65
+
66
+ ``` ruby
67
+ class Person
68
+ include Tainbox
69
+ attribute :name, writeonly: true
70
+ attribute :age, readonly: true
71
+ end
72
+ ```
73
+
74
+ ### Built-in type converters
75
+
76
+ All converters return nil if conversion could not be made.
77
+
78
+ - Integer
79
+ - Float
80
+ - String
81
+ - Symbol
82
+ - Time
83
+ - Boolean
84
+
85
+ ### Custom type converters
86
+
87
+ You can define a custom type converter like so:
88
+
89
+ ``` ruby
90
+ # value and options are automatically available in scope
91
+ Tainbox.define_converter(MyType) do
92
+ # Do whatever you want with value
93
+ options[:strict] ? MyType.convert!(value) : MyType.convert(value)
94
+ end
95
+ ```
@@ -1,3 +1,3 @@
1
1
  module Tainbox
2
- VERSION = '0.2.0'
2
+ VERSION = '0.2.1'
3
3
  end
data/tainbox.gemspec CHANGED
@@ -8,8 +8,9 @@ Gem::Specification.new do |spec|
8
8
  spec.authors = ['Dmitry Gubitskiy']
9
9
  spec.email = ['d.gubitskiy@gmail.com']
10
10
 
11
- # TODO Proper summary
12
- spec.summary = 'Tainbox summary'
11
+ spec.summary = 'Tainbox is a utility gem that can be used to inject attributes '\
12
+ 'into ruby objects. It is similar to Virtus, but works a bit more '\
13
+ 'sensibly (hopefully) and throws in some additional features'
13
14
  spec.homepage = 'https://github.com/enthrops/tainbox'
14
15
  spec.license = 'MIT'
15
16
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tainbox
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitry Gubitskiy
@@ -77,6 +77,7 @@ files:
77
77
  - ".rspec"
78
78
  - Gemfile
79
79
  - LICENSE.txt
80
+ - README.md
80
81
  - bin/console
81
82
  - lib/tainbox.rb
82
83
  - lib/tainbox/attribute_definer.rb
@@ -110,6 +111,8 @@ rubyforge_project:
110
111
  rubygems_version: 2.4.6
111
112
  signing_key:
112
113
  specification_version: 4
113
- summary: Tainbox summary
114
+ summary: Tainbox is a utility gem that can be used to inject attributes into ruby
115
+ objects. It is similar to Virtus, but works a bit more sensibly (hopefully) and
116
+ throws in some additional features
114
117
  test_files: []
115
118
  has_rdoc: