quickcite 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source :rubygems
2
+
3
+ gem "nokogiri"
4
+ gem "highline"
5
+
6
+ gemspec
@@ -0,0 +1,29 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ quickcite (1.0.0)
5
+ bibtex-ruby (>= 2.0)
6
+ json
7
+
8
+ GEM
9
+ remote: http://rubygems.org/
10
+ specs:
11
+ bibtex-ruby (2.0.12)
12
+ latex-decode (>= 0.0.6)
13
+ multi_json (~> 1.3)
14
+ highline (1.6.13)
15
+ json (1.7.3)
16
+ latex-decode (0.0.12)
17
+ unicode (~> 0.4)
18
+ multi_json (1.3.6)
19
+ nokogiri (1.5.5)
20
+ unicode (0.4.2)
21
+
22
+ PLATFORMS
23
+ ruby
24
+
25
+ DEPENDENCIES
26
+ bundler
27
+ highline
28
+ nokogiri
29
+ quickcite!
@@ -0,0 +1,12 @@
1
+ require 'bundler'
2
+ require 'rake/testtask'
3
+
4
+ Bundler::GemHelper::install_tasks
5
+
6
+ Rake::TestTask.new do |t|
7
+ t.libs << "test"
8
+ t.test_files = FileList['test/test*.rb']
9
+ t.verbose = true
10
+ end
11
+
12
+ task :default => [:build]
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'quickcite'
4
+
5
+ flags = {}
6
+ optparse = OptionParser.new do|opts|
7
+ opts.banner = "Usage: quickrite -b <bibtex file> latex1 latex2 ... "
8
+
9
+ flags[:bibtex] = nil
10
+ opts.on( '-b', '--bibtex FILE', 'Extract/generate references to FILE' ) do|file|
11
+ flags[:bibtex] = file
12
+ end
13
+ end
14
+
15
+ optparse.parse!
16
+
17
+ QuickCite::run(ARGV, flags[:bibtex])
@@ -0,0 +1,93 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "rubygems"
4
+ require "bundler/setup"
5
+
6
+ require "highline/system_extensions"
7
+ require "bibtex"
8
+ require "optparse"
9
+ require "readline"
10
+ require "quickcite/citeulike"
11
+ require "quickcite/dblp"
12
+
13
+ module QuickCite
14
+ CITE_REGEX = /\\cite\{([^\}]+)\}/
15
+ SPLIT_REGEX = /([A-Z]+[a-z]+|[0-9]+|[^\\p]+)/
16
+
17
+ # Convert a citation reference (e.g "PowerPiccolo2008") into a
18
+ # list of strings appropriate for submission to a search engine.
19
+ #
20
+ # By default the citation is split on lowercase->uppercase transitions.
21
+ def self.cite_to_query(cite)
22
+ cite.scan(SPLIT_REGEX).map { |w| w[0] }
23
+ end
24
+
25
+ def self.ask_user(cite, result_list)
26
+ puts "Result to use for \{#{cite}\}: "
27
+ puts " (0) Skip this citation"
28
+ result_list.each_with_index do |r, idx|
29
+ puts " (#{idx + 1}) #{r.title}"
30
+ puts " #{r.authors.join(', ')}"
31
+ end
32
+
33
+ c = HighLine::SystemExtensions::get_character.chr.to_i
34
+ if c > 0 && c <= result_list.length then
35
+ return result_list[c - 1]
36
+ end
37
+ end
38
+
39
+ class Main
40
+ include QuickCite
41
+ def initialize(latex_files, bibtex_file)
42
+ @source = DBLP.new
43
+ @bib = BibTeX.open(bibtex_file, :include => [:meta_content])
44
+
45
+ latex_files.each do|f|
46
+ puts("Processing... #{f}")
47
+ process_latex(f)
48
+ end
49
+
50
+ puts("Writing bibtex...")
51
+ outfile = open(bibtex_file, "w")
52
+ outfile.write(@bib.to_s)
53
+ outfile.close
54
+ end
55
+
56
+ def update_bibtex(cite, entry)
57
+ e = BibTeX.parse(@source.bibtex(entry)).first
58
+ e.key = cite
59
+ @bib << e
60
+ end
61
+
62
+ def process_cite(cite)
63
+ if @bib.has_key?(cite) then
64
+ puts("Skipping matched reference #{cite}")
65
+ else
66
+ puts("Missing reference for #{cite}")
67
+ query = QuickCite.cite_to_query(cite)
68
+ results = @source.search(query)
69
+ accepted = QuickCite.ask_user(cite, results)
70
+ if accepted == nil
71
+ puts "Skipping update for reference #{cite}"
72
+ else
73
+ puts "Updating bibtex for #{cite} with result: \n#{accepted.title}"
74
+ update_bibtex(cite, accepted)
75
+ end
76
+ end
77
+ end
78
+
79
+ def process_latex(f)
80
+ latex = File.read(f)
81
+ latex.scan(CITE_REGEX) do|m|
82
+ m[0].split(",").map do|c|
83
+ process_cite(c)
84
+ end
85
+ end
86
+ puts(f)
87
+ end
88
+ end
89
+
90
+ def self.run(latex_files, bibtex_file)
91
+ Main.new(latex_files, bibtex_file)
92
+ end
93
+ end
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Searches and downloads bibtex entries from CiteULike (citeulike.org)
4
+ #
5
+ # Author:: Russell Power (power@cs.nyu.edu)
6
+
7
+ require "net/http"
8
+ require "uri"
9
+ require "quickcite/json"
10
+
11
+ module QuickCite
12
+ class CiteULike
13
+ HOST = "http://www.citeulike.org"
14
+ SEARCH_BASE = "/json/search/all"
15
+ BIBTEX_OPTIONS = "do_username_prefix=0&key_type=4&incl_amazon=1&clean_urls=1&smart_wrap=1&q="
16
+
17
+ def search(query)
18
+ http = Net::HTTP.new(HOST)
19
+ request = Net::HTTP::Get.new(SEARCH_BASE)
20
+ request.set_form_data({ "q" => query })
21
+ response = http.request(request)
22
+ js = JSONUtil.Parse(response.body)
23
+ return js
24
+ end
25
+
26
+ def bibtex(identifier)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Searches and downloads bibtex entries from CiteULike (citeulike.org)
4
+ #
5
+ # Author:: Russell Power (power@cs.nyu.edu)
6
+
7
+ require "net/http"
8
+ require "nokogiri"
9
+ require "quickcite/json"
10
+ require "uri"
11
+
12
+ module QuickCite
13
+ class DBLP
14
+ # NB -- DBLP seems to expect query arguments in a certain order -
15
+ # the q= argument has to come first.
16
+ SEARCH_BASE = "http://www.dblp.org/search/api/?"
17
+ SEARCH_SUFFIX = "&c=4&f=0&format=json&h=10"
18
+
19
+ Result = Struct.new("Result", :title, :authors, :url)
20
+ def search(query)
21
+ # json = JSONUtil.parse(File.read("test/power-piccolo.json"))
22
+ query_str = "q=" + URI::escape(query.join(" "))
23
+ uri = URI::parse(SEARCH_BASE + query_str + SEARCH_SUFFIX)
24
+
25
+ response = Net::HTTP::get(uri)
26
+ json = JSONUtil.parse(response)
27
+
28
+ json.result.hits.hit.map do |h|
29
+ Result.new(
30
+ h.title["dblp:title"].text,
31
+ h.title["dblp:authors"]["dblp:author"].to_a,
32
+ h.url)
33
+ end
34
+ end
35
+
36
+ def bibtex(result)
37
+ # dom = Nokogiri.Slop(open("test/power-piccolo.html"))
38
+ puts("RESULT #{result.url}")
39
+ dom = Nokogiri.Slop Net::HTTP.get(URI::parse(result.url))
40
+ entries = dom.html.body.pre
41
+ case entries
42
+ when Nokogiri::XML::NodeSet
43
+ return entries[0].to_str
44
+ else
45
+ return entries.to_str
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,46 @@
1
+ # JSON utilities.
2
+ require "json"
3
+
4
+ module QuickCite
5
+ module JSONUtil
6
+ class JSONDict
7
+ extend Forwardable
8
+ include Enumerable
9
+ attr_reader :dict
10
+
11
+ def initialize(d)
12
+ @dict = d
13
+ end
14
+
15
+ def method_missing name, *args
16
+ return JSONUtil._wrap(@dict[name.to_s])
17
+ end
18
+
19
+ def [](key)
20
+ JSONUtil._wrap(@dict[key])
21
+ end
22
+
23
+ def each
24
+ case @dict
25
+ when Hash
26
+ @dict.each_key { |k| yield self[k] }
27
+ when Array
28
+ @dict.each_index { |k| yield self[k] }
29
+ end
30
+ end
31
+ end
32
+
33
+ def self._wrap(value)
34
+ case value
35
+ when Hash, Array
36
+ JSONDict.new(value)
37
+ else
38
+ value
39
+ end
40
+ end
41
+
42
+ def self.parse(str)
43
+ d = JSONDict.new(JSON.parse(str))
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,3 @@
1
+ module QuickCite
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,16 @@
1
+ require File.expand_path("../lib/quickcite/version", __FILE__)
2
+
3
+ spec = Gem::Specification.new do |s|
4
+ s.platform = Gem::Platform::RUBY
5
+ s.summary = "Efficient citation lookup and management"
6
+ s.name = "quickcite"
7
+ s.authors = ["Russell Power"]
8
+ s.version = QuickCite::VERSION
9
+ s.email = "power@cs.nyu.edu"
10
+ s.require_path = "lib"
11
+ s.files = `git ls-files`.split("\n")
12
+
13
+ s.add_dependency "bibtex-ruby", ">=2.0"
14
+ s.add_dependency "json"
15
+ s.add_development_dependency "bundler"
16
+ end
@@ -0,0 +1,18 @@
1
+ <html><head><title>DBLP BibTeX Record 'journals/cacm/DeanG10'</title><link href="http://dblp.uni-trier.de/dblp.css" rel="stylesheet" type="text/css" /></head><body>
2
+ <table width="100%"><tr><td align="left"><a href="http://dblp.uni-trier.de/db/index.html"><img alt="dblp.uni-trier.de" src="http://dblp.uni-trier.de/db/Logo.gif" border="0" height="60" width="170"/></a></td><td align="center"><a href="http://www.dagstuhl.de/"><img alt="www.dagstuhl.de" src="http://dblp.uni-trier.de/db/lzi_logo.gif" border="0" height="56" width="251"/></a></td><td align="right"><a href="http://www.uni-trier.de"><img alt="www.uni-trier.de" src="http://dblp.uni-trier.de/db/logo_universitaet-trier.gif" border="0" height="48" width="215"/></a></td></tr></table>
3
+ <h1>DBLP BibTeX Record '<a href="http://dblp.uni-trier.de/rec/bibtex/journals/cacm/DeanG10.xml">journals/cacm/DeanG10</a>'</h1>
4
+ <pre>@article{<a href="http://dblp.uni-trier.de/db/about/bibtex.html">DBLP</a>:journals/cacm/DeanG10,
5
+ author = {Jeffrey Dean and
6
+ Sanjay Ghemawat},
7
+ title = {MapReduce: a flexible data processing tool},
8
+ journal = {Commun. ACM},
9
+ volume = {53},
10
+ number = {1},
11
+ year = {2010},
12
+ pages = {72-77},
13
+ ee = {http://doi.acm.org/10.1145/1629175.1629198},
14
+ bibsource = {DBLP, http://dblp.uni-trier.de}
15
+ }
16
+ </pre>
17
+ <p><div class="footer"><a href="http://dblp.uni-trier.de/db/index.html">Home</a> | <a href="http://dblp.uni-trier.de/db/conf/indexa.html">Conferences</a> | <a href="http://dblp.uni-trier.de/db/journals/index.html">Journals</a> | <a href="http://dblp.uni-trier.de/db/series/index.html">Series</a> | <a href="http://dblp.uni-trier.de/db/about/faq.html">FAQ</a> &#151; Search: <a href="http://dblp.l3s.de">Faceted</a> | <a href="http://dblp.isearch-it-solutions.net/"> Free</a> | <a href="http://www.dblp.org/search/">Complete</a> | <a href="http://dblp.uni-trier.de/db/indices/a-tree/index.html">Author</a></div>
18
+ <small>Last update 2005-12-16 CET by the <a href="http://dblp.uni-trier.de/db/about/team.html">DBLP Team</a> &#8212; <a href="http://opendefinition.org/"><img alt="This material is Open Data" border="0" src="http://assets.okfn.org/images/ok_buttons/od_80x15_blue.png" style="position:relative; top:3px" /></a> Data released under the <a href="http://opendatacommons.org/licenses/by/summary/">ODC-BY&nbsp;1.0 license</a> &#8212; See also our <a href="http://dblp.uni-trier.de/db/copyright.html">legal information page</a></small></p></body></html>
@@ -0,0 +1,31 @@
1
+ <html><head><title>DBLP BibTeX Record 'conf/osdi/PowerL10'</title><link href="http://dblp.uni-trier.de/dblp.css" rel="stylesheet" type="text/css" /></head><body>
2
+ <table width="100%"><tr><td align="left"><a href="http://dblp.uni-trier.de/db/index.html"><img alt="dblp.uni-trier.de" src="http://dblp.uni-trier.de/db/Logo.gif" border="0" height="60" width="170"/></a></td><td align="center"><a href="http://www.dagstuhl.de/"><img alt="www.dagstuhl.de" src="http://dblp.uni-trier.de/db/lzi_logo.gif" border="0" height="56" width="251"/></a></td><td align="right"><a href="http://www.uni-trier.de"><img alt="www.uni-trier.de" src="http://dblp.uni-trier.de/db/logo_universitaet-trier.gif" border="0" height="48" width="215"/></a></td></tr></table>
3
+ <h1>DBLP BibTeX Record '<a href="http://dblp.uni-trier.de/rec/bibtex/conf/osdi/PowerL10.xml">conf/osdi/PowerL10</a>'</h1>
4
+ <pre>@inproceedings{<a href="http://dblp.uni-trier.de/db/about/bibtex.html">DBLP</a>:conf/osdi/PowerL10,
5
+ author = {Russell Power and
6
+ Jinyang Li},
7
+ title = {Piccolo: Building Fast, Distributed Programs with Partitioned
8
+ Tables},
9
+ booktitle = {OSDI},
10
+ year = {2010},
11
+ pages = {293-306},
12
+ ee = {http://www.usenix.org/events/osdi10/tech/full_papers/Power.pdf},
13
+ crossref = {DBLP:conf/osdi/2010},
14
+ bibsource = {DBLP, http://dblp.uni-trier.de}
15
+ }
16
+ </pre>
17
+ <pre>@proceedings{<a href="http://dblp.uni-trier.de/db/about/bibtex.html">DBLP</a>:conf/osdi/2010,
18
+ editor = {Remzi H. Arpaci-Dusseau and
19
+ Brad Chen},
20
+ title = {9th USENIX Symposium on Operating Systems Design and Implementation,
21
+ OSDI 2010, October 4-6, 2010, Vancouver, BC, Canada, Proceedings},
22
+ booktitle = {OSDI},
23
+ publisher = {USENIX Association},
24
+ year = {2010},
25
+ isbn = {978-1-931971-79-9},
26
+ ee = {http://www.usenix.org/event/osdi10/tech/full_papers/osdi10_proceedings.pdf},
27
+ bibsource = {DBLP, http://dblp.uni-trier.de}
28
+ }
29
+ </pre>
30
+ <p><div class="footer"><a href="http://dblp.uni-trier.de/db/index.html">Home</a> | <a href="http://dblp.uni-trier.de/db/conf/indexa.html">Conferences</a> | <a href="http://dblp.uni-trier.de/db/journals/index.html">Journals</a> | <a href="http://dblp.uni-trier.de/db/series/index.html">Series</a> | <a href="http://dblp.uni-trier.de/db/about/faq.html">FAQ</a> &#151; Search: <a href="http://dblp.l3s.de">Faceted</a> | <a href="http://dblp.isearch-it-solutions.net/"> Free</a> | <a href="http://www.dblp.org/search/">Complete</a> | <a href="http://dblp.uni-trier.de/db/indices/a-tree/index.html">Author</a></div>
31
+ <small>Last update 2009-06-09 CET by the <a href="http://dblp.uni-trier.de/db/about/team.html">DBLP Team</a> &#8212; <a href="http://opendefinition.org/"><img alt="This material is Open Data" border="0" src="http://assets.okfn.org/images/ok_buttons/od_80x15_blue.png" style="position:relative; top:3px" /></a> Data released under the <a href="http://opendatacommons.org/licenses/by/summary/">ODC-BY&nbsp;1.0 license</a> &#8212; See also our <a href="http://dblp.uni-trier.de/db/copyright.html">legal information page</a></small></p></body></html>
@@ -0,0 +1,91 @@
1
+ {
2
+ "result":{
3
+ "query":"power* piccolo*",
4
+ "status":
5
+ {
6
+ "@code":12,"text":"OK"
7
+ },
8
+ "time":{
9
+ "@unit":"msecs",
10
+ "text":4.96
11
+ },
12
+ "completions":{
13
+ "@total":1,
14
+ "@computed":1,
15
+ "@sent":1,
16
+ "c":{
17
+ "@sc":202,
18
+ "@dc":3,
19
+ "@oc":3,
20
+ "@id":11535429,
21
+ "text":"piccolo"
22
+ }
23
+ },
24
+ "hits":{
25
+ "@total":3,
26
+ "@computed":3,
27
+ "@sent":3,
28
+ "@first":0,
29
+ "hit":[
30
+ {
31
+ "@score":102,
32
+ "@id":1287205,
33
+ "title":{
34
+ "dblp:authors":{
35
+ "dblp:author":[
36
+ "Geev Mokryani",
37
+ "Pierluigi Siano",
38
+ "Antonio Piccolo",
39
+ "Vito Calderaro",
40
+ "Carlo Cecati"]},
41
+ "dblp:title":{
42
+ "@ee":"http://doi.ieeecomputersociety.org/10.1109/FUZZY.2011.6007591",
43
+ "text":"A novel fuzzy system for wind turbines reactive power control. "},
44
+ "dblp:venue":{
45
+ "@url":"db/conf/fuzzIEEE/fuzzIEEE2011.html#MokryaniSPCC11",
46
+ "text":"FUZZ-IEEE 2011:231-235"},
47
+ "dblp:year":2011,
48
+ "dblp:type":"inproceedings"},
49
+ "url":"http://www.dblp.org/rec/bibtex/conf/fuzzIEEE/MokryaniSPCC11"
50
+ },
51
+ {
52
+ "@score":102,
53
+ "@id":1565069,
54
+ "title":{
55
+ "dblp:authors":{
56
+ "dblp:author":[
57
+ "Russell Power",
58
+ "Jinyang Li"]},
59
+ "dblp:title":{
60
+ "@ee":"http://www.usenix.org/events/osdi10/tech/full_papers/Power.pdf",
61
+ "text":"Piccolo: Building Fast, Distributed Programs with Partitioned Tables. "},
62
+ "dblp:venue":{
63
+ "@url":"db/conf/osdi/osdi2010.html#PowerL10",
64
+ "text":"OSDI 2010:293-306"},
65
+ "dblp:year":2010,
66
+ "dblp:type":"inproceedings"},
67
+ "url":"http://www.dblp.org/rec/bibtex/conf/osdi/PowerL10"
68
+ },
69
+ {
70
+ "@score":102,
71
+ "@id":2042841,
72
+ "title":{
73
+ "dblp:authors":{
74
+ "dblp:author":[
75
+ "Giuseppe Bianchi",
76
+ "Nicola Blefari-Melazzi",
77
+ "Francesca Lo Piccolo"]},
78
+ "dblp:title":{
79
+ "@ee":"http://dx.doi.org/10.1109/ISCC.2007.4381640",
80
+ "text":"Impact of Chosen Error Criteria in RSS-based Localization: Power vs Distance vs Relative Distance Error Minimization. "},
81
+ "dblp:venue":{
82
+ "@url":"db/conf/iscc/iscc2007.html#BianchiBP07",
83
+ "text":"ISCC 2007"},
84
+ "dblp:year":2007,
85
+ "dblp:type":"inproceedings"},
86
+ "url":"http://www.dblp.org/rec/bibtex/conf/iscc/BianchiBP07"
87
+ }
88
+ ]
89
+ }
90
+ }
91
+ }
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "quickcite"
4
+ require "quickcite/json"
5
+
6
+ require "test/unit"
7
+
8
+ class TestJson < Test::Unit::TestCase
9
+ def test_simple()
10
+ v = QuickCite::JSONUtil.parse(File.read('test/power-piccolo.json'))
11
+ v.result.hits.hit.map { |h| puts(h.url) }
12
+ end
13
+ end
14
+
15
+ class TestMain < Test::Unit::TestCase
16
+ def test_simple()
17
+ texfile = open("/tmp/test.tex", "w")
18
+ texfile.write <<-END
19
+ This is a test latex file.
20
+ I like to cite \\cite{PowerPiccolo}
21
+ And \\cite{MapreduceDean}
22
+ END
23
+ texfile.close
24
+
25
+ bibfile = open("/tmp/test.bib", "w")
26
+ bibfile.write("")
27
+ bibfile.close
28
+
29
+ QuickCite::run(["/tmp/test.tex"], "/tmp/test.bib")
30
+
31
+ puts("Result: ")
32
+ puts(File.read("/tmp/test.bib"))
33
+ end
34
+ end
35
+
36
+ class TestCiteToQuery < Test::Unit::TestCase
37
+ def test_simple()
38
+ assert_equal(
39
+ ["Russell", "Power", "Piccolo"],
40
+ QuickCite::cite_to_query("RussellPowerPiccolo"))
41
+ assert_equal(
42
+ ["Piccolo", "2010"],
43
+ QuickCite::cite_to_query("Piccolo2010"))
44
+ end
45
+ end
metadata ADDED
@@ -0,0 +1,120 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: quickcite
3
+ version: !ruby/object:Gem::Version
4
+ hash: 23
5
+ prerelease:
6
+ segments:
7
+ - 1
8
+ - 0
9
+ - 0
10
+ version: 1.0.0
11
+ platform: ruby
12
+ authors:
13
+ - Russell Power
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-07-18 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: bibtex-ruby
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 2
31
+ - 0
32
+ version: "2.0"
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: json
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
47
+ type: :runtime
48
+ version_requirements: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ name: bundler
51
+ prerelease: false
52
+ requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ type: :development
62
+ version_requirements: *id003
63
+ description:
64
+ email: power@cs.nyu.edu
65
+ executables: []
66
+
67
+ extensions: []
68
+
69
+ extra_rdoc_files: []
70
+
71
+ files:
72
+ - Gemfile
73
+ - Gemfile.lock
74
+ - Rakefile
75
+ - bin/quickcite
76
+ - lib/quickcite.rb
77
+ - lib/quickcite/citeulike.rb
78
+ - lib/quickcite/dblp.rb
79
+ - lib/quickcite/json.rb
80
+ - lib/quickcite/version.rb
81
+ - quickcite.gemspec
82
+ - test/dean.html
83
+ - test/power-piccolo.html
84
+ - test/power-piccolo.json
85
+ - test/test_quickcite.rb
86
+ homepage:
87
+ licenses: []
88
+
89
+ post_install_message:
90
+ rdoc_options: []
91
+
92
+ require_paths:
93
+ - lib
94
+ required_ruby_version: !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ hash: 3
100
+ segments:
101
+ - 0
102
+ version: "0"
103
+ required_rubygems_version: !ruby/object:Gem::Requirement
104
+ none: false
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ hash: 3
109
+ segments:
110
+ - 0
111
+ version: "0"
112
+ requirements: []
113
+
114
+ rubyforge_project:
115
+ rubygems_version: 1.8.15
116
+ signing_key:
117
+ specification_version: 3
118
+ summary: Efficient citation lookup and management
119
+ test_files: []
120
+