sunspot_matchers 2.1.1.1 → 2.1.1.2

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: bc88959ffa78a318aa2d62ba86b2f6c705a3dee6
4
- data.tar.gz: 824335cb1d2666ac6f89988a3e83648315f00ef6
3
+ metadata.gz: 2f9638b2e0405f2318ea981cbc3f943391b3c245
4
+ data.tar.gz: 3393b79ea2608a515e1eabb9f10ecf7e314d0ead
5
5
  SHA512:
6
- metadata.gz: 01db4c36185a4bb873f4581fbfd1b65de29cdc441b60a7882de3db1334a04940dc9d662bba83e8d5de1a05262e86cb5b4e81b774a8a062c4949e80e81551bb22
7
- data.tar.gz: a3d1ed05461237b7707a9651cd37b1191d3cd391580dc7696c1b6a214ea92cb74cd6d58b80518e5bcdbb81cc720f905efcf5bfa5fa04f68761daee26ba47e40f
6
+ metadata.gz: a3ab73b9fdc51ad5ac5f339a0550a67d4130853946bbe3b0f56711f430bc942194bae261cb6f84d0ddeb421aed7865e6176df3e23c97012f1fcc9b108eee0f39
7
+ data.tar.gz: b14ea7b125f77710509c675eab598add202af4a07667c0fbdf9bdbe6560ebe6ade8768f29107ce5953511cf306c4f8ea9949dfee37f02d14660905916ce4186a
data/README.markdown CHANGED
@@ -66,6 +66,18 @@ You can also use the shorthand syntax:
66
66
  it { should have_searchable_field(:name) }
67
67
  end
68
68
 
69
+ ## have_dynamic_field
70
+
71
+ If you want to verify that a model has a dynamic searchable field, you can use this matcher:
72
+
73
+ `Post.should have_dynamic_field(:commenter_read)`
74
+
75
+ You can also use the shorthand syntax:
76
+
77
+ describe User do
78
+ it { should have_dynamic_field(:commenter_read) }
79
+ end
80
+
69
81
  ## have_search_params
70
82
 
71
83
  This is where the bulk of the functionality lies. There are seven types of search matches you can perform: `keywords` or `fulltext`,
@@ -293,4 +305,4 @@ These are used like:
293
305
  assert_is_search_for Sunspot.session, Blog
294
306
  assert_is_not_search_for Sunspot.session, Person
295
307
 
296
- Check out the test/sunspot_matchers_test.rb for more examples
308
+ Check out the test/sunspot_matchers_test.rb for more examples
@@ -331,8 +331,7 @@ module SunspotMatchers
331
331
 
332
332
  def matches?(klass_or_object)
333
333
  @klass = klass_or_object.class.name == 'Class' ? klass_or_object : klass_or_object.class
334
- @sunspot = Sunspot::Setup.for(@klass)
335
- @sunspot && (@sunspot.all_text_fields + @sunspot.fields).collect(&:name).include?(@field)
334
+ sunspot && fields_to_match.include?(@field)
336
335
  end
337
336
 
338
337
  def description
@@ -347,11 +346,43 @@ module SunspotMatchers
347
346
  def failure_message_when_negated
348
347
  "expected class: #{@klass} NOT to have searchable field: #{@field}"
349
348
  end
349
+
350
+ def sunspot
351
+ @sunspot ||= Sunspot::Setup.for(@klass)
352
+ end
353
+
354
+ def fields_to_match
355
+ (sunspot.all_text_fields + sunspot.fields).collect(&:name)
356
+ end
350
357
  end
351
358
 
352
359
  def have_searchable_field(field)
353
360
  HaveSearchableField.new(field)
354
361
  end
362
+
363
+ class HaveDynamicField < HaveSearchableField
364
+ def description
365
+ "have dynamic searchable field '#{@field}'"
366
+ end
367
+
368
+ def failure_message
369
+ message = "expected class: #{@klass} to have dynamic searchable field: #{@field}"
370
+ message << ", but Sunspot was not configured on #{@klass}" unless @sunspot
371
+ end
372
+
373
+ def failure_message_when_negated
374
+ "expected class: #{@klass} NOT to have dynamic searchable field: #{@field}"
375
+ end
376
+
377
+ def fields_to_match
378
+ sunspot.dynamic_field_factories.collect(&:name)
379
+ end
380
+ end
381
+
382
+ def have_dynamic_field(field)
383
+ HaveDynamicField.new(field)
384
+ end
385
+
355
386
  end
