tainbox 0.2.0 → 0.2.1

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