diff --git a/elasticsearch-model/lib/elasticsearch/model/indexing.rb b/elasticsearch-model/lib/elasticsearch/model/indexing.rb index 610d6444e..05dfbb8a7 100644 --- a/elasticsearch-model/lib/elasticsearch/model/indexing.rb +++ b/elasticsearch-model/lib/elasticsearch/model/indexing.rb @@ -34,7 +34,7 @@ def as_json(options={}) # Wraps the [index mappings](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping.html) # class Mappings - attr_accessor :options + attr_accessor :options, :type def initialize(type, options={}) raise ArgumentError, "`type` is missing" if type.nil? diff --git a/elasticsearch-model/test/unit/adapter_mongoid_test.rb b/elasticsearch-model/test/unit/adapter_mongoid_test.rb index fbec800d0..ca9b0d20b 100644 --- a/elasticsearch-model/test/unit/adapter_mongoid_test.rb +++ b/elasticsearch-model/test/unit/adapter_mongoid_test.rb @@ -76,7 +76,9 @@ def ids context "Importing" do should "implement the __find_in_batches method" do - DummyClassForMongoid.expects(:all).returns([]) + relation = mock() + relation.stubs(:no_timeout).returns([]) + DummyClassForMongoid.expects(:all).returns(relation) DummyClassForMongoid.__send__ :extend, Elasticsearch::Model::Adapter::Mongoid::Importing DummyClassForMongoid.__find_in_batches do; end diff --git a/elasticsearch-persistence/lib/elasticsearch/persistence/model.rb b/elasticsearch-persistence/lib/elasticsearch/persistence/model.rb index 9dcbd8355..3eb3c3a0d 100644 --- a/elasticsearch-persistence/lib/elasticsearch/persistence/model.rb +++ b/elasticsearch-persistence/lib/elasticsearch/persistence/model.rb @@ -71,7 +71,6 @@ def gateway(&block) delegate :settings, :mappings, :mapping, - :document_type, :document_type=, :index_name, :index_name=, @@ -80,6 +79,13 @@ def gateway(&block) :create_index!, :refresh_index!, to: :gateway + + # forward document type to mappings when set + def document_type(type = nil) + return gateway.document_type unless type + gateway.document_type type + mapping.type = type + end end # Configure the repository based on the model (set up index_name, etc) diff --git a/elasticsearch-persistence/test/integration/model/model_basic_test.rb b/elasticsearch-persistence/test/integration/model/model_basic_test.rb index 172d0bb2f..b43571e6e 100644 --- a/elasticsearch-persistence/test/integration/model/model_basic_test.rb +++ b/elasticsearch-persistence/test/integration/model/model_basic_test.rb @@ -12,6 +12,7 @@ class ::Person include Elasticsearch::Persistence::Model::Rails settings index: { number_of_shards: 1 } + document_type 'human_being' attribute :name, String, mapping: { fields: { @@ -60,7 +61,7 @@ class ::Person assert_equal 'John Smith', document.name assert_equal 'John Smith', Person.find(person.id).name - assert_not_nil Elasticsearch::Persistence.client.get index: 'people', type: 'person', id: person.id + assert_not_nil Elasticsearch::Persistence.client.get index: 'people', type: 'human_being', id: person.id end should "not save an invalid object" do diff --git a/elasticsearch-persistence/test/unit/model_base_test.rb b/elasticsearch-persistence/test/unit/model_base_test.rb index 10141006e..f605ce529 100644 --- a/elasticsearch-persistence/test/unit/model_base_test.rb +++ b/elasticsearch-persistence/test/unit/model_base_test.rb @@ -20,29 +20,53 @@ class DummyBaseModel end should "set the ID from attributes during initialization" do - m = DummyBaseModel.new id: 1 - assert_equal 1, m.id + model = DummyBaseModel.new id: 1 + assert_equal 1, model.id - m = DummyBaseModel.new 'id' => 2 - assert_equal 2, m.id + model = DummyBaseModel.new 'id' => 2 + assert_equal 2, model.id end should "set the ID using setter method" do - m = DummyBaseModel.new id: 1 - assert_equal 1, m.id + model = DummyBaseModel.new id: 1 + assert_equal 1, model.id - m.id = 2 - assert_equal 2, m.id + model.id = 2 + assert_equal 2, model.id end should "have ID in attributes" do - m = DummyBaseModel.new id: 1, name: 'Test' - assert_equal 1, m.attributes[:id] + model = DummyBaseModel.new id: 1, name: 'Test' + assert_equal 1, model.attributes[:id] end should "have the customized inspect method" do - m = DummyBaseModel.new name: 'Test' - assert_match /name\: "Test"/, m.inspect + model = DummyBaseModel.new name: 'Test' + assert_match /name\: "Test"/, model.inspect + end + + context "#document_type" do + setup do + @model = DummyBaseModel + @gateway = mock() + @mapping = mock() + @model.stubs(:gateway).returns(@gateway) + @gateway.stubs(:mapping).returns(@mapping) + @document_type = 'dummybase' + end + + should "forward argument to mapping" do + @gateway.expects(:document_type).with(@document_type).once + @mapping.expects(:type=).with(@document_type).once + @model.document_type @document_type + end + + should "return the value from gateway" do + @gateway.expects(:document_type).once.returns(@document_type) + @mapping.expects(:type=).never + returned_type = @model.document_type + assert_equal @document_type, returned_type + end end end end