356
387
 
357
388
  class AnyParam < String
@@ -1,3 +1,3 @@
1
1
  module SunspotMatchers
2
- VERSION = "2.1.1.1"
2
+ VERSION = "2.1.1.2"
3
3
  end
@@ -0,0 +1,30 @@
1
+ require 'sunspot'
2
+ require 'sunspot_matchers'
3
+ require 'rspec'
4
+
5
+ describe SunspotMatchers::HaveDynamicField do
6
+ let(:matcher) do
7
+ described_class.new(:field).tap do |matcher|
8
+ matcher.matches? klass
9
+ end
10
+ end
11
+
12
+ context "when a class has no searchable fields" do
13
+ let(:klass) { NotALotGoingOn = Class.new }
14
+
15
+ it "gives Sunspot configuration error" do
16
+ expect(matcher.failure_message).to match(/Sunspot was not configured/)
17
+ end
18
+ end
19
+
20
+ context "when a class has an unexpected searchable field" do
21
+ let(:klass) { IndexedWithWrongThings = Class.new }
22
+ before do
23
+ Sunspot.setup(klass) { text :parachute }
24
+ end
25
+
26
+ it "does not have an error" do
27
+ expect(matcher.failure_message).to be_nil
28
+ end
29
+ end
30
+ end
@@ -18,6 +18,7 @@ Sunspot.setup(Post) do
18
18
  integer :popularity
19
19
  time :published_at
20
20
  float :average_rating
21
+ dynamic_boolean(:commenter_read)
21
22
  end
22
23
 
23
24
  Sunspot.setup(Blog) do
@@ -815,8 +816,9 @@ describe "Sunspot Matchers" do
815
816
  expect(have_searchable_field(field_name).description).to eq description
816
817
  end
817
818
 
818
- it "works with instances as well as classes" do
819
- expect(Post).to have_searchable_field(:body)
819
+ context "when given an instance" do
820
+ subject {Post.new}
821
+ it { is_expected.to have_searchable_field(:body) }
820
822
  end
821
823
 
822
824
  it "succeeds if the model has the given field" do
@@ -833,4 +835,29 @@ describe "Sunspot Matchers" do
833
835
  expect(Person).to_not have_searchable_field(:name)
834
836
  end
835
837
  end
838
+
839
+ describe "have_dynamic_field" do
840
+ it "provides a description" do
841
+ field_name = :commenter_read
842
+ description = "have dynamic searchable field '#{field_name}'"
843
+ expect(have_dynamic_field(field_name).description).to eq description
844
+ end
845
+
846
+ context "when given an instance" do
847
+ subject {Post.new}
848
+ it { is_expected.to have_dynamic_field(:commenter_read) }
849
+ end
850
+
851
+ it "succeeds if the model has the given field" do
852
+ expect(Post).to have_dynamic_field(:commenter_read)
853
+ end
854
+
855
+ it "fails if the model does not have the given field" do
856
+ expect(Post).to_not have_dynamic_field(:potato)
857
+ end
858
+
859
+ it "fails if the model does not have any dynamic fields" do
860
+ expect(Person).to_not have_dynamic_field(:name)
861
+ end
862
+ end
836
863
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sunspot_matchers
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1.1
4
+ version: 2.1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joseph Palermo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-14 00:00:00.000000000 Z
11
+ date: 2015-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -84,6 +84,7 @@ files:
84
84
  - lib/sunspot_matchers/sunspot_session_spy.rb
85
85
  - lib/sunspot_matchers/test_helper.rb
86
86
  - lib/sunspot_matchers/version.rb
87
+ - spec/have_dynamic_field_matcher_spec.rb
87
88
  - spec/have_searchable_field_matcher_spec.rb
88
89
  - spec/sunspot_matchers_spec.rb
89
90
  - sunspot_matchers.gemspec