mobi 0.1.2 → 0.2.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.
@@ -0,0 +1,45 @@
1
+ require 'spec_helper'
2
+
3
+ require 'mobi/stream_slicer'
4
+ require 'mobi/metadata_streams'
5
+ require 'mobi/header/palm_doc_header'
6
+
7
+ describe Mobi::Header::PalmDocHeader do
8
+
9
+ before :all do
10
+ file = File.open('spec/fixtures/sherlock.mobi')
11
+ stream = Mobi::MetadataStreams.record_zero_stream(file)
12
+
13
+ @header = Mobi::Header::PalmDocHeader.new stream
14
+ end
15
+
16
+ it 'gets the raw compression_type' do
17
+ @header.raw_compression_type.should == 2
18
+ end
19
+
20
+ it 'gets the compression type' do
21
+ @header.compression_type.should == 'PalmDOC'
22
+ end
23
+
24
+ it 'gets the text length' do
25
+ @header.text_length.should == 57327
26
+ end
27
+
28
+ it 'gets the record_count' do
29
+ @header.record_count.should == 14
30
+ end
31
+
32
+ it 'gets the record size' do
33
+ @header.record_size.should == 4096
34
+ end
35
+
36
+ it 'gets the raw encryption type' do
37
+ @header.raw_encryption_type.should == 0
38
+ end
39
+
40
+ it 'gets the encryption type' do
41
+ @header.encryption_type.should == 'None'
42
+ end
43
+
44
+ end
45
+
@@ -0,0 +1,62 @@
1
+ require 'spec_helper'
2
+
3
+ require 'mobi'
4
+
5
+ describe Mobi::Metadata do
6
+ let(:file){ File.open('spec/fixtures/sherlock.mobi') }
7
+
8
+ context 'initialization' do
9
+ it 'should instantiate a StreamSlicer from the file' do
10
+ metadata = Mobi::Metadata.new(file)
11
+
12
+ metadata.data.should be_instance_of(Mobi::StreamSlicer)
13
+ end
14
+
15
+ it 'should raise an exception if the book is not a mobi' do
16
+ any_instance_of(Mobi::Metadata) do |m|
17
+ mock(m).bookmobi? { false }
18
+ end
19
+
20
+ lambda{ Mobi::Metadata.new(file) }.should raise_exception(Mobi::Metadata::InvalidMobi)
21
+ end
22
+
23
+ context 'instantiating headers' do
24
+ before :all do
25
+ @metadata = Mobi::Metadata.new(file)
26
+ end
27
+
28
+ it 'should instantiate a palm doc header' do
29
+ @metadata.palm_doc_header.should be_a Mobi::Header::PalmDocHeader
30
+ end
31
+
32
+ it 'should instantiate a mobi header' do
33
+ @metadata.mobi_header.should be_a Mobi::Header::MobiHeader
34
+ end
35
+
36
+ it 'should instantiate a exth_header' do
37
+ @metadata.exth_header.should be_a Mobi::Header::ExthHeader
38
+ end
39
+ end
40
+ end
41
+
42
+ context 'instance' do
43
+ before :all do
44
+ @metadata = Mobi::Metadata.new(file)
45
+ end
46
+
47
+ it 'gets the the title of the book' do
48
+ @metadata.title.should == 'His Last Bow'
49
+ end
50
+
51
+ it 'is a bookmobi' do
52
+ @metadata.bookmobi?.should be_true
53
+ end
54
+
55
+ it 'defines delgate exth record method names to the exth record' do
56
+ mock.proxy(@metadata.exth_header).author
57
+
58
+ @metadata.author.should == 'Sir Arthur Conan Doyle'
59
+ end
60
+ end
61
+
62
+ end
@@ -0,0 +1,64 @@
1
+ require 'spec_helper'
2
+
3
+ require 'mobi/stream_slicer'
4
+
5
+ describe Mobi::StreamSlicer do
6
+ let(:file){ File.open('spec/fixtures/sherlock.mobi') }
7
+
8
+ context "instantiation" do
9
+ it "should set the start point to 0 if no start is provided" do
10
+ ss = Mobi::StreamSlicer.new(file)
11
+ ss.start.should == 0
12
+ end
13
+
14
+ it "should set the end point to the file end if no stop is provided" do
15
+ ss = Mobi::StreamSlicer.new(file)
16
+ ss.stop.should == 111449
17
+ end
18
+
19
+ it "should set the start and stop points to the arguments provided" do
20
+ ss = Mobi::StreamSlicer.new(file, 1, 2)
21
+ ss.start.should == 1
22
+ ss.stop.should == 2
23
+ end
24
+
25
+ it "should set the length" do
26
+ ss = Mobi::StreamSlicer.new(file, 1, 10)
27
+ ss.length.should == 9
28
+ end
29
+
30
+ it "should set the stream to the input file" do
31
+ ss = Mobi::StreamSlicer.new(file)
32
+ ss.stream.should == file
33
+ end
34
+ end
35
+
36
+ context "#[]" do
37
+
38
+ it "should return 1 byte" do
39
+ ss = Mobi::StreamSlicer.new(file)
40
+ ss[0].length.should == 1
41
+ end
42
+
43
+ it "should start the search from the offset provided" do
44
+ file.seek(5)
45
+ value = file.read(1)
46
+ ss = Mobi::StreamSlicer.new(file, 5)
47
+ ss[0].should == value
48
+ end
49
+
50
+ it "should return the correct number of bytes" do
51
+ file.seek(5)
52
+ value = file.read(2)
53
+ ss = Mobi::StreamSlicer.new(file, 5)
54
+ ss[0, 2].should == value
55
+ end
56
+
57
+ it "should seek in reverse order" do
58
+ file.seek(8)
59
+ value = file.read(2)
60
+ ss = Mobi::StreamSlicer.new(file, 5)
61
+ ss[5, -2].should == value
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ require 'mobi'
4
+
5
+ describe Mobi do
6
+ it "should instantiate a Mobi::Metadata object" do
7
+ file = File.open('spec/fixtures/sherlock.mobi')
8
+ Mobi.metadata(file).should be_an_instance_of(Mobi::Metadata)
9
+ end
10
+ end
@@ -0,0 +1,4 @@
1
+ RSpec.configure do |config|
2
+ config.mock_with :rr
3
+ end
4
+
metadata CHANGED
@@ -1,73 +1,91 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: mobi
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
4
5
  prerelease:
