uber 0.0.7 → 0.0.8

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: 8b1c72fd6f3f99e2d92ee6bba306785d88b64963
4
- data.tar.gz: 01443d5ec98cee53824c305ffa5203030849b33a
3
+ metadata.gz: 0665bfd37394ce176ce0d33f2c1d1f55f32dfa70
4
+ data.tar.gz: 9a7bf2915ff6dd350d8d99c92c6a4b4afb9b6510
5
5
  SHA512:
6
- metadata.gz: 39ccf2b0c211ae18559d825ae4613c450e2c38b63a692d5ad86b5da51f33f32bc05100869f0ecdcadce2888d01be5af3017bee1db16bbc2eef9b31d1b455e2fa
7
- data.tar.gz: 11e6460fafc4153976248595236e08bc543c11ba32252bfe0708b454c32b8ba335a01f5c7c149742869ff0c89b2bf1f313cb188746cb0d17d07056c141ddae37
6
+ metadata.gz: b5dc8ce07c0dc65cf1f818294f785f6c6bba0849a4ddf45152a379747ecbc3c981d895a6a6e9f0e8964eecd972234dc1838cbcb27b15f12f25bc12f44268dfbf
7
+ data.tar.gz: d2dec91003d742e658c4c53350430f3793d3cf2edd43f4ae7644aeb6e12e9cab68c584bbcc4c7b9352feb6e970789fc4ce1ff8699347bf20ed353d825d2c3990
data/CHANGES.md CHANGED
@@ -1,3 +1,7 @@
1
+ # 0.0.8
2
+
3
+ * Add `Uber::Delegates` that provides delegation that can be overridden and called with `super`.
4
+
1
5
  # 0.0.7
2
6
 
3
7
  * Add `Uber::Callable` and support for it in `Options::Value`.
data/README.md CHANGED
@@ -156,6 +156,40 @@ Use `Options::Value#evaluate` to handle single values.
156
156
  Evaluating an options hash can be time-consuming. When `Options` contains static elements only, it behaves *and performs* like an ordinary hash.
157
157
 
158
158
 
159
+ # Delegates
160
+
161
+ Using `::delegates` works exactly like the `Forwardable` module in Ruby, with one bonus: It creates the accessors in a module, allowing you to override and call `super` in a user module or class.
162
+
163
+ ```ruby
164
+ require 'uber/delegates'
165
+
166
+ class SongDecorator
167
+ def initialize(song)
168
+ @song = song
169
+ end
170
+ attr_reader :song
171
+
172
+ extend Uber::Delegates
173
+
174
+ delegates :song, :title, :id # delegate :title and :id to #song.
175
+
176
+ def title
177
+ super.downcase # this calls the original delegate #title.
178
+ end
179
+ end
180
+ ```
181
+
182
+ This creates readers `#title` and `#id` which are delegated to `#song`.
183
+
184
+ ```ruby
185
+ song = SongDecorator.new(Song.create(id: 1, title: "HELLOWEEN!"))
186
+
187
+ song.id #=> 1
188
+ song.title #=> "helloween!"
189
+ ```
190
+
191
+ Note how `#title` calls the original title and then downcases the string.
192
+
159
193
  # Version
160
194
 
161
195
  Writing gems against other gems often involves checking for versions and loading appropriate version strategies - e.g. _"is Rails >= 4.0?"_. Uber gives you `Version` for easy, semantic version deciders.
@@ -0,0 +1,13 @@
1
+ require 'forwardable'
2
+
3
+ module Uber
4
+ module Delegates
5
+ def delegates(model, *names)
6
+ mod = Module.new do
7
+ extend Forwardable
8
+ def_delegators model, *names
9
+ end
10
+ include mod
11
+ end
12
+ end
13
+ end
@@ -1,3 +1,3 @@
1
1
  module Uber
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  end
@@ -0,0 +1,44 @@
1
+ require 'test_helper'
2
+ require 'uber/delegates'
3
+
4
+ class DelegatesTest < MiniTest::Spec
5
+ class Song
6
+ extend Uber::Delegates
7
+
8
+ delegates :model, :title
9
+
10
+ def model
11
+ Struct.new(:title).new("Helloween")
12
+ end
13
+
14
+ def title
15
+ super.downcase
16
+ end
17
+ end
18
+
19
+ # allows overriding in class.
20
+ it { Song.new.title.must_equal "helloween" }
21
+
22
+
23
+ module Title
24
+ extend Uber::Delegates
25
+
26
+ delegates :model, :title, :id
27
+ end
28
+
29
+ class Album
30
+ include Title
31
+
32
+ def model
33
+ Struct.new(:title, :id).new("Helloween", 1)
34
+ end
35
+
36
+ def title
37
+ super.downcase
38
+ end
39
+ end
40
+
41
+ # allows overriding in class inherited from module.
42
+ it { Album.new.title.must_equal "helloween" }
43
+ it { Album.new.id.must_equal 1 }
44
+ end
@@ -1,55 +1,52 @@
1
- require 'test_helper'
2
- require 'uber/inheritable_included'
1
+ # require 'test_helper'
2
+ # require 'uber/inheritable_included'
3
3
 
