adapter-registry 0.0.2 → 0.0.3

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: 0c52ca4709cf9117649e3cbd788129d5f7103546
4
- data.tar.gz: 5b36b1f988433a39986d471a3bd9ba3affaf5255
3
+ metadata.gz: 7796c4ac33f5adc47cdc63953cd67b9401a19e24
4
+ data.tar.gz: ae1834d08824aecff7f61ea81376283e547350a2
5
5
  SHA512:
6
- metadata.gz: 1fe5bb204c7a1c91ffaffb787f4b8aef22554522a50898c12f8423ac2b813a55918b7d0bcf6597a4db266227e7c8f04bb4e14e0bca27affd0f68ccd4ebdcd17d
7
- data.tar.gz: d061613cf4e9473c8acc552d8bbbfa8a5d3e3ef68a7fdafd31363ab2ac453add68e769d04dcf81f92cfa227b938eb2b0420766fe7b601f87b6c2df2a14afeb9e
6
+ metadata.gz: d25dde2668f6c8c26168dfa1413831461b1c830af432174b713fc3855239210305fbb6a8bc7213c67212e6fe6e68e815a566f81c1daff53029c014e5a31ae190
7
+ data.tar.gz: e57bc5c15975af650fe03d1b0d08c9340bf0795a030db72143fd2542d62303239961847ee2e76e48039a0c5eb9e6f8dc0523bc792a692cd7a62741c4a7b813e9
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'http://rubygems.org'
2
+
3
+ group :development do
4
+ gem 'rake'
5
+ gem 'rspec'
6
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,20 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ diff-lcs (1.2.4)
5
+ rake (10.1.0)
6
+ rspec (2.14.0)
7
+ rspec-core (~> 2.14.0)
8
+ rspec-expectations (~> 2.14.0)
9
+ rspec-mocks (~> 2.14.0)
10
+ rspec-core (2.14.2)
11
+ rspec-expectations (2.14.0)
12
+ diff-lcs (>= 1.1.3, < 2.0)
13
+ rspec-mocks (2.14.1)
14
+
15
+ PLATFORMS
16
+ ruby
17
+
18
+ DEPENDENCIES
19
+ rake
20
+ rspec
data/Rakefile ADDED
@@ -0,0 +1,7 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new
5
+
6
+ task default: :spec
7
+ task test: :spec
@@ -14,6 +14,7 @@ Gem::Specification.new do |s|
14
14
  s.description = "Simple adapter registry"
15
15
  s.email = "gems [a] radarservices [d] com"
16
16
  s.files = `git ls-files`.split("\n").reject { |file| file == '.gitignore' }
17
+ s.test_files = `git ls-files -- {spec}/*`.split("\n")
17
18
  s.extra_rdoc_files = %w[LICENSE README.md]
18
19
 
19
20
  s.homepage = "http://github.com/rs-dev/adapter-registry"
@@ -21,4 +22,7 @@ Gem::Specification.new do |s|
21
22
  # s.rubygems_version = "1.8.24"
22
23
  s.summary = "Simple adapter registry for enhancing classes via adapters"
23
24
  s.license = "ISC"
25
+
26
+ s.add_development_dependency(%q<rake>)
27
+ s.add_development_dependency(%q<rspec>)
24
28
  end
@@ -5,7 +5,7 @@ module AdapterRegistry
5
5
  if trait_registry = self[trait]
6
6
  trait_registry.select do |entry|
7
7
  entry[:for].call(context)
8
- end.first.try(:[], :adapter)
8
+ end.map { |entry| entry[:adapter] }.first
9
9
  end
10
10
  end
11
11
 
@@ -1,5 +1,5 @@
1
1
  module AdapterRegistry
2
2
 
3
- VERSION = '0.0.2'
3
+ VERSION = '0.0.3'
4
4
 
5
5
  end
