honyomi 0.0.1

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/test/test_cli.rb ADDED
@@ -0,0 +1,33 @@
1
+ require 'minitest_helper'
2
+ require 'honyomi/cli'
3
+
4
+ module Honyomi
5
+ class TestCli < MiniTest::Test
6
+ def setup
7
+ @orig_stdout = $stdout
8
+ $stdout = @stringio = StringIO.new
9
+ ENV['HONYOMI_DATABASE_DIR'] = Dir.mktmpdir
10
+ end
11
+
12
+ def teardown
13
+ $stdout = @orig_stdout
14
+ FileUtils.rm_rf(ENV['HONYOMI_DATABASE_DIR'])
15
+ ENV['HONYOMI_DATABASE_DIR'] = nil
16
+ end
17
+
18
+ def test_default
19
+ assert_match /honyomi \d+/, command("")
20
+ end
21
+
22
+ def test_init
23
+ assert_match /Create database to/, command("init")
24
+ assert_match /Database already exists/, command("init")
25
+ end
26
+ private
27
+
28
+ def command(arg)
29
+ CLI.start(arg.split)
30
+ $stdout.string
31
+ end
32
+ end
33
+ end
data/test/test_core.rb ADDED
@@ -0,0 +1,165 @@
1
+ require 'minitest_helper'
2
+ require 'tmpdir'
3
+
4
+ module Honyomi
5
+ class TestCore < MiniTest::Test
6
+ def test_init
7
+ Dir.mktmpdir do |dir|
8
+ core = Core.new({home_dir: dir})
9
+ core.init_database
10
+ end
11
+ end
12
+
13
+ def test_add
14
+ Dir.mktmpdir do |dir|
15
+ core = Core.new({home_dir: dir})
16
+ core.init_database
17
+
18
+ core.add(datafile("test.pdf"), title: "TEST PDF")
19
+
20
+ assert_equal 1, core.database.books.size
21
+ end
22
+ end
23
+
24
+ def test_add_same_name
25
+ Dir.mktmpdir do |dir|
26
+ core = Core.new({home_dir: dir})
27
+ core.init_database
28
+
29
+ core.add(datafile("test.pdf"), title: "TEST1")
30
+ assert_equal "TEST1", core.database.books[1].title
31
+
32
+ core.add(datafile("test.pdf"), title: "TEST2")
33
+ assert_equal "TEST2", core.database.books[1].title
34
+
35
+ assert_equal 1, core.database.books.size
36
+ end
37
+ end
38
+
39
+ def test_add_by_specifying_only_filename
40
+ Dir.mktmpdir do |dir|
41
+ core = Core.new({home_dir: dir})
42
+ core.init_database
43
+
44
+ core.add(datafile("test.pdf"))
45
+ assert_equal "test", core.database.books[1].title
46
+ end
47
+ end
48
+
49
+ def test_add_with_title
50
+ Dir.mktmpdir do |dir|
51
+ core = Core.new({home_dir: dir})
52
+ core.init_database
53
+
54
+ core.add(datafile("test.pdf"), {title: "ttt"})
55
+ assert_equal "ttt", core.database.books[1].title
56
+ end
57
+ end
58
+
59
+ def test_add_strip
60
+ Dir.mktmpdir do |dir|
61
+ core = Core.new({home_dir: dir})
62
+ core.init_database
63
+
64
+ core.add(datafile("test2.pdf"))
65
+ assert_equal "aaa bbb ccc", core.database.pages["1:1"].text.sub(/\n+\Z/, "")
66
+ assert_equal "dd ee", core.database.pages["1:2"].text.sub(/\n+\Z/, "")
67
+
68
+ core.add(datafile("test2.pdf"), strip: true)
69
+ assert_equal "aaabbbccc", core.database.pages["1:1"].text.sub(/\n+\Z/, "")
70
+ assert_equal "ddee", core.database.pages["1:2"].text.sub(/\n+\Z/, "")
71
+ end
72
+ end
73
+
74
+ def test_add_with_status
75
+ Dir.mktmpdir do |dir|
76
+ core = Core.new({home_dir: dir})
77
+ core.init_database
78
+
79
+ book, status = core.add(datafile("test2.pdf"))
80
+ assert_equal :add, status
81
+
82
+ book, status = core.add(datafile("test2.pdf"), strip: true)
83
+ assert_equal :update, status
84
+ end
85
+ end
86
+
87
+ def test_edit
88
+ Dir.mktmpdir do |dir|
89
+ core = Core.new({home_dir: dir})
90
+ core.init_database
91
+
92
+ core.add(datafile("test2.pdf"))
93
+
94
+ core.edit(1, title: "ttt")
95
+ assert_equal "ttt", core.database.books[1].title
96
+
97
+ core.edit(1, strip: true)
98
+ assert_equal "aaabbbccc", core.database.pages["1:1"].text.sub(/\n+\Z/, "")
99
+
100
+ assert_equal datafile("test2.pdf"), core.database.books[1].path
101
+ core.edit(1, path: datafile("test.pdf"))
102
+ assert_equal datafile("test.pdf"), core.database.books[1].path
103
+ end
104
+ end
105
+
106
+ def test_remove
107
+ Dir.mktmpdir do |dir|
108
+ core = Core.new({home_dir: dir})
109
+ core.init_database
110
+
111
+ core.add(datafile("test.pdf"))
112
+ core.add(datafile("test2.pdf"))
113
+ assert_equal 2, core.database.books.size
114
+
115
+ core.remove(1)
116
+ assert_equal 1, core.database.books.size
117
+ assert_equal 2, core.database.pages.size
118
+
119
+ core.remove(2)
120
+ assert_equal 0, core.database.books.size
121
+ assert_equal 0, core.database.pages.size
122
+ end
123
+ end
124
+
125
+ def test_list_empty
126
+ Dir.mktmpdir do |dir|
127
+ core = Core.new({home_dir: dir})
128
+ core.init_database
129
+ assert_equal [], core.list
130
+ end
131
+ end
132
+
133
+ def test_list_title
134
+ Dir.mktmpdir do |dir|
135
+ core = Core.new({home_dir: dir})
136
+ core.init_database
137
+
138
+ core.add(datafile("test.pdf"))
139
+ core.add(datafile("test2.pdf"))
140
+
141
+ assert_equal ["2 test2 (2 pages)"], core.list([], {title: "2"})
142
+ assert_equal ["1 test (3 pages)", "2 test2 (2 pages)"], core.list([], {title: "test"})
143
+ end
144
+ end
145
+
146
+ def test_list_id_with_titile
147
+ Dir.mktmpdir do |dir|
148
+ core = Core.new({home_dir: dir})
149
+ core.init_database
150
+
151
+ core.add(datafile("test.pdf"))
152
+ core.add(datafile("test2.pdf"))
153
+
154
+ assert_equal 1, core.list([1], {title: "test"}).size
155
+ end
156
+ end
157
+
158
+ private
159
+
160
+ def datafile(path)
161
+ File.join(File.dirname(__FILE__), path)
162
+ end
163
+
164
+ end
165
+ end
@@ -0,0 +1,140 @@
1
+ require 'minitest_helper'
2
+
3
+ class TestDatabase < MiniTest::Test
4
+ def test_open
5
+ GrnMini::tmpdb do
6
+ db = Honyomi::Database.new
7
+ end
8
+ end
9
+
10
+ def test_add_book
11
+ GrnMini::tmpdb do
12
+ db = Honyomi::Database.new
13
+
14
+ db.add_book("/path/to/book1.pdf", ["1aa"], title: "Book1")
15
+ db.add_book("/path/to/book2.pdf", ["2aa", "2bb"], title: "Book2")
16
+ db.add_book("/path/to/book3.pdf", ["3aa", "3bb", "3cc"], title: "Book3")
17
+
18
+ assert_equal 3, db.books.size
19
+ assert_equal 1, db.books[1].page_num
20
+ assert_equal 2, db.books[2].page_num
21
+ assert_equal 3, db.books[3].page_num
22
+
23
+ assert_equal "Book1", db.pages["1:1"].book.title
24
+ assert_equal 1, db.pages["1:1"].page_no
25
+ assert_equal "1aa", db.pages["1:1"].text
26
+
27
+ assert_equal "Book2", db.pages["2:1"].book.title
28
+ assert_equal 1, db.pages["2:1"].page_no
29
+ assert_equal "2aa", db.pages["2:1"].text
30
+ assert_equal "Book2", db.pages["2:2"].book.title
31
+ assert_equal 2, db.pages["2:2"].page_no
32
+ assert_equal "2bb", db.pages["2:2"].text
33
+
34
+ assert_equal "Book3", db.pages["3:1"].book.title
35
+ assert_equal 1, db.pages["3:1"].page_no
36
+ assert_equal "3aa", db.pages["3:1"].text
37
+ assert_equal "Book3", db.pages["3:2"].book.title
38
+ assert_equal 2, db.pages["3:2"].page_no
39
+ assert_equal "3bb", db.pages["3:2"].text
40
+ assert_equal "Book3", db.pages["3:3"].book.title
41
+ assert_equal 3, db.pages["3:3"].page_no
42
+ assert_equal "3cc", db.pages["3:3"].text
43
+ end
44
+ end
45
+
46
+ def test_add_book_title_default
47
+ GrnMini::tmpdb do
48
+ db = Honyomi::Database.new
49
+
50
+ db.add_book("/path/to/book1.pdf", ["1aa"])
51
+ assert_equal "book1", db.books[1].title
52
+ end
53
+ end
54
+
55
+ def test_add_book_same_path
56
+ GrnMini::tmpdb do
57
+ db = Honyomi::Database.new
58
+
59
+ db.add_book("/path/to/book1.pdf", ["1aa"], title: "Book1")
60
+ db.add_book("/path/to/book2.pdf", ["2aa", "2bb"], title: "Book2")
61
+ db.add_book("/path/to/book3.pdf", ["3aa", "3bb", "3cc"], title: "Book3")
62
+
63
+ db.add_book("/path/to/book2.pdf", ["4aa"])
64
+
65
+ assert_equal 3, db.books.size
66
+ assert_equal 1, db.books[2].page_num
67
+ assert_equal "Book2", db.books[2].title
68
+ end
69
+ end
70
+
71
+ def test_change_book
72
+ GrnMini::tmpdb do
73
+ db = Honyomi::Database.new
74
+
75
+ db.add_book("/path/to/book1.pdf", ["1aa"], title: "Book1")
76
+ db.add_book("/path/to/book2.pdf", ["2aa", "2bb"], title: "Book2")
77
+
78
+ # title
79
+ db.change_book(1, title: "BOOK1")
80
+ assert_equal "BOOK1", db.books[1].title
81
+
82
+ # path
83
+ db.change_book(2, path: "/PATH/TO/BOOK2.pdf")
84
+ assert_equal "/PATH/TO/BOOK2.pdf", db.books[2].path
85
+
86
+ # pages
87
+ db.change_book(2, pages: ["AA"])
88
+ assert_equal 1, db.books[2].page_num
89
+ assert_equal "AA", db.pages["2:1"].text
90
+ assert_equal nil, db.pages["2:2"]
91
+ end
92
+ end
93
+
94
+ def test_delete_book
95
+ GrnMini::tmpdb do
96
+ db = Honyomi::Database.new
97
+
98
+ db.add_book("/path/to/book1.pdf", ["1aa"], title: "Book1")
99
+ db.add_book("/path/to/book2.pdf", ["2aa", "2bb"], title: "Book2")
100
+ db.add_book("/path/to/book3.pdf", ["3aa", "3bb", "3cc"], title: "Book3")
101
+
102
+ db.delete_book(2)
103
+
104
+ assert_equal 2, db.books.size
105
+ assert_equal 4, db.pages.size
106
+ end
107
+ end
108
+
109
+ def test_search
110
+ GrnMini::tmpdb do
111
+ db = Honyomi::Database.new
112
+ db.add_book("/path/to/book1.pdf", ["1aa"])
113
+ db.add_book("/path/to/book2.pdf", ["2aa", "2bb"])
114
+ db.add_book("/path/to/book3.pdf", ["3aa", "3bb", "3cc"])
115
+
116
+ results = db.search("1aa")
117
+ assert_equal 1, results.size
118
+
119
+ results = db.search("aa")
120
+ assert_equal 3, results.size
121
+
122
+ results = db.search("bb OR cc")
123
+ assert_equal 3, results.size
124
+ end
125
+ end
126
+
127
+ def test_book_pages
128
+ GrnMini::tmpdb do
129
+ db = Honyomi::Database.new
130
+ db.add_book("/path/to/book1.pdf", ["1aa"])
131
+ db.add_book("/path/to/book2.pdf", ["2aa", "2bb"])
132
+ db.add_book("/path/to/book3.pdf", ["3aa", "3bb", "3cc"])
133
+
134
+ assert_equal 1, db.book_pages(1).size
135
+ assert_equal 2, db.book_pages(2).size
136
+ assert_equal 3, db.book_pages(3).size
137
+ assert_equal 0, db.book_pages(4).size # Not found
138
+ end
139
+ end
140
+ end
@@ -0,0 +1,7 @@
1
+ require 'minitest_helper'
2
+
3
+ class TestHonyomi < MiniTest::Test
4
+ def test_that_it_has_a_version_number
5
+ refute_nil ::Honyomi::VERSION
6
+ end
7
+ end
data/test/test_pdf.rb ADDED
@@ -0,0 +1,16 @@
1
+ require 'minitest_helper'
2
+
3
+ class TestPdf < MiniTest::Test
4
+ def test_pdf
5
+ File.join(File.dirname(__FILE__), "test.pdf")
6
+ end
7
+
8
+ def test_pages
9
+ pdf = Honyomi::Pdf.new(test_pdf)
10
+
11
+ assert_equal 3, pdf.pages.size
12
+ assert_equal "aaa\n\n", pdf.pages[0]
13
+ assert_equal "bbb\n\n", pdf.pages[1]
14
+ assert_equal "ccc\n\n", pdf.pages[2]
15
+ end
16
+ end
metadata ADDED
@@ -0,0 +1,239 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: honyomi
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - ongaeshi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-04-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: grn_mini
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '0.5'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '0.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: haml
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: launchy
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rack
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: sinatra
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: thin
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - <
88
+ - !ruby/object:Gem::Version
89
+ version: '1.7'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - <
95
+ - !ruby/object:Gem::Version
96
+ version: '1.7'
97
+ - !ruby/object:Gem::Dependency
98
+ name: thor
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: bundler
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: '1.3'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ~>
123
+ - !ruby/object:Gem::Version
124
+ version: '1.3'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rake
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: minitest
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: sinatra-reloader
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - '>='
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ description: honyomi is a e-book (pdf) search engine. It have command line interface
168
+ and web application. It will accelerate the e-book of your life.
169
+ email:
170
+ - ongaeshi0621@gmail.com
171
+ executables:
172
+ - honyomi
173
+ extensions: []
174
+ extra_rdoc_files: []
175
+ files:
176
+ - .gitignore
177
+ - .travis.yml
178
+ - Gemfile
179
+ - LICENSE.txt
180
+ - README.md
181
+ - Rakefile
182
+ - bin/honyomi
183
+ - honyomi.gemspec
184
+ - lib/honyomi.rb
185
+ - lib/honyomi/cli.rb
186
+ - lib/honyomi/core.rb
187
+ - lib/honyomi/database.rb
188
+ - lib/honyomi/pdf.rb
189
+ - lib/honyomi/util.rb
190
+ - lib/honyomi/version.rb
191
+ - lib/honyomi/web/app.rb
192
+ - lib/honyomi/web/config.ru
193
+ - lib/honyomi/web/public/css/bootstrap.min.css
194
+ - lib/honyomi/web/public/css/honyomi.css
195
+ - lib/honyomi/web/views/index.haml
196
+ - lib/honyomi/web/views/layout.haml
197
+ - lib/honyomi/web/views/raw.haml
198
+ - test/minitest_helper.rb
199
+ - test/test.pdf
200
+ - test/test2.pdf
201
+ - test/test_cli.rb
202
+ - test/test_core.rb
203
+ - test/test_database.rb
204
+ - test/test_honyomi.rb
205
+ - test/test_pdf.rb
206
+ homepage: ''
207
+ licenses:
208
+ - MIT
209
+ metadata: {}
210
+ post_install_message:
211
+ rdoc_options: []
212
+ require_paths:
213
+ - lib
214
+ required_ruby_version: !ruby/object:Gem::Requirement
215
+ requirements:
216
+ - - '>='
217
+ - !ruby/object:Gem::Version
218
+ version: '0'
219
+ required_rubygems_version: !ruby/object:Gem::Requirement
220
+ requirements:
221
+ - - '>='
222
+ - !ruby/object:Gem::Version
223
+ version: '0'
224
+ requirements: []
225
+ rubyforge_project:
226
+ rubygems_version: 2.0.0
227
+ signing_key:
228
+ specification_version: 4
229
+ summary: e-book (pdf) search engine, command line interface, and web application
230
+ test_files:
231
+ - test/minitest_helper.rb
232
+ - test/test.pdf
233
+ - test/test2.pdf
234
+ - test/test_cli.rb
235
+ - test/test_core.rb
236
+ - test/test_database.rb
237
+ - test/test_honyomi.rb
238
+ - test/test_pdf.rb
239
+ has_rdoc: