elasticsearch-rails 0.0.0 → 0.1.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE.txt +10 -19
- data/README.md +56 -14
- data/Rakefile +52 -0
- data/elasticsearch-rails.gemspec +33 -15
- data/lib/elasticsearch/rails/version.rb +1 -1
- data/lib/rails/templates/01-basic.rb +318 -0
- data/lib/rails/templates/02-pretty.rb +284 -0
- data/lib/rails/templates/03-expert.rb +910 -0
- metadata +192 -10
data/LICENSE.txt
CHANGED
@@ -1,22 +1,13 @@
|
|
1
|
-
Copyright (c)
|
1
|
+
Copyright (c) 2014 Elasticsearch
|
2
2
|
|
3
|
-
|
3
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
you may not use this file except in compliance with the License.
|
5
|
+
You may obtain a copy of the License at
|
4
6
|
|
5
|
-
|
6
|
-
a copy of this software and associated documentation files (the
|
7
|
-
"Software"), to deal in the Software without restriction, including
|
8
|
-
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
-
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
-
permit persons to whom the Software is furnished to do so, subject to
|
11
|
-
the following conditions:
|
7
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
12
8
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
-
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
-
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
-
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
-
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
9
|
+
Unless required by applicable law or agreed to in writing, software
|
10
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
See the License for the specific language governing permissions and
|
13
|
+
limitations under the License.
|
data/README.md
CHANGED
@@ -1,29 +1,71 @@
|
|
1
1
|
# Elasticsearch::Rails
|
2
2
|
|
3
|
-
|
3
|
+
The `elasticsearch-rails` library is a companion for the
|
4
|
+
the [`elasticsearch-model`](https://github.com/elasticsearch/elasticsearch-rails/tree/master/elasticsearch-model)
|
5
|
+
library, providing features suitable for Ruby on Rails applications.
|
6
|
+
|
7
|
+
The library is compatible with Ruby 1.9.3 and higher.
|
4
8
|
|
5
9
|
## Installation
|
6
10
|
|
7
|
-
|
11
|
+
Install the package from [Rubygems](https://rubygems.org):
|
8
12
|
|
9
|
-
gem
|
13
|
+
gem install elasticsearch-rails --pre
|
10
14
|
|
11
|
-
|
15
|
+
To use an unreleased version, either add it to your `Gemfile` for [Bundler](http://bundler.io):
|
12
16
|
|
13
|
-
|
17
|
+
gem 'elasticsearch-rails', git: 'git://github.com/elasticsearch/elasticsearch-rails.git'
|
14
18
|
|
15
|
-
|
19
|
+
or install it from a source code checkout:
|
16
20
|
|
17
|
-
|
21
|
+
git clone https://github.com/elasticsearch/elasticsearch-rails.git
|
22
|
+
cd elasticsearch-rails/elasticsearch-rails
|
23
|
+
bundle install
|
24
|
+
rake install
|
18
25
|
|
19
26
|
## Usage
|
20
27
|
|
21
|
-
|
28
|
+
You can generate a fully working example Ruby on Rails application, with an `Article` model and a search form,
|
29
|
+
to play with (it even downloads _Elasticsearch_ itself, generates the application skeleton and leaves you with
|
30
|
+
a _Git_ repository to explore the steps and the code):
|
31
|
+
|
32
|
+
```bash
|
33
|
+
rails new searchapp --skip --skip-bundle --template https://raw.github.com/elasticsearch/elasticsearch-rails/master/elasticsearch-rails/lib/rails/templates/01-basic.rb
|
34
|
+
```
|
35
|
+
|
36
|
+
Run the same command with the `02-pretty` template to add features such as a custom `Article.search` method,
|
37
|
+
result highlighting and [_Bootstrap_](http://getbootstrap.com) integration:
|
38
|
+
|
39
|
+
```bash
|
40
|
+
rails new searchapp --skip --skip-bundle --template https://raw.github.com/elasticsearch/elasticsearch-rails/master/elasticsearch-rails/lib/rails/templates/02-pretty.rb
|
41
|
+
```
|
42
|
+
|
43
|
+
NOTE: A third, much more complex template, demonstrating other features such as faceted navigation or
|
44
|
+
query suggestions is being worked on.
|
45
|
+
|
46
|
+
## TODO
|
47
|
+
|
48
|
+
This is an initial release of the `elasticsearch-rails` library. Many more features are planned and/or
|
49
|
+
being worked on, such as:
|
50
|
+
|
51
|
+
* Rake tasks for convenient (re)indexing your models from the command line
|
52
|
+
* Hooking into Rails' notification system to display Elasticsearch related statistics in the application log
|
53
|
+
* Instrumentation support for NewRelic integration
|
54
|
+
|
55
|
+
## License
|
56
|
+
|
57
|
+
This software is licensed under the Apache 2 license, quoted below.
|
58
|
+
|
59
|
+
Copyright (c) 2014 Elasticsearch <http://www.elasticsearch.org>
|
60
|
+
|
61
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
62
|
+
you may not use this file except in compliance with the License.
|
63
|
+
You may obtain a copy of the License at
|
22
64
|
|
23
|
-
|
65
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
24
66
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
67
|
+
Unless required by applicable law or agreed to in writing, software
|
68
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
69
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
70
|
+
See the License for the specific language governing permissions and
|
71
|
+
limitations under the License.
|
data/Rakefile
CHANGED
@@ -1 +1,53 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
|
+
|
3
|
+
desc "Run unit tests"
|
4
|
+
task :default => 'test:unit'
|
5
|
+
task :test => 'test:unit'
|
6
|
+
|
7
|
+
# ----- Test tasks ------------------------------------------------------------
|
8
|
+
|
9
|
+
require 'rake/testtask'
|
10
|
+
namespace :test do
|
11
|
+
task :ci_reporter do
|
12
|
+
ENV['CI_REPORTS'] ||= 'tmp/reports'
|
13
|
+
require 'ci/reporter/rake/minitest'
|
14
|
+
Rake::Task['ci:setup:minitest'].invoke
|
15
|
+
end
|
16
|
+
|
17
|
+
Rake::TestTask.new(:unit) do |test|
|
18
|
+
Rake::Task['test:ci_reporter'].invoke if ENV['CI']
|
19
|
+
test.libs << 'lib' << 'test'
|
20
|
+
test.test_files = FileList["test/unit/**/*_test.rb"]
|
21
|
+
# test.verbose = true
|
22
|
+
# test.warning = true
|
23
|
+
end
|
24
|
+
|
25
|
+
Rake::TestTask.new(:integration) do |test|
|
26
|
+
Rake::Task['test:ci_reporter'].invoke if ENV['CI']
|
27
|
+
test.libs << 'lib' << 'test'
|
28
|
+
test.test_files = FileList["test/integration/**/*_test.rb"]
|
29
|
+
end
|
30
|
+
|
31
|
+
Rake::TestTask.new(:all) do |test|
|
32
|
+
Rake::Task['test:ci_reporter'].invoke if ENV['CI']
|
33
|
+
test.libs << 'lib' << 'test'
|
34
|
+
test.test_files = FileList["test/unit/**/*_test.rb", "test/integration/**/*_test.rb"]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# ----- Documentation tasks ---------------------------------------------------
|
39
|
+
|
40
|
+
require 'yard'
|
41
|
+
YARD::Rake::YardocTask.new(:doc) do |t|
|
42
|
+
t.options = %w| --embed-mixins --markup=markdown |
|
43
|
+
end
|
44
|
+
|
45
|
+
# ----- Code analysis tasks ---------------------------------------------------
|
46
|
+
|
47
|
+
if defined?(RUBY_VERSION) && RUBY_VERSION > '1.9'
|
48
|
+
require 'cane/rake_task'
|
49
|
+
Cane::RakeTask.new(:quality) do |cane|
|
50
|
+
cane.abc_max = 15
|
51
|
+
cane.no_style = true
|
52
|
+
end
|
53
|
+
end
|
data/elasticsearch-rails.gemspec
CHANGED
@@ -3,21 +3,39 @@ lib = File.expand_path('../lib', __FILE__)
|
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
4
|
require 'elasticsearch/rails/version'
|
5
5
|
|
6
|
-
Gem::Specification.new do |
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "elasticsearch-rails"
|
8
|
+
s.version = Elasticsearch::Rails::VERSION
|
9
|
+
s.authors = ["Karel Minarik"]
|
10
|
+
s.email = ["karel.minarik@elasticsearch.org"]
|
11
|
+
s.description = "Ruby on Rails integrations for Elasticsearch."
|
12
|
+
s.summary = "Ruby on Rails integrations for Elasticsearch."
|
13
|
+
s.homepage = "https://github.com/elasticsearch/elasticsearch-rails/"
|
14
|
+
s.license = "Apache 2"
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
s.files = `git ls-files`.split($/)
|
17
|
+
s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
19
|
+
s.require_paths = ["lib"]
|
20
20
|
|
21
|
-
|
22
|
-
|
21
|
+
s.extra_rdoc_files = [ "README.md", "LICENSE.txt" ]
|
22
|
+
s.rdoc_options = [ "--charset=UTF-8" ]
|
23
|
+
|
24
|
+
s.add_development_dependency "bundler", "~> 1.3"
|
25
|
+
s.add_development_dependency "rake"
|
26
|
+
|
27
|
+
s.add_development_dependency "shoulda-context"
|
28
|
+
s.add_development_dependency "mocha"
|
29
|
+
s.add_development_dependency "turn"
|
30
|
+
s.add_development_dependency "yard"
|
31
|
+
s.add_development_dependency "ruby-prof"
|
32
|
+
s.add_development_dependency "pry"
|
33
|
+
s.add_development_dependency "ci_reporter"
|
34
|
+
|
35
|
+
if defined?(RUBY_VERSION) && RUBY_VERSION > '1.9'
|
36
|
+
s.add_development_dependency "simplecov"
|
37
|
+
s.add_development_dependency "cane"
|
38
|
+
s.add_development_dependency "require-prof"
|
39
|
+
s.add_development_dependency "coveralls"
|
40
|
+
end
|
23
41
|
end
|
@@ -0,0 +1,318 @@
|
|
1
|
+
# =====================================================================================================
|
2
|
+
# Template for generating a no-frills Rails application with support for Elasticsearch full-text search
|
3
|
+
# =====================================================================================================
|
4
|
+
#
|
5
|
+
# This file creates a basic, fully working Rails application with support for Elasticsearch full-text
|
6
|
+
# search via the `elasticsearch-rails` gem; https://github.com/elasticsearch/elasticsearch-rails.
|
7
|
+
#
|
8
|
+
# Requirements:
|
9
|
+
# -------------
|
10
|
+
#
|
11
|
+
# * Git
|
12
|
+
# * Ruby >= 1.9.3
|
13
|
+
# * Rails >= 4
|
14
|
+
# * Java >= 7 (for Elasticsearch)
|
15
|
+
#
|
16
|
+
# Usage:
|
17
|
+
# ------
|
18
|
+
#
|
19
|
+
# $ rails new searchapp --skip --skip-bundle --template https://raw.github.com/elasticsearch/elasticsearch-rails/master/elasticsearch-rails/lib/rails/templates/01-basic.rb
|
20
|
+
#
|
21
|
+
# =====================================================================================================
|
22
|
+
|
23
|
+
require 'elasticsearch'
|
24
|
+
client = Elasticsearch::Client.new
|
25
|
+
|
26
|
+
at_exit do
|
27
|
+
pid = File.read("#{destination_root}/tmp/pids/elasticsearch.pid") rescue nil
|
28
|
+
if pid
|
29
|
+
say_status "Stop", "Elasticsearch", :yellow
|
30
|
+
run "kill #{pid}"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
run "touch tmp/.gitignore"
|
35
|
+
|
36
|
+
append_to_file ".gitignore", "vendor/elasticsearch-0.90.7/\n"
|
37
|
+
|
38
|
+
git :init
|
39
|
+
git add: "."
|
40
|
+
git commit: "-m 'Initial commit: Clean application'"
|
41
|
+
|
42
|
+
# ----- Download Elasticsearch --------------------------------------------------------------------
|
43
|
+
|
44
|
+
unless (client.ping rescue false)
|
45
|
+
COMMAND = <<-COMMAND.gsub(/^ /, '')
|
46
|
+
curl -# -O "http://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.7.tar.gz"
|
47
|
+
tar -zxf elasticsearch-0.90.7.tar.gz
|
48
|
+
rm -f elasticsearch-0.90.7.tar.gz
|
49
|
+
./elasticsearch-0.90.7/bin/elasticsearch -p #{destination_root}/tmp/pids/elasticsearch.pid
|
50
|
+
COMMAND
|
51
|
+
|
52
|
+
puts "\n"
|
53
|
+
say_status "ERROR", "Elasticsearch not running!\n", :red
|
54
|
+
puts '-'*80
|
55
|
+
say_status '', "It appears that Elasticsearch is not running on this machine."
|
56
|
+
say_status '', "Is it installed? Do you want me to install it for you with this command?\n\n"
|
57
|
+
COMMAND.each_line { |l| say_status '', "$ #{l}" }
|
58
|
+
puts
|
59
|
+
say_status '', "(To uninstall, just remove the generated application directory.)"
|
60
|
+
puts '-'*80, ''
|
61
|
+
|
62
|
+
if yes?("Install Elasticsearch?", :bold)
|
63
|
+
puts
|
64
|
+
say_status "Install", "Elasticsearch", :yellow
|
65
|
+
|
66
|
+
commands = COMMAND.split("\n")
|
67
|
+
exec = commands.pop
|
68
|
+
inside("vendor") do
|
69
|
+
commands.each { |command| run command }
|
70
|
+
run "(#{exec})" # Launch Elasticsearch in subshell
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# ----- Add README --------------------------------------------------------------------------------
|
76
|
+
|
77
|
+
puts
|
78
|
+
say_status "README", "Adding Readme...\n", :yellow
|
79
|
+
puts '-'*80, ''; sleep 0.25
|
80
|
+
|
81
|
+
remove_file 'README.rdoc'
|
82
|
+
|
83
|
+
create_file 'README.rdoc', <<-README
|
84
|
+
= Ruby on Rails and Elasticsearch: Example application
|
85
|
+
|
86
|
+
This application is an example of integrating the {Elasticsearch}[http://www.elasticsearch.org]
|
87
|
+
search engine with the {Ruby On Rails}[http://rubyonrails.org] web framework.
|
88
|
+
|
89
|
+
It has been generated by application templates available at
|
90
|
+
https://github.com/elasticsearch/elasticsearch-rails/tree/master/elasticsearch-rails/lib/rails/templates.
|
91
|
+
|
92
|
+
== [1] Basic
|
93
|
+
|
94
|
+
The `basic` version provides a simple integration for a simple Rails model, `Article`, showing how
|
95
|
+
to include the search engine support in your model, automatically index changes to records,
|
96
|
+
and use a form to perform simple search require 'requests.'
|
97
|
+
|
98
|
+
README
|
99
|
+
|
100
|
+
|
101
|
+
git add: "."
|
102
|
+
git commit: "-m '[01] Added README for the application'"
|
103
|
+
|
104
|
+
# ----- Use Thin ----------------------------------------------------------------------------------
|
105
|
+
|
106
|
+
begin
|
107
|
+
require 'thin'
|
108
|
+
puts
|
109
|
+
say_status "Rubygems", "Adding Thin into Gemfile...\n", :yellow
|
110
|
+
puts '-'*80, '';
|
111
|
+
|
112
|
+
gem 'thin'
|
113
|
+
rescue LoadError
|
114
|
+
end
|
115
|
+
|
116
|
+
# ----- Auxiliary gems ----------------------------------------------------------------------------
|
117
|
+
|
118
|
+
gem 'turn', group: 'test'
|
119
|
+
gem 'mocha', group: 'test', require: 'mocha/setup'
|
120
|
+
|
121
|
+
# ----- Remove CoffeeScript, Sass and "all that jazz" ---------------------------------------------
|
122
|
+
|
123
|
+
comment_lines 'Gemfile', /gem 'coffee/
|
124
|
+
comment_lines 'Gemfile', /gem 'sass/
|
125
|
+
comment_lines 'Gemfile', /gem 'uglifier/
|
126
|
+
|
127
|
+
# ----- Add gems into Gemfile ---------------------------------------------------------------------
|
128
|
+
|
129
|
+
puts
|
130
|
+
say_status "Rubygems", "Adding Elasticsearch libraries into Gemfile...\n", :yellow
|
131
|
+
puts '-'*80, ''; sleep 0.75
|
132
|
+
|
133
|
+
gem 'elasticsearch', git: 'git@github.com:elasticsearch/elasticsearch-ruby.git'
|
134
|
+
gem 'elasticsearch-model', git: 'git@github.com:elasticsearch/elasticsearch-rails.git'
|
135
|
+
gem 'elasticsearch-rails', git: 'git@github.com:elasticsearch/elasticsearch-rails.git'
|
136
|
+
|
137
|
+
# ----- Install gems ------------------------------------------------------------------------------
|
138
|
+
|
139
|
+
puts
|
140
|
+
say_status "Rubygems", "Installing Rubygems...", :yellow
|
141
|
+
puts '-'*80, ''
|
142
|
+
|
143
|
+
run "bundle install"
|
144
|
+
|
145
|
+
git add: "Gemfile*"
|
146
|
+
git commit: "-m 'Added libraries into Gemfile'"
|
147
|
+
|
148
|
+
# ----- Generate Article resource -----------------------------------------------------------------
|
149
|
+
|
150
|
+
puts
|
151
|
+
say_status "Model", "Generating the Article resource...", :yellow
|
152
|
+
puts '-'*80, ''; sleep 0.75
|
153
|
+
|
154
|
+
generate :scaffold, "Article title:string content:text published_on:date"
|
155
|
+
route "root to: 'articles#index'"
|
156
|
+
rake "db:migrate"
|
157
|
+
|
158
|
+
git add: "."
|
159
|
+
git commit: "-m 'Added the generated Article resource'"
|
160
|
+
|
161
|
+
# ----- Add Elasticsearch integration into the model ----------------------------------------------
|
162
|
+
|
163
|
+
puts
|
164
|
+
say_status "Model", "Adding search support into the Article model...", :yellow
|
165
|
+
puts '-'*80, ''; sleep 0.25
|
166
|
+
|
167
|
+
run "rm -f app/models/article.rb"
|
168
|
+
file 'app/models/article.rb', <<-CODE
|
169
|
+
class Article < ActiveRecord::Base
|
170
|
+
include Elasticsearch::Model
|
171
|
+
include Elasticsearch::Model::Callbacks
|
172
|
+
end
|
173
|
+
CODE
|
174
|
+
|
175
|
+
git commit: "-a -m 'Added Elasticsearch support into the Article model'"
|
176
|
+
|
177
|
+
# ----- Add Elasticsearch integration into the interface ------------------------------------------
|
178
|
+
|
179
|
+
puts
|
180
|
+
say_status "Controller", "Adding controller action, route, and HTML for searching...", :yellow
|
181
|
+
puts '-'*80, ''; sleep 0.25
|
182
|
+
|
183
|
+
inject_into_file 'app/controllers/articles_controller.rb', before: %r|^\s*# GET /articles/1$| do
|
184
|
+
<<-CODE
|
185
|
+
|
186
|
+
# GET /articles/search
|
187
|
+
def search
|
188
|
+
@articles = Article.search(params[:q]).records
|
189
|
+
|
190
|
+
render action: "index"
|
191
|
+
end
|
192
|
+
|
193
|
+
CODE
|
194
|
+
end
|
195
|
+
|
196
|
+
inject_into_file 'app/views/articles/index.html.erb', after: %r{<h1>Listing articles</h1>} do
|
197
|
+
<<-CODE
|
198
|
+
|
199
|
+
<hr>
|
200
|
+
|
201
|
+
<%= form_tag search_articles_path, method: 'get' do %>
|
202
|
+
<%= label_tag :query %>
|
203
|
+
<%= text_field_tag :q, params[:q] %>
|
204
|
+
<%= submit_tag :search %>
|
205
|
+
<% end %>
|
206
|
+
|
207
|
+
<hr>
|
208
|
+
|
209
|
+
CODE
|
210
|
+
end
|
211
|
+
|
212
|
+
inject_into_file 'app/views/articles/index.html.erb', after: %r{<%= link_to 'New Article', new_article_path %>} do
|
213
|
+
<<-CODE
|
214
|
+
<%= link_to 'All Articles', articles_path if params[:q] %>
|
215
|
+
CODE
|
216
|
+
end
|
217
|
+
|
218
|
+
gsub_file 'config/routes.rb', %r{resources :articles$}, <<-CODE
|
219
|
+
resources :articles do
|
220
|
+
collection { get :search }
|
221
|
+
end
|
222
|
+
CODE
|
223
|
+
|
224
|
+
gsub_file 'test/controllers/articles_controller_test.rb', %r{setup do.*?end}m, <<-CODE
|
225
|
+
setup do
|
226
|
+
@article = articles(:one)
|
227
|
+
|
228
|
+
Article.__elasticsearch__.import
|
229
|
+
Article.__elasticsearch__.refresh_index!
|
230
|
+
end
|
231
|
+
CODE
|
232
|
+
|
233
|
+
inject_into_file 'test/controllers/articles_controller_test.rb', after: %r{test "should get index" do.*?end}m do
|
234
|
+
<<-CODE
|
235
|
+
|
236
|
+
|
237
|
+
test "should get search results" do
|
238
|
+
get :search, q: 'mystring'
|
239
|
+
assert_response :success
|
240
|
+
assert_not_nil assigns(:articles)
|
241
|
+
assert_equal 2, assigns(:articles).size
|
242
|
+
end
|
243
|
+
CODE
|
244
|
+
end
|
245
|
+
|
246
|
+
git commit: "-a -m 'Added search form and controller action'"
|
247
|
+
|
248
|
+
# ----- Seed the database -------------------------------------------------------------------------
|
249
|
+
|
250
|
+
puts
|
251
|
+
say_status "Database", "Seeding the database with data...", :yellow
|
252
|
+
puts '-'*80, ''; sleep 0.25
|
253
|
+
|
254
|
+
remove_file "db/seeds.rb"
|
255
|
+
create_file 'db/seeds.rb', %q{
|
256
|
+
contents = [
|
257
|
+
'Lorem ipsum dolor sit amet.',
|
258
|
+
'Consectetur adipisicing elit, sed do eiusmod tempor incididunt.',
|
259
|
+
'Labore et dolore magna aliqua.',
|
260
|
+
'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris.',
|
261
|
+
'Excepteur sint occaecat cupidatat non proident.'
|
262
|
+
]
|
263
|
+
|
264
|
+
puts "Deleting all articles..."
|
265
|
+
Article.delete_all
|
266
|
+
|
267
|
+
unless ENV['COUNT']
|
268
|
+
|
269
|
+
puts "Creating articles..."
|
270
|
+
%w[ One Two Three Four Five ].each_with_index do |title, i|
|
271
|
+
Article.create title: title, content: contents[i], published_on: i.days.ago.utc
|
272
|
+
end
|
273
|
+
|
274
|
+
else
|
275
|
+
|
276
|
+
print "Generating articles..."
|
277
|
+
(1..ENV['COUNT'].to_i).each_with_index do |title, i|
|
278
|
+
Article.create title: "Title #{title}", content: 'Lorem ipsum dolor', published_on: i.days.ago.utc
|
279
|
+
print '.' if i % ENV['COUNT'].to_i/10 == 0
|
280
|
+
end
|
281
|
+
puts "\n"
|
282
|
+
|
283
|
+
end
|
284
|
+
}
|
285
|
+
|
286
|
+
run "rails runner 'Article.__elasticsearch__.create_index! force: true'"
|
287
|
+
rake "db:seed"
|
288
|
+
|
289
|
+
git add: "db/seeds.rb"
|
290
|
+
git commit: "-m 'Added the database seeding script'"
|
291
|
+
|
292
|
+
# ----- Print Git log -----------------------------------------------------------------------------
|
293
|
+
|
294
|
+
puts
|
295
|
+
say_status "Git", "Details about the application:", :yellow
|
296
|
+
puts '-'*80, ''
|
297
|
+
|
298
|
+
git tag: "basic"
|
299
|
+
git log: "--reverse --oneline"
|
300
|
+
|
301
|
+
# ----- Start the application ---------------------------------------------------------------------
|
302
|
+
|
303
|
+
require 'net/http'
|
304
|
+
if (begin; Net::HTTP.get(URI('http://localhost:3000')); rescue Errno::ECONNREFUSED; false; rescue Exception; true; end)
|
305
|
+
puts "\n"
|
306
|
+
say_status "ERROR", "Some other application is running on port 3000!\n", :red
|
307
|
+
puts '-'*80
|
308
|
+
|
309
|
+
port = ask("Please provide free port:", :bold)
|
310
|
+
else
|
311
|
+
port = '3000'
|
312
|
+
end
|
313
|
+
|
314
|
+
puts "", "="*80
|
315
|
+
say_status "DONE", "\e[1mStarting the application.\e[0m", :yellow
|
316
|
+
puts "="*80, ""
|
317
|
+
|
318
|
+
run "rails server --port=#{port}"
|