@@ -0,0 +1,74 @@
1
+ require 'spec_helper'
2
+
3
+ class Foo
4
+ include AdapterRegistry::Implementation
5
+ end
6
+
7
+ class Bar
8
+ end
9
+
10
+ describe AdapterRegistry do
11
+ let(:registry) { AdapterRegistry::Registry.new }
12
+
13
+ before(:each) do
14
+ AdapterRegistry.stub(:registry).and_return(registry)
15
+ end
16
+
17
+ context "implements" do
18
+ it "stores an list of traits on the adapter class" do
19
+ Foo.implements(:a, :b)
20
+ Foo.traits.should eq([:a, :b])
21
+ end
22
+ end
23
+
24
+ context "adapts" do
25
+ it "creates a registry entry" do
26
+ Foo.should_receive(:traits).twice.and_return([:trait])
27
+ fn = Proc.new {}
28
+ Foo.adapts(&fn)
29
+ registry.should eq({trait: Set.new([{adapter: Foo, for: fn}])})
30
+ end
31
+ end
32
+
33
+ context "adapts_instance" do
34
+ it "adapts an instance" do
35
+ class Frobnicator < Foo
36
+ implements :frobnication
37
+ end
38
+ Frobnicator.adapts_instance(Foo)
39
+ registry.get_adapter(:frobnication, Foo.new).should eq(Frobnicator)
40
+ registry.get_adapter(:frobnication, Foo).should_not eq(Frobnicator)
41
+ end
42
+ end
43
+
44
+ context "adapts_class" do
45
+ it "adapts a class" do
46
+ class Frobnicator < Foo
47
+ implements :frobnication
48
+ end
49
+ Frobnicator.adapts_class(Foo)
50
+ registry.get_adapter(:frobnication, Foo.new).should_not eq(Frobnicator)
51
+ registry.get_adapter(:frobnication, Foo).should eq(Frobnicator)
52
+ end
53
+ end
54
+
55
+ context "registry" do
56
+ it "provides means to register an adapter" do
57
+ fn = Proc.new {}
58
+ registry.set(:trait, Foo, &fn)
59
+ registry.should eq({trait: Set.new([{adapter: Foo, for: fn}])})
60
+ end
61
+
62
+ it "provides means to query for an adapter providing a match block" do
63
+ registry.set(:trait, Foo) { |context| context.is_a?(Bar) }
64
+ registry.get_adapter(:trait, Bar.new).should eq(Foo)
65
+ end
66
+
67
+ it "provides means to automatically initialize a queried adapter" do
68
+ bar = Bar.new
69
+ registry.set(:trait, Foo) { |context| context.is_a?(Bar) }
70
+ Foo.should_receive(:instance_for).with(bar)
71
+ registry.get(:trait, bar)
72
+ end
73
+ end
74
+ end
@@ -0,0 +1 @@
1
+ require 'adapter-registry'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: adapter-registry
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andreas Kopecky <andreas.kopecky@radarservices.com>
@@ -11,7 +11,35 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
  date: 2013-07-10 00:00:00.000000000 Z
14
- dependencies: []
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rake
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - '>='
27
+ - !ruby/object:Gem::Version
28
+ version: '0'
29
+ - !ruby/object:Gem::Dependency
30
+ name: rspec
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - '>='
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ type: :development
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - '>='
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
15
43
  description: Simple adapter registry
16
44
  email: gems [a] radarservices [d] com
17
45
  executables: []
@@ -20,13 +48,18 @@ extra_rdoc_files:
20
48
  - LICENSE
21
49
  - README.md
22
50
  files:
51
+ - Gemfile
52
+ - Gemfile.lock
23
53
  - LICENSE
24
54
  - README.md
55
+ - Rakefile
25
56
  - adapter-registry.gemspec
26
57
  - lib/adapter-registry.rb
27
58
  - lib/adapter-registry/implementation.rb
28
59
  - lib/adapter-registry/registry.rb
29
60
  - lib/adapter-registry/version.rb
61
+ - spec/lib/adapter_spec.rb
62
+ - spec/spec_helper.rb
30
63
  homepage: http://github.com/rs-dev/adapter-registry
31
64
  licenses:
32
65
  - ISC