ruby-foomatic 0.0.1

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/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Edgars Beigarts
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,31 @@
1
+ # ruby-foomatic
2
+
3
+ Ruby interface to the [Foomatic printer database](http://www.linuxfoundation.org/collaborate/workgroups/openprinting/databasefoomatic).
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ $ apt-get install foomatic-db
9
+ ```
10
+
11
+ ```bash
12
+ $ gem install ruby-foomatic
13
+ ```
14
+
15
+ ## Usage
16
+
17
+ ```ruby
18
+ require "foomatic"
19
+ foomatic = Foomatic::DB.open("/usr/share/foomatic/db")
20
+ foomatic.printers.each do |printer|
21
+ puts printer.inspect
22
+ end
23
+ ```
24
+
25
+ ## Contributing
26
+
27
+ 1. Fork it
28
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
29
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
30
+ 4. Push to the branch (`git push origin my-new-feature`)
31
+ 5. Create new Pull Request
@@ -0,0 +1,39 @@
1
+ require "pathname"
2
+ require "nokogiri"
3
+ require "foomatic/version"
4
+
5
+ module Foomatic
6
+ class DB
7
+ def self.open(path = "/usr/share/foomatic/db")
8
+ new(path)
9
+ end
10
+
11
+ attr_accessor :path
12
+
13
+ def initialize(path)
14
+ @path = Pathname.new(path)
15
+ end
16
+
17
+ def printers
18
+ path.join("source", "printer").each_child.map do |f|
19
+ xml = Nokogiri::XML.parse(f)
20
+ Printer.new.tap do |printer|
21
+ printer.id = xml.root.attribute("id").to_s
22
+ printer.make = xml.root.xpath("make").text
23
+ printer.model = xml.root.xpath("model").text
24
+ printer.url = xml.root.xpath("url").text
25
+ Printer::MECHANISM_TYPES.each do |type|
26
+ printer.send("#{type}=", xml.root.xpath("mechanism/#{type}").any?)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+
33
+ class Printer
34
+ attr_accessor :id, :make, :model, :url
35
+ MECHANISM_TYPES = [:laser, :led, :inkjet, :dotmatrix, :impact, :sublimation, :transfer, :thermal, :color]
36
+ attr_accessor(*MECHANISM_TYPES)
37
+ MECHANISM_TYPES.each { |type| alias_method(:"#{type}?", type) }
38
+ end
39
+ end
@@ -0,0 +1,3 @@
1
+ module Foomatic
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,165 @@
1
+ <printer id="printer/HP-LaserJet_1200">
2
+ <make>HP</make>
3
+ <model>LaserJet 1200</model>
4
+ <mechanism>
5
+ <laser />
6
+ <resolution>
7
+ <dpi>
8
+ <x>1200</x>
9
+ <y>1200</y>
10
+ </dpi>
11
+ </resolution>
12
+ </mechanism>
13
+ <url>http://hpshopping.speedera.net/www.shopping.hp.com/shopping/pdf/lj1200.pdf</url>
14
+ <lang>
15
+ <postscript level="2" />
16
+ <pcl level="6" />
17
+ <pjl />
18
+ <text>
19
+ <charset>us-ascii</charset>
20
+ </text>
21
+ </lang>
22
+ <autodetect>
23
+ <general>
24
+ <commandset>PJL,MLC,PCL,PCLXL,POSTSCRIPT</commandset>
25
+ <manufacturer>Hewlett-Packard</manufacturer>
26
+ <model>HP LaserJet 1200</model>
27
+ </general>
28
+ <usb>
29
+ <description>Hewlett-Packard LaserJet 1200</description>
30
+ </usb>
31
+ <snmp>
32
+ <description>HP LaserJet 1200</description>
33
+ </snmp>
34
+ </autodetect>
35
+ <functionality>A</functionality>
36
+ <driver>pxlmono</driver>
37
+ <drivers>
38
+ <driver>
39
+ <id>hplip</id>
40
+ </driver>
41
+ </drivers>
42
+ <comments>
43
+ <en>
44
+ Postscript level 2 out of the box, parallel and USB connection,
45
+ 1200n with ethernet connection, scan extension available.&lt;p&gt;
46
+
47
+ For basic printing functionality use the Postscript PPD. For
48
+ advanced functionality such as printer status and maintenance
49
+ features, use the &lt;a
50
+ href=&quot;http://hplipopensource.com/&quot;&gt; HPLIP
51
+ driver&lt;/a&gt; (which includes HPIJS). &lt;p&gt;
52
+
53
+ This printer is a good choice for a cheap laser printer,
54
+ especially when you print a lot of text documents, as letters,
55
+ documentation, manuals, ... for these documents it is really fast,
56
+ as advertized by HP. But when using it on complicated graphics
57
+ (web pages rendered by Konqueror, photo &quot;convert&quot;ed to
58
+ PostScript with ImageMagick) in PostScript mode, it is very slow
59
+ and can easily run out of memory. If you use it in PCL mode, it is
60
+ fast in both text and graphics printing. Therefore we recommend to
61
+ use this printer with a Ghostscript driver like
62
+ &quot;pxlmono&quot; or HPLIP.&lt;p&gt;
63
+
64
+ Here is a somewhat longer
65
+ review from Robert (racsw at frontiernet dot net):&lt;p&gt;
66
+
67
+ &lt;i&gt;My testing was done on a PIII / 600Mhz machine with 256K
68
+ of RAM installed running Mandrake Linux 8.1. While I intended to
69
+ use this printer as a USB connected device, I was never successful
70
+ at getting it to work properly, and so switched over to a parallel
71
+ port connection. In fairness, I don't believe this is the
72
+ fault of the printer itself. I see no
73
+ reason why it shouldn't work on USB (&lt;/i&gt;ed: Mandrake
74
+ 8.2 configures this printer.
75
+ automatically&lt;i&gt;).&lt;p&gt;
76
+
77
+ IMO, the 1200/1200se is an excellent high-volume document printer,
78
+ and those folks like myself that need to print the normal volumes
79
+ of documents, How-To's, Installation procedures, etc, that a
80
+ typical Linux user requires will find this printer an excellent
81
+ choice.&lt;p&gt;
82
+
83
+ The printer itself comes with 8Mb of memory onboard, with a 100
84
+ pin DIMM slot capable of another 64Mb, for a total of 72Mb. In the
85
+ testing I performed with and without this additional memory
86
+ installed, I could find no difference in speed either way. But
87
+ for those who feel they want this memory anyhow, I would advise
88
+ you purchase the Kingston module from &lt;a
89
+ href=&quot;http://www.pcconnection.com/&quot;&gt;http://www.pcconnection.com/&lt;/a&gt;
90
+ for $39.00. HP wants a whopping $470.00 (more expensive than the
91
+ printer itself, 12x the price of the Kingston memory) for the same
92
+ module.&lt;p&gt;
93
+
94
+ For those wanting to print graphics on this machine, I would
95
+ suggest an Inkjet printer instead like a DeskJet or the popular
96
+ and proven Epson Stylus C80. If attempting to print a WYSIWYG
97
+ rendition of a web page, I would make two suggestions. First,
98
+ don't use Konqueror. Konqueror has two disadvantages. For one,
99
+ there is no selection for GreyScale, which, when used, cuts the
100
+ printing time down from 10 - 15 seconds to about 2 - 3. Secondly,
101
+ Konqueror also does some strange things with the image, which,
102
+ when printed, will render your copy hard to read with respect to
103
+ font sizes and such.&lt;p&gt;
104
+
105
+ Here's what OpenPrinting founder Grant Taylor
106
+ says:&lt;p&gt;
107
+
108
+ &quot;Konq appears to print using a Qt canvas widget feature whereby the
109
+ canvas widget unifies the fonts - you'll see it flicker into
110
+ small font for a moment - and generates equivalent ps code.
111
+ Oddly, it unifies the fonts to some weird 6-point font that's
112
+ mostly useless on paper; this is what you saw. One can only hope
113
+ they'll fix this in KDE3.&quot;&lt;p&gt;
114
+
115
+ I tested most of the browsers on this printer, and by far and away
116
+ the most readable, highest quality WYSIWYG printing was from
117
+ Netscape.&lt;p&gt;
118
+
119
+ But that's not what this printer is designed for. For
120
+ documentation and online manuals, it's hard to
121
+ beat. It's very fast, quiet and smooth. Contrary to another
122
+ user's report, I found the paper tray well constructed and
123
+ easy to insert. It's strength was evidenced by finding my
124
+ 10lb (near 5 kg) house cat sitting on it one afternoon.&lt;p&gt;
125
+
126
+ As far as the rendering speed is concerned, I think it's
127
+ fine. HP advertises a 10 second print time for this machine, and
128
+ as long as you're not using Konqueror, I was able to meet this
129
+ time consistently. If the user selects &quot;GreyScale&quot;
130
+ instead of color for their particular application, the time takes
131
+ a drastic nosedive to 2-3 seconds, with the same image on the
132
+ page as you would have seen if you had selected &quot;Color&quot;
133
+ instead. This 10 second time was also verified by another 1200
134
+ user running SUSE 7.3.&lt;p&gt;
135
+
136
+ If this printer takes longer to print, it's apparently not
137
+ the internal rendering logic at fault, but the browser or
138
+ application used instead.&lt;p&gt;
139
+
140
+ &lt;/i&gt;[...]&lt;i&gt; I think recommending this printer to
141
+ others is a safe bet. It is working perfectly, and as long as I
142
+ use it for what it's intended, it does it's job quickly
143
+ and quietly. &lt;/i&gt;[...]&lt;i&gt; People who want to print
144
+ graphics would probably not select a LaserJet of any variety,
145
+ unless it's for proofing. And then, it becomes a function of
146
+ the application that creates and sends the job to the printer that
147
+ determines what comes out on the page. This I have proven after
148
+ all these tests.&lt;p&gt;
149
+
150
+ I would also say that I used the CUPS printing system for the
151
+ majority of my testing, and it seems to work fine. There was no
152
+ bad test results that I achieved that I could attribute to the
153
+ CUPS system itself. Usually, with Netscape, Mozilla, Adobe
154
+ Acrobat, etc, I would specify &quot;qtcups&quot; as the print
155
+ command. Using &quot;lpr&quot; worked as well with no discernible
156
+ difference.&lt;p&gt;
157
+
158
+ I give &quot;two thumbs up&quot; for this printer for sure, and because of
159
+ the $399 price tag, I can now justify the speed and cost-per-page
160
+ advantage of owning a high-volume LaserJet for home
161
+ use.&lt;/i&gt;&lt;p&gt;
162
+
163
+ </en>
164
+ </comments>
165
+ </printer>
@@ -0,0 +1,22 @@
1
+ require "spec_helper"
2
+
3
+ describe Foomatic::DB do
4
+ subject(:db) do
5
+ foomatic = Foomatic::DB.open(File.expand_path("../db", __FILE__))
6
+ end
7
+
8
+ describe "#printers" do
9
+ it "should return list of printers" do
10
+ db.printers.should be_an_instance_of(Array)
11
+ db.printers[0].should be_an_instance_of(Foomatic::Printer)
12
+ end
13
+
14
+ it "should include 'HP LaserJet 1200' printer" do
15
+ printer = db.printers[0]
16
+ printer.make.should eq "HP"
17
+ printer.model.should eq "LaserJet 1200"
18
+ printer.should be_laser
19
+ printer.should_not be_color
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,4 @@
1
+ $:.unshift File.dirname(__FILE__) + '/../lib'
2
+
3
+ require "bundler/setup"
4
+ require "foomatic"
metadata ADDED
@@ -0,0 +1,103 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby-foomatic
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Edgars Beigarts
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-08-07 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: nokogiri
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.5'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.5'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 0.9.2.2
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 0.9.2.2
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '2.11'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '2.11'
62
+ description: Ruby interface to the Foomatic printer database
63
+ email:
64
+ - edgars.beigarts@gmail.com
65
+ executables: []
66
+ extensions: []
67
+ extra_rdoc_files: []
68
+ files:
69
+ - lib/foomatic/version.rb
70
+ - lib/foomatic.rb
71
+ - README.md
72
+ - LICENSE
73
+ - spec/db/source/printer/HP-LaserJet_1200.xml
74
+ - spec/foomatic_spec.rb
75
+ - spec/spec_helper.rb
76
+ homepage: http://github.com/ebeigarts/ruby-foomatic
77
+ licenses: []
78
+ post_install_message:
79
+ rdoc_options: []
80
+ require_paths:
81
+ - lib
82
+ required_ruby_version: !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ required_rubygems_version: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ requirements: []
95
+ rubyforge_project:
96
+ rubygems_version: 1.8.24
97
+ signing_key:
98
+ specification_version: 3
99
+ summary: Ruby interface to the Foomatic printer database
100
+ test_files:
101
+ - spec/db/source/printer/HP-LaserJet_1200.xml
102
+ - spec/foomatic_spec.rb
103
+ - spec/spec_helper.rb