lwr-simple 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt ADDED
@@ -0,0 +1,4 @@
1
+ == 0.0.1 2009-01-03
2
+
3
+ * 1 major enhancement:
4
+ * Initial release
data/Manifest.txt ADDED
@@ -0,0 +1,14 @@
1
+ History.txt
2
+ Manifest.txt
3
+ PostInstall.txt
4
+ README.rdoc
5
+ Rakefile
6
+ lib/lwr-simple.rb
7
+ lwr-simple.gemspec
8
+ script/console
9
+ script/destroy
10
+ script/generate
11
+ spec/lwr-simple_spec.rb
12
+ spec/spec.opts
13
+ spec/spec_helper.rb
14
+ tasks/rspec.rake
data/PostInstall.txt ADDED
@@ -0,0 +1,6 @@
1
+
2
+ For more information on lwr-simple,
3
+ see http://lwr-simple.rubyforge.org
4
+ see http://github.com/yagihiro/lwr-simple/wikis
5
+
6
+
data/README.rdoc ADDED
@@ -0,0 +1,71 @@
1
+ = lwr-simple
2
+
3
+ LWR::Simple library is yet another LWP::Simple library for ruby.
4
+
5
+ == SYNOPSIS:
6
+
7
+ It is an interface that assumes the scene to which LWR::Simple is taken an active part by the one liner like begin so LWP::Simple, too.
8
+ Its interface really looks like the LWP::Simple.
9
+
10
+ # example. 1
11
+ $ ruby -rlwr-simple -e 'getprint "http://www.sn.no"'
12
+
13
+ # example. 2
14
+ $ ruby -rlwr-simple -e 'get("http://www.ruby-lang.org/ja/").scan(/<a.*href="(.+?)"/) {|refs| puts(refs[0])}'
15
+
16
+
17
+ == FEATURES:
18
+
19
+ LWR::Simple library provides 5 methods in toplevel.
20
+ * get(url)
21
+ * head(url)
22
+ * getprint(url)
23
+ * getstore(url, file)
24
+ * mirror(url, file)
25
+
26
+ All methods looks like the LWP::Simple library. Please refer to rdoc for details.
27
+
28
+ == REQUIREMENTS:
29
+
30
+ Self operation capabilities on ruby 1.8.6 or more.
31
+ Probably, it operates on ruby 1.8.3. (relation of dependence on "net/http" library.)
32
+
33
+ == INSTALL:
34
+
35
+ It is not possible to prepare it. It is only git for a while in now.
36
+ Sorry...
37
+
38
+ Install by git, see
39
+
40
+ git clone git://github.com/yagihiro/lwr-simple.git
41
+ cd lwr-simple
42
+ rake gem
43
+ rake install_gem
44
+
45
+ == LICENSE:
46
+
47
+ Copyright (c) 2008 Hiroki Yagita
48
+
49
+ Permission is hereby granted, free of charge, to any person obtaining
50
+ a copy of this software and associated documentation files (the
51
+ 'Software'), to deal in the Software without restriction, including
52
+ without limitation the rights to use, copy, modify, merge, publish,
53
+ distribute, sublicense, and/or sell copies of the Software, and to
54
+ permit persons to whom the Software is furnished to do so, subject to
55
+ the following conditions:
56
+
57
+ The above copyright notice and this permission notice shall be
58
+ included in all copies or substantial portions of the Software.
59
+
60
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
61
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
62
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
63
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
64
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
65
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
66
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
67
+
68
+ == AUTHOR:
69
+
70
+ Hiroki Yagita <yagihiro@gmail.com>
71
+ http://d.hatena.ne.jp/clayfish/
data/Rakefile ADDED
@@ -0,0 +1,28 @@
1
+ %w[rubygems rake rake/clean fileutils newgem rubigen].each { |f| require f }
2
+ require File.dirname(__FILE__) + '/lib/lwr-simple'
3
+
4
+ # Generate all the Rake tasks
5
+ # Run 'rake -T' to see list of generated tasks (from gem root directory)
6
+ $hoe = Hoe.new('lwr-simple', LWR::Simple::VERSION) do |p|
7
+ p.developer('yagita', 'yagihiro@gmail.com')
8
+ p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
9
+ p.post_install_message = 'PostInstall.txt' # TODO remove if post-install message not required
10
+ p.rubyforge_name = p.name # TODO this is default value
11
+ # p.extra_deps = [
12
+ # ['activesupport','>= 2.0.2'],
13
+ # ]
14
+ p.extra_dev_deps = [
15
+ ['newgem', ">= #{::Newgem::VERSION}"]
16
+ ]
17
+
18
+ p.clean_globs |= %w[**/.DS_Store tmp *.log]
19
+ path = (p.rubyforge_name == p.name) ? p.rubyforge_name : "\#{p.rubyforge_name}/\#{p.name}"
20
+ p.remote_rdoc_dir = File.join(path.gsub(/^#{p.rubyforge_name}\/?/,''), 'rdoc')
21
+ p.rsync_args = '-av --delete --ignore-errors'
22
+ end
23
+
24
+ require 'newgem/tasks' # load /tasks/*.rake
25
+ Dir['tasks/**/*.rake'].each { |t| load t }
26
+
27
+ # TODO - want other tests/tasks run by default? Add them to the list
28
+ # task :default => [:spec, :features]
data/lib/lwr-simple.rb ADDED
@@ -0,0 +1,155 @@
1
+ #
2
+ # = lwr-simple.rb
3
+ #
4
+ # LWR::Simple library is yet another LWP::Simple library for ruby.
5
+ #
6
+ # == SYNOPSIS:
7
+ #
8
+ # It is an interface that assumes the scene to which LWR::Simple is taken an active part by the one liner like begin so LWP::Simple, too.
9
+ # Its interface really looks like the LWP::Simple.
10
+ #
11
+ # # example. 1
12
+ # $ ruby -rlwr-simple -e 'getprint "http://www.sn.no"'
13
+ #
14
+ # # example. 2
15
+ # $ ruby -rlwr-simple -e 'get("http://www.ruby-lang.org/ja/").scan(/<a.*href="(.+?)"/) {|refs| puts(refs[0])}'
16
+ #
17
+ # == FEATURES/PROBLEMS:
18
+ #
19
+ # See LWR::Simple module's documents.
20
+ #
21
+ # == LICENSE:
22
+ #
23
+ # Copyright (c) 2008 Hiroki Yagita
24
+ #
25
+ # Permission is hereby granted, free of charge, to any person obtaining
26
+ # a copy of this software and associated documentation files (the
27
+ # 'Software'), to deal in the Software without restriction, including
28
+ # without limitation the rights to use, copy, modify, merge, publish,
29
+ # distribute, sublicense, and/or sell copies of the Software, and to
30
+ # permit persons to whom the Software is furnished to do so, subject to
31
+ # the following conditions:
32
+ #
33
+ # The above copyright notice and this permission notice shall be
34
+ # included in all copies or substantial portions of the Software.
35
+ #
36
+ # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
37
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
38
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
39
+ # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
40
+ # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
41
+ # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
42
+ # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
43
+ #
44
+
45
+ $:.unshift(File.dirname(__FILE__)) unless
46
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
47
+ require "net/http"
48
+ require "time"
49
+ require "uri"
50
+
51
+ module LWR # :nodoc:
52
+
53
+ # This module is extend toplevel.
54
+ # So, in your application, see below example code.
55
+ #
56
+ # puts get("http://www.google.com/")
57
+ # mirror("http://www.ruby-lang.org/images/logo.gif", "logo.gif") #=> save "logo.gif" as local file.
58
+ #
59
+ module Simple
60
+ VERSION = '0.0.1'
61
+
62
+ module_function
63
+
64
+ # Fetch a resource by the given +url+, and return the resource as String.
65
+ def get url
66
+ _get(to_uri(url)).body
67
+ rescue
68
+ nil
69
+ end
70
+
71
+ # Get document headers - [+content_type+, +document_length+, +modified_time+, +expires+, +server+]
72
+ def head url
73
+ uri = to_uri url
74
+ req = Net::HTTP::Get.new uri.path
75
+ res = Net::HTTP.start(uri.host, uri.port) {|http| http.request(req) }
76
+
77
+ # +modified_time+ value is provisional it using +Date+ header.
78
+ [res.content_type, res.content_length, res["date"], res["expires"], res["server"]]
79
+ rescue
80
+ []
81
+ end
82
+
83
+ # Fetch and print a resource by the given +url+.
84
+ def getprint url
85
+ uri = to_uri url
86
+ res = _get uri
87
+ puts res.body
88
+ res.code.to_i
89
+ rescue
90
+ code = 404
91
+ unless res
92
+ $stderr.puts "#{url} is bad URL."
93
+ else
94
+ code = res.code.to_i
95
+ $stderr.puts "#{url} is bad URL(#{code})."
96
+ end
97
+ code
98
+ end
99
+
100
+ # Fetch a resource by the given +url+ and save to +file+.
101
+ def getstore url, file
102
+ uri = to_uri url
103
+ res = _get uri
104
+ _store file, res.body
105
+ res.code.to_i
106
+ rescue
107
+ res ? res.code.to_i : 404
108
+ end
109
+
110
+ # Mirror a local file and a remote file method.
111
+ #
112
+ # +url+:: request target url as String.
113
+ # +file+:: mirroring file path as String.
114
+ #
115
+ # return value is http responce code.
116
+ def mirror url, file
117
+ uri = to_uri url
118
+ req = Net::HTTP::Get.new uri.path
119
+ req["If-Modified-Since"] = FileTest.exist?(file) ? File.mtime(file).httpdate : Time.at(0).httpdate
120
+ res = Net::HTTP.start(uri.host, uri.port) {|http| http.request(req) }
121
+
122
+ # if +code+ is +http not modified+, fetch the url resource.
123
+ code = res.code.to_i
124
+ _store(file, _get(uri).body) unless code == 304
125
+
126
+ code
127
+ rescue
128
+ res ? res.code.to_i : 404
129
+ end
130
+
131
+ # only internal use.
132
+ def to_uri url
133
+ uri = URI.parse url
134
+ uri.path = "/" if uri.path.empty?
135
+ uri
136
+ end
137
+
138
+ # only internal use.
139
+ def _get uri
140
+ req = Net::HTTP::Get.new uri.path
141
+ res = Net::HTTP.start(uri.host, uri.port) {|http| http.request(req) }
142
+ res
143
+ end
144
+
145
+ # only internal use.
146
+ def _store path, s
147
+ File.open(path, "wb") {|f| f.write(s) }
148
+ end
149
+
150
+ end
151
+
152
+ end
153
+
154
+ # All LWR::Simple's methods extend to Object class.
155
+ extend LWR::Simple
@@ -0,0 +1,38 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = %q{lwr-simple}
3
+ s.version = "0.0.1"
4
+
5
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
6
+ s.authors = ["yagita"]
7
+ s.cert_chain = ["/home/yagita/.gem/gem-public_cert.pem"]
8
+ s.date = %q{2009-01-03}
9
+ s.description = %q{It is an interface that assumes the scene to which LWR::Simple is taken an active part by the one liner like begin so LWP::Simple, too. Its interface really looks like the LWP::Simple.}
10
+ s.email = ["yagihiro@gmail.com"]
11
+ s.extra_rdoc_files = ["History.txt", "Manifest.txt", "PostInstall.txt", "README.rdoc"]
12
+ s.files = ["History.txt", "Manifest.txt", "PostInstall.txt", "README.rdoc", "Rakefile", "lib/lwr-simple.rb", "lwr-simple.gemspec", "script/console", "script/destroy", "script/generate", "spec/lwr-simple_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "tasks/rspec.rake"]
13
+ s.has_rdoc = true
14
+ s.homepage = %q{http://github.com/yagihiro/lwr-simple/tree/master}
15
+ s.post_install_message = %q{PostInstall.txt}
16
+ s.rdoc_options = ["--main", "README.rdoc"]
17
+ s.require_paths = ["lib"]
18
+ s.rubyforge_project = %q{lwr-simple}
19
+ s.rubygems_version = %q{1.2.0}
20
+ s.signing_key = %q{/home/yagita/.gem/gem-private_key.pem}
21
+ s.summary = %q{LWR::Simple library is yet another LWP::Simple library for ruby.}
22
+
23
+ if s.respond_to? :specification_version then
24
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
25
+ s.specification_version = 2
26
+
27
+ if current_version >= 3 then
28
+ s.add_development_dependency(%q<newgem>, [">= 1.2.1"])
29
+ s.add_development_dependency(%q<hoe>, [">= 1.8.0"])
30
+ else
31
+ s.add_dependency(%q<newgem>, [">= 1.2.1"])
32
+ s.add_dependency(%q<hoe>, [">= 1.8.0"])
33
+ end
34
+ else
35
+ s.add_dependency(%q<newgem>, [">= 1.2.1"])
36
+ s.add_dependency(%q<hoe>, [">= 1.8.0"])
37
+ end
38
+ end
data/script/console ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # File: script/console
3
+ irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
4
+
5
+ libs = " -r irb/completion"
6
+ # Perhaps use a console_lib to store any extra methods I may want available in the cosole
7
+ # libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
8
+ libs << " -r #{File.dirname(__FILE__) + '/../lib/lwr-simple.rb'}"
9
+ puts "Loading lwr-simple gem"
10
+ exec "#{irb} #{libs} --simple-prompt"
data/script/destroy ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/destroy'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Destroy.new.run(ARGV)
data/script/generate ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/generate'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Generate.new.run(ARGV)
@@ -0,0 +1,98 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ def successed? code
4
+ 200 <= code and code < 400
5
+ end
6
+
7
+ # This spec quotes from the LWP::Simple documents.
8
+ describe LWR::Simple do
9
+
10
+ describe "get()" do
11
+ it "should be going to fetch the document identified by the given URL and return it." do
12
+ doc = LWR::Simple.get("http://www.google.com/")
13
+ doc.should_not be_nil
14
+ doc.should_not be_empty
15
+ doc.should be_an_instance_of(String)
16
+ doc.should match(/google/)
17
+ end
18
+ it "should nil if this method fails." do
19
+ LWR::Simple.get("http://www.notexists.com/").should be_nil
20
+ end
21
+ it "should URL argument can be either a String's instance." do
22
+ LWR::Simple.get(nil).should be_nil
23
+ LWR::Simple.get(URI("http://www.google.com/")).should be_nil
24
+ end
25
+ end
26
+
27
+ describe "head()" do
28
+ it "should get document headers. Returns the following 5 values if successful: ($content_type, $document_length, $modified_time, $expires, $server)" do
29
+ h = LWR::Simple.head("http://www.google.com/")
30
+ h.should_not be_nil
31
+ h.should_not be_empty
32
+ h.should be_an_instance_of(Array)
33
+ h.should have(5).items
34
+ end
35
+ it "should returns an empty list if this method fails." do
36
+ LWR::Simple.head("http://www.notexists.com/").should have(0).items
37
+ end
38
+ end
39
+
40
+ describe "getprint()" do
41
+ before do
42
+ @stdout = $>
43
+ @stderr = $stderr
44
+ end
45
+ after do
46
+ $> = @stdout
47
+ $stderr = @stderr
48
+ end
49
+ it "should get and print a document identified by a URL. The document is printed to the selected default filehandle for output (normally STDOUT) as data is received from the network." do
50
+ m = mock("out")
51
+ m.should_receive(:write) do |arg|
52
+ # +arg+ is printed a document as String instance.
53
+ arg.should be_an_instance_of(String)
54
+ arg.should_not be_empty
55
+ end
56
+ $> = m
57
+ code = LWR::Simple.getprint("http://www.google.com/")
58
+ successed?(code).should be_true
59
+ end
60
+ it "should if the request fails, then the status code and message are printed on STDERR. The return value is the HTTP response code." do
61
+ m = mock("err")
62
+ m.should_receive(:write).any_number_of_times # $stderr object requires #write method. (In fact, it is not called.)
63
+ m.should_receive(:puts) do |arg|
64
+ # +arg+ is printed a document as String instance.
65
+ arg.should be_an_instance_of(String)
66
+ arg.should_not be_empty
67
+ end
68
+ $stderr = m
69
+ LWR::Simple.getprint("http://www.notexists.com/").should == 404
70
+ end
71
+ end
72
+
73
+ describe "getstore()" do
74
+ after do
75
+ File.delete("g.html") if FileTest.exist?("g.html")
76
+ end
77
+ it "should gets a document identified by a URL and stores it in the file. The return value is the HTTP response code." do
78
+ code = LWR::Simple.getstore("http://www.google.com/", "g.html")
79
+ File.open("g.html") {|f| f.read.should match(/google/) }
80
+ successed?(code).should be_true
81
+ end
82
+ end
83
+
84
+ describe "mirror()" do
85
+ after do
86
+ File.delete("logo.gif") if FileTest.exist?("logo.gif")
87
+ end
88
+ it "should get and store a document identified by a URL, using If-modified-since, and checking the Content-Length. Returns the HTTP response code." do
89
+ code = LWR::Simple.mirror("http://www.ruby-lang.org/images/logo.gif", "logo.gif")
90
+ FileTest.exist?("logo.gif").should be_true
91
+ successed?(code).should be_true
92
+ code = LWR::Simple.mirror("http://www.ruby-lang.org/images/logo.gif", "logo.gif")
93
+ FileTest.exist?("logo.gif").should be_true
94
+ successed?(code).should be_true
95
+ end
96
+ end
97
+
98
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1 @@
1
+ --colour
@@ -0,0 +1,10 @@
1
+ begin
2
+ require 'spec'
3
+ rescue LoadError
4
+ require 'rubygems'
5
+ gem 'rspec'
6
+ require 'spec'
7
+ end
8
+
9
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
10
+ require 'lwr-simple'
data/tasks/rspec.rake ADDED
@@ -0,0 +1,21 @@
1
+ begin
2
+ require 'spec'
3
+ rescue LoadError
4
+ require 'rubygems'
5
+ require 'spec'
6
+ end
7
+ begin
8
+ require 'spec/rake/spectask'
9
+ rescue LoadError
10
+ puts <<-EOS
11
+ To use rspec for testing you must install rspec gem:
12
+ gem install rspec
13
+ EOS
14
+ exit(0)
15
+ end
16
+
17
+ desc "Run the specs under spec/models"
18
+ Spec::Rake::SpecTask.new do |t|
19
+ t.spec_opts = ['--options', "spec/spec.opts"]
20
+ t.spec_files = FileList['spec/**/*_spec.rb']
21
+ end
metadata ADDED
@@ -0,0 +1,90 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lwr-simple
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - yagita
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-01-03 00:00:00 +09:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: newgem
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 1.2.3
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: hoe
27
+ type: :development
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.8.0
34
+ version:
35
+ description: ""
36
+ email:
37
+ - yagihiro@gmail.com
38
+ executables: []
39
+
40
+ extensions: []
41
+
42
+ extra_rdoc_files:
43
+ - History.txt
44
+ - Manifest.txt
45
+ - PostInstall.txt
46
+ - README.rdoc
47
+ files:
48
+ - History.txt
49
+ - Manifest.txt
50
+ - PostInstall.txt
51
+ - README.rdoc
52
+ - Rakefile
53
+ - lib/lwr-simple.rb
54
+ - lwr-simple.gemspec
55
+ - script/console
56
+ - script/destroy
57
+ - script/generate
58
+ - spec/lwr-simple_spec.rb
59
+ - spec/spec.opts
60
+ - spec/spec_helper.rb
61
+ - tasks/rspec.rake
62
+ has_rdoc: true
63
+ homepage: LWR::Simple library is yet another LWP::Simple library for ruby.
64
+ post_install_message: PostInstall.txt
65
+ rdoc_options:
66
+ - --main
67
+ - README.rdoc
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: "0"
75
+ version:
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: "0"
81
+ version:
82
+ requirements: []
83
+
84
+ rubyforge_project: lwr-simple
85
+ rubygems_version: 1.2.0
86
+ signing_key:
87
+ specification_version: 2
88
+ summary: ""
89
+ test_files: []
90
+