adapter-registry 0.0.2 → 0.0.3

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