warp-thinking-sphinx 1.2.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENCE +20 -0
- data/README.textile +144 -0
- data/VERSION.yml +4 -0
- data/features/a.rb +17 -0
- data/features/alternate_primary_key.feature +27 -0
- data/features/attribute_transformation.feature +22 -0
- data/features/attribute_updates.feature +33 -0
- data/features/datetime_deltas.feature +66 -0
- data/features/delayed_delta_indexing.feature +37 -0
- data/features/deleting_instances.feature +64 -0
- data/features/direct_attributes.feature +11 -0
- data/features/excerpts.feature +13 -0
- data/features/extensible_delta_indexing.feature +9 -0
- data/features/facets.feature +76 -0
- data/features/facets_across_model.feature +29 -0
- data/features/handling_edits.feature +92 -0
- data/features/retry_stale_indexes.feature +24 -0
- data/features/searching_across_models.feature +20 -0
- data/features/searching_by_model.feature +175 -0
- data/features/searching_with_find_arguments.feature +56 -0
- data/features/sphinx_detection.feature +25 -0
- data/features/sphinx_scopes.feature +35 -0
- data/features/step_definitions/alpha_steps.rb +3 -0
- data/features/step_definitions/beta_steps.rb +7 -0
- data/features/step_definitions/common_steps.rb +178 -0
- data/features/step_definitions/datetime_delta_steps.rb +15 -0
- data/features/step_definitions/delayed_delta_indexing_steps.rb +7 -0
- data/features/step_definitions/extensible_delta_indexing_steps.rb +7 -0
- data/features/step_definitions/facet_steps.rb +92 -0
- data/features/step_definitions/find_arguments_steps.rb +36 -0
- data/features/step_definitions/gamma_steps.rb +15 -0
- data/features/step_definitions/scope_steps.rb +11 -0
- data/features/step_definitions/search_steps.rb +89 -0
- data/features/step_definitions/sphinx_steps.rb +31 -0
- data/features/sti_searching.feature +14 -0
- data/features/support/db/active_record.rb +40 -0
- data/features/support/db/database.example.yml +3 -0
- data/features/support/db/fixtures/alphas.rb +10 -0
- data/features/support/db/fixtures/authors.rb +1 -0
- data/features/support/db/fixtures/betas.rb +10 -0
- data/features/support/db/fixtures/boxes.rb +9 -0
- data/features/support/db/fixtures/categories.rb +1 -0
- data/features/support/db/fixtures/cats.rb +3 -0
- data/features/support/db/fixtures/comments.rb +24 -0
- data/features/support/db/fixtures/delayed_betas.rb +10 -0
- data/features/support/db/fixtures/developers.rb +29 -0
- data/features/support/db/fixtures/dogs.rb +3 -0
- data/features/support/db/fixtures/extensible_betas.rb +10 -0
- data/features/support/db/fixtures/gammas.rb +10 -0
- data/features/support/db/fixtures/people.rb +1001 -0
- data/features/support/db/fixtures/posts.rb +6 -0
- data/features/support/db/fixtures/robots.rb +14 -0
- data/features/support/db/fixtures/tags.rb +27 -0
- data/features/support/db/fixtures/thetas.rb +10 -0
- data/features/support/db/migrations/create_alphas.rb +7 -0
- data/features/support/db/migrations/create_animals.rb +5 -0
- data/features/support/db/migrations/create_authors.rb +3 -0
- data/features/support/db/migrations/create_authors_posts.rb +6 -0
- data/features/support/db/migrations/create_betas.rb +5 -0
- data/features/support/db/migrations/create_boxes.rb +5 -0
- data/features/support/db/migrations/create_categories.rb +3 -0
- data/features/support/db/migrations/create_comments.rb +10 -0
- data/features/support/db/migrations/create_delayed_betas.rb +17 -0
- data/features/support/db/migrations/create_developers.rb +9 -0
- data/features/support/db/migrations/create_extensible_betas.rb +5 -0
- data/features/support/db/migrations/create_gammas.rb +3 -0
- data/features/support/db/migrations/create_people.rb +13 -0
- data/features/support/db/migrations/create_posts.rb +5 -0
- data/features/support/db/migrations/create_robots.rb +5 -0
- data/features/support/db/migrations/create_taggings.rb +5 -0
- data/features/support/db/migrations/create_tags.rb +4 -0
- data/features/support/db/migrations/create_thetas.rb +5 -0
- data/features/support/db/mysql.rb +3 -0
- data/features/support/db/postgresql.rb +3 -0
- data/features/support/env.rb +6 -0
- data/features/support/lib/generic_delta_handler.rb +8 -0
- data/features/support/models/alpha.rb +10 -0
- data/features/support/models/animal.rb +5 -0
- data/features/support/models/author.rb +3 -0
- data/features/support/models/beta.rb +8 -0
- data/features/support/models/box.rb +8 -0
- data/features/support/models/cat.rb +3 -0
- data/features/support/models/category.rb +4 -0
- data/features/support/models/comment.rb +10 -0
- data/features/support/models/delayed_beta.rb +7 -0
- data/features/support/models/developer.rb +16 -0
- data/features/support/models/dog.rb +3 -0
- data/features/support/models/extensible_beta.rb +9 -0
- data/features/support/models/gamma.rb +5 -0
- data/features/support/models/person.rb +23 -0
- data/features/support/models/post.rb +20 -0
- data/features/support/models/robot.rb +8 -0
- data/features/support/models/tag.rb +3 -0
- data/features/support/models/tagging.rb +4 -0
- data/features/support/models/theta.rb +7 -0
- data/features/support/post_database.rb +43 -0
- data/features/support/z.rb +19 -0
- data/lib/thinking_sphinx.rb +212 -0
- data/lib/thinking_sphinx/active_record.rb +306 -0
- data/lib/thinking_sphinx/active_record/attribute_updates.rb +48 -0
- data/lib/thinking_sphinx/active_record/delta.rb +87 -0
- data/lib/thinking_sphinx/active_record/has_many_association.rb +28 -0
- data/lib/thinking_sphinx/active_record/scopes.rb +39 -0
- data/lib/thinking_sphinx/adapters/abstract_adapter.rb +42 -0
- data/lib/thinking_sphinx/adapters/mysql_adapter.rb +54 -0
- data/lib/thinking_sphinx/adapters/postgresql_adapter.rb +136 -0
- data/lib/thinking_sphinx/association.rb +243 -0
- data/lib/thinking_sphinx/attribute.rb +340 -0
- data/lib/thinking_sphinx/class_facet.rb +15 -0
- data/lib/thinking_sphinx/configuration.rb +282 -0
- data/lib/thinking_sphinx/core/array.rb +7 -0
- data/lib/thinking_sphinx/core/string.rb +15 -0
- data/lib/thinking_sphinx/deltas.rb +30 -0
- data/lib/thinking_sphinx/deltas/datetime_delta.rb +50 -0
- data/lib/thinking_sphinx/deltas/default_delta.rb +68 -0
- data/lib/thinking_sphinx/deltas/delayed_delta.rb +30 -0
- data/lib/thinking_sphinx/deltas/delayed_delta/delta_job.rb +24 -0
- data/lib/thinking_sphinx/deltas/delayed_delta/flag_as_deleted_job.rb +27 -0
- data/lib/thinking_sphinx/deltas/delayed_delta/job.rb +26 -0
- data/lib/thinking_sphinx/deploy/capistrano.rb +100 -0
- data/lib/thinking_sphinx/excerpter.rb +22 -0
- data/lib/thinking_sphinx/facet.rb +125 -0
- data/lib/thinking_sphinx/facet_search.rb +134 -0
- data/lib/thinking_sphinx/field.rb +81 -0
- data/lib/thinking_sphinx/index.rb +99 -0
- data/lib/thinking_sphinx/index/builder.rb +286 -0
- data/lib/thinking_sphinx/index/faux_column.rb +110 -0
- data/lib/thinking_sphinx/property.rb +163 -0
- data/lib/thinking_sphinx/rails_additions.rb +150 -0
- data/lib/thinking_sphinx/search.rb +708 -0
- data/lib/thinking_sphinx/search_methods.rb +421 -0
- data/lib/thinking_sphinx/source.rb +152 -0
- data/lib/thinking_sphinx/source/internal_properties.rb +46 -0
- data/lib/thinking_sphinx/source/sql.rb +127 -0
- data/lib/thinking_sphinx/tasks.rb +165 -0
- data/rails/init.rb +14 -0
- data/spec/lib/thinking_sphinx/active_record/delta_spec.rb +130 -0
- data/spec/lib/thinking_sphinx/active_record/has_many_association_spec.rb +49 -0
- data/spec/lib/thinking_sphinx/active_record/scopes_spec.rb +96 -0
- data/spec/lib/thinking_sphinx/active_record_spec.rb +353 -0
- data/spec/lib/thinking_sphinx/association_spec.rb +239 -0
- data/spec/lib/thinking_sphinx/attribute_spec.rb +507 -0
- data/spec/lib/thinking_sphinx/configuration_spec.rb +268 -0
- data/spec/lib/thinking_sphinx/core/array_spec.rb +9 -0
- data/spec/lib/thinking_sphinx/core/string_spec.rb +9 -0
- data/spec/lib/thinking_sphinx/deltas/job_spec.rb +32 -0
- data/spec/lib/thinking_sphinx/excerpter_spec.rb +57 -0
- data/spec/lib/thinking_sphinx/facet_search_spec.rb +176 -0
- data/spec/lib/thinking_sphinx/facet_spec.rb +333 -0
- data/spec/lib/thinking_sphinx/field_spec.rb +154 -0
- data/spec/lib/thinking_sphinx/index/builder_spec.rb +455 -0
- data/spec/lib/thinking_sphinx/index/faux_column_spec.rb +30 -0
- data/spec/lib/thinking_sphinx/index_spec.rb +45 -0
- data/spec/lib/thinking_sphinx/rails_additions_spec.rb +203 -0
- data/spec/lib/thinking_sphinx/search_methods_spec.rb +152 -0
- data/spec/lib/thinking_sphinx/search_spec.rb +1101 -0
- data/spec/lib/thinking_sphinx/source_spec.rb +227 -0
- data/spec/lib/thinking_sphinx_spec.rb +162 -0
- data/tasks/distribution.rb +55 -0
- data/tasks/rails.rake +1 -0
- data/tasks/testing.rb +83 -0
- data/vendor/after_commit/LICENSE +20 -0
- data/vendor/after_commit/README +16 -0
- data/vendor/after_commit/Rakefile +22 -0
- data/vendor/after_commit/init.rb +8 -0
- data/vendor/after_commit/lib/after_commit.rb +45 -0
- data/vendor/after_commit/lib/after_commit/active_record.rb +114 -0
- data/vendor/after_commit/lib/after_commit/connection_adapters.rb +103 -0
- data/vendor/after_commit/test/after_commit_test.rb +53 -0
- data/vendor/delayed_job/lib/delayed/job.rb +251 -0
- data/vendor/delayed_job/lib/delayed/message_sending.rb +7 -0
- data/vendor/delayed_job/lib/delayed/performable_method.rb +55 -0
- data/vendor/delayed_job/lib/delayed/worker.rb +54 -0
- data/vendor/riddle/lib/riddle.rb +30 -0
- data/vendor/riddle/lib/riddle/client.rb +635 -0
- data/vendor/riddle/lib/riddle/client/filter.rb +53 -0
- data/vendor/riddle/lib/riddle/client/message.rb +66 -0
- data/vendor/riddle/lib/riddle/client/response.rb +84 -0
- data/vendor/riddle/lib/riddle/configuration.rb +33 -0
- data/vendor/riddle/lib/riddle/configuration/distributed_index.rb +48 -0
- data/vendor/riddle/lib/riddle/configuration/index.rb +142 -0
- data/vendor/riddle/lib/riddle/configuration/indexer.rb +19 -0
- data/vendor/riddle/lib/riddle/configuration/remote_index.rb +17 -0
- data/vendor/riddle/lib/riddle/configuration/searchd.rb +25 -0
- data/vendor/riddle/lib/riddle/configuration/section.rb +43 -0
- data/vendor/riddle/lib/riddle/configuration/source.rb +23 -0
- data/vendor/riddle/lib/riddle/configuration/sql_source.rb +34 -0
- data/vendor/riddle/lib/riddle/configuration/xml_source.rb +28 -0
- data/vendor/riddle/lib/riddle/controller.rb +53 -0
- metadata +267 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Reset the primary key to allow us to create robots with specific internal_ids
|
|
2
|
+
class Robot < ActiveRecord::Base
|
|
3
|
+
set_primary_key :id
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
Robot.create :name => 'Fritz', :internal_id => 'F0001'
|
|
7
|
+
Robot.create :name => 'Sizzle', :internal_id => 'S0001'
|
|
8
|
+
Robot.create :name => 'Sizzle Jr.', :internal_id => 'S0002'
|
|
9
|
+
Robot.create :name => 'Expendable', :internal_id => 'E0001'
|
|
10
|
+
|
|
11
|
+
# Annnnnnnnnnd we're back
|
|
12
|
+
class Robot < ActiveRecord::Base
|
|
13
|
+
set_primary_key :internal_id
|
|
14
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
post = Post.find(1)
|
|
2
|
+
|
|
3
|
+
[
|
|
4
|
+
'Nunc in neque. Integer sed odio ac quam pellentesque suscipit. Cras posuere posuere est. Suspendisse est.',
|
|
5
|
+
'In hac habitasse platea dictumst. Etiam eleifend est ac diam. Ut ac felis sit amet mi bibendum varius.',
|
|
6
|
+
'Nullam sollicitudin tellus at ipsum. Duis mi eros, blandit sed, condimentum non, mattis vel, orci.',
|
|
7
|
+
'Praesent auctor mollis leo. Nulla facilisi. Pellentesque habitant morbi tristique senectus et netus et',
|
|
8
|
+
'malesuada fames ac turpis egestas. Donec non odio. Maecenas varius elit ut ante. Phasellus egestas, quam',
|
|
9
|
+
'a congue euismod, diam urna gravida risus, at euismod lectus diam id sem. Vestibulum sed dolor et massa',
|
|
10
|
+
'porta placerat. Etiam eget risus. Sed ornare. Vivamus in sapien. Maecenas non enim nec metus posuere',
|
|
11
|
+
'vehicula. Donec rhoncus mauris at metus. Curabitur volutpat massa a metus. Aliquam ornare, neque ut',
|
|
12
|
+
'tristique convallis, libero orci eleifend nibh, ac porta leo felis sed orci. Lorem ipsum dolor sit amet,',
|
|
13
|
+
'Waffles' # This one is important, whereas the others are just padding
|
|
14
|
+
].each do |text|
|
|
15
|
+
Tagging.create :taggable => post, :tag => Tag.create(:text => text)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
Developer.find(:all).each do |developer|
|
|
19
|
+
[:country, :city, :state].each do |column|
|
|
20
|
+
Tagging.create(
|
|
21
|
+
:taggable => developer,
|
|
22
|
+
:tag => Tag.find_or_create_by_text(developer.send(column))
|
|
23
|
+
)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
Tagging.create(:taggable => Developer.last)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
Theta.create :name => "one"
|
|
2
|
+
Theta.create :name => "two"
|
|
3
|
+
Theta.create :name => "three"
|
|
4
|
+
Theta.create :name => "four"
|
|
5
|
+
Theta.create :name => "five"
|
|
6
|
+
Theta.create :name => "six"
|
|
7
|
+
Theta.create :name => "seven"
|
|
8
|
+
Theta.create :name => "eight"
|
|
9
|
+
Theta.create :name => "nine"
|
|
10
|
+
Theta.create :name => "ten"
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
ActiveRecord::Base.connection.create_table :alphas, :force => true do |t|
|
|
2
|
+
t.column :name, :string, :null => false
|
|
3
|
+
t.column :value, :integer, :null => false
|
|
4
|
+
t.column :cost, :decimal, :precision => 10, :scale => 6
|
|
5
|
+
t.column :created_on, :date
|
|
6
|
+
t.column :created_at, :timestamp
|
|
7
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
ActiveRecord::Base.connection.create_table :comments, :force => true do |t|
|
|
2
|
+
t.column :name, :string, :null => false
|
|
3
|
+
t.column :email, :string
|
|
4
|
+
t.column :url, :string
|
|
5
|
+
t.column :content, :text
|
|
6
|
+
t.column :post_id, :integer, :null => false
|
|
7
|
+
t.column :category_id, :integer, :null => false
|
|
8
|
+
t.column :created_at, :datetime
|
|
9
|
+
t.column :updated_at, :datetime
|
|
10
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
ActiveRecord::Base.connection.create_table :delayed_betas, :force => true do |t|
|
|
2
|
+
t.column :name, :string, :null => false
|
|
3
|
+
t.column :delta, :boolean, :null => false, :default => false
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
ActiveRecord::Base.connection.create_table :delayed_jobs, :force => true do |t|
|
|
7
|
+
t.column :priority, :integer, :default => 0
|
|
8
|
+
t.column :attempts, :integer, :default => 0
|
|
9
|
+
t.column :handler, :text
|
|
10
|
+
t.column :last_error, :string
|
|
11
|
+
t.column :run_at, :datetime
|
|
12
|
+
t.column :locked_at, :datetime
|
|
13
|
+
t.column :failed_at, :datetime
|
|
14
|
+
t.column :locked_by, :string
|
|
15
|
+
t.column :created_at, :datetime
|
|
16
|
+
t.column :updated_at, :datetime
|
|
17
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
ActiveRecord::Base.connection.create_table :people, :force => true do |t|
|
|
2
|
+
t.column :first_name, :string
|
|
3
|
+
t.column :middle_initial, :string
|
|
4
|
+
t.column :last_name, :string
|
|
5
|
+
t.column :gender, :string
|
|
6
|
+
t.column :street_address, :string
|
|
7
|
+
t.column :city, :string
|
|
8
|
+
t.column :state, :string
|
|
9
|
+
t.column :postcode, :string
|
|
10
|
+
t.column :email, :string
|
|
11
|
+
t.column :birthday, :datetime
|
|
12
|
+
t.column :delta, :boolean, :null => false, :default => false
|
|
13
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
require 'features/support/models/tag'
|
|
2
|
+
require 'features/support/models/tagging'
|
|
3
|
+
|
|
4
|
+
class Developer < ActiveRecord::Base
|
|
5
|
+
has_many :taggings, :as => :taggable
|
|
6
|
+
has_many :tags, :through => :taggings
|
|
7
|
+
|
|
8
|
+
define_index do
|
|
9
|
+
indexes country, :facet => true
|
|
10
|
+
indexes state, :facet => true
|
|
11
|
+
indexes tags.text, :as => :tags, :facet => true
|
|
12
|
+
has age, :facet => true
|
|
13
|
+
has tags(:id), :as => :tag_ids, :facet => true
|
|
14
|
+
facet city
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
class Person < ActiveRecord::Base
|
|
2
|
+
define_index do
|
|
3
|
+
indexes first_name, last_name, :sortable => true
|
|
4
|
+
|
|
5
|
+
has [first_name, middle_initial, last_name], :as => :name_sort
|
|
6
|
+
has birthday
|
|
7
|
+
has gender, :facet => true
|
|
8
|
+
|
|
9
|
+
set_property :min_infix_len => 1
|
|
10
|
+
set_property :enable_star => true
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
sphinx_scope(:with_first_name) { |name|
|
|
14
|
+
{ :conditions => {:first_name => name} }
|
|
15
|
+
}
|
|
16
|
+
sphinx_scope(:with_last_name) { |name|
|
|
17
|
+
{ :conditions => {:last_name => name} }
|
|
18
|
+
}
|
|
19
|
+
sphinx_scope(:with_id) { |id|
|
|
20
|
+
{ :with => {:sphinx_internal_id => id} }
|
|
21
|
+
}
|
|
22
|
+
sphinx_scope(:ids_only) { {:ids_only => true} }
|
|
23
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
class Post < ActiveRecord::Base
|
|
2
|
+
has_many :comments, :dependent => :destroy
|
|
3
|
+
has_many :taggings, :as => :taggable
|
|
4
|
+
has_many :tags, :through => :taggings
|
|
5
|
+
belongs_to :category
|
|
6
|
+
has_and_belongs_to_many :authors
|
|
7
|
+
|
|
8
|
+
define_index do
|
|
9
|
+
indexes subject
|
|
10
|
+
indexes content
|
|
11
|
+
indexes tags.text, :as => :tags
|
|
12
|
+
indexes comments.content, :as => :comments
|
|
13
|
+
indexes authors.name, :as => :authors
|
|
14
|
+
|
|
15
|
+
has comments(:id), :as => :comment_ids, :source => :ranged_query
|
|
16
|
+
has category.name, :facet => true, :as => :category_name, :type => :string
|
|
17
|
+
has 'COUNT(DISTINCT comments.id)', :as => :comments_count, :type => :integer
|
|
18
|
+
has comments.created_at, :as => :comments_created_at
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
$:.unshift File.dirname(__FILE__) + '/../../lib'
|
|
2
|
+
|
|
3
|
+
require 'lib/thinking_sphinx'
|
|
4
|
+
|
|
5
|
+
%w( tmp/config tmp/log tmp/db/sphinx/development ).each do |path|
|
|
6
|
+
FileUtils.mkdir_p "#{Dir.pwd}/#{path}"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
Kernel.const_set :RAILS_ROOT, "#{Dir.pwd}/tmp" unless defined?(RAILS_ROOT)
|
|
10
|
+
|
|
11
|
+
at_exit do
|
|
12
|
+
ThinkingSphinx::Configuration.instance.controller.stop
|
|
13
|
+
sleep(1) # Ensure Sphinx has shut down completely
|
|
14
|
+
ActiveRecord::Base.logger.close
|
|
15
|
+
FileUtils.rm_r "#{Dir.pwd}/tmp"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Add log file
|
|
19
|
+
ActiveRecord::Base.logger = Logger.new open("tmp/active_record.log", "a")
|
|
20
|
+
|
|
21
|
+
# Set up database tables
|
|
22
|
+
Dir["features/support/db/migrations/*.rb"].each do |file|
|
|
23
|
+
require file.gsub(/\.rb$/, '')
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# Load Models
|
|
27
|
+
Dir["features/support/models/*.rb"].sort.each do |file|
|
|
28
|
+
require file.gsub(/\.rb$/, '')
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
ThinkingSphinx.deltas_enabled = false
|
|
32
|
+
|
|
33
|
+
# Load Fixtures
|
|
34
|
+
Dir["features/support/db/fixtures/*.rb"].each do |file|
|
|
35
|
+
require file.gsub(/\.rb$/, '')
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
ThinkingSphinx.deltas_enabled = true
|
|
39
|
+
ThinkingSphinx.suppress_delta_output = true
|
|
40
|
+
|
|
41
|
+
ThinkingSphinx::Configuration.instance.build
|
|
42
|
+
ThinkingSphinx::Configuration.instance.controller.index
|
|
43
|
+
ThinkingSphinx::Configuration.instance.controller.start
|