tire 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown CHANGED
@@ -1,8 +1,6 @@
1
1
  Tire
2
2
  =========
3
3
 
4
- ![Tire](https://github.com/karmi/tire/raw/master/tire.png)
5
-
6
4
  _Tire_ is a Ruby client for the [ElasticSearch](http://www.elasticsearch.org/) search engine/database.
7
5
 
8
6
  _ElasticSearch_ is a scalable, distributed, cloud-ready, highly-available,
@@ -2,34 +2,99 @@
2
2
  # Template for generating a no-frills Rails application with support for ElasticSearch full-text search via Tire
3
3
  # ===================================================================================================================
4
4
  #
5
- # This file creates a basic Rails application with support for ElasticSearch full-text via the Tire gem
5
+ # This file creates a basic, fully working Rails application
6
+ # with support for ElasticSearch full-text search via the Tire gem.
6
7
  #
7
- # Run it like this:
8
8
  #
9
- # rails new searchapp -m https://github.com/karmi/tire/raw/master/examples/rails-application-template.rb
9
+ # Requirements
10
+ # ------------
10
11
  #
12
+ # * Ruby >= 1.8.7
13
+ # * Rubygems
14
+ # * Rails 3
15
+ #
16
+ #
17
+ # Usage
18
+ # -----
19
+ #
20
+ # $ rails new searchapp -m https://github.com/karmi/tire/raw/master/examples/rails-application-template.rb
21
+ #
22
+ # ===================================================================================================================
23
+
24
+ require 'rubygems'
25
+ require 'restclient'
26
+
27
+ at_exit do
28
+ say_status "Stop", "ElasticSearch", :yellow
29
+
30
+ pid = File.read("#{destination_root}/tmp/pids/elasticsearch.pid") rescue nil
31
+ run "kill #{pid}" if pid
32
+ end
11
33
 
12
34
  run "rm public/index.html"
13
35
  run "rm public/images/rails.png"
14
36
  run "touch tmp/.gitignore log/.gitignore vendor/.gitignore"
15
37
 
38
+ run "rm -f .gitignore"
39
+ file ".gitignore", <<-END.gsub(/ /, '')
40
+ .DS_Store
41
+ log/*.log
42
+ tmp/**/*
43
+ config/database.yml
44
+ db/*.sqlite3
45
+ vendor/elasticsearch-0.16.0/
46
+ END
47
+
16
48
  git :init
17
49
  git :add => '.'
18
50
  git :commit => "-m 'Initial commit: Clean application'"
19
51
 
52
+ unless (RestClient.get('http://localhost:9200') rescue false)
53
+ COMMAND = <<-COMMAND.gsub(/^ /, '')
54
+ curl -k -L -# -o elasticsearch-0.16.0.tar.gz \
55
+ "http://github.com/downloads/elasticsearch/elasticsearch/elasticsearch-0.16.0.tar.gz"
56
+ tar -zxf elasticsearch-0.16.0.tar.gz
57
+ rm -f elasticsearch-0.16.0.tar.gz
58
+ ./elasticsearch-0.16.0/bin/elasticsearch -p #{destination_root}/tmp/pids/elasticsearch.pid
59
+ COMMAND
60
+
61
+ puts "\n"
62
+ say_status "ERROR", "ElasticSearch not running!\n", :red
63
+ puts '-'*80
64
+ say_status '', "It appears that ElasticSearch is not running on this machine."
65
+ say_status '', "Is it installed? Do you want me to install it for you with this command?\n\n"
66
+ COMMAND.each_line { |l| say_status '', "$ #{l}" }
67
+ puts
68
+ say_status '', "(To uninstall, just remove the generated application directory.)"
69
+ puts '-'*80, ''
70
+
71
+ if yes?("Install ElasticSearch?", :bold)
72
+ puts
73
+ say_status "Install", "ElasticSearch", :yellow
74
+
75
+ commands = COMMAND.split("\n")
76
+ exec = commands.pop
77
+ inside("vendor") do
78
+ commands.each { |command| run command }
79
+ run "(#{exec})" # Launch ElasticSearch in subshell
80
+ end
81
+ end
82
+ end
83
+
20
84
  puts
21
85
  say_status "Rubygems", "Adding Rubygems into Gemfile...\n", :yellow
22
- puts '-'*80, ''
86
+ puts '-'*80, ''; sleep 1
23
87
 
24
- gem 'tire', :git => 'https://github.com/karmi/tire.git', :branch => 'activemodel'
88
+ gem 'tire'
25
89
  gem 'will_paginate', '~>3.0.pre'
90
+
26
91
  git :add => '.'
27
92
  git :commit => "-m 'Added gems'"
28
93
 
29
94
  puts
30
95
  say_status "Rubygems", "Installing Rubygems...", :yellow
96
+ puts '-'*80, ''
31
97
 
32
- puts
33
98
  puts "********************************************************************************"
34
99
  puts " Running `bundle install`. Let's watch a movie!"
35
100
  puts "********************************************************************************", ""
@@ -37,8 +102,8 @@ puts "**************************************************************************
37
102
  run "bundle install"
38
103
 
39
104
  puts
40
- say_status "Model", "Adding search support into the Article model...", :yellow
41
- puts '-'*80, ''
105
+ say_status "Model", "Adding the Article resource...", :yellow
106
+ puts '-'*80, ''; sleep 1
42
107
 
43
108
  generate :scaffold, "Article title:string content:text published_on:date"
44
109
  route "root :to => 'articles#index'"
@@ -47,6 +112,38 @@ rake "db:migrate"
47
112
  git :add => '.'
48
113
  git :commit => "-m 'Added the Article resource'"
49
114
 
115
+ puts
116
+ say_status "Database", "Seeding the database with data...", :yellow
117
+ puts '-'*80, ''; sleep 0.25
118
+
119
+ run "rm -f db/seeds.rb"
120
+ file 'db/seeds.rb', <<-CODE
121
+ contents = [
122
+ 'Lorem ipsum dolor sit amet.',
123
+ 'Consectetur adipisicing elit, sed do eiusmod tempor incididunt.',
124
+ 'Labore et dolore magna aliqua.',
125
+ 'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris.',
126
+ 'Excepteur sint occaecat cupidatat non proident.'
127
+ ]
128
+
129
+ puts "Deleting all articles..."
130
+ Article.delete_all
131
+
132
+ puts "Creating articles..."
133
+ %w[ One Two Three Four Five ].each_with_index do |title, i|
134
+ Article.create :title => title, :content => contents[i], :published_on => i.days.ago.utc
135
+ end
136
+ CODE
137
+
138
+ rake "db:seed"
139
+
140
+ git :add => "db/seeds.rb"
141
+ git :commit => "-m 'Added database seeding script'"
142
+
143
+ puts
144
+ say_status "Model", "Adding search support into the Article model...", :yellow
145
+ puts '-'*80, ''; sleep 1
146
+
50
147
  run "rm -f app/models/article.rb"
51
148
  file 'app/models/article.rb', <<-CODE
52
149
  class Article < ActiveRecord::Base
@@ -64,8 +161,8 @@ CODE
64
161
  git :commit => "-a -m 'Added Tire support into the Article class and an initializer'"
65
162
 
66
163
  puts
67
- say_status "Controller", "Adding controller action, route, and neccessary HTML for search...", :yellow
68
- puts '-'*80, ''
164
+ say_status "Controller", "Adding controller action, route, and HTML for search...", :yellow
165
+ puts '-'*80, ''; sleep 1
69
166
 
70
167
  gsub_file 'app/controllers/articles_controller.rb', %r{# GET /articles/1$}, <<-CODE
71
168
  # GET /articles/search
@@ -104,41 +201,29 @@ CODE
104
201
  git :commit => "-a -m 'Added Tire support into the frontend of application'"
105
202
 
106
203
  puts
107
- say_status "Database", "Seeding the database with data...", :yellow
108
- puts '-'*80, ''
204
+ say_status "Index", "Indexing the database...", :yellow
205
+ puts '-'*80, ''; sleep 0.5
109
206
 
110
- run "rm -f db/seeds.rb"
111
- file 'db/seeds.rb', <<-CODE
112
- contents = [
113
- 'Lorem ipsum dolor sit amet.',
114
- 'Consectetur adipisicing elit, sed do eiusmod tempor incididunt.',
115
- 'Labore et dolore magna aliqua.',
116
- 'Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris.',
117
- 'Excepteur sint occaecat cupidatat non proident.'
118
- ]
119
-
120
- puts "Deleting all articles..."
121
- Article.delete_all
122
-
123
- puts "Creating articles:"
124
- %w[ One Two Three Four Five ].each_with_index do |title, i|
125
- Article.create :title => title, :content => contents[i], :published_on => i.days.ago.utc
126
- end
127
- CODE
128
-
129
- rake "db:seed"
130
-
131
- git :add => "db/seeds.rb"
132
- git :commit => "-m 'Added database seeding script'"
207
+ rake "environment tire:import CLASS='Article' FORCE=true"
133
208
 
134
209
  puts
135
- say_status "Index", "Indexing database...", :yellow
210
+ say_status "Git", "Details about the application:", :yellow
136
211
  puts '-'*80, ''
137
212
 
138
- rake "environment tire:import CLASS='Article' FORCE=true"
213
+ run "git log --reverse --pretty=format:'%Cblue%h%Creset | %s'"
214
+
215
+ if (begin; RestClient.get('http://localhost:3000'); rescue Errno::ECONNREFUSED; false; rescue Exception; true; end)
216
+ puts "\n"
217
+ say_status "ERROR", "Some other application is running on port 3000!\n", :red
218
+ puts '-'*80
219
+
220
+ port = ask("Please provide free port:", :bold)
221
+ else
222
+ port = '3000'
223
+ end
139
224
 
140
225
  puts "", "="*80
141
- say_status "DONE", "\e[1mStarting the application. Open http://localhost:3000 and search for something...\e[0m", :yellow
226
+ say_status "DONE", "\e[1mStarting the application. Open http://localhost:#{port}\e[0m", :yellow
142
227
  puts "="*80, ""
143
228
 
144
- run "rails server"
229
+ run "rails server --port=#{port}"
@@ -9,7 +9,7 @@ module Tire
9
9
  base.send :after_destroy, :update_elastic_search_index
10
10
  end
11
11
 
12
- if base.respond_to?(:before_destroy) && !base.respond_to?(:destroyed?)
12
+ if base.respond_to?(:before_destroy) && !base.instance_methods.include?('destroyed?')
13
13
  base.class_eval do
14
14
  before_destroy { @destroyed = true }
15
15
  def destroyed?; !!@destroyed; end
data/lib/tire/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Tire
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -158,6 +158,14 @@ module Tire
158
158
  @model.save
159
159
  end
160
160
 
161
+ should_eventually "not define destroyed? if class already implements it" do
162
+ load File.expand_path('../../models/active_model_article_with_callbacks.rb', __FILE__)
163
+
164
+ # TODO: Find a way how to break the old implementation:
165
+ # if base.respond_to?(:before_destroy) && !base.respond_to?(:destroyed?)
166
+ ActiveModelArticleWithCallbacks.expects(:class_eval).never
167
+ end
168
+
161
169
  should "fire :after_save callbacks" do
162
170
  @model = ActiveModelArticleWithCallbacks.new
163
171
  @model.expects(:update_elastic_search_index)
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tire
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 0
10
- version: 0.1.0
9
+ - 1
10
+ version: 0.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Karel Minarik
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-05-01 00:00:00 +02:00
18
+ date: 2011-05-02 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency