bibtex-ruby 2.0.5 → 2.0.6

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of bibtex-ruby might be problematic. Click here for more details.

data/History.txt CHANGED
@@ -1,4 +1,10 @@
1
- 2.0.5 /
1
+ 2.0.6 / 2012-04-30
2
+ ==================
3
+
4
+ * Added support for !=, /=, ~=, and ^= queries
5
+
6
+ 2.0.5 / 2012-04-19
7
+ ==================
2
8
 
3
9
  * Fixed Entry#dup (@JLimperg)
4
10
  * Implemented explicit caching of regular expressions (for MacRuby)
data/README.md CHANGED
@@ -8,77 +8,87 @@ tokenizes correctly formatted names; BibTeX-Ruby recognizes BibTeX string
8
8
  replacements, joins values containing multiple strings or variables,
9
9
  supports cross-references, and decodes common LaTeX formatting
10
10
  instructions to unicode; if you are in a hurry, it also allows for easy
11
- export/conversion to formats such as YAML, JSON, CiteProc, and XML (BibTeXML).
11
+ export/conversion to formats such as YAML, JSON, CiteProc/CSL, and
12
+ XML (BibTeXML).
12
13
 
13
- For a list of projects using BibTeX-Ruby, see
14
- [the project wiki](https://github.com/inukshuk/bibtex-ruby/wiki/Projects-Using-BibTeX-Ruby).
14
+ For a list of projects using BibTeX-Ruby, take a look at the
15
+ [project wiki](https://github.com/inukshuk/bibtex-ruby/wiki/Projects-Using-BibTeX-Ruby).
15
16
 
16
17
 
17
18
  Quickstart
18
19
  ----------
19
20
 
21
+ Install and load BibTeX-Ruby in an IRB session:
22
+
20
23
  $ [sudo] gem install bibtex-ruby
21
24
  $ irb
22
25
  >> require 'bibtex'
23
- => true
24
- >> b = BibTeX.open('./ruby.bib')
25
- >> b['pickaxe']
26
- => "2009"
27
- >> b['pickaxe'].title
28
- => "Programming Ruby 1.9: The Pragmatic Programmer's Guide"
29
- >> b[:pickaxe].author.length
30
- => 3
31
- >> b[:pickaxe].author.to_s
32
- => "Thomas, Dave and Fowler, Chad and Hunt, Andy"
33
- >> b[:pickaxe].author[2].first
34
- => "Andy"
35
- >> b['@book'].length
36
- => 3
37
- >> b['@article'].length
38
- => 0
39
- >> b['@book[year=2009]'].length
40
- => 1
41
-
42
- BibTeX-Ruby helps you convert your bibliography to JSON, XML, or YAML;
43
- alternatively, you can export to the JSON format used by
44
- [CSL](http://citationstyles.org) processors and render the bibliography in
45
- one of [many different styles](https://github.com/citation-style-language/styles)
46
- ([previews](http://www.zotero.org/styles/)):
47
-
48
- >> require 'citeproc' # requires the citeproc-ruby gem
49
- => true
50
- >> CiteProc.process b[:pickaxe].to_citeproc, :style => :apa
51
- => "Thomas, D., Fowler, C., & Hunt, A. (2009). Programming Ruby 1.9: The Pragmatic Programmer's
26
+
27
+ Open a BibTeX bibliography:
28
+
29
+ b = BibTeX.open('./ruby.bib')
30
+
31
+ Select a BibTeX entry and access individual fields:
32
+
33
+ b['pickaxe'].title
34
+ #=> "Programming Ruby 1.9: The Pragmatic Programmer's Guide"
35
+ b[:pickaxe].author.length
36
+ #=> 3
37
+ b[:pickaxe].author.to_s
38
+ #=> "Thomas, Dave and Fowler, Chad and Hunt, Andy"
39
+ b[:pickaxe].author[2].first
40
+ #=> "Andy"
41
+
42
+ Query a bibliography:
43
+
44
+ b['@book'].length
45
+ #=> 3 - the number books in the bibliography
46
+ b['@article'].length
47
+ #=> 0 - the number of articles in the bibliography
48
+ b['@book[year=2009]'].length
49
+ #=> 1 - the number of books published in 2009
50
+
51
+ Render your bibliography in one of
52
+ [many different citation styles](https://github.com/citation-style-language/styles)
53
+ (requires the **citeproc-ruby** gem):
54
+
55
+ require 'citeproc'
56
+ CiteProc.process b[:pickaxe].to_citeproc, :style => :apa
57
+ #=> "Thomas, D., Fowler, C., & Hunt, A. (2009). Programming Ruby 1.9: The Pragmatic Programmer's
52
58
  Guide. The Facets of Ruby. Raleigh, North Carolina: The Pragmatic Bookshelf."
53
- >> CiteProc.process b[:pickaxe].to_citeproc, :style => 'chicago-author-date'
54
- => "Thomas, Dave, Chad Fowler, and Andy Hunt. 2009. Programming Ruby 1.9: The Pragmatic
59
+ CiteProc.process b[:pickaxe].to_citeproc, :style => 'chicago-author-date'
60
+ #=> "Thomas, Dave, Chad Fowler, and Andy Hunt. 2009. Programming Ruby 1.9: The Pragmatic
55
61
  Programmer's Guide. The Facets of Ruby.Raleigh, North Carolina: The Pragmatic Bookshelf."
56
- >> CiteProc.process b[:pickaxe].to_citeproc, :style => :mla
57
- => "Thomas, Dave, Chad Fowler, and Andy Hunt. Programming Ruby 1.9: The Pragmatic Programmer's
62
+ CiteProc.process b[:pickaxe].to_citeproc, :style => :mla
63
+ #=> "Thomas, Dave, Chad Fowler, and Andy Hunt. Programming Ruby 1.9: The Pragmatic Programmer's
58
64
  Guide. Raleigh, North Carolina: The Pragmatic Bookshelf, 2009."
59
65
 
66
+ Save a bibliography to a file:
60
67
 
68
+ b.save
69
+ #=> saves the original file
70
+ b.save_to(file)
71
+ #=> saves the bibliography in a new file
61
72
 
62
- Requirements
63
- ------------
64
73
 
65
- The BibTeX-Ruby gem has been tested on Ruby 1.8 and 1.9; it has
66
- been confirmed to work with REE, JRuby, and Rubinius;
67
- however, there have been some [issues](https://github.com/inukshuk/bibtex-ruby/issues)
68
- with MacRuby implementations.
69
74
 
70
- The parser generator [racc](http://i.loveruby.net/en/projects/racc/) is
71
- required to generate the BibTeX parser and the name parser; you do not need
72
- to install it to use the bibtex-ruby gem.
75
+ Compatibility
76
+ -------------
77
+
78
+ The BibTeX-Ruby gem has been developed and tested on Ruby 1.8 and 1.9; it has
79
+ been confirmed to work with JRuby, Rubinius, and REE, however, there have
80
+ been repeated [issues](https://github.com/inukshuk/bibtex-ruby/issues)
81
+ (performance mostly) with MacRuby caused by MacRuby's current StringScanner
82
+ implementation.
73
83
 
74
84
 
75
85
 
76
- Usage
77
- -----
86
+ Documentation
87
+ -------------
78
88
 
79
89
  It is very easy to use BibTeX-Ruby. You can use the top level utility methods
80
90
  **BibTeX.open** and **BibTeX.parse** to open a '.bib' file or to parse a string
81
- containing BibTeX contents. Normally, BibTeX-Ruby will discard all text outside
91
+ containing BibTeX contents. By default, BibTeX-Ruby will discard all text outside
82
92
  of regular BibTeX elements; however, if you wish to include everything, simply add
83
93
  `:include => [:meta_content]` to your invocation of **BibTeX.open** or **BibTeX.parse**.
84
94
 
@@ -102,32 +112,45 @@ Alternatively, BibTeX-Ruby accepts ghost methods to conveniently access an entry
102
112
  similar to **ActiveRecord::Base**. Therefore, it is equally possible to access the
103
113
  'author' field above as `b[:pickaxe].author`.
104
114
 
115
+ BibTeX-Ruby wraps all values of fields in an entry are wrapped in Value objects.
116
+ This is necessary to transparently handle different types of values (e.g., strings,
117
+ dates, names etc.). These Value objects are designed to be hardly discernible
118
+ from regular Ruby strings, however, if you ever run into a problem with a field's
119
+ value, simply convert it to a string by calling the `#to_s` method.
120
+
105
121
  Instead of parsing strings you can also create BibTeX elements directly in Ruby:
106
122
 
107
123
  > bib = BibTeX::Bibliography.new
124
+
125
+ Using a Hash:
126
+
108
127
  > bib << BibTeX::Entry.new({
109
- > :type => :book,
110
- > :key => :rails,
111
- > :address => 'Raleigh, North Carolina',
112
- > :author => 'Ruby, Sam and Thomas, Dave, and Hansson, David Heinemeier',
113
- > :booktitle => 'Agile Web Development with Rails',
114
- > :edition => 'third',
115
- > :keywords => 'ruby, rails',
116
- > :publisher => 'The Pragmatic Bookshelf',
117
- > :series => 'The Facets of Ruby',
118
- > :title => 'Agile Web Development with Rails',
119
- > :year => '2009'
120
- > })
128
+ :type => :book,
129
+ :key => :rails,
130
+ :address => 'Raleigh, North Carolina',
131
+ :author => 'Ruby, Sam and Thomas, Dave, and Hansson, David Heinemeier',
132
+ :booktitle => 'Agile Web Development with Rails',
133
+ :edition => 'third',
134
+ :keywords => 'ruby, rails',
135
+ :publisher => 'The Pragmatic Bookshelf',
136
+ :series => 'The Facets of Ruby',
137
+ :title => 'Agile Web Development with Rails',
138
+ :year => '2009'
139
+ })
140
+
141
+ Or programmatically:
142
+
121
143
  > book = BibTeX::Entry.new
122
144
  > book.type = :book
123
145
  > book.key = :mybook
124
146
  > bib << book
125
147
 
148
+
126
149
  ### Cross References
127
150
 
128
151
  From version 2.0, BibTeX-Ruby correctly resolves entry cross-references, which
129
152
  are commonly used for entries with type `inbook`, `incollection`, and
130
- `inproceedings`. When an entry has a valid citation key in field `crossref`,
153
+ `inproceedings`. When an entry has a valid citation key in the field `crossref`,
131
154
  BibTeX-Ruby will return any fields inherited from the parent entry:
132
155
 
133
156
  > b = BibTeX.parse <<-END
@@ -157,43 +180,49 @@ Additionally, you can access individual elements or groups of elements via
157
180
  their index using `Bibliography#[]`; this accessor also exposes some of the
158
181
  query functionality with the exception of yielding to a block. For instance:
159
182
 
160
- >> bib[-1]
183
+ bib[-1]
161
184
  => Returns the last element of the Bibliography or nil
162
- >> bib[1,2]
185
+ bib[1,2]
163
186
  => Returns the second and third elements or nil
164
- >> bib[1..2]
165
- >> Same as above
166
- >> bib[:key]
187
+ bib[1..2]
188
+ => Same as above
189
+ bib[:key]
167
190
  => Returns the first entry with key 'key' or nil
168
- >> bib['key']
191
+ bib['key']
169
192
  => Returns all entries with key 'key' or []
170
- >> bib['@article']
193
+ bib['@article']
171
194
  => Returns all entries of type 'article' or []
172
- >> bib['@preamble']
195
+ bib['@preamble']
173
196
  => Returns all preamble objects (this is the same as Bibliography#preambles) or []
174
- >> bib[/ruby/]
197
+ bib[/ruby/]
175
198
  => Returns all objects that match 'ruby' anywhere or []
176
- >> bib['@book[keywords=ruby]']
199
+ bib['@book[keywords=ruby]']
177
200
  => Returns all books whose keywords attribute equals 'ruby' or []
178
- >> bib.query('@book') { |e| e.keywords.split(/,/).length > 1 }
201
+ bib['@book[keywords!=ruby]']
202
+ => Returns all books whose keywords attribute does not equal 'ruby'
203
+ bib['@book[keywords/=ruby]']
204
+ => Same as above
205
+ bib.q('@book[keywords^=ruby]')
206
+ => Returns all books whose keywords attribute matches /ruby/
207
+ bib.query('@book') { |e| e.keywords.split(/,/).length > 1 }
179
208
  => Returns all book entries with two or more keywords or []
180
209
 
181
210
  Queries offer syntactic sugar for common enumerator invocations:
182
211
 
183
- >> bib.query(:all, '@book')
212
+ bib.query(:all, '@book')
184
213
  => same as bib.select { |b| b.has_type?(:book) }
185
- >> bib.query('@book')
214
+ bib.query('@book')
186
215
  => same as above
187
- >> bib.query(:first, '@book')
216
+ bib.query(:first, '@book')
188
217
  => same as bib.detect { |b| b.has_type?(:book) }
189
- >> bib.query(:none, '@book')
218
+ bib.query(:none, '@book')
190
219
  => same as bib.reject { |b| b.has_type?(:book) }
191
220
 
192
221
  You can also use queries to delete entries in your bibliography:
193
222
 
194
- >> bib.delete(/ruby/)
223
+ bib.delete(/ruby/)
195
224
  => deletes all object that match 'ruby' in their string representation
196
- >> bib.delete('@comment')
225
+ bib.delete('@comment')
197
226
  => strips all BibTeX comments from the bibliography
198
227
 
199
228
 
@@ -257,13 +286,13 @@ symbols that cannot be replaced will not be parsed.
257
286
  In the following example, string replacement can take place, thus all names
258
287
  are parsed and can easily be mapped to their last names:
259
288
 
260
- >> BibTeX.parse(<<-END)[1].author.map(&:last)
261
- @string{ ht = "Nathaniel Hawthorne" }
262
- @book{key,
263
- author = ht # " and Melville, Herman"
264
- }
265
- END
266
- => ["Hawthorne", "Melville"]
289
+ BibTeX.parse(<<-END)[1].author.map(&:last)
290
+ @string{ ht = "Nathaniel Hawthorne" }
291
+ @book{key,
292
+ author = ht # " and Melville, Herman"
293
+ }
294
+ END
295
+ #=> ["Hawthorne", "Melville"]
267
296
 
268
297
  Another useful method is `Bibliography#names` which returns all names in
269
298
  your bibliography (authors, editors, translators). For example, to quickly
@@ -271,7 +300,9 @@ expand the initials of a name across your entire bibliography, you could
271
300
  use the following snippet:
272
301
 
273
302
  b.names.each do |name|
274
- name.first = 'Edgar Allen' if name.first =~ /E\.\s*A\./ and name.last == 'Poe'
303
+ if name.sort_order =~ /^Poe, E/
304
+ name.first = 'Edgar Allen'
305
+ end
275
306
  end
276
307
 
277
308
 
@@ -284,15 +315,18 @@ to a given filter. Starting with version 1.3.9 BibTeX-Ruby includes a
284
315
  LaTeX filter that depends on the
285
316
  [latex-decode gem](http://rubygems.org/gems/latex-decode). Example:
286
317
 
287
- >> faust = '@book{faust, title = {Faust: Der Trag\"odie Erster Teil}}'
288
- >> BibTeX.parse(faust).convert(:latex)[:faust].title
289
- => "Faust: Der Tragödie Erster Teil"
318
+ faust = '@book{faust, title = {Faust: Der Trag\"odie Erster Teil}}'
319
+ BibTeX.parse(faust).convert(:latex)[:faust].title
320
+ #=> "Faust: Der Tragödie Erster Teil"
290
321
 
291
322
  Conditional conversions are also supported:
292
323
 
293
- >> faust1 = '@book{faust1, title = {Faust: Der Trag\"odie Erster Teil}}'
294
- >> faust2 = '@book{faust2, title = {Faust: Der Trag\"odie Zweiter Teil}}'
295
- >> p BibTeX.parse(faust1 + faust2).convert(:latex) { |e| e.key == :faust2 }.to_s
324
+ faust1 = '@book{faust1, title = {Faust: Der Trag\"odie Erster Teil}}'
325
+ faust2 = '@book{faust2, title = {Faust: Der Trag\"odie Zweiter Teil}}'
326
+ p BibTeX.parse(faust1 + faust2).convert(:latex) { |e| e.key == :faust2 }.to_s
327
+
328
+ Returns:
329
+
296
330
  @book{faust1,
297
331
  title = {Faust: Der Trag\"odie Erster Teil}
298
332
  }
@@ -304,6 +338,13 @@ If you need to express a condition on the basis of individual fields, use the
304
338
  conversion methods of BibTeX::Entry with a block instead (the block will be
305
339
  passed the key and value of each field prior to conversion).
306
340
 
341
+ When working with Bibliographies that contain LaTeX it is often best to
342
+ apply the filter upon opening or parsing the Bibliography. You can do this,
343
+ by passing the `:filter` option:
344
+
345
+ BibTeX.open 'references.bib', :filter => :latex
346
+
347
+
307
348
  ### Exports
308
349
 
309
350
  Furthermore, BibTeX-Ruby allows you to export your bibliography for processing
@@ -423,6 +464,7 @@ look at the LALR grammar in the file
423
464
  For more information about the BibTeX format and the parser's idiosyncrasies
424
465
  [refer to the project wiki](https://github.com/inukshuk/bibtex-ruby/wiki/The-BibTeX-Format).
425
466
 
467
+
426
468
  Contributing
427
469
  ------------
428
470
 
@@ -440,6 +482,10 @@ useful examples, take a look at the cucumber features in the
440
482
  [features/issues/](https://github.com/inukshuk/bibtex-ruby/blob/master/features/issues)
441
483
  directory).
442
484
 
485
+ The parser generator [racc](http://i.loveruby.net/en/projects/racc/) is
486
+ required to generate the BibTeX parser and the name parser; you do not need
487
+ to install it to use the bibtex-ruby gem.
488
+
443
489
  To run the tests and cucumber examples execute these commands (from within
444
490
  the bibtex-ruby directory):
445
491
 
@@ -457,8 +503,11 @@ To execute the test suite continuously while you're working run:
457
503
  Credits
458
504
  -------
459
505
 
460
- Copyright 2011 [Sylvester Keil](http://sylvester.keil.or.at/).
506
+ Copyright 2011-2012 [Sylvester Keil](http://sylvester.keil.or.at/).
507
+
508
+ See the [contributor page on GitHub](https://github.com/inukshuk/bibtex-ruby/contributors)
509
+ for a list of all the awesome developers who have made BibTeX-Ruby
510
+ possible.
461
511
 
462
- BibTeX-Ruby was written by many awesome [contributors](https://github.com/inukshuk/bibtex-ruby/contributors)
463
- and is distributed under the terms and conditions of the GNU GPL. See
512
+ This software is distributed under the terms and conditions of the GNU GPL. See
464
513
  LICENSE for details.
@@ -105,8 +105,22 @@ module BibTeX
105
105
  # Returns true if the element meets all of the given conditions.
106
106
  def meets?(*conditions)
107
107
  conditions.flatten.all? do |condition|
108
- property, value = condition.split(/\s*=\s*/)
109
- property.nil? || (respond_to?(property) && send(property).to_s == value)
108
+ property, operator, value = condition.split(/\s*([!~\/\^]?=)\s*/)
109
+
110
+ if property.nil?
111
+ true
112
+ else
113
+ case operator
114
+ when '!=', '/='
115
+ !respond_to?(property) || send(property).to_s != value
116
+ when '^='
117
+ respond_to?(property) && send(property).to_s.match("^#{value}")
118
+ when '~='
119
+ respond_to?(property) && send(property).to_s.match(value)
120
+ else
121
+ respond_to?(property) && send(property).to_s == value
122
+ end
123
+ end
110
124
  end
111
125
  end
112
126
 
@@ -18,6 +18,6 @@
18
18
 
19
19
  module BibTeX
20
20
  module Version
21
- STRING = '2.0.5'.freeze
21
+ STRING = '2.0.6'.freeze
22
22
  end
23
23
  end
@@ -124,6 +124,19 @@ module BibTeX
124
124
  assert_equal 1, @bib['@book[keywords=ruby]'].length
125
125
  end
126
126
 
127
+ it 'supports queries with negative conditions' do
128
+ assert_equal 2, @bib['@*[keywords!=ruby]'].length
129
+ end
130
+
131
+ it 'supports queries with pattern conditions' do
132
+ assert_equal 1, @bib['@*[keywords~=rails]'].length
133
+ end
134
+
135
+ it 'supports queries with start-pattern conditions' do
136
+ assert_equal 2, @bib['@*[keywords^=ruby]'].length
137
+ end
138
+
139
+
127
140
  it 'supports queries by bibtex element' do
128
141
  entry = Entry.parse(<<-END).first
129
142
  @article{segaran2007,
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bibtex-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.5
4
+ version: 2.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-19 00:00:00.000000000 Z
12
+ date: 2012-04-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: latex-decode
16
- requirement: &70347703840520 !ruby/object:Gem::Requirement
16
+ requirement: &70204962101620 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 0.0.6
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70347703840520
24
+ version_requirements: *70204962101620
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: multi_json
27
- requirement: &70347703829060 !ruby/object:Gem::Requirement
27
+ requirement: &70204962100860 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '1.3'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70347703829060
35
+ version_requirements: *70204962100860
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &70347703826940 !ruby/object:Gem::Requirement
38
+ requirement: &70204962100340 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0.9'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70347703826940
46
+ version_requirements: *70204962100340
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: racc
49
- requirement: &70347703825800 !ruby/object:Gem::Requirement
49
+ requirement: &70204962099640 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '1.4'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70347703825800
57
+ version_requirements: *70204962099640
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rdoc
60
- requirement: &70347703823800 !ruby/object:Gem::Requirement
60
+ requirement: &70204962098520 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '3.9'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70347703823800
68
+ version_requirements: *70204962098520
69
69
  description: ! "\t\tBibTeX-Ruby is the Rubyist's swiss-army-knife for all things BibTeX.
70
70
  It\n includes a parser for all common BibTeX objects (@string, @preamble,\n @comment
71
71
  and regular entries) and a sophisticated name parser that\n tokenizes correctly
@@ -180,18 +180,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
180
180
  - - ! '>='
181
181
  - !ruby/object:Gem::Version
182
182
  version: '0'
183
- segments:
184
- - 0
185
- hash: -230691617197525967
186
183
  required_rubygems_version: !ruby/object:Gem::Requirement
187
184
  none: false
188
185
  requirements:
189
186
  - - ! '>='
190
187
  - !ruby/object:Gem::Version
191
188
  version: '0'
192
- segments:
193
- - 0
194
- hash: -230691617197525967
195
189
  requirements: []
196
190
  rubyforge_project:
197
191
  rubygems_version: 1.8.10