repub 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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