rocrad 0.1.1 → 0.1.2
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/Gemfile +3 -1
- data/Gemfile.lock +7 -1
- data/Rakefile +8 -8
- data/VERSION +1 -1
- data/lib/rocrad/errors.rb +8 -4
- data/lib/rocrad.rb +65 -42
- data/rocrad.gemspec +11 -5
- data/test/helper.rb +1 -0
- data/test/test_rocrad.rb +19 -1
- metadata +49 -17
data/Gemfile
CHANGED
@@ -3,11 +3,13 @@ source "http://rubygems.org"
|
|
3
3
|
# Example:
|
4
4
|
# gem "activesupport", ">= 2.3.5"
|
5
5
|
|
6
|
-
gem "
|
6
|
+
gem "uuid", "~> 2.3.2"
|
7
7
|
|
8
8
|
# Add dependencies to develop your gem here.
|
9
9
|
# Include everything needed to run rake, tests, features, etc.
|
10
10
|
group :development do
|
11
|
+
gem "mocha", "~> 0.9.0"
|
12
|
+
gem "rake", "~> 0.8.0"
|
11
13
|
gem "bundler", "~> 1.0.0"
|
12
14
|
gem "jeweler", "~> 1.6.0"
|
13
15
|
gem "rcov", ">= 0"
|
data/Gemfile.lock
CHANGED
@@ -6,9 +6,13 @@ GEM
|
|
6
6
|
bundler (~> 1.0.0)
|
7
7
|
git (>= 1.2.5)
|
8
8
|
rake
|
9
|
+
macaddr (1.0.0)
|
10
|
+
mocha (0.9.12)
|
9
11
|
rake (0.8.7)
|
10
12
|
rcov (0.9.9)
|
11
13
|
test-unit (2.3.0)
|
14
|
+
uuid (2.3.2)
|
15
|
+
macaddr (~> 1.0)
|
12
16
|
|
13
17
|
PLATFORMS
|
14
18
|
ruby
|
@@ -16,6 +20,8 @@ PLATFORMS
|
|
16
20
|
DEPENDENCIES
|
17
21
|
bundler (~> 1.0.0)
|
18
22
|
jeweler (~> 1.6.0)
|
19
|
-
|
23
|
+
mocha (~> 0.9.0)
|
24
|
+
rake (~> 0.8.0)
|
20
25
|
rcov
|
21
26
|
test-unit (= 2.3.0)
|
27
|
+
uuid (~> 2.3.2)
|
data/Rakefile
CHANGED
@@ -14,13 +14,13 @@ require 'rake'
|
|
14
14
|
require 'jeweler'
|
15
15
|
Jeweler::Tasks.new do |gem|
|
16
16
|
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
17
|
-
gem.name
|
18
|
-
gem.homepage
|
19
|
-
gem.license
|
20
|
-
gem.summary
|
17
|
+
gem.name = "rocrad"
|
18
|
+
gem.homepage = "http://github.com/EeCnee/rocrad"
|
19
|
+
gem.license = "MIT"
|
20
|
+
gem.summary = %Q{Ruby library for working with Ocrad - The GNU OCR}
|
21
21
|
gem.description = %Q{Ruby library for working with Ocrad - The GNU OCR}
|
22
|
-
gem.email
|
23
|
-
gem.authors
|
22
|
+
gem.email = "EeCnee1@netscape.net"
|
23
|
+
gem.authors = ["Ludwig Bratke"]
|
24
24
|
# dependencies defined in Gemfile
|
25
25
|
end
|
26
26
|
Jeweler::RubygemsDotOrgTasks.new
|
@@ -44,10 +44,10 @@ task :default => :test
|
|
44
44
|
|
45
45
|
require 'rake/rdoctask'
|
46
46
|
Rake::RDocTask.new do |rdoc|
|
47
|
-
version
|
47
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
48
48
|
|
49
49
|
rdoc.rdoc_dir = 'rdoc'
|
50
|
-
rdoc.title
|
50
|
+
rdoc.title = "rocrad #{version}"
|
51
51
|
rdoc.rdoc_files.include('README*')
|
52
52
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
53
53
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.2
|
data/lib/rocrad/errors.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
class Rocrad
|
2
|
-
class ConversionError < StandardError
|
3
|
-
|
4
|
-
class
|
5
|
-
|
2
|
+
class ConversionError < StandardError;
|
3
|
+
end
|
4
|
+
class ImageNotSelectedError < StandardError;
|
5
|
+
end
|
6
|
+
class TempFilesNotRemovedError < StandardError;
|
7
|
+
end
|
8
|
+
class UnsupportedFileTypeError < StandardError;
|
9
|
+
end
|
6
10
|
end
|
data/lib/rocrad.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require "pathname"
|
2
2
|
require "tempfile"
|
3
|
+
require "uuid"
|
4
|
+
require "net/http"
|
3
5
|
|
4
6
|
require "rocrad/errors"
|
5
7
|
|
@@ -7,17 +9,68 @@ class Rocrad
|
|
7
9
|
|
8
10
|
attr_accessor :options
|
9
11
|
|
12
|
+
|
10
13
|
def initialize(src="", options={})
|
11
|
-
@uid =
|
12
|
-
@source =
|
14
|
+
@uid = UUID.new
|
15
|
+
@source = get_source src
|
13
16
|
@clear_console_output = options.delete(:clear_console_output)
|
14
17
|
@clear_console_output = true if @clear_console_output.nil?
|
15
18
|
@value = ""
|
16
19
|
end
|
17
20
|
|
18
|
-
def source= src
|
21
|
+
def source= src=""
|
19
22
|
@value = ""
|
20
|
-
@source =
|
23
|
+
@source = get_source src
|
24
|
+
end
|
25
|
+
|
26
|
+
#TODO: Clear console for MacOS or Windows
|
27
|
+
def clear_console_output
|
28
|
+
return "" unless @clear_console_output
|
29
|
+
"2>/dev/null" if File.exist?("/dev/null") #Linux console clear
|
30
|
+
end
|
31
|
+
|
32
|
+
#Output value
|
33
|
+
def to_s
|
34
|
+
return @value if @value != ""
|
35
|
+
if @source.instance_of? Pathname and @source.file?
|
36
|
+
convert
|
37
|
+
@value
|
38
|
+
elsif @source.instance_of? URI::HTTP
|
39
|
+
convert_via_http
|
40
|
+
@value
|
41
|
+
else
|
42
|
+
raise ImageNotSelectedError
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
#Remove spaces and break-lines
|
47
|
+
def to_s_without_spaces
|
48
|
+
to_s.gsub(" ", "").gsub("\n", "").gsub("\r", "")
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def convert_via_http
|
54
|
+
tmp_path = Pathname.new(Dir::tmpdir).join("#{@uid.generate}_#{Pathname.new(@source.request_uri).basename}")
|
55
|
+
tmp_file = File.new(tmp_path.to_s, File::CREAT|File::TRUNC|File::RDWR, 0644)
|
56
|
+
tmp_file.write(Net::HTTP.get(@source))
|
57
|
+
tmp_file.close
|
58
|
+
uri = @source
|
59
|
+
@source = tmp_path
|
60
|
+
convert
|
61
|
+
@source = uri
|
62
|
+
remove_file([tmp_path])
|
63
|
+
end
|
64
|
+
|
65
|
+
def get_source(src)
|
66
|
+
case (uri = URI.parse(src)).class.to_s
|
67
|
+
when "URI::HTTP" then
|
68
|
+
uri
|
69
|
+
when "URI::Generic" then
|
70
|
+
Pathname.new(uri.path)
|
71
|
+
else
|
72
|
+
Pathname.new(src)
|
73
|
+
end
|
21
74
|
end
|
22
75
|
|
23
76
|
#Remove files
|
@@ -34,16 +87,10 @@ class Rocrad
|
|
34
87
|
raise Rocrad::TempFilesNotRemovedError
|
35
88
|
end
|
36
89
|
|
37
|
-
def generate_uid
|
38
|
-
@uid = rand.to_s[2, 10] if @uid.nil?
|
39
|
-
@uid
|
40
|
-
end
|
41
|
-
|
42
90
|
#Convert image to pnm
|
43
91
|
def image_to_pnm
|
44
|
-
|
45
|
-
|
46
|
-
redirection = "#{@source} > #{tmp_file} #{clear_console_output}"
|
92
|
+
pnm_image = Pathname.new(Dir::tmpdir).join("#{@uid.generate}_#{@source.sub(@source.extname, ".pnm").basename}")
|
93
|
+
redirection = "#{@source} > #{pnm_image} #{clear_console_output}"
|
47
94
|
case @source.extname
|
48
95
|
when ".jpg" then
|
49
96
|
`djpeg -greyscale -pnm #{redirection}`
|
@@ -56,44 +103,20 @@ class Rocrad
|
|
56
103
|
else
|
57
104
|
raise UnsupportedFileTypeError
|
58
105
|
end
|
59
|
-
|
106
|
+
pnm_image
|
60
107
|
end
|
61
108
|
|
62
109
|
#Convert image to string
|
63
110
|
def convert
|
64
|
-
|
65
|
-
|
66
|
-
tmp_image = image_to_pnm
|
111
|
+
txt_file = Pathname.new(Dir::tmpdir).join("#{@uid.generate}_#{@source.sub(@source.extname, ".txt").basename}")
|
112
|
+
pnm_image = image_to_pnm
|
67
113
|
begin
|
68
|
-
`gocr #{
|
69
|
-
@value = File.read(
|
70
|
-
|
71
|
-
remove_file([tmp_image, tmp_file])
|
114
|
+
`gocr #{pnm_image} -o #{txt_file} #{clear_console_output}`
|
115
|
+
@value = File.read(txt_file)
|
116
|
+
remove_file([pnm_image, txt_file])
|
72
117
|
rescue
|
73
118
|
raise ConversionError
|
74
119
|
end
|
75
120
|
end
|
76
121
|
|
77
|
-
#TODO: Clear console for MacOS or Windows
|
78
|
-
def clear_console_output
|
79
|
-
return "" unless @clear_console_output
|
80
|
-
"2>/dev/null" if File.exist?("/dev/null") #Linux console clear
|
81
|
-
end
|
82
|
-
|
83
|
-
#Output value
|
84
|
-
def to_s
|
85
|
-
return @value if @value != ""
|
86
|
-
if @source.file?
|
87
|
-
convert
|
88
|
-
@value
|
89
|
-
else
|
90
|
-
raise ImageNotSelectedError
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
#Remove spaces and break-lines
|
95
|
-
def to_s_without_spaces
|
96
|
-
to_s.gsub(" ", "").gsub("\n", "").gsub("\r", "")
|
97
|
-
end
|
98
|
-
|
99
122
|
end
|
data/rocrad.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{rocrad}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Ludwig Bratke"]
|
12
|
-
s.date = %q{2011-05-
|
12
|
+
s.date = %q{2011-05-27}
|
13
13
|
s.description = %q{Ruby library for working with Ocrad - The GNU OCR}
|
14
14
|
s.email = %q{EeCnee1@netscape.net}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -48,20 +48,26 @@ Gem::Specification.new do |s|
|
|
48
48
|
s.specification_version = 3
|
49
49
|
|
50
50
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
51
|
-
s.add_runtime_dependency(%q<
|
51
|
+
s.add_runtime_dependency(%q<uuid>, ["~> 2.3.2"])
|
52
|
+
s.add_development_dependency(%q<mocha>, ["~> 0.9.0"])
|
53
|
+
s.add_development_dependency(%q<rake>, ["~> 0.8.0"])
|
52
54
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
53
55
|
s.add_development_dependency(%q<jeweler>, ["~> 1.6.0"])
|
54
56
|
s.add_development_dependency(%q<rcov>, [">= 0"])
|
55
57
|
s.add_development_dependency(%q<test-unit>, ["= 2.3.0"])
|
56
58
|
else
|
57
|
-
s.add_dependency(%q<
|
59
|
+
s.add_dependency(%q<uuid>, ["~> 2.3.2"])
|
60
|
+
s.add_dependency(%q<mocha>, ["~> 0.9.0"])
|
61
|
+
s.add_dependency(%q<rake>, ["~> 0.8.0"])
|
58
62
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
59
63
|
s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
|
60
64
|
s.add_dependency(%q<rcov>, [">= 0"])
|
61
65
|
s.add_dependency(%q<test-unit>, ["= 2.3.0"])
|
62
66
|
end
|
63
67
|
else
|
64
|
-
s.add_dependency(%q<
|
68
|
+
s.add_dependency(%q<uuid>, ["~> 2.3.2"])
|
69
|
+
s.add_dependency(%q<mocha>, ["~> 0.9.0"])
|
70
|
+
s.add_dependency(%q<rake>, ["~> 0.8.0"])
|
65
71
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
66
72
|
s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
|
67
73
|
s.add_dependency(%q<rcov>, [">= 0"])
|
data/test/helper.rb
CHANGED
data/test/test_rocrad.rb
CHANGED
@@ -9,6 +9,20 @@ class TestRocrad < Test::Unit::TestCase
|
|
9
9
|
def setup
|
10
10
|
@path = Pathname.new(__FILE__.gsub("test_rocrad.rb", "")).expand_path
|
11
11
|
@image_jpg = @path.join("images", "test.jpg").to_s
|
12
|
+
f = File.open(@image_jpg.to_s, "r")
|
13
|
+
@chars = f.chars.to_a
|
14
|
+
f.close
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_convert_via_http
|
18
|
+
Net::HTTP.expects(:get).returns(@chars)
|
19
|
+
assert_equal "3R8Z", Rocrad.new("http://localhost:3000/uploads/picture/data/4dd21bfd828bf81bdd00000d/nzp_img_17_4_2011_8_55_29.jpg").to_s_without_spaces
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_convert_via_http_raise_exception
|
23
|
+
assert_raise Errno::ECONNREFUSED do
|
24
|
+
Rocrad.new("http://localhost:3000/uploads/picture/data/4dd21bfd828bf81bdd00000d/nzp_img_17_4_2011_8_55_29.jpg").to_s_without_spaces
|
25
|
+
end
|
12
26
|
end
|
13
27
|
|
14
28
|
def test_be_instantiable
|
@@ -40,14 +54,17 @@ class TestRocrad < Test::Unit::TestCase
|
|
40
54
|
end
|
41
55
|
|
42
56
|
def test_translate_images_bmp
|
57
|
+
pend
|
43
58
|
assert_equal "ZLA6", Rocrad.new(@path.join("images", "test.bmp").to_s).to_s_without_spaces
|
44
59
|
end
|
45
60
|
|
46
61
|
def test_translate_mixed_tif
|
62
|
+
pend
|
47
63
|
assert_equal "43ZZ", Rocrad.new(@path.join("images", "mixed.tif").to_s).to_s_without_spaces
|
48
64
|
end
|
49
65
|
|
50
66
|
def test_translate_test1_tif
|
67
|
+
pend
|
51
68
|
assert_equal "V2V4", Rocrad.new(@path.join("images", "test1.tif").to_s).to_s_without_spaces
|
52
69
|
end
|
53
70
|
|
@@ -59,7 +76,8 @@ class TestRocrad < Test::Unit::TestCase
|
|
59
76
|
end
|
60
77
|
|
61
78
|
def test_unique_uid
|
62
|
-
assert_not_equal Rocrad.new(@image_jpg).
|
79
|
+
assert_not_equal Rocrad.new(@image_jpg).instance_variable_get(:@uid).generate,
|
80
|
+
Rocrad.new(@image_jpg).instance_variable_get(:@uid).generate
|
63
81
|
end
|
64
82
|
|
65
83
|
def test_generate_a_unique id
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rocrad
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 2
|
10
|
+
version: 0.1.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ludwig Bratke
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-05-
|
18
|
+
date: 2011-05-27 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -23,20 +23,52 @@ dependencies:
|
|
23
23
|
requirement: &id001 !ruby/object:Gem::Requirement
|
24
24
|
none: false
|
25
25
|
requirements:
|
26
|
-
- -
|
26
|
+
- - ~>
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 7
|
29
|
+
segments:
|
30
|
+
- 2
|
31
|
+
- 3
|
32
|
+
- 2
|
33
|
+
version: 2.3.2
|
34
|
+
name: uuid
|
35
|
+
version_requirements: *id001
|
36
|
+
prerelease: false
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
type: :development
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ~>
|
27
43
|
- !ruby/object:Gem::Version
|
28
|
-
hash:
|
44
|
+
hash: 59
|
45
|
+
segments:
|
46
|
+
- 0
|
47
|
+
- 9
|
48
|
+
- 0
|
49
|
+
version: 0.9.0
|
50
|
+
name: mocha
|
51
|
+
version_requirements: *id002
|
52
|
+
prerelease: false
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
type: :development
|
55
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ~>
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
hash: 63
|
29
61
|
segments:
|
30
62
|
- 0
|
31
63
|
- 8
|
32
|
-
-
|
33
|
-
version: 0.8.
|
64
|
+
- 0
|
65
|
+
version: 0.8.0
|
34
66
|
name: rake
|
35
|
-
version_requirements: *
|
67
|
+
version_requirements: *id003
|
36
68
|
prerelease: false
|
37
69
|
- !ruby/object:Gem::Dependency
|
38
70
|
type: :development
|
39
|
-
requirement: &
|
71
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
40
72
|
none: false
|
41
73
|
requirements:
|
42
74
|
- - ~>
|
@@ -48,11 +80,11 @@ dependencies:
|
|
48
80
|
- 0
|
49
81
|
version: 1.0.0
|
50
82
|
name: bundler
|
51
|
-
version_requirements: *
|
83
|
+
version_requirements: *id004
|
52
84
|
prerelease: false
|
53
85
|
- !ruby/object:Gem::Dependency
|
54
86
|
type: :development
|
55
|
-
requirement: &
|
87
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
56
88
|
none: false
|
57
89
|
requirements:
|
58
90
|
- - ~>
|
@@ -64,11 +96,11 @@ dependencies:
|
|
64
96
|
- 0
|
65
97
|
version: 1.6.0
|
66
98
|
name: jeweler
|
67
|
-
version_requirements: *
|
99
|
+
version_requirements: *id005
|
68
100
|
prerelease: false
|
69
101
|
- !ruby/object:Gem::Dependency
|
70
102
|
type: :development
|
71
|
-
requirement: &
|
103
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
72
104
|
none: false
|
73
105
|
requirements:
|
74
106
|
- - ">="
|
@@ -78,11 +110,11 @@ dependencies:
|
|
78
110
|
- 0
|
79
111
|
version: "0"
|
80
112
|
name: rcov
|
81
|
-
version_requirements: *
|
113
|
+
version_requirements: *id006
|
82
114
|
prerelease: false
|
83
115
|
- !ruby/object:Gem::Dependency
|
84
116
|
type: :development
|
85
|
-
requirement: &
|
117
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
86
118
|
none: false
|
87
119
|
requirements:
|
88
120
|
- - "="
|
@@ -94,7 +126,7 @@ dependencies:
|
|
94
126
|
- 0
|
95
127
|
version: 2.3.0
|
96
128
|
name: test-unit
|
97
|
-
version_requirements: *
|
129
|
+
version_requirements: *id007
|
98
130
|
prerelease: false
|
99
131
|
description: Ruby library for working with Ocrad - The GNU OCR
|
100
132
|
email: EeCnee1@netscape.net
|