bookland 0.2.0 → 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/.gitignore CHANGED
@@ -1,3 +1,3 @@
1
1
  .DS_Store
2
2
  pkg
3
-
3
+ .bundle
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color --format=documentation
data/.rvmrc ADDED
@@ -0,0 +1,3 @@
1
+ rvm_gemset_create_on_use_flag=1
2
+ rvm wrapper ree@bookland textmate
3
+ rvm ree@bookland
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem "bundler", "~>1.0.0.rc.3"
4
+ gem "jeweler"
5
+ gem "rake"
6
+ gem "rspec", "~>2.0.0.beta.19"
data/Gemfile.lock ADDED
@@ -0,0 +1,31 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ diff-lcs (1.1.2)
5
+ gemcutter (0.6.1)
6
+ git (1.2.5)
7
+ jeweler (1.4.0)
8
+ gemcutter (>= 0.1.0)
9
+ git (>= 1.2.5)
10
+ rubyforge (>= 2.0.0)
11
+ json_pure (1.4.6)
12
+ rake (0.8.7)
13
+ rspec (2.0.0.beta.19)
14
+ rspec-core (= 2.0.0.beta.19)
15
+ rspec-expectations (= 2.0.0.beta.19)
16
+ rspec-mocks (= 2.0.0.beta.19)
17
+ rspec-core (2.0.0.beta.19)
18
+ rspec-expectations (2.0.0.beta.19)
19
+ diff-lcs (>= 1.1.2)
20
+ rspec-mocks (2.0.0.beta.19)
21
+ rubyforge (2.0.4)
22
+ json_pure (>= 1.1.7)
23
+
24
+ PLATFORMS
25
+ ruby
26
+
27
+ DEPENDENCIES
28
+ bundler (~> 1.0.0.rc.3)
29
+ jeweler
30
+ rake
31
+ rspec (~> 2.0.0.beta.19)
data/History.md CHANGED
@@ -1,6 +1,9 @@
1
1
  # 0.1.0 / 2010-04-22
2
2
  * First public release
3
3
 
4
- # 0.2.0 / 2009-04-28
4
+ # 0.2.0 / 2010-04-28
5
5
  * Made valid? public
