Skip to content

Commit 48d7132

Browse files
committed
[STORE] Added the default Repository::Class for convenience
Instead of: class MyRepository include Elasticsearch::Persistence::Repository end repository = MyRepository.new you can do: repository = Elasticsearch::Persistence::Repository.new The module function `new` returns an Elasticsearch::Persistence::Repository::Class instance.
1 parent 4488ea5 commit 48d7132

File tree

4 files changed

+56
-0
lines changed

4 files changed

+56
-0
lines changed

Diff for: elasticsearch-persistence/lib/elasticsearch/persistence.rb

+2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
require 'elasticsearch/persistence/client'
66
require 'elasticsearch/persistence/repository'
77

8+
require 'elasticsearch/persistence/repository/class'
9+
810
module Elasticsearch
911
module Persistence
1012

Diff for: elasticsearch-persistence/lib/elasticsearch/persistence/repository.rb

+4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ module Persistence
33

44
module Repository
55
include Elasticsearch::Persistence::Client
6+
7+
def new(options={}, &block)
8+
Elasticsearch::Persistence::Repository::Class.new options, &block
9+
end; module_function :new
610
end
711
end
812
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
module Elasticsearch
2+
module Persistence
3+
module Repository
4+
5+
class Class
6+
include Elasticsearch::Persistence::Repository
7+
8+
attr_reader :options
9+
10+
def initialize(options={}, &block)
11+
@options = options
12+
block.arity < 1 ? instance_eval(&block) : block.call(self) if block_given?
13+
end
14+
end
15+
16+
end
17+
end
18+
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
require 'test_helper'
2+
3+
class Elasticsearch::Persistence::RepositoryClassTest < Test::Unit::TestCase
4+
context "The default repository class" do
5+
6+
should "be created from the module" do
7+
repository = Elasticsearch::Persistence::Repository.new
8+
assert_instance_of Elasticsearch::Persistence::Repository::Class, repository
9+
end
10+
11+
should "store and access the options" do
12+
repository = Elasticsearch::Persistence::Repository::Class.new foo: 'bar'
13+
assert_equal 'bar', repository.options[:foo]
14+
end
15+
16+
should "instance eval a passed block" do
17+
$foo = 100
18+
repository = Elasticsearch::Persistence::Repository::Class.new() { $foo += 1 }
19+
assert_equal 101, $foo
20+
end
21+
22+
should "call a passed block with self" do
23+
foo = 100
24+
repository = Elasticsearch::Persistence::Repository::Class.new do |r|
25+
assert_instance_of Elasticsearch::Persistence::Repository::Class, r
26+
foo += 1
27+
end
28+
assert_equal 101, foo
29+
end
30+
31+
end
32+
end

0 commit comments

Comments
 (0)