epub-search 0.0.1 → 0.0.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: a0e5eaac93572491de5dfb8b483d996daf3f2798
4
- data.tar.gz: 12fd51e95e4ca7291b92ca3d10f8b5f43c76331c
3
+ metadata.gz: 536544d7de71e3a8248d0dfde581b2cf23a32cc1
4
+ data.tar.gz: dea71df17f48c5d10fa7b767904259db9021a057
5
5
  SHA512:
6
- metadata.gz: 7bab11cd12dc7f248b8dcc3f990e45c3d7c77a798750fa0eb2b88e4c915b7926675b4c6e3d73b79bc9ad21106350cdab9c34e88f6c3e2726c0dcb38ed5cf622f
7
- data.tar.gz: 64882ff476229d0841e126b9fb65c986a100e551fd39ccc0651845c0ad443eef0c554047ffac43a3f143d93e96d6fff8b230d9b77d55abba7abadb3754b45ac8
6
+ metadata.gz: 5d77aeba6dfcaff267d8e15577ad0fc5438039cabbb1badee432456906b4b3be780fcca4ea8be15235286205e34efa929bfa85526a1b0c49a927a49292aad345
7
+ data.tar.gz: 42f255473c9386d092b1d1d6b15cbfd081b729abf4a694321302c845e3778e14c807a65e108343c2f0a4cdb63d1718aeece69c0b3be3a6787a1d85d16565d7f3
@@ -0,0 +1,13 @@
1
+ Change Log
2
+ ==========
3
+
4
+ 0.0.2
5
+ -----
6
+ * Ruby vertion limited to 2.0
7
+ * Database directory changed
8
+ * Exec `epub-search init` again
9
+ * Pid file is used to avoid multiple processes are running at once for epub-search watch
10
+
11
+ 0.0.1
12
+ -----
13
+ * First release
data/README.markdown CHANGED
@@ -15,7 +15,7 @@ Usage
15
15
  Commands:
16
16
  epub-search add FILE # Add FILE to database
17
17
  epub-search help [COMMAND] # Describe available commands or one specific command
18
- epub-search init [DB_DIR] # Setup database
18
+ epub-search init [DIR] # Setup database
19
19
  epub-search list # Show list of book titles in database
20
20
  epub-search remove FILE # Remove FILE from database
21
21
  epub-search search WORD [BOOK] # Search WORD in book whose title is like BOOK from database
@@ -40,9 +40,18 @@ EPUB Search(`epub-search` command) detectes configuration file following by this
40
40
 
41
41
  Configuration file should be written as YAML and you can set properties below:
42
42
 
43
- * :db_dir: String. Groonga database directory, defaults to $HOME/.epub-search/db
43
+ * :dir: String. Directory for Groonga database and other files, defaults to $HOME/.epub-search/db
44
44
  * :directories: Array of String. Directories `watch` subcommand watches.
45
45
 
46
+ ChangeLog
47
+ ---------
48
+
49
+ ### 0.0.2
50
+ * Ruby vertion limited to 2.0
51
+ * Database directory changed
52
+ * Exec `epub-search init` again
53
+ * Pid file is used to avoid multiple processes are running at once for epub-search watch
54
+
46
55
  Contributing
47
56
  ------------
48
57
 
data/Rakefile CHANGED
@@ -5,5 +5,7 @@ require 'bundler/gem_tasks'
5
5
 
6
6
  task :default => :test
7
7
 
8
- Rake::TestTask.new
8
+ Rake::TestTask.new do |t|
9
+ t.options = '--verbose'
10
+ end
9
11
  YARD::Rake::YardocTask.new
data/app/add.rb CHANGED
@@ -1,8 +1,8 @@
1
1
  class Add
2
- def initialize(db_dir, file_path)
2
+ def initialize(dir, file_path)
3
3
  @file_path = Pathname.new(file_path)
4
4
  raise "File not readable: #{@file_path}" unless @file_path.readable?
5
- @db = EPUB::Search::Database.new(db_dir)
5
+ @db = EPUB::Search::Database.new(File.join(dir, EPUB::Search::Database::DIR_NAME))
6
6
  end