6
- * Will raise error if invalid ISBN instance is cast as string or recast as ISBN
6
+ * Will raise error if invalid ISBN instance is cast as string or recast as ISBN
7
+
8
+ # 0.3.0 / 2010-08-09
9
+ * Added class methods to cast to ISBN-10 and ISBN-13
data/README.md CHANGED
@@ -1,10 +1,8 @@
1
- ![ISBN](http://upload.wikimedia.org/wikipedia/commons/thumb/2/28/EAN-13-ISBN-13.svg/900px-EAN-13-ISBN-13.svg.png)
1
+ ![ISBN](http://upload.wikimedia.org/wikipedia/commons/thumb/2/28/EAN-13-ISBN-13.svg/540px-EAN-13-ISBN-13.svg.png)
2
2
 
3
3
  Bookland provides a simple ISBN class in Ruby.
4
4
 
5
- $ irb -r "bookland"
6
- >> include Bookland
7
- >> book = ISBN.new("0262011530")
5
+ >> book = Bookland::ISBN.new("0262011530")
8
6
  >> book.to_isbn13
9
7
  => "9780262011532"
10
8
  >> book.to_s(1, 3, 5)
@@ -12,6 +10,16 @@ Bookland provides a simple ISBN class in Ruby.
12
10
  >> ISBN.new("9780262011532") == book
13
11
  => true
14
12
  >> invalid_book = ISBN.new("0262011531") # This is an invalid ISBN
13
+ >> invalid_book.valid?
15
14
  => false
16
15
  >> invalid_book.to_isbn13
17
16
  => Bookland::ISBNError: ISBN not valid
17
+
18
+ Conversely, use the class methods:
19
+
20
+ >> Bookland::ISBN.to_13("0262011530")
21
+ => "9780262011532"
22
+ >> Bookland::ISBN.to_10("9780262011532")
23
+ => "0262011530"
24
+
25
+ Specs pass against Ruby 1.8.7, REE, and Ruby 1.9.1.
data/Rakefile CHANGED
@@ -1,14 +1,22 @@
1
- begin
2
- require 'jeweler'
3
- Jeweler::Tasks.new do |gemspec|
4
- gemspec.name = "bookland"
5
- gemspec.summary = "A simple ISBN class in Ruby"
6
- gemspec.description = "A simple ISBN class in Ruby"
7
- gemspec.email = "code@papercavalier.com"
8
- gemspec.homepage = "http://github.com/papercavalier/bookland"
9
- gemspec.authors = ["Hakan Ensari", "Piotr Laszewski"]
10
- end
11
- Jeweler::GemcutterTasks.new
12
- rescue LoadError
13
- puts "Jeweler not available. Install it with: gem install jeweler"
1
+ require "rubygems"
2
+ require "bundler/setup"
3
+ require "jeweler"
4
+ require "rspec/core/rake_task"
5
+
6
+ desc "Run all specs in spec directory"
7
+ RSpec::Core::RakeTask.new(:spec) do |spec|
8
+ spec.pattern = "spec/**/*_spec.rb"
14
9
  end
10
+
11
+ Jeweler::Tasks.new do |gemspec|
12
+ gemspec.name = "bookland"
13
+ gemspec.summary = "A simple ISBN class in Ruby"
14
+ gemspec.description = "A simple ISBN class in Ruby"
15
+ gemspec.email = "code@papercavalier.com"
16
+ gemspec.homepage = "http://github.com/papercavalier/bookland"
17
+ gemspec.authors = ["Hakan Ensari", "Piotr Laszewski"]
18
+ end
19
+
20
+ Jeweler::GemcutterTasks.new
21
+
22
+ task :default => :spec
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.3.0
data/bookland.gemspec ADDED
@@ -0,0 +1,57 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{bookland}
8
+ s.version = "0.3.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Hakan Ensari", "Piotr Laszewski"]
12
+ s.date = %q{2010-08-09}
13
+ s.description = %q{A simple ISBN class in Ruby}
14
+ s.email = %q{code@papercavalier.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.md"
18
+ ]
19
+ s.files = [
20
+ ".gitignore",
21
+ ".rspec",
22
+ ".rvmrc",
23
+ "Gemfile",
24
+ "Gemfile.lock",
25
+ "History.md",
26
+ "LICENSE",
27
+ "README.md",
28
+ "Rakefile",
29
+ "VERSION",
30
+ "bookland.gemspec",
31
+ "lib/bookland.rb",
32
+ "rake_rubies.sh",
33
+ "spec/bookland_spec.rb",
34
+ "spec/fixtures/isbn",
35
+ "spec/spec_helper.rb"
36
+ ]
37
+ s.homepage = %q{http://github.com/papercavalier/bookland}
38
+ s.rdoc_options = ["--charset=UTF-8"]
39
+ s.require_paths = ["lib"]
40
+ s.rubygems_version = %q{1.3.7}
41
+ s.summary = %q{A simple ISBN class in Ruby}
42
+ s.test_files = [
43
+ "spec/bookland_spec.rb",
44
+ "spec/spec_helper.rb"
45
+ ]
46
+
47
+ if s.respond_to? :specification_version then
48
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
49
+ s.specification_version = 3
50
+
51
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
52
+ else
53
+ end
54
+ else
55
+ end
56
+ end
57
+
data/lib/bookland.rb CHANGED
@@ -2,14 +2,24 @@ module Bookland
2
2
 
3
3
  # A simple ISBN class
4
4
  class ISBN
5
- def ==(other)
6
- self.to_isbn13.to_s == other.to_isbn13.to_s
5
+ class << self
6
+ def to_10(isbn)
7
+ new(isbn).to_isbn10.to_s
8
+ end
9
+
10
+ def to_13(isbn)
11
+ new(isbn).to_isbn13.to_s
12
+ end
7
13
  end
8
14
 
9
15
  def initialize(seed=nil)
10
16
  self.seed = seed
11
17
  end
12
18
 
19
+ def ==(other)
20
+ self.to_isbn13.to_s == other.to_isbn13.to_s
21
+ end
22
+
13
23
  def inspect
14
24
  to_s
15
25
  end
@@ -44,7 +54,7 @@ module Bookland
44
54
  return false unless valid?
45
55
 
46
56
  raw = @raw.dup
47
- blocks.any? ? (blocks.map { |i| raw.shift(i).to_s } << raw.to_s).delete_if(&:empty?).join('-') : raw.to_s
57
+ blocks.any? ? (blocks.map { |i| raw.shift(i).join } << raw.join).delete_if(&:empty?).join('-') : raw.join
48
58
  end
49
59
 
50
60
  def valid?
data/rake_rubies.sh ADDED
@@ -0,0 +1,26 @@
1
+ #!/bin/bash
2
+
3
+ # http://github.com/papercavalier/rake_rubies
4
+
5
+ if which rvm > /dev/null; then
6
+ RUBIES=$(echo `rvm list strings` | tr " " "\n")
7
+ if [ -e ".rvmrc" ]; then
8
+ GEMSET=`grep -m 1 -o -e "\@[^ ]*" .rvmrc`
9
+ fi
10
+ for RUBY in $RUBIES; do
11
+ if [ $RUBY != "default" ]; then
12
+ if [ -e "Gemfile" ]; then
13
+ if !(which bundle > /dev/null); then
14
+ rvm "$RUBY@global" gem install bundler --pre
15
+ fi
16
+ rvm "$RUBY$GEMSET" ruby -S bundle install > /dev/null
17
+ fi
18
+ rvm "$RUBY$GEMSET" rake $1
19
+ fi
20
+ done
21
+ if [ -e ".rvmrc" ]; then
22
+ sh .rvmrc > /dev/null
23
+ fi
24
+ else
25
+ rake $1
26
+ fi
@@ -1,82 +1,105 @@
1
1
  require "spec_helper"
2
2
 
3
3
  module Bookland
4
- describe ISBN do
5
- it "should convert an ISBN-10 to ISBN-13" do
4
+ describe Bookland::ISBN do
5
+ context "class methods" do
6
+ it "converts to ISBN-10" do
7
+ isbns do |isbn10, isbn13|
8
+ Bookland::ISBN.to_10(isbn10).should eql isbn10
9
+ Bookland::ISBN.to_10(isbn13).should eql isbn10
10
+ end
11
+ end
12
+
13
+ it "converts to ISBN-13" do
14
+ isbns do |isbn10, isbn13|
15
+ Bookland::ISBN.to_13(isbn10).should eql isbn13
16
+ Bookland::ISBN.to_13(isbn13).should eql isbn13
17
+ end
18
+ end
19
+
20
+ it "raises an ISBNError if an invalid ISBN is converted" do
21
+ ['foo', 1, '', nil].each do |isbn|
22
+ lambda { Bookland::ISBN.to_10(isbn)}.should raise_error Bookland::ISBNError
23
+ lambda { Bookland::ISBN.to_13(isbn)}.should raise_error Bookland::ISBNError
24
+ end
25
+ end
26
+ end
27
+
28
+ it "converts an ISBN-10 to ISBN-13" do
6
29
  isbns do |isbn10, isbn13|
7
- ISBN.new(isbn10).to_isbn13.should == ISBN.new(isbn13)
30
+ Bookland::ISBN.new(isbn10).to_isbn13.should == Bookland::ISBN.new(isbn13)
8
31
  end
9
32
  end
10
33
 
11
- it "should convert an ISBN-13 to ISBN-10" do
34
+ it "converts an ISBN-13 to ISBN-10" do
12
35
  isbns do |isbn10, isbn13|
13
- ISBN.new(isbn13).to_isbn10.should == ISBN.new(isbn10)
36
+ Bookland::ISBN.new(isbn13).to_isbn10.should == Bookland::ISBN.new(isbn10)
14
37
  end
15
38
  end
16
39
 
17
- it "should equate ISBN-10 and ISBN-13" do
40
+ it "equates ISBN-10 and ISBN-13" do
18
41
  isbns do |isbn10, isbn13|
19
- ISBN.new(isbn10).should == ISBN.new(isbn13)
42
+ (Bookland::ISBN.new(isbn10) == Bookland::ISBN.new(isbn13)).should be_true
20
43
  end
21
44
  end
22
45
 
23
- it "should validate ISBN-10s" do
46
+ it "validates ISBN-10s" do
24
47
  isbns do |isbn10, isbn13|
25
- ISBN.new(isbn10).valid?.should be_true
48
+ Bookland::ISBN.new(isbn10).valid?.should be_true
26
49
  end
27
50
  end
28
51
 
29
- it "should validate ISBN-13s" do
52
+ it "validates ISBN-13s" do
30
53
  isbns do |isbn10, isbn13|
31
- ISBN.new(isbn13).valid?.should be_true
54
+ Bookland::ISBN.new(isbn13).valid?.should be_true
32
55
  end
33
56
  end
34
57
 
35
- it "should not validate if seed looks like an ISBN-13 but has an invalid check digit" do
58
+ it "does not validate if seed looks like an ISBN-13 but has an invalid check digit" do
36
59
  isbns do |isbn10, isbn13|
37
60
  invalid = isbn13.gsub(/(.)$/, "#{(isbn13.split(//).last.to_i - 2) % 10}")
38
- ISBN.new(invalid).valid?.should be_false
61
+ Bookland::ISBN.new(invalid).valid?.should be_false
39
62
  end
40
63
  end
41
64
 
42
- it "should not validate if seed looks like an ISBN-10 but has an invalid check digit" do
65
+ it "does not validate if seed looks like an ISBN-10 but has an invalid check digit" do
43
66
  isbns do |isbn10, isbn13|
44
67
  invalid = isbn10.gsub(/(.)$/, "#{(isbn10.split(//).last.to_i - 2) % 10}")
45
- ISBN.new(invalid).valid?.should be_false
68
+ Bookland::ISBN.new(invalid).valid?.should be_false
46
69
  end
47
70
  end
48
71
 
49
- it "should not validate if seed is not an ISBN" do
50
- ['foo', 1, '', nil].each { |seed| ISBN.new(seed).valid?.should be_false }
72
+ it "does not validate if seed is not an ISBN" do
73
+ ['foo', 1, '', nil].each { |seed| Bookland::ISBN.new(seed).valid?.should be_false }
51
74
  end
52
75
 
53
- it "should cast as string" do
54
- Bookland::ISBN.new('0262011530').to_s.should == '0262011530'
76
+ it "casts as string" do
77
+ Bookland::ISBN.new('0262011530').to_s.should eql '0262011530'
55
78
  end
56
79
 
57
- it "should cast as string and hyphenate an ISBN-13" do
58
- ISBN.new("9780485113358").to_s(3, 10).should == '978-0485113358'
80
+ it "casts as string and hyphenate an ISBN-13" do
81
+ Bookland::ISBN.new("9780485113358").to_s(3, 10).should eql '978-0485113358'
59
82
  end
60
83
 
61
- it "should cast as string and hyphenate an ISBN-10" do
62
- ISBN.new("048511335X").to_s(1, 3, 5, 1).should == '0-485-11335-X'
84
+ it "casts as string and hyphenate an ISBN-10" do
85
+ Bookland::ISBN.new("048511335X").to_s(1, 3, 5, 1).should eql '0-485-11335-X'
63
86
  end
64
87
 
65
- it "should return false if an invalid ISBN is cast as string" do
66
- ['foo', 1, '', nil].each { |seed| ISBN.new(seed).to_s.should be_false }
88
+ it "returns false if an invalid ISBN is cast as string" do
89
+ ['foo', 1, '', nil].each { |seed| Bookland::ISBN.new(seed).to_s.should be_false }
67
90
  end
68
91
 
69
- it "should raise an error if an invalid ISBN-13 is converted to ISBN-10" do
92
+ it "raises an ISBNError if an invalid ISBN-13 is converted to ISBN-10" do
70
93
  isbns do |isbn10, isbn13|
71
94
  invalid = isbn13.gsub(/(.)$/, "#{(isbn13.split(//).last.to_i - 2) % 10}")
72
- lambda { ISBN.new(invalid).to_isbn10 }.should raise_error ISBNError
95
+ lambda { Bookland::ISBN.new(invalid).to_isbn10 }.should raise_error Bookland::ISBNError
73
96
  end
74
97
  end
75
98
 
76
- it "should raise an error if an invalid ISBN-10 is converted to ISBN-13" do
99
+ it "raises an ISBNError if an invalid ISBN-10 is converted to ISBN-13" do
77
100
  isbns do |isbn10, isbn13|
78
101
  invalid = isbn10.gsub(/(.)$/, "#{(isbn10.split(//).last.to_i - 2) % 10}")
79
- lambda { ISBN.new(invalid).to_isbn13 }.should raise_error ISBNError
102
+ lambda { Bookland::ISBN.new(invalid).to_isbn13 }.should raise_error Bookland::ISBNError
80
103
  end
81
104
  end
82
105
  end
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,13 @@
1
- require File.expand_path("../../lib/bookland", __FILE__)
1
+ unless defined?(Bundler)
2
+ require "rubygems"
3
+ require "bundler/setup"
4
+ end
2
5
 
6
+ require "rspec"
3
7
  require "yaml"
4
8
 
9
+ require File.expand_path("../../lib/bookland", __FILE__)
10
+
5
11
  def isbns
6
12
  File.open(File.expand_path("../fixtures/isbn", __FILE__)).each do |line|
7
13
  yield line.split
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bookland
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 19
4
5
  prerelease: false
5
6
  segments:
6
7
  - 0
7
- - 2
8
+ - 3
8
9
  - 0
9
- version: 0.2.0
10
+ version: 0.3.0
10
11
  platform: ruby
11
12
  authors:
12
13
  - Hakan Ensari
@@ -15,7 +16,7 @@ autorequire:
15
16
  bindir: bin
16
17
  cert_chain: []
17
18
 
18
- date: 2010-04-28 00:00:00 +01:00
19
+ date: 2010-08-09 00:00:00 +01:00
19
20
  default_executable:
20
21
  dependencies: []
21
22
 
@@ -30,12 +31,18 @@ extra_rdoc_files:
30
31
  - README.md
31
32
  files:
32
33
  - .gitignore
34
+ - .rspec
35
+ - .rvmrc
36
+ - Gemfile
37
+ - Gemfile.lock
33
38
  - History.md
34
39
  - LICENSE
35
40
  - README.md
36
41
  - Rakefile
37
42
  - VERSION
43
+ - bookland.gemspec
38
44
  - lib/bookland.rb
45
+ - rake_rubies.sh
39
46
  - spec/bookland_spec.rb
40
47
  - spec/fixtures/isbn
41
48
  - spec/spec_helper.rb
@@ -49,23 +56,27 @@ rdoc_options:
49
56
  require_paths:
50
57
  - lib
51
58
  required_ruby_version: !ruby/object:Gem::Requirement
59
+ none: false
52
60
  requirements:
53
61
  - - ">="
54
62
  - !ruby/object:Gem::Version
63
+ hash: 3
55
64
  segments:
56
65
  - 0
57
66
  version: "0"
58
67
  required_rubygems_version: !ruby/object:Gem::Requirement
68
+ none: false
59
69
  requirements:
60
70
  - - ">="
61
71
  - !ruby/object:Gem::Version
72
+ hash: 3
62
73
  segments:
63
74
  - 0
64
75
  version: "0"
65
76
  requirements: []
66
77
 
67
78
  rubyforge_project:
68
- rubygems_version: 1.3.6
79
+ rubygems_version: 1.3.7
69
80
  signing_key:
70
81
  specification_version: 3
71
82
  summary: A simple ISBN class in Ruby