repub 0.3.0

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/tasks/svn.rake ADDED
@@ -0,0 +1,47 @@
1
+
2
+ if HAVE_SVN
3
+
4
+ unless PROJ.svn.root
5
+ info = %x/svn info ./
6
+ m = %r/^Repository Root:\s+(.*)$/.match(info)
7
+ PROJ.svn.root = (m.nil? ? '' : m[1])
8
+ end
9
+ PROJ.svn.root = File.join(PROJ.svn.root, PROJ.svn.path) unless PROJ.svn.path.empty?
10
+
11
+ namespace :svn do
12
+
13
+ # A prerequisites task that all other tasks depend upon
14
+ task :prereqs
15
+
16
+ desc 'Show tags from the SVN repository'
17
+ task :show_tags => 'svn:prereqs' do |t|
18
+ tags = %x/svn list #{File.join(PROJ.svn.root, PROJ.svn.tags)}/
19
+ tags.gsub!(%r/\/$/, '')
20
+ tags = tags.split("\n").sort {|a,b| b <=> a}
21
+ puts tags
22
+ end
23
+
24
+ desc 'Create a new tag in the SVN repository'
25
+ task :create_tag => 'svn:prereqs' do |t|
26
+ v = ENV['VERSION'] or abort 'Must supply VERSION=x.y.z'
27
+ abort "Versions don't match #{v} vs #{PROJ.version}" if v != PROJ.version
28
+
29
+ svn = PROJ.svn
30
+ trunk = File.join(svn.root, svn.trunk)
31
+ tag = "%s-%s" % [PROJ.name, PROJ.version]
32
+ tag = File.join(svn.root, svn.tags, tag)
33
+ msg = "Creating tag for #{PROJ.name} version #{PROJ.version}"
34
+
35
+ puts "Creating SVN tag '#{tag}'"
36
+ unless system "svn cp -m '#{msg}' #{trunk} #{tag}"
37
+ abort "Tag creation failed"
38
+ end
39
+ end
40
+
41
+ end # namespace :svn
42
+
43
+ task 'gem:release' => 'svn:create_tag'
44
+
45
+ end # if PROJ.svn.path
46
+
47
+ # EOF
data/tasks/test.rake ADDED
@@ -0,0 +1,40 @@
1
+
2
+ if test(?e, PROJ.test.file) or not PROJ.test.files.to_a.empty?
3
+ require 'rake/testtask'
4
+
5
+ namespace :test do
6
+
7
+ Rake::TestTask.new(:run) do |t|
8
+ t.libs = PROJ.libs
9
+ t.test_files = if test(?f, PROJ.test.file) then [PROJ.test.file]
10
+ else PROJ.test.files end
11
+ t.ruby_opts += PROJ.ruby_opts
12
+ t.ruby_opts += PROJ.test.opts
13
+ end
14
+
15
+ if HAVE_RCOV
16
+ desc 'Run rcov on the unit tests'
17
+ task :rcov => :clobber_rcov do
18
+ opts = PROJ.rcov.opts.dup << '-o' << PROJ.rcov.dir
19
+ opts = opts.join(' ')
20
+ files = if test(?f, PROJ.test.file) then [PROJ.test.file]
21
+ else PROJ.test.files end
22
+ files = files.join(' ')
23
+ sh "#{RCOV} #{files} #{opts}"
24
+ end
25
+
26
+ task :clobber_rcov do
27
+ rm_r 'coverage' rescue nil
28
+ end
29
+ end
30
+
31
+ end # namespace :test
32
+
33
+ desc 'Alias to test:run'
34
+ task :test => 'test:run'
35
+
36
+ task :clobber => 'test:clobber_rcov' if HAVE_RCOV
37
+
38
+ end
39
+
40
+ # EOF
@@ -0,0 +1,36 @@
1
+ if HAVE_ZENTEST
2
+
3
+ # --------------------------------------------------------------------------
4
+ if test(?e, PROJ.test.file) or not PROJ.test.files.to_a.empty?
5
+ require 'autotest'
6
+
7
+ namespace :test do
8
+ task :autotest do
9
+ Autotest.run
10
+ end
11
+ end
12
+
13
+ desc "Run the autotest loop"
14
+ task :autotest => 'test:autotest'
15
+
16
+ end # if test
17
+
18
+ # --------------------------------------------------------------------------
19
+ if HAVE_SPEC_RAKE_SPECTASK and not PROJ.spec.files.to_a.empty?
20
+ require 'autotest/rspec'
21
+
22
+ namespace :spec do
23
+ task :autotest do
24
+ load '.autotest' if test(?f, '.autotest')
25
+ Autotest::Rspec.run
26
+ end
27
+ end
28
+
29
+ desc "Run the autotest loop"
30
+ task :autotest => 'spec:autotest'
31
+
32
+ end # if rspec
33
+
34
+ end # if HAVE_ZENTEST
35
+
36
+ # EOF
@@ -0,0 +1,15 @@
1
+ require 'test/unit'
2
+ require 'rubygems'
3
+ require 'nokogiri'
4
+ require 'repub/epub'
5
+
6
+ class TestContainer < Test::Unit::TestCase
7
+ def test_container_create
8
+ c = Repub::Epub::Container.new
9
+ s = c.to_xml
10
+ doc = Nokogiri::HTML(s)
11
+ #puts s
12
+
13
+ assert_not_nil(doc.search('rootfile'))
14
+ end
15
+ end
@@ -0,0 +1,56 @@
1
+ require 'test/unit'
2
+ require 'rubygems'
3
+ require 'nokogiri'
4
+ require 'repub/epub'
5
+
6
+ class TestContent < Test::Unit::TestCase
7
+ def test_manifest_create
8
+ x = Repub::Epub::Content.new('some-name')
9
+ s = x.to_xml
10
+ #puts s
11
+ doc = Nokogiri::HTML(s)
12
+
13
+ # manifest was created
14
+ assert_not_nil(doc.search('manifest'))
15
+ # has exactly one item
16
+ assert_equal(1, doc.search('manifest/item').size)
17
+ # and item is ncx
18
+ assert_equal('ncx', doc.search('manifest/item')[0][:id])
19
+ # spine was created
20
+ assert_not_nil(doc.search('spine'))
21
+ # and is empty
22
+ assert_equal(0, doc.search('spine/item').size)
23
+ end
24
+
25
+ def test_manifest
26
+ x = Repub::Epub::Content.new('some-name')
27
+ x.add_page_template
28
+ x.add_stylesheet 'style.css'
29
+ x.add_stylesheet 'more-style.css'
30
+ x.add_image ' logo.jpg '
31
+ x.add_image ' image.png'
32
+ x.add_image 'picture.jpeg '
33
+ x.add_document 'intro.html', 'intro'
34
+ x.add_document 'chapter-1.html'
35
+ x.add_document 'glossary.html', 'glossary'
36
+ s = x.to_xml
37
+ #puts s
38
+ doc = Nokogiri::HTML(s)
39
+
40
+ # manifest was created
41
+ assert_not_nil(doc.search('manifest'))
42
+ # has 2 stylesheets
43
+ assert_equal(2, doc.search('manifest/item[@media-type = "text/css"]').size)
44
+ # and 2 jpegs
45
+ assert_equal(2, doc.search('manifest/item[@media-type = "image/jpeg"]').size)
46
+ # and 1 png
47
+ assert_equal(1, doc.search('manifest/item[@media-type = "image/png"]').size)
48
+ # spine was created
49
+ assert_not_nil(doc.search('spine'))
50
+ # and has 3 html items
51
+ assert_equal(3, doc.search('spine/itemref').size)
52
+ # check that order is as inserted and ids are correct
53
+ assert_equal('intro', doc.search('spine/itemref')[0]['idref'])
54
+ assert_equal('glossary', doc.search('spine/itemref')[2]['idref'])
55
+ end
56
+ end
@@ -0,0 +1,29 @@
1
+ require 'test/unit'
2
+ require 'rubygems'
3
+ require 'nokogiri'
4
+ require 'repub/epub'
5
+
6
+ class TestToc < Test::Unit::TestCase
7
+ def test_toc_create
8
+ x = Repub::Epub::Toc.new('some-name')
9
+ s = x.to_xml
10
+ #puts s
11
+ doc = Nokogiri::HTML(s)
12
+ # TODO
13
+ end
14
+
15
+ def test_toc
16
+ x = Repub::Epub::Toc.new('some-name')
17
+ p0 = x.nav_map.add_nav_point('Intro', 'intro.html')
18
+ p1 = x.nav_map.add_nav_point('Chapter 1', 'chapter-1.html')
19
+ p2 = x.nav_map.add_nav_point('Chapter 2', 'chapter-2.html')
20
+ p21 = p2.add_nav_point('Chapter 2-1', 'chapter-2-1.html')
21
+ pg = x.nav_map.add_nav_point('Glossary', 'glossary.html')
22
+ p11 = p1.add_nav_point('Chapter 1-1', 'chapter-1-1.html')
23
+ p12 = p1.add_nav_point('Chapter 1-2', 'chapter-1-2.html')
24
+ s = x.to_xml
25
+ #puts s
26
+ doc = Nokogiri::HTML(s)
27
+ # TODO
28
+ end
29
+ end
@@ -0,0 +1,8 @@
1
+ require 'test/unit'
2
+ require 'repub'
3
+
4
+ class TestBuilder < Test::Unit::TestCase
5
+ def test_builder
6
+ # TODO
7
+ end
8
+ end
@@ -0,0 +1,36 @@
1
+ require 'test/unit'
2
+ require 'repub'
3
+ require 'repub/app'
4
+
5
+ class TestFetcher < Test::Unit::TestCase
6
+
7
+ include Repub::App::Fetcher
8
+ attr_reader :options
9
+
10
+ def test_fetcher
11
+ @options = {
12
+ :url => 'http://www.berzinarchives.com/web/x/prn/p.html_1614431902.html',
13
+ :helper => 'wget'
14
+ }
15
+ assert_nothing_raised do
16
+ cache = fetch
17
+ #p cache
18
+ assert_equal('http://www.berzinarchives.com/web/x/prn/p.html_1614431902.html', cache.url)
19
+ assert(cache.path.include?('.repub/cache/f963050ead9ee7775a4155e13743d47bc851d5d8'))
20
+ assert_equal('f963050ead9ee7775a4155e13743d47bc851d5d8', cache.name)
21
+ # assert(File.exist?(File.join(f.asset_root, f.asset_name)), "Fetch failed.")
22
+ end
23
+ end
24
+
25
+ def test_fetcher_fail
26
+ @options = {
27
+ :url => 'not-existing',
28
+ :helper => 'wget'
29
+ }
30
+ assert_raise(Repub::App::FetcherException) do
31
+ cache = fetch
32
+ #p cache
33
+ end
34
+ end
35
+
36
+ end
@@ -0,0 +1,76 @@
1
+ require 'delegate'
2
+ require 'test/unit'
3
+ require 'repub'
4
+ require 'repub/app'
5
+
6
+ class TestRepub < Test::Unit::TestCase
7
+ include Repub::App::Logger
8
+
9
+ class FakeStringStream < DelegateClass(String)
10
+ def initialize
11
+ @str = String.new
12
+ super(@str)
13
+ end
14
+ def puts(value)
15
+ @str << value.to_s
16
+ end
17
+ def changed
18
+ klone = self.clone
19
+ yield
20
+ klone.to_s != self.to_s
21
+ end
22
+ end
23
+
24
+ def setup
25
+ log.level = LOGGER_NORMAL
26
+ log.stdout = @out = FakeStringStream.new
27
+ log.stderr = @err = FakeStringStream.new
28
+ end
29
+
30
+ def assert_out(&blk); assert @out.changed(&blk); end
31
+ def assert_no_out(&blk); assert !@out.changed(&blk); end
32
+ def assert_err(&blk); assert @err.changed(&blk); end
33
+ def assert_no_err(&blk); assert !@err.changed(&blk); end
34
+
35
+ def test_create
36
+ assert_not_nil(log)
37
+ end
38
+
39
+ def test_streams
40
+ log.info "info"
41
+ log.info "more info"
42
+ assert_equal('infomore info', @out)
43
+ log.error "error message"
44
+ assert_equal('error message', @err)
45
+ end
46
+
47
+ def test_verbose_level
48
+ log.level = LOGGER_VERBOSE
49
+ assert_out { log.debug "debug" }
50
+ assert_out { log.info "info" }
51
+ assert_err { log.error "error" }
52
+ end
53
+
54
+ def test_normal_level
55
+ log.level = LOGGER_NORMAL
56
+ assert_no_out { log.debug "debug" }
57
+ assert_out { log.info "info" }
58
+ assert_err { log.error "error" }
59
+ end
60
+
61
+ def test_quiet_level
62
+ log.level = LOGGER_QUIET
63
+ assert_no_out { log.debug "debug" }
64
+ assert_no_out { log.info "info" }
65
+ assert_err { log.error "error" }
66
+ end
67
+
68
+ def test_fatal
69
+ log.level = LOGGER_QUIET
70
+ assert_raise(SystemExit) { log.fatal "fatal" }
71
+ begin
72
+ assert_err { log.fatal "bye" }
73
+ rescue SystemExit
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,32 @@
1
+ require 'test/unit'
2
+ require 'repub'
3
+ require 'repub/app'
4
+
5
+ class TestParser < Test::Unit::TestCase
6
+
7
+ include Repub::App::Fetcher
8
+ include Repub::App::Parser
9
+ attr_reader :options
10
+
11
+ def test_parser
12
+ @options = {
13
+ :url => 'http://www.berzinarchives.com/web/x/prn/p.html_1614431902.html',
14
+ :helper => 'wget'
15
+ # :selectors => {
16
+ # :title => '//h1',
17
+ # :toc => '//div.toc/ul',
18
+ # :toc_item => '/li',
19
+ # :toc_section => '/ul'
20
+ # }
21
+ }
22
+ parser = parse(fetch)
23
+ assert_equal('f963050ead9ee7775a4155e13743d47bc851d5d8', parser.uid)
24
+ puts "UID: #{parser.uid}"
25
+ assert_equal('A Survey of Tibetan History', parser.title)
26
+ puts "Title: #{parser.title}"
27
+ #puts parser.toc
28
+ assert_equal(4, parser.toc.size)
29
+ puts "TOC: (#{parser.toc.size} items)"
30
+ end
31
+
32
+ end
metadata ADDED
@@ -0,0 +1,153 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: repub
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
5
+ platform: ruby
6
+ authors:
7
+ - Dmitri Goutnik
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-06-28 00:00:00 +04:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: nokogiri
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 1.3.2
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: builder
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 2.1.2
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: chardet
37
+ type: :runtime
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 0.9.0
44
+ version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: launchy
47
+ type: :runtime
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 0.3.3
54
+ version:
55
+ - !ruby/object:Gem::Dependency
56
+ name: bones
57
+ type: :development
58
+ version_requirement:
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: 2.5.1
64
+ version:
65
+ description: Simple HTML to ePub converter.
66
+ email: dg@invisiblellama.net
67
+ executables:
68
+ - repub
69
+ extensions: []
70
+
71
+ extra_rdoc_files:
72
+ - History.txt
73
+ - README.txt
74
+ - SAMPLES.txt
75
+ - bin/repub
76
+ files:
77
+ - History.txt
78
+ - README.txt
79
+ - Rakefile
80
+ - SAMPLES.txt
81
+ - TODO
82
+ - bin/repub
83
+ - lib/repub.rb
84
+ - lib/repub/app.rb
85
+ - lib/repub/app/builder.rb
86
+ - lib/repub/app/fetcher.rb
87
+ - lib/repub/app/logger.rb
88
+ - lib/repub/app/options.rb
89
+ - lib/repub/app/parser.rb
90
+ - lib/repub/app/profile.rb
91
+ - lib/repub/app/utility.rb
92
+ - lib/repub/epub.rb
93
+ - lib/repub/epub/container.rb
94
+ - lib/repub/epub/content.rb
95
+ - lib/repub/epub/toc.rb
96
+ - repub.gemspec
97
+ - tasks/ann.rake
98
+ - tasks/bones.rake
99
+ - tasks/gem.rake
100
+ - tasks/git.rake
101
+ - tasks/notes.rake
102
+ - tasks/post_load.rake
103
+ - tasks/rdoc.rake
104
+ - tasks/rubyforge.rake
105
+ - tasks/setup.rb
106
+ - tasks/spec.rake
107
+ - tasks/svn.rake
108
+ - tasks/test.rake
109
+ - tasks/zentest.rake
110
+ - test/epub/test_container.rb
111
+ - test/epub/test_content.rb
112
+ - test/epub/test_toc.rb
113
+ - test/test_builder.rb
114
+ - test/test_fetcher.rb
115
+ - test/test_logger.rb
116
+ - test/test_parser.rb
117
+ has_rdoc: true
118
+ homepage: http://github.com/invisiblellama/repub/tree/master
119
+ licenses: []
120
+
121
+ post_install_message:
122
+ rdoc_options:
123
+ - --main
124
+ - README.txt
125
+ require_paths:
126
+ - lib
127
+ required_ruby_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: "0"
132
+ version:
133
+ required_rubygems_version: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: "0"
138
+ version:
139
+ requirements: []
140
+
141
+ rubyforge_project: repub
142
+ rubygems_version: 1.3.4
143
+ signing_key:
144
+ specification_version: 3
145
+ summary: Simple HTML to ePub converter
146
+ test_files:
147
+ - test/epub/test_container.rb
148
+ - test/epub/test_content.rb
149
+ - test/epub/test_toc.rb
150
+ - test/test_builder.rb
151
+ - test/test_fetcher.rb
152
+ - test/test_logger.rb
153
+ - test/test_parser.rb