7
7
 
8
8
  def run(update=true)
data/app/init.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  class Init
2
- def initialize(db_dir)
3
- @db = EPUB::Search::Database.new(db_dir)
2
+ def initialize(dir)
3
+ @db = EPUB::Search::Database.new(File.join(dir, EPUB::Search::Database::DIR_NAME))
4
4
  end
5
5
 
6
6
  def run(force=false)
data/app/list.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  class List
2
- def initialize(db_dir)
3
- @db= EPUB::Search::Database.new(db_dir)
2
+ def initialize(dir)
3
+ @db= EPUB::Search::Database.new(File.join(dir, EPUB::Search::Database::DIR_NAME))
4
4
  end
5
5
 
6
6
  def run(path=false)
data/app/remove.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  class Remove
2
- def initialize(db_dir, file_path)
2
+ def initialize(dir, file_path)
3
3
  @file_path = Pathname(file_path)
4
- @db = EPUB::Search::Database.new(db_dir)
4
+ @db = EPUB::Search::Database.new(File.join(dir, EPUB::Search::Database::DIR_NAME))
5
5
  end
6
6
 
7
7
  def run
data/app/search.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  class Search
2
- def initialize(db_dir, search_word, book=nil)
2
+ def initialize(dir, search_word, book=nil)
3
3
  @word, @book = search_word, book
4
- @db = EPUB::Search::Database.new(db_dir)
4
+ @db = EPUB::Search::Database.new(File.join(dir, EPUB::Search::Database::DIR_NAME))
5
5
  end
6
6
 
7
7
  def run(color=$stdout.tty?)
data/app/server.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  class Server
2
- def initialize(db_dir)
3
- @db = EPUB::Search::Database.new(db_dir)
2
+ def initialize(dir)
3
+ @db = EPUB::Search::Database.new(File.join(dir, EPUB::Search::Database::DIR_NAME))
4
4
  end
5
5
 
6
6
  def run
data/app/watch.rb CHANGED
@@ -2,19 +2,30 @@ require 'notify'
2
2
 
3
3
  class Watch
4
4
  EPUB_RE = /\.epub\Z/io
5
+ PID_FILE_NAME = 'epub-search.pid'
5
6
 
6
- def initialize(db_file, directories)
7
+ def initialize(work_dir, directories)
7
8
  raise ArgumentError, 'specify at least one directory' if directories.empty?
8
- @directories = directories
9
- @db = EPUB::Search::Database.new(db_file)
9
+ @work_dir = Pathname === work_dir ? work_dir : Pathname.new(work_dir)
10
+ @directories = directories.map {|dir| File.expand_path(dir)}
11
+ @db = EPUB::Search::Database.new(File.join(@work_dir.to_path, EPUB::Search::Database::DIR_NAME))
10
12
  end
11
13
 
12
- def run
14
+ def run(notify_on_change: true, daemonize: false, debug: false)
15
+ @notify, @daemonize, @debug = notify_on_change, daemonize, debug
16
+ if @debug
17
+ $stderr.puts "notify_on_change: #{@notify}"
18
+ $stderr.puts "daemonize: #{@daemonize}"
19
+ $stderr.puts "debug: #{@debug}"
20
+ end
21
+
13
22
  $PROGRAM_NAME = File.basename($PROGRAM_NAME)
14
23
  $stderr.puts 'start to watch:'
15
24
  @directories.each do |dir|
16
25
  $stderr.puts " * #{dir}"
17
26
  end
27
+ Process.daemon if @daemonize
28
+ write_pid_file
18
29
  catch_up
19
30
  begin
20
31
  Listen.to *@directories, :filter => EPUB_RE do |modified, added, removed|
@@ -22,12 +33,16 @@ class Watch
22
33
  next unless file_path =~ EPUB_RE
23
34
  file_path.force_encoding 'UTF-8'
24
35
  begin
36
+ $stderr.puts "remove #{file_path}"
25
37
  @db.remove file_path
38
+ $stderr.puts "add #{file_path}"
26
39
  @db.add file_path
27
40
  title = EPUB::Parser.parse(file_path).title
28
41
  notify %Q|UPDATED: #{title}\n#{file_path}|
42
+ FileUtils.touch exit_time_file
29
43
  rescue => error
30
44
  $stderr.puts error
45
+ $stderr.puts error.backtrace if @debug
31
46
  end
32
47
  end
33
48
  added.each do |file_path|
@@ -37,8 +52,10 @@ class Watch
37
52
  @db.add file_path
38
53
  title = EPUB::Parser.parse(file_path).title
39
54
  notify %Q|ADDED: #{title}\n#{file_path}|
55
+ FileUtils.touch exit_time_file
40
56
  rescue => error
41
57
  $stderr.puts error
58
+ $stderr.puts error.backtrace if @debug
42
59
  end
43
60
  end
44
61
  removed.each do |file_path|
@@ -47,18 +64,25 @@ class Watch
47
64
  begin
48
65
  @db.remove file_path
49
66
  notify %Q|REMOVED:\n#{file_path}|
67
+ FileUtils.touch exit_time_file
50
68
  rescue => error
51
69
  $stderr.puts error
70
+ $stderr.puts error.backtrace if @debug
52
71
  end
53
72
  end
54
73
  end
55
74
  ensure
75
+ pid_file.delete
56
76
  FileUtils.touch exit_time_file
57
77
  end
58
78
  end
59
79
 
60
80
  private
61
81
 
82
+ def notify?
83
+ @notify
84
+ end
85
+
62
86
  def exit_time
63
87
  @exittime ||= File.mtime(exit_time_file)
64
88
  end
@@ -67,6 +91,10 @@ class Watch
67
91
  @db.db_dir.join('../exittime').to_path
68
92
  end
69
93
 
94
+ def pid_file
95
+ @work_dir + PID_FILE_NAME
96
+ end
97
+
70
98
  def catch_up
71
99
  @directories.each do |dir|
72
100
  Dir["#{dir}/**/*.epub"].each do |file_path|
@@ -77,15 +105,34 @@ class Watch
77
105
  operation = removed.zero? ? 'ADDED' : 'UPDATED'
78
106
  title = EPUB::Parser.parse(file_path).title
79
107
  notify "#{operation}: #{title}\n#{file_path}"
108
+ FileUtils.touch exit_time_file
80
109
  rescue => error
81
110
  $stderr.puts error
111
+ $stderr.puts error.backtrace if @debug
82
112
  end
83
113
  end
84
114
  end
115
+ rescue
116
+ pid_file.unlink
117
+ end
118
+
119
+ def write_pid_file
120
+ if pid_file.exist?
121
+ pid = pid_file.read.to_i
122
+ begin
123
+ Process.kill 0, pid
124
+ raise "#{$PROGRAM_NAME}(pid: #{pid}) is running"
125
+ rescue Errno::ESRCH
126
+ end
127
+ end
128
+ $stderr.puts "pid: #{Process.pid}" if @debug
129
+ pid_file.open 'wb' do |file|
130
+ file.write Process.pid
131
+ end
85
132
  end
86
133
 
87
134
  def notify(message)
88
135
  $stderr.puts message
89
- Notify.notify $PROGRAM_NAME, message
136
+ Notify.notify $PROGRAM_NAME, message if notify?
90
137
  end
91
138
  end
data/bin/epub-search CHANGED
@@ -4,7 +4,7 @@ require 'thor'
4
4
  require 'epub/search'
5
5
 