5
- version: 0.1.2
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - jkongie
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-04-10 00:00:00 +10:00
14
- default_executable:
15
- dependencies:
16
- - !ruby/object:Gem::Dependency
17
- name: shoulda
18
- requirement: &id001 !ruby/object:Gem::Requirement
12
+ date: 2012-08-06 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: !ruby/object:Gem::Requirement
19
17
  none: false
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
23
- version: "0"
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 2.11.0
24
22
  type: :development
25
23
  prerelease: false
26
- version_requirements: *id001
27
- - !ruby/object:Gem::Dependency
28
- name: bundler
29
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 2.11.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: rr
32
+ requirement: !ruby/object:Gem::Requirement
30
33
  none: false
31
- requirements:
34
+ requirements:
32
35
  - - ~>
33
- - !ruby/object:Gem::Version
34
- version: 1.0.0
36
+ - !ruby/object:Gem::Version
37
+ version: 1.0.4
35
38
  type: :development
36
39
  prerelease: false
37
- version_requirements: *id002
38
- - !ruby/object:Gem::Dependency
39
- name: jeweler
40
- requirement: &id003 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.0.4
46
+ - !ruby/object:Gem::Dependency
47
+ name: bundler
48
+ requirement: !ruby/object:Gem::Requirement
41
49
  none: false
42
- requirements:
50
+ requirements:
43
51
  - - ~>
44
- - !ruby/object:Gem::Version
45
- version: 1.5.1
52
+ - !ruby/object:Gem::Version
53
+ version: 1.1.0
46
54
  type: :development
47
55
  prerelease: false
48
- version_requirements: *id003
49
- - !ruby/object:Gem::Dependency
50
- name: rcov
51
- requirement: &id004 !ruby/object:Gem::Requirement
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 1.1.0
62
+ - !ruby/object:Gem::Dependency
63
+ name: jeweler
64
+ requirement: !ruby/object:Gem::Requirement
52
65
  none: false
53
- requirements:
54
- - - ">="
55
- - !ruby/object:Gem::Version
56
- version: "0"
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 1.8.0
57
70
  type: :development
58
71
  prerelease: false
59
- version_requirements: *id004
60
- description: "Mobi is a Rubygem that allows you to easily read MOBI e-book format metadata "
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 1.8.0
78
+ description: Mobi is a Rubygem that allows you to easily read MOBI e-book format metadata.
61
79
  email: jkongie@gmail.com
62
80
  executables: []
63
-
64
81
  extensions: []
65
-
66
- extra_rdoc_files:
82
+ extra_rdoc_files:
67
83
  - LICENSE.txt
68
84
  - README.rdoc
69
- files:
85
+ files:
70
86
  - .document
87
+ - .rspec
88
+ - CHANGELOG.md
71
89
  - Gemfile
72
90
  - Gemfile.lock
73
91
  - LICENSE.txt
@@ -75,42 +93,47 @@ files:
75
93
  - Rakefile
76
94
  - VERSION
77
95
  - lib/mobi.rb
96
+ - lib/mobi/header/exth_header.rb
97
+ - lib/mobi/header/mobi_header.rb
98
+ - lib/mobi/header/palm_doc_header.rb
78
99
  - lib/mobi/metadata.rb
100
+ - lib/mobi/metadata_streams.rb
79
101
  - lib/mobi/stream_slicer.rb
80
102
  - mobi.gemspec
81
- - test/helper.rb
82
- - test/test_mobi.rb
83
- has_rdoc: true
103
+ - spec/fixtures/sherlock.mobi
104
+ - spec/lib/mobi/header/exth_header_spec.rb
105
+ - spec/lib/mobi/header/mobi_header_spec.rb
106
+ - spec/lib/mobi/header/palm_doc_header_spec.rb
107
+ - spec/lib/mobi/metadata_spec.rb
108
+ - spec/lib/mobi/stream_slicer_spec.rb
109
+ - spec/lib/mobi_spec.rb
110
+ - spec/spec_helper.rb
84
111
  homepage: http://github.com/jkongie/mobi
85
- licenses:
112
+ licenses:
86
113
  - MIT
87
114
  post_install_message:
88
115
  rdoc_options: []
89
-
90
- require_paths:
116
+ require_paths:
91
117
  - lib
92
- required_ruby_version: !ruby/object:Gem::Requirement
118
+ required_ruby_version: !ruby/object:Gem::Requirement
93
119
  none: false
94
- requirements:
95
- - - ">="
96
- - !ruby/object:Gem::Version
97
- hash: -244937170725559488
98
- segments:
120
+ requirements:
121
+ - - ! '>='
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ segments:
99
125
  - 0
100
- version: "0"
101
- required_rubygems_version: !ruby/object:Gem::Requirement
126
+ hash: -4390425668178990085
127
+ required_rubygems_version: !ruby/object:Gem::Requirement
102
128
  none: false
103
- requirements:
104
- - - ">="
105
- - !ruby/object:Gem::Version
106
- version: "0"
129
+ requirements:
130
+ - - ! '>='
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
107
133
  requirements: []
108
-
109
134
  rubyforge_project:
110
- rubygems_version: 1.6.2
135
+ rubygems_version: 1.8.24
111
136
  signing_key:
112
137
  specification_version: 3
113
- summary: A Rubygem that inspects MOBI metadata
114
- test_files:
115
- - test/helper.rb
116
- - test/test_mobi.rb
138
+ summary: A Rubygem that inspects MOBI metadata.
139
+ test_files: []
@@ -1,18 +0,0 @@
1
- require 'rubygems'
2
- require 'bundler'
3
- begin
4
- Bundler.setup(:default, :development)
5
- rescue Bundler::BundlerError => e
6
- $stderr.puts e.message
7
- $stderr.puts "Run `bundle install` to install missing gems"
8
- exit e.status_code
9
- end
10
- require 'test/unit'
11
- require 'shoulda'
12
-
13
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
14
- $LOAD_PATH.unshift(File.dirname(__FILE__))
15
- require 'mobi'
16
-
17
- class Test::Unit::TestCase
18
- end
@@ -1,7 +0,0 @@
1
- require 'helper'
2
-
3
- class TestMobi < Test::Unit::TestCase
4
- should "probably rename this file and start testing for real" do
5
- flunk "hey buddy, you should probably rename this file and start testing for real"
6
- end
7
- end