rocrad 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
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 "rake", "0.8.7"
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
- rake (= 0.8.7)
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 = "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}
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 = "EeCnee1@netscape.net"
23
- gem.authors = ["Ludwig Bratke"]
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 = File.exist?('VERSION') ? File.read('VERSION') : ""
47
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
48
48
 
49
49
  rdoc.rdoc_dir = 'rdoc'
50
- rdoc.title = "rocrad #{version}"
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
1
+ 0.1.2
data/lib/rocrad/errors.rb CHANGED
@@ -1,6 +1,10 @@
1
1
  class Rocrad
2
- class ConversionError < StandardError ;end
3
- class ImageNotSelectedError < StandardError ;end
4
- class TempFilesNotRemovedError < StandardError ;end
5
- class UnsupportedFileTypeError < StandardError ;end
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 = options.delete(:uid) || nil
12
- @source = Pathname.new src
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 = Pathname.new src
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
- generate_uid
45
- tmp_file = Pathname.new(Dir::tmpdir).join("#{@uid}_#{@source.sub(@source.extname,".pnm").basename}")
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
- tmp_file
106
+ pnm_image
60
107
  end
61
108
 
62
109
  #Convert image to string
63
110
  def convert
64
- generate_uid
65
- tmp_file = Pathname.new(Dir::tmpdir).join("#{@uid}_#{@source.sub(@source.extname,".txt").basename}")
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 #{tmp_image} -o #{tmp_file} #{clear_console_output}`
69
- @value = File.read(tmp_file)
70
- @uid = nil
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.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-26}
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<rake>, ["= 0.8.7"])
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<rake>, ["= 0.8.7"])
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<rake>, ["= 0.8.7"])
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
@@ -8,6 +8,7 @@ rescue Bundler::BundlerError => e
8
8
  exit e.status_code
9
9
  end
10
10
  require 'test/unit'
11
+ require 'mocha'
11
12
 
12
13
  $LOAD_PATH.unshift(File.dirname(__FILE__))
13
14
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
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).generate_uid, Rocrad.new(@image_jpg).generate_uid
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: 25
4
+ hash: 31
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 1
10
- version: 0.1.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-26 00:00:00 +02:00
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: 49
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
- - 7
33
- version: 0.8.7
64
+ - 0
65
+ version: 0.8.0
34
66
  name: rake
35
- version_requirements: *id001
67
+ version_requirements: *id003
36
68
  prerelease: false
37
69
  - !ruby/object:Gem::Dependency
38
70
  type: :development
39
- requirement: &id002 !ruby/object:Gem::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: *id002
83
+ version_requirements: *id004
52
84
  prerelease: false
53
85
  - !ruby/object:Gem::Dependency
54
86
  type: :development
55
- requirement: &id003 !ruby/object:Gem::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: *id003
99
+ version_requirements: *id005
68
100
  prerelease: false
69
101
  - !ruby/object:Gem::Dependency
70
102
  type: :development
71
- requirement: &id004 !ruby/object:Gem::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: *id004
113
+ version_requirements: *id006
82
114
  prerelease: false
83
115
  - !ruby/object:Gem::Dependency
84
116
  type: :development
85
- requirement: &id005 !ruby/object:Gem::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: *id005
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