6
6
  Class.new(Thor) {
7
- APP_DIR = File.expand_path('../../app', __FILE__)
7
+ APP_DIR = File.expand_path('../app', __dir__)
8
8
  Dir["#{APP_DIR}/*.rb"].each do |path|
9
9
  require path
10
10
  end
@@ -18,44 +18,47 @@ Class.new(Thor) {
18
18
  class_option :config, :type => :string, :aliases => '-c', :default => nil, :desc => 'Path to config file'
19
19
 
20
20
  method_option :force, :type => :boolean, :aliases => '-f', :default => false, :desc => 'Remove existing database before init'
21
- desc 'init [DB_DIR]', 'Setup database'
22
- def init(db_dir=config[:db_dir])
23
- Init.new(db_dir).run(options[:force])
21
+ desc 'init [DIR]', 'Setup database'
22
+ def init(dir=config[:dir])
23
+ Init.new(dir).run(options[:force])
24
24
  end
25
25
 
26
26
  method_option :update, :type => :boolean, :default => true, :desc => 'Remove existing indices of given book before adding'
27
27
  desc 'add FILE', 'Add FILE to database'
28
28
  def add(file)
29
- Add.new(config[:db_dir], file).run(options[:update])
29
+ Add.new(config[:dir], file).run(options[:update])
30
30
  end
31
31
 
32
32
  method_option :color, :type => :string, :aliasis => :colour, :default => 'auto', :desc => 'Color search word in search result. auto, always and never is available. --no-color also is available as never', :banner => 'WHEN'
33
33
  desc 'search WORD [BOOK]', 'Search WORD in book whose title is like BOOK from database'
34
34
  def search(word, book=nil)
35
35
  raise 'Invalid argument for color option' unless [nil, 'auto', 'always', 'never'].include? options[:color]
36
- Search.new(config[:db_dir], word, book).run(options[:color])
36
+ Search.new(config[:dir], word, book).run(options[:color])
37
37
  end
38
38
 
39
+ method_option :daemonize, :type => :boolean, :default => false, :desc => 'Watch in background'
40
+ method_option :notify, :type => :boolean, :default => true, :desc => 'Notify on adding/updating/removing files'
41
+ method_option :debug, :type => :boolean, :default => false, :desc => 'Set debugging flags'
39
42
  desc 'watch [DIRECTORY [DIRECTORY ...]]', 'Index all of EPUB files in DIRECTORY'
40
43
  def watch(*directories)
41
44
  directories = config[:directories] if directories.empty?
42
- Watch.new(config[:db_dir], directories).run
45
+ Watch.new(config[:dir], directories).run(notify_on_change: options[:notify], daemonize: options[:daemonize], debug: options[:debug])
43
46
  end
44
47
 
45
48
  desc 'remove FILE', 'Remove FILE from database'
46
49
  def remove(file)
47
- Remove.new(config[:db_dir], file).run
50
+ Remove.new(config[:dir], file).run
48
51
  end
49
52
 
50
53
  desc 'server', 'Run server'
51
54
  def server
52
- Server.new(config[:db_dir]).run
55
+ Server.new(config[:dir]).run
53
56
  end
54
57
 
55
- method_option :path, :typ => :boolean, :aliases => '-p', :default => false, :desc => 'Swho book paths'
58
+ method_option :path, :type => :boolean, :aliases => '-p', :default => false, :desc => 'Swho book paths'
56
59
  desc 'list', 'Show list of book titles in database'
57
60
  def list
58
- List.new(config[:db_dir]).run(options[:path])
61
+ List.new(config[:dir]).run(options[:path])
59
62
  end
60
63
 
61
64
  private
data/epub-search.gemspec CHANGED
@@ -10,8 +10,9 @@ Gem::Specification.new do |gem|
10
10
  gem.email = ["KitaitiMakoto@gmail.com"]
11
11
  gem.description = %q{Provides tool and library of full text search for EPUB books}
12
12
  gem.summary = %q{Full text search for EPUB books}
13
- # gem.homepage = ""
13
+ gem.homepage = "https://github.com/KitaitiMakoto/epub-search"
14
14
 
15
+ gem.required_ruby_version = '>= 2.0.0'
15
16
  gem.files = `git ls-files`.split($/)
16
17
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
18
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
@@ -24,7 +25,7 @@ Gem::Specification.new do |gem|
24
25
  gem.add_runtime_dependency 'rb-inotify'
25
26
  gem.add_runtime_dependency 'listen'
26
27
  gem.add_runtime_dependency 'highline'
27
- gem.add_runtime_dependency 'notify'
28
+ gem.add_runtime_dependency 'notify', '0.5.0'
28
29
  gem.add_runtime_dependency 'rack'
29
30
  gem.add_runtime_dependency 'tilt'
30
31
 
data/lib/epub/search.rb CHANGED
@@ -4,12 +4,15 @@ require 'epub/parser'
4
4
  require 'groonga'
5
5
  require 'listen'
6
6
  require 'highline'
7
+ require 'epub/search/database'
8
+ require 'epub/search/formatter'
9
+ require 'epub/search/server'
7
10
 
8
11
  module EPUB
9
12
  module Search
10
13
  DEFAULT_CONFIG = {
11
14
  :config_path => File.join(Dir.home, '.epub-search/config.yaml'),
12
- :db_dir => File.join(Dir.home, '.epub-search/db')
15
+ :dir => File.join(Dir.home, '.epub-search')
13
16
  }
14
17
 
15
18
  class << self
@@ -23,7 +26,3 @@ module EPUB
23
26
  end
24
27
  end
25
28
  end
26
-
27
- require 'epub/search/database'
28
- require 'epub/search/formatter'
29
- require 'epub/search/server'
@@ -1,6 +1,7 @@
1
1
  module EPUB
2
2
  module Search
3
3
  class Database
4
+ DIR_NAME = 'db'
4
5
  FILE_NAME = 'epub-search.db'
5
6
 
6
7
  attr_reader :db_dir
@@ -19,7 +20,7 @@ module EPUB
19
20
  end
20
21
 
21
22
  def init(force=false)
22
- @db_dir.rmtree if force
23
+ @db_dir.rmtree if force && @db_dir.exist?
23
24
  @db_dir.mkpath
24
25
  Groonga::Database.create :path => db_file.to_path
25
26
  Groonga::Schema.create_table 'Pages', :type => :array
@@ -32,9 +33,9 @@ module EPUB
32
33
  table.text 'content'
33
34
  end
34
35
  Groonga::Schema.create_table 'Terms',
35
- :type => :patricia_trie,
36
- :normalizer => :NormalizerAuto,
37
- :default_tokenizer => 'TokenBigram'
36
+ :type => :patricia_trie,
37
+ :normalizer => :NormalizerAuto,
38
+ :default_tokenizer => 'TokenBigram'
38
39
  Groonga::Schema.change_table 'Terms' do |table|
39
40
  table.index 'Pages.book_title'
40
41
  table.index 'Pages.metadata'
@@ -70,11 +71,11 @@ module EPUB
70
71
  # @return [Integer] the number of removed recoreds
71
72
  def remove(file_path)
72
73
  file_path = Pathname.new(file_path) unless file_path.kind_of? Pathname
73
- location = file_path.expand_path.to_path
74
+ location = file_path.expand_path
74
75
  record_count = 0
75
76
  open do
76
77
  records = pages.select {|record|
77
- record.location == location
78
+ record.location == location.to_path
78
79
  }
79
80
  records.each do |record|
80
81
  record.key.delete
@@ -102,8 +103,9 @@ module EPUB
102
103
  def books(path=false)
103
104
  open do
104
105
  pages.group_by(&:location).collect {|location, records|
105
- result =records.first.book_title
106
+ result = records.first.book_title
106
107
  result << " - #{location}" if path
108
+ result
107
109
  }
108
110
  end
109
111
  end
@@ -1,5 +1,5 @@
1
1
  module EPUB
2
2
  module Search
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
5
5
  end
data/test/helper.rb CHANGED
@@ -1,3 +1,8 @@
1
1
  require 'test/unit'
2
2
  require 'test/unit/notify'
3
3
  require 'epub/search'
4
+ require 'tmpdir'
5
+
6
+ class EPUB::Search::TestCase < Test::Unit::TestCase
7
+ include EPUB::Search
8
+ end
Binary file
@@ -1,7 +1,83 @@
1
1
  require_relative 'helper'
2
2
 
3
- class TestDatabase < Test::Unit::TestCase
4
- def test_example
5
- assert false
3
+ class TestDatabase < EPUB::Search::TestCase
4
+ def setup
5
+ @dir = Dir.mktmpdir 'epub-search'
6
+ @db = Database.new(@dir)
7
+ end
8
+
9
+ def teardown
10
+ FileUtils.remove_entry_secure @dir if File.directory? @dir
11
+ end
12
+
13
+ def test_paths
14
+ assert_equal Pathname.new(@dir), @db.db_dir
15
+ assert_equal Pathname.new(@dir).join('epub-search.db'), @db.db_file
16
+ end
17
+
18
+ def test_init_make_db_paths
19
+ dir = File.join(@dir, 'init')
20
+ db = Database.new(dir)
21
+ db.init
22
+ assert_path_exist db.db_dir
23
+ assert_path_exist db.db_file
24
+ end
25
+
26
+ class TestAfterInit < TestDatabase
27
+ def setup
28
+ super
29
+ @db.init
30
+ end
31
+
32
+ def test_init_make_Pages_table
33
+ open_db do
34
+ assert_not_nil Groonga['Pages']
35
+ end
36
+ end
37
+
38
+ def test_init_make_Terms_table
39
+ open_db do
40
+ assert_not_nil Groonga['Terms']
41
+ end
42
+ end
43
+
44
+ class TestAdd < TestAfterInit
45
+ class TestWhenNonEpubFilePassed < TestAdd
46
+ def setup
47
+ super
48
+ @epub_path = __FILE__
49
+ end
50
+
51
+ def test_add_raise_error
52
+ assert_raise Zip::Error do
53
+ @db.add @epub_path
54
+ end
55
+ end
56
+ end
57
+
58
+ class TestWhenEpubFilePassed < TestAdd
59
+ def setup
60
+ super
61
+ @epub_path = File.join(__dir__, 'rails_guides.epub')
62
+ end
63
+
64
+ def test_add_insert_records_same_to_xhtml_in_epub
65
+ @db.add @epub_path
66
+ epub = EPUB::Parser.parse(@epub_path)
67
+ xhtmls = epub.each_content.select {|content| content.media_type == 'application/xhtml+xml'}.length
68
+ open_db do
69
+ assert_equal xhtmls, Groonga['Pages'].size
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+
76
+ private
77
+
78
+ def open_db
79
+ Groonga::Database.open @db.db_file.to_path do |database|
80
+ yield database
81
+ end
6
82
  end
7
83
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: epub-search
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - KITAITI Makoto
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-03-30 00:00:00.000000000 Z
11
+ date: 2013-04-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: epub-parser
@@ -98,16 +98,16 @@ dependencies:
98
98
  name: notify
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - '>='
101
+ - - '='
102
102
  - !ruby/object:Gem::Version
103
- version: '0'
103
+ version: 0.5.0
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - '>='
108
+ - - '='
109
109
  - !ruby/object:Gem::Version
110
- version: '0'
110
+ version: 0.5.0
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rack
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -230,6 +230,7 @@ extra_rdoc_files: []
230
230
  files:
231
231
  - .gitignore
232
232
  - .yardopts
233
+ - CHANGELOG.markdown
233
234
  - Gemfile
234
235
  - LICENSE.txt
235
236
  - README.markdown
@@ -252,8 +253,9 @@ files:
252
253
  - template/index.html.erb
253
254
  - template/result.html.erb
254
255
  - test/helper.rb
256
+ - test/rails_guides.epub
255
257
  - test/test_database.rb
256
- homepage:
258
+ homepage: https://github.com/KitaitiMakoto/epub-search
257
259
  licenses: []
258
260
  metadata: {}
259
261
  post_install_message:
@@ -264,7 +266,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
264
266
  requirements:
265
267
  - - '>='
266
268
  - !ruby/object:Gem::Version
267
- version: '0'
269
+ version: 2.0.0
268
270
  required_rubygems_version: !ruby/object:Gem::Requirement
269
271
  requirements:
270
272
  - - '>='
@@ -278,5 +280,6 @@ specification_version: 4
278
280
  summary: Full text search for EPUB books
279
281
  test_files:
280
282
  - test/helper.rb
283
+ - test/rails_guides.epub
281
284
  - test/test_database.rb
282
285
  has_rdoc: yard