4
- module InheritIncludedTo
5
- def self.call(includer, proc)
6
- proc.call(includer) # das will ich eigentlich machen
4
+ # module InheritIncludedTo
5
+ # def self.call(includer, proc)
6
+ # proc.call(includer) # das will ich eigentlich machen
7
7
 
8
- includer.class_eval do
9
- @block = proc
8
+ # includer.class_eval do
9
+ # @block = proc
10
10
 
11
- def self.included(base) #
12
- InheritIncludedTo.call(base, instance_variable_get(:@block))
13
- end
14
- end
15
- end
16
- end
11
+ # def self.included(base) #
12
+ # InheritIncludedTo.call(base, instance_variable_get(:@block))
13
+ # end
14
+ # end
15
+ # end
16
+ # end
17
17
 
18
- class InheritanceTest < MiniTest::Spec
19
- module Feature
20
- #extend Uber::InheritedIncluded
18
+ # class InheritanceTest < MiniTest::Spec
19
+ # module Feature
20
+ # #extend Uber::InheritedIncluded
21
21
 
22
- CODE_BLOCK = lambda { |base| base.class_eval { extend ClassMethods } } # i want that to be executed at every include
22
+ # CODE_BLOCK = lambda { |base| base.class_eval { extend ClassMethods } } # i want that to be executed at every include
23
23
 
24
- instance_exec do
25
- @block = CODE_BLOCK # this would happen in inherited_included do .. end
26
- end
27
24
 
28
- def self.included(includer) #
29
- # CODE_BLOCK.call(base)
30
- InheritIncludedTo.call(includer, CODE_BLOCK)
31
- end
25
+ # def self.included(includer) #
26
+ # # CODE_BLOCK.call(base)
27
+ # InheritIncludedTo.call(includer, CODE_BLOCK)
28
+ # end
32
29
 
33
- module ClassMethods
34
- def feature; end
35
- end
36
- end
30
+ # module ClassMethods
31
+ # def feature; end
32
+ # end
33
+ # end
37
34
 
38
- module Extension
39
- include Feature
35
+ # module Extension
36
+ # include Feature
40
37
 
41
- # TODO: test overriding ::included
42
- end
38
+ # # TODO: test overriding ::included
39
+ # end
43
40
 
44
- module Client
45
- include Extension
46
- end
41
+ # module Client
42
+ # include Extension
43
+ # end
47
44
 
48
- module ExtendedClient
49
- include Client
50
- end
45
+ # module ExtendedClient
46
+ # include Client
47
+ # end
51
48
 
52
- it { Extension.must_respond_to :feature }
53
- it { Client.must_respond_to :feature }
54
- it { ExtendedClient.must_respond_to :feature }
55
- end
49
+ # it { Extension.must_respond_to :feature }
50
+ # it { Client.must_respond_to :feature }
51
+ # it { ExtendedClient.must_respond_to :feature }
52
+ # end
metadata CHANGED
@@ -1,41 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uber
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Sutterer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-01 00:00:00.000000000 Z
11
+ date: 2014-08-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 0.10.1
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.10.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: minitest
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 5.0.0
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 5.0.0
41
41
  description: A gem-authoring framework.
@@ -45,7 +45,7 @@ executables: []
45
45
  extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
- - .gitignore
48
+ - ".gitignore"
49
49
  - CHANGES.md
50
50
  - Gemfile
51
51
  - LICENSE
@@ -53,10 +53,12 @@ files:
53
53
  - Rakefile
54
54
  - lib/uber.rb
55
55
  - lib/uber/callable.rb
56
+ - lib/uber/delegates.rb
56
57
  - lib/uber/inheritable_attr.rb
57
58
  - lib/uber/options.rb
58
59
  - lib/uber/uber_version.rb
59
60
  - lib/uber/version.rb
61
+ - test/delegates_test.rb
60
62
  - test/inheritable_attr_test.rb
61
63
  - test/inheritance_test.rb
62
64
  - test/options_test.rb
@@ -74,25 +76,27 @@ require_paths:
74
76
  - lib
75
77
  required_ruby_version: !ruby/object:Gem::Requirement
76
78
  requirements:
77
- - - '>='
79
+ - - ">="
78
80
  - !ruby/object:Gem::Version
79
81
  version: '0'
80
82
  required_rubygems_version: !ruby/object:Gem::Requirement
81
83
  requirements:
82
- - - '>='
84
+ - - ">="
83
85
  - !ruby/object:Gem::Version
84
86
  version: '0'
85
87
  requirements: []
86
88
  rubyforge_project:
87
- rubygems_version: 2.2.2
89
+ rubygems_version: 2.2.1
88
90
  signing_key:
89
91
  specification_version: 4
90
92
  summary: Gem-authoring tools like class method inheritance in modules, dynamic options
91
93
  and more.
92
94
  test_files:
95
+ - test/delegates_test.rb
93
96
  - test/inheritable_attr_test.rb
94
97
  - test/inheritance_test.rb
95
98
  - test/options_test.rb
96
99
  - test/test_helper.rb
97
100
  - test/version_test.rb
98
101
  - test/zeugs.rb
102
+ has_rdoc: