slate_algolia 0.0.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,131 @@
1
+ require 'spec_helper'
2
+
3
+ describe Middleman::SlateAlgolia::Index do
4
+ before :each do
5
+ stub_request(:any, %r{.*\.algolia(net\.com|\.net)\/*})
6
+ .to_return(body: '{"hits":[]}')
7
+ end
8
+
9
+ after :each do
10
+ WebMock.reset!
11
+ end
12
+
13
+ describe 'initialize' do
14
+ it 'creates an Algolia Index with the specified name' do
15
+ expect(Algolia::Index).to receive(:new).with('test')
16
+
17
+ Middleman::SlateAlgolia::Index.new(
18
+ application_id: '',
19
+ api_key: '',
20
+ name: 'test'
21
+ )
22
+ end
23
+
24
+ it 'uses the defined API keys for the Algolia Index' do
25
+ expect(Algolia).to receive(:init).with(application_id: 'id', api_key: 'key').and_call_original
26
+
27
+ Middleman::SlateAlgolia::Index.new(
28
+ application_id: 'id',
29
+ api_key: 'key',
30
+ name: ''
31
+ )
32
+ end
33
+ end
34
+
35
+ describe 'flush_queue' do
36
+ it 'calls before_index for each record' do
37
+ dbl = double
38
+ index = Middleman::SlateAlgolia::Index.new(
39
+ application_id: '',
40
+ api_key: '',
41
+ dry_run: false,
42
+ before_index: proc do |record|
43
+ # Verify is not a real method. Just a fake thing on a double
44
+ dbl.verify(record)
45
+ end
46
+ )
47
+
48
+ index.queue_object(objectID: 1)
49
+ index.queue_object(objectID: 2)
50
+
51
+ expect(dbl).to receive(:verify).with(objectID: 1)
52
+ expect(dbl).to receive(:verify).with(objectID: 2)
53
+
54
+ index.flush_queue
55
+ end
56
+
57
+ it 'replaces records via the before_index hook' do
58
+ index = Middleman::SlateAlgolia::Index.new(
59
+ application_id: '',
60
+ api_key: '',
61
+ dry_run: false,
62
+ before_index: proc do |record|
63
+ { objectID: record[:objectID] * 2 }
64
+ end
65
+ )
66
+
67
+ index.queue_object(objectID: 1)
68
+ index.queue_object(objectID: 2)
69
+
70
+ expect(index.instance_variable_get('@index')).to receive(:add_objects)
71
+ .with(
72
+ [
73
+ { objectID: 2 },
74
+ { objectID: 4 }
75
+ ]
76
+ )
77
+
78
+ index.flush_queue
79
+ end
80
+
81
+ it 'creates new records if before_index returns an array' do
82
+ index = Middleman::SlateAlgolia::Index.new(
83
+ application_id: '',
84
+ api_key: '',
85
+ dry_run: false,
86
+ before_index: proc do |record|
87
+ [record, { objectID: record[:objectID] * 4 }]
88
+ end
89
+ )
90
+
91
+ index.queue_object(objectID: 1)
92
+ index.queue_object(objectID: 2)
93
+
94
+ expect(index.instance_variable_get('@index')).to receive(:add_objects)
95
+ .with(
96
+ [
97
+ { objectID: 1 },
98
+ { objectID: 4 },
99
+ { objectID: 2 },
100
+ { objectID: 8 }
101
+ ]
102
+ )
103
+
104
+ index.flush_queue
105
+ end
106
+
107
+ it 'reuses the existing record if the before_index hook has no return' do
108
+ index = Middleman::SlateAlgolia::Index.new(
109
+ application_id: '',
110
+ api_key: '',
111
+ dry_run: false,
112
+ before_index: proc do |record|
113
+ # Wassup!
114
+ end
115
+ )
116
+
117
+ index.queue_object(objectID: 1)
118
+ index.queue_object(objectID: 2)
119
+
120
+ expect(index.instance_variable_get('@index')).to receive(:add_objects)
121
+ .with(
122
+ [
123
+ { objectID: 1 },
124
+ { objectID: 2 }
125
+ ]
126
+ )
127
+
128
+ index.flush_queue
129
+ end
130
+ end
131
+ end
@@ -0,0 +1,24 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper"` to ensure that it is only
4
+ # loaded once.
5
+ #
6
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+
8
+ require 'middleman'
9
+ require 'slate_algolia'
10
+ require 'webmock/rspec'
11
+
12
+ require_relative 'support/given'
13
+ require_relative 'support/fixture'
14
+
15
+ RSpec.configure do |config|
16
+ config.run_all_when_everything_filtered = true
17
+ config.filter_run :focus
18
+
19
+ # Run specs in random order to surface order dependencies. If you find an
20
+ # order dependency and want to debug it, you can fix the order by providing
21
+ # the seed, which is printed after each run.
22
+ # --seed 1234
23
+ config.order = 'random'
24
+ end
@@ -0,0 +1,17 @@
1
+ module Middleman
2
+ module Fixture
3
+ class << self
4
+ def app(&block)
5
+ ENV['MM_ROOT'] = Given::TMP
6
+
7
+ if Middleman::Application.respond_to?(:server)
8
+ app = Middleman::Application.server.inst do
9
+ instance_eval(&block) if block
10
+ end
11
+ end
12
+
13
+ app
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,26 @@
1
+ module Given
2
+ ROOT = File.expand_path('../..', __dir__)
3
+ TMP = File.join(ROOT, 'tmp')
4
+
5
+ class << self
6
+ def fixture(fixture)
7
+ cleanup!
8
+
9
+ `rsync -av ./spec/fixtures/#{fixture}/ #{TMP}/`
10
+ Dir.chdir(TMP)
11
+ end
12
+
13
+ def file(name, content)
14
+ file_path = File.join(TMP, name)
15
+ FileUtils.mkdir_p(File.dirname(file_path))
16
+ File.open(file_path, 'w') do |file|
17
+ file.write(content)
18
+ end
19
+ end
20
+
21
+ def cleanup!
22
+ Dir.chdir(ROOT)
23
+ `rm -rf #{TMP}`
24
+ end
25
+ end
26
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slate_algolia
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joe Wegner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-14 00:00:00.000000000 Z
11
+ date: 2016-10-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: middleman-core
@@ -77,19 +77,30 @@ executables: []
77
77
  extensions: []
78
78
  extra_rdoc_files: []
79
79
  files:
80
+ - ".github/PULL_REQUEST_TEMPLATE.md"
80
81
  - ".gitignore"
82
+ - ".rubocop.yml"
81
83
  - CONTRIBUTING.md
82
84
  - Gemfile
83
85
  - LICENSE
84
86
  - README.md
85
87
  - Rakefile
86
- - features/support/env.rb
87
88
  - lib/middleman_extension.rb
88
89
  - lib/slate_algolia.rb
89
90
  - lib/slate_algolia/extension.rb
90
91
  - lib/slate_algolia/index.rb
91
92
  - lib/slate_algolia/parser.rb
92
93
  - slate_algolia.gemspec
94
+ - spec/extension_spec.rb
95
+ - spec/fixtures/base/build/index.html
96
+ - spec/fixtures/base/config.rb
97
+ - spec/fixtures/base/source/includes/_errors.md
98
+ - spec/fixtures/base/source/index.html.md
99
+ - spec/fixtures/base/source/layouts/layout.html.erb
100
+ - spec/index_spec.rb
101
+ - spec/spec_helper.rb
102
+ - spec/support/fixture.rb
103
+ - spec/support/given.rb
93
104
  homepage:
94
105
  licenses: []
95
106
  metadata: {}
@@ -114,4 +125,13 @@ signing_key:
114
125
  specification_version: 4
115
126
  summary: Quickly and easily index Slate Docs in Algolia
116
127
  test_files:
117
- - features/support/env.rb
128
+ - spec/extension_spec.rb
129
+ - spec/fixtures/base/build/index.html
130
+ - spec/fixtures/base/config.rb
131
+ - spec/fixtures/base/source/includes/_errors.md
132
+ - spec/fixtures/base/source/index.html.md
133
+ - spec/fixtures/base/source/layouts/layout.html.erb
134
+ - spec/index_spec.rb
135
+ - spec/spec_helper.rb
136
+ - spec/support/fixture.rb
137
+ - spec/support/given.rb
@@ -1,4 +0,0 @@
1
- PROJECT_ROOT_PATH = File.dirname(File.dirname(File.dirname(__FILE__)))
2
- require 'middleman-core'
3
- require 'middleman-core/step_definitions'
4
- require File.join(PROJECT_ROOT_PATH, 'lib', 'slate_algolia')