rutils 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/README CHANGED
@@ -1,20 +1,16 @@
1
1
  == Добро пожаловать в RuTils
2
2
 
3
- RuTils - простой обработчик русского текста, позволяющий использовать и обрабатывать
4
- русский текст несколькими несложными способами. Основная цель RuTils - сделать
3
+ RuTils - простой обработчик русского текста на Ruby. Основная цель RuTils - сделать
5
4
  разработку русскоязычных приложений на Ruby (и Rails) максимально простой и приятной (в идеале - столь же
6
5
  простой как и разработку оных на английском)
7
6
 
8
7
  Весь функционал RuTils поддерживает только UTF-8 (настройка $KCODE / KanjiCode 'u'). Стандартно работа RuTils проверяется
9
8
  как на стандартной версии Ruby, так и на парсере регулярных выражений Oniguruma (правда имейте в виду, что с ним
10
9
  Gilenson работает медленнее).
11
-
12
-
13
- Это версия RuTils
14
-
15
- $Revision: 1.7 $
16
10
 
17
- Пожалуйста упоминайте версию при сообщении ошибок.
11
+ Пожалуйста упоминайте версию при сообщении ошибок. Версию RUTILS всегда можно узнать в константе
12
+
13
+ RuTils::VERSION
18
14
 
19
15
  Удостоверьтесь, что ваш скрипт правильно обрабатывает Unicode - то есть:
20
16
 
@@ -79,7 +75,15 @@ Textile английские кавычки и типографские знак
79
75
 
80
76
  Перегрузку всех функций (RedCloth, BlueCloth и компоненты Rails) можно включать и отключать в любое время
81
77
  с помощью метода overrides= модуля RuTils. Когда перегрузка выключена, все сторонние библиотеки будут работать
82
- в стандартном режиме (например, RedCloth будет расставлять английские типографские кавычки).
78
+ в стандартном режиме (например, RedCloth будет расставлять английские типографские кавычки). Это нужно
79
+ когда вам нужно переключиться на английский (или любой другой язык) без перезапуска приложения.
80
+
81
+ Если вы хотите использовать rutils как дополенние к Rails в одном конкретном приложении, скопируйте
82
+ директорию rutils в папку vendor/plugins вашего приложения. Вы можете воспользоваться командой
83
+ rutilize чтобы сделать это автоматически. После этого вы сможете использовать RuTils без
84
+ необходимости установки gem'а.
85
+
86
+ $ rutilize /Sites/my_app
83
87
 
84
88
  == Требования
85
89
 
data/bin/gilensize CHANGED
@@ -2,6 +2,17 @@
2
2
  $KCODE = 'u'
3
3
  require File.dirname(__FILE__) + '/../lib/rutils'
4
4
 
5
+ # == Synopsis
6
+ #
7
+ # Processes text on standard input with Typografica
8
+ #
9
+ # == Usage
10
+ #
11
+ # cat myfile.txt | gilensize > output.txt
12
+ #
13
+ # == Author
14
+ # Julik <me@julik.nl>
15
+
5
16
  while st = gets do
6
17
  puts RuTils::Gilenson::Formatter.new(st).to_html
7
18
  end
data/bin/rutilize ADDED
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env ruby
2
+ # == Synopsis
3
+ #
4
+ # Copy RuTils to your Rails application, automatically making it speak Russian.
5
+ # The application will need to be restarted for changes to take effect.
6
+ # After that your app contains RuTils and is not dependent on RuTils gem
7
+ #
8
+ # == Usage
9
+ #
10
+ # rutilize /Sites/my_app /Sites/my_other_app
11
+ #
12
+ # == Author
13
+ # Julik <me@julik.nl>
14
+
15
+
16
+ $KCODE = 'u'
17
+ require File.dirname(__FILE__) + '/../lib/rutils'
18
+ require 'optparse'
19
+ require 'rdoc/usage'
20
+
21
+ opts = OptionParser.new
22
+ opts.on(" -h", "--help") { RDoc::usage }
23
+ opts.parse(ARGV) rescue RDoc::usage('usage')
24
+
25
+ if ARGV.empty?
26
+ RDoc::usage_no_exit('usage')
27
+ exit(-1)
28
+ end
29
+
30
+ for item in ARGV
31
+ puts "Teaching #{item} to speak Russian"
32
+ raise "The directory #{item} does not exist" unless File.exist?(item)
33
+ raise "#{item} - not a directory" unless File.directory?(item)
34
+ raise "This directory doesn't seem to be a Rails application" unless File.exist?(item + '/vendor')
35
+ Dir::mkdir(item+'/vendor/plugins') unless File.exist?(item + '/vendor/plugins')
36
+ `cp -r #{RuTils::INSTALLATION_DIRECTORY} #{item}/vendor/plugins`
37
+ end
@@ -31,7 +31,7 @@ module RuTils
31
31
  when 46..90 then 'около часа'
32
32
  # исключение, сдвигаем на один влево чтобы соответствовать падежу
33
33
  when 90..1440 then "около " + (distance_in_minutes.to_f / 60.0).round.to_s +
34
- " " + (distance_in_minutes.to_f / 60.0).round.items("часа", "часов", nil)
34
+ " " + (distance_in_minutes.to_f / 60.0).round.items("часа", "часов", '')
35
35
  when 1441..2880 then '1 день'
36
36
  else (distance_in_minutes / 1440).round.to_s +
37
37
  " " + (distance_in_minutes / 1440).round.items("день", "дня", "дней")
@@ -330,11 +330,12 @@ module RuTils
330
330
 
331
331
  end #end RuTils
332
332
 
333
+ # Вгружаем этот форматтер если уже не загружен наш новый
333
334
  unless defined?(RuTils::Gilenson::Formatter)
334
335
  class RuTils::Gilenson::Formatter < RuTils::Gilenson::Typografica
335
336
  end
336
337
  end
337
338
 
338
- class String
339
+ class Object::String
339
340
  include RuTils::Gilenson::StringFormatting
340
341
  end
@@ -1,5 +1,5 @@
1
1
  if defined?(BlueCloth)
2
- class BlueCloth < String #:nodoc:
2
+ class Object::BlueCloth < String #:nodoc:
3
3
  alias_method :old_to_html, :to_html
4
4
  def to_html(*opts)
5
5
  RuTils::overrides_enabled? ? RuTils::Gilenson::Formatter.new(old_to_html(*opts)).to_html : old_to_html(*opts)
@@ -4,7 +4,7 @@ module RuTils
4
4
  # Метод позволяет проверить, включена ли перегрузка функций других модулей.
5
5
  # Попутно он спрашивает модуль Locale (если таковой имеется) является ли русский
6
6
  # текущим языком, и если является, включает перегрузку функций имплицитно.
7
- # Модуль Locale можно скачать и скомпилировать а можно получить как часть Multilingual Rails.
7
+ # Модуль Locale можно получить как часть Multilingual Rails.
8
8
  def self.overrides_enabled?
9
9
  if defined?(Locale) and Locale.respond_to?(:current)
10
10
  return true if Locale.current.split('_').first == 'ru'
@@ -17,8 +17,14 @@ module RuTils
17
17
  def self.overrides= (new_override_flag)
18
18
  @@overrides = (new_override_flag ? true : false)
19
19
  end
20
+
21
+ # Вновь выполняет перегрузку. Делать это надо после того, как в программу импортированы
22
+ # другие модули.
23
+ def self.reload_integrations!
24
+ load File.dirname(__FILE__) + '/blue_cloth_override.rb'
25
+ load File.dirname(__FILE__) + '/red_cloth_override.rb'
26
+ load File.dirname(__FILE__) + '/rails_date_helper_override.rb'
27
+ end
20
28
  end
21
29
 
22
- load File.dirname(__FILE__) + '/blue_cloth_override.rb'
23
- load File.dirname(__FILE__) + '/red_cloth_override.rb'
24
- load File.dirname(__FILE__) + '/rails_date_helper_override.rb'
30
+ RuTils::reload_integrations!
@@ -1,5 +1,5 @@
1
- if defined?(ActionView)
2
- module ActionView #:nodoc:
1
+ if defined?(Object::ActionView)
2
+ module Object::ActionView #:nodoc:
3
3
  module Helpers
4
4
  module DateHelper
5
5
 
@@ -1,6 +1,6 @@
1
- if defined?(RedCloth)
1
+ if defined?(Object::RedCloth)
2
2
  # RuTils выполняет перегрузку Textile Glyphs в RedCloth, перенося форматирование спецсимволов на Gilenson.
3
- class RedCloth < String #:nodoc:
3
+ class Object::RedCloth < String #:nodoc:
4
4
  # Этот метод в RedCloth эскейпит слишком много HTML, нам ничего не оставляет :-)
5
5
  alias_method :stock_htmlesc, :htmlesc
6
6
  def htmlesc(text, mode=0) #:nodoc:
@@ -55,17 +55,17 @@ module RuTils
55
55
  # начинаем подсчет с Rest
56
56
  end_word = five_items
57
57
  # сотни
58
- case rest / 100
59
- when 0 then hundreds = ""
60
- when 1 then hundreds = "сто "
61
- when 2 then hundreds = "двести "
62
- when 3 then hundreds = "триста "
63
- when 4 then hundreds = "четыреста "
64
- when 5 then hundreds = "пятьсот "
65
- when 6 then hundreds = "шестьсот "
66
- when 7 then hundreds = "семьсот "
67
- when 8 then hundreds = "восемьсот "
68
- when 9 then hundreds = "девятьсот "
58
+ hundreds = case rest / 100
59
+ when 0 then ""
60
+ when 1 then "сто "
61
+ when 2 then "двести "
62
+ when 3 then "триста "
63
+ when 4 then "четыреста "
64
+ when 5 then "пятьсот "
65
+ when 6 then "шестьсот "
66
+ when 7 then "семьсот "
67
+ when 8 then "восемьсот "
68
+ when 9 then "девятьсот "
69
69
  end
70
70
 
71
71
  # десятки
@@ -75,17 +75,17 @@ module RuTils
75
75
  case rest1
76
76
  when 0 then tens = ""
77
77
  when 1 # особый случай
78
- case rest
79
- when 10 then tens = "десять "
80
- when 11 then tens = "одиннадцать "
81
- when 12 then tens = "двенадцать "
82
- when 13 then tens = "тринадцать "
83
- when 14 then tens = "четырнадцать "
84
- when 15 then tens = "пятнадцать "
85
- when 16 then tens = "шестнадцать "
86
- when 17 then tens = "семнадцать "
87
- when 18 then tens = "восемнадцать "
88
- when 19 then tens = "девятнадцать "
78
+ tens = case rest
79
+ when 10 then "десять "
80
+ when 11 then "одиннадцать "
81
+ when 12 then "двенадцать "
82
+ when 13 then "тринадцать "
83
+ when 14 then "четырнадцать "
84
+ when 15 then "пятнадцать "
85
+ when 16 then "шестнадцать "
86
+ when 17 then "семнадцать "
87
+ when 18 then "восемнадцать "
88
+ when 19 then "девятнадцать "
89
89
  end
90
90
  when 2: tens = "двадцать "
91
91
  when 3: tens = "тридцать "
@@ -100,13 +100,10 @@ module RuTils
100
100
  if rest1 < 1 or rest1 > 1 # единицы
101
101
  case rest % 10
102
102
  when 1
103
- case gender
104
- when 1
105
- ones = "один "
106
- when 2
107
- ones = "одна "
108
- when 3
109
- ones = "одно "
103
+ ones = case gender
104
+ when 1 then "один "
105
+ when 2 then "одна "
106
+ when 3 then "одно "
110
107
  end
111
108
  end_word = one_item
112
109
  when 2
@@ -134,7 +131,8 @@ module RuTils
134
131
  end
135
132
 
136
133
  # сборка строки
137
- return [(hundreds.to_s + tens.to_s + ones.to_s + end_word.to_s + " " + into.to_s).strip, tmp_val]
134
+ st = ''
135
+ return [(st << hundreds.to_s << tens.to_s << ones.to_s << end_word.to_s << " " << into.to_s).strip, tmp_val]
138
136
  end
139
137
 
140
138
  # Реализует вывод прописью любого объекта, реализующего Float
@@ -144,14 +142,14 @@ module RuTils
144
142
  # дробная доля оканчивается на нули) до ближайшей доли ( 500 тысячных округляется до 5 десятых).
145
143
  # Дополнительный аргумент - род существительного (1 - мужской, 2- женский, 3-средний)
146
144
  def propisju(gender = 2)
147
- raise "NaN propisju eto ne propis!" if self.nan?
145
+ raise "Это не число!" if self.nan?
148
146
 
149
147
  st = RuTils::Pluralization::sum_string(self.to_i, gender, "целая", "целых", "целых")
150
148
  it = []
151
149
 
152
- rmdr = self.to_s.match(/\.(\d+)/)[1]
150
+ remainder = self.to_s.match(/\.(\d+)/)[1]
153
151
 
154
- signs = rmdr.to_s.size- 1
152
+ signs = remainder.to_s.size- 1
155
153
 
156
154
  it << ["десятая", "десятых"]
157
155
  it << ["сотая", "сотых"]
@@ -167,12 +165,12 @@ module RuTils
167
165
  # it << ["триллионная", "триллионных", "триллионных"]
168
166
 
169
167
  while it[signs].nil?
170
- rmdr = (rmdr/10).round
171
- signs = rmdr.to_s.size- 1
168
+ remainder = (remainder/10).round
169
+ signs = remainder.to_s.size- 1
172
170
  end
173
-
171
+
174
172
  suf1, suf2, suf3 = it[signs][0], it[signs][1], it[signs][2]
175
- st + " " + RuTils::Pluralization::sum_string(rmdr.to_i, 2, suf1, suf2, suf2)
173
+ st + " " + RuTils::Pluralization::sum_string(remainder.to_i, 2, suf1, suf2, suf2)
176
174
  end
177
175
 
178
176
  def propisju_items(gender=1, *forms)
@@ -207,11 +205,11 @@ module RuTils
207
205
  end
208
206
  end
209
207
 
210
- class Numeric
208
+ class Object::Numeric
211
209
  include RuTils::Pluralization::NumericFormatting
212
210
  end
213
211
 
214
212
 
215
- class Float
213
+ class Object::Float
216
214
  include RuTils::Pluralization::FloatFormatting
217
215
  end
data/lib/rutils.rb CHANGED
@@ -1,11 +1,13 @@
1
1
  $KCODE = 'u'
2
- require 'jcode'
2
+ require 'jcode' # вот от этого надо бы избавиться - скопировать jsize из jcode и поместить его в свой namespace
3
+
3
4
 
4
5
  # Главный контейнер модуля
5
6
  module RuTils
7
+ INSTALLATION_DIRECTORY = File.expand_path(File.dirname(__FILE__) + '/../')
6
8
  MAJOR = 0
7
9
  MINOR = 1
8
- TINY = 0
10
+ TINY = 1
9
11
  VERSION = "#{MAJOR}.#{MINOR}.#{TINY}"
10
12
  end
11
13
 
@@ -3,7 +3,7 @@ module RuTils
3
3
  end
4
4
  end
5
5
 
6
- # Реулизует простейшую транслитерацию
6
+ # Реализует простейшую транслитерацию
7
7
  # "вот мы и здесь".translify => "vot my i zdes"
8
8
  # "vot my i zdes".detranslify => "вот мы и здесь"
9
9
  module RuTils::Transliteration::Simple
@@ -56,8 +56,8 @@ module RuTils::Transliteration::Simple
56
56
  end
57
57
  end
58
58
 
59
- # Реулизует транслитерацию "в обе стороны", дающую возможность автоматически использовать URL как ключ записи
60
- module RuTils::Transliteration::BiDi
59
+ # Реализует транслитерацию "в обе стороны", дающую возможность автоматически использовать URL как ключ записи
60
+ module RuTils::Transliteration::BiDi #:nodoc:
61
61
  TABLE_TO = {
62
62
  "А"=>"A","Б"=>"B","В"=>"V","Г"=>"G","Д"=>"D",
63
63
  "Е"=>"E","Ё"=>"JO","Ж"=>"ZH","З"=>"Z","И"=>"I",
@@ -148,26 +148,26 @@ module RuTils::Transliteration::StringFormatting
148
148
  end
149
149
 
150
150
  # Транслитерирует строку (взаимно-однозначный транслит), и возвращает измененную строку
151
- def bidi_translify(allow_slashes = true)
151
+ def bidi_translify(allow_slashes = true) #:nodoc:
152
152
  RuTils::Transliteration::BiDi::translify(self.to_s, allow_slashes)
153
153
  end
154
154
 
155
155
  # Транслитерирует строку (взаимно-однозначный транслит), меняя объект
156
- def bidi_translify!(allow_slashes = true)
156
+ def bidi_translify!(allow_slashes = true) #:nodoc:
157
157
  self.replace(RuTils::Transliteration::BiDi::translify(self.to_s, allow_slashes))
158
158
  end
159
159
 
160
160
  # Заменяет латиницу на кириллицу (взаимно-однозначный транслит), меняя объект
161
- def bidi_detranslify!(allow_slashes = true)
161
+ def bidi_detranslify!(allow_slashes = true) #:nodoc:
162
162
  self.replace(RuTils::Transliteration::BiDi::detranslify(self.to_s, allow_slashes))
163
163
  end
164
164
 
165
165
  # Заменяет латиницу на кириллицу (взаимно-однозначный транслит), и возвращает измененную строку
166
- def bidi_detranslify(allow_slashes = true)
166
+ def bidi_detranslify(allow_slashes = true) #:nodoc:
167
167
  RuTils::Transliteration::BiDi::detranslify(self.to_s, allow_slashes = true)
168
168
  end
169
169
  end
170
170
 
171
- class String
171
+ class Object::String
172
172
  include RuTils::Transliteration::StringFormatting
173
173
  end
@@ -0,0 +1,26 @@
1
+ $KCODE = 'u'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/../lib/rutils'
4
+
5
+
6
+ class RutilizeTest < Test::Unit::TestCase
7
+ def setup
8
+ @dirs = [
9
+ '/tmp/app',
10
+ '/tmp/notapp',
11
+ '/tmp/app/vendor',
12
+ ]
13
+ @dirs.each{|dir| Dir::mkdir(dir) }
14
+ @rutilize = File.dirname(__FILE__) + '/../bin/rutilize'
15
+ end
16
+
17
+ def test_rutilize_app
18
+ `#{@rutilize} #{@dirs[0]}`
19
+ assert File.exist?(@dirs[0] + '/vendor/plugins/rutils')
20
+ assert File.exist?(@dirs[0] + '/vendor/plugins/rutils/lib/rutils.rb')
21
+ end
22
+
23
+ def teardown
24
+ @dirs.each {|dir| `rm -rf #{dir}` }
25
+ end
26
+ end
data/test/t_datetime.rb CHANGED
@@ -7,5 +7,6 @@ class DistanceOfTimeTest < Test::Unit::TestCase
7
7
  assert_equal "меньше минуты", RuTils::DateTime::distance_of_time_in_words(0, 50)
8
8
  assert_equal "2 минуты", RuTils::DateTime::distance_of_time_in_words(0, 140)
9
9
  assert_equal "около 2 часов", RuTils::DateTime::distance_of_time_in_words(0, 60*114)
10
+ assert_equal "около 3 часов", RuTils::DateTime::distance_of_time_in_words(0, 60*120+60*60)
10
11
  end
11
12
  end
@@ -2,16 +2,14 @@ $KCODE = 'u'
2
2
  require 'test/unit'
3
3
  require 'rubygems'
4
4
 
5
+ require 'action_view'
5
6
  require_gem 'RedCloth'
6
7
  require_gem 'BlueCloth'
7
8
 
8
-
9
9
  require File.dirname(__FILE__) + '/../lib/rutils'
10
+ load File.dirname(__FILE__) + '/../lib/integration/integration.rb'
10
11
 
11
- # Весь integration надо грузить после патчимых пакетов
12
- load File.dirname(__FILE__) + '/../lib/integration/integration.rb'
13
-
14
- class IntegrationTest < Test::Unit::TestCase
12
+ class IntegrationFlagTest < Test::Unit::TestCase
15
13
  def setup
16
14
  RuTils::overrides = true
17
15
  end
@@ -21,23 +19,54 @@ class IntegrationTest < Test::Unit::TestCase
21
19
  assert !RuTils::overrides_enabled?
22
20
  RuTils::overrides = true
23
21
  assert RuTils::overrides_enabled?
24
- end
22
+ end
25
23
  end
26
24
 
27
25
  # Интеграция с RedCloth - Textile.
28
26
  # Нужно иметь в виду что Textile осуществляет свою обработку типографики, которую мы подменяем!
29
- class TextileIntegrationTest < IntegrationTest
30
- def test_integration_textile
27
+ class TextileIntegrationTest < Test::Unit::TestCase
28
+ def test_integration_textile
29
+ RuTils::overrides = true
30
+ assert RuTils.overrides_enabled?
31
31
  assert_equal "<p>И&nbsp;вот &laquo;они пошли туда&raquo;, и&nbsp;шли шли&nbsp;шли</p>",
32
32
  RedCloth.new('И вот "они пошли туда", и шли шли шли').to_html
33
+
34
+ RuTils::overrides = false
35
+ assert !RuTils.overrides_enabled?
36
+ assert_equal "<p>И вот &#8220;они пошли туда&#8221;, и шли шли шли</p>",
37
+ RedCloth.new('И вот "они пошли туда", и шли шли шли').to_html
33
38
  end
34
39
  end
35
40
 
36
41
  # Интеграция с BlueCloth - Markdown
37
42
  # Сам Markdown никакой обработки типографики не производит (это делает RubyPants, но вряд ли его кто-то юзает на практике)
38
- class MarkdownIntegrationTest < IntegrationTest
43
+ class MarkdownIntegrationTest < Test::Unit::TestCase
39
44
  def test_integration_markdown
45
+ RuTils::overrides = true
46
+ assert RuTils.overrides_enabled?
40
47
  assert_equal "<p>И вот&nbsp;&laquo;они пошли туда&raquo;, и&nbsp;шли шли&nbsp;шли</p>",
41
48
  BlueCloth.new('И вот "они пошли туда", и шли шли шли').to_html
49
+
50
+ RuTils::overrides = false
51
+ assert !RuTils.overrides_enabled?
52
+ assert_equal "<p>И вот \"они пошли туда\", и шли шли шли</p>",
53
+ BlueCloth.new('И вот "они пошли туда", и шли шли шли').to_html
42
54
  end
43
- end
55
+ end
56
+
57
+ # Перегрузка helper'ов Rails
58
+ class RailsHelpersOverrideTest < Test::Unit::TestCase
59
+ def test_distance_of_time_in_words
60
+ eval 'class Foo
61
+ include ActionView::Helpers::DateHelper
62
+ def get_dst
63
+ distance_of_time_in_words(Time.now - 20.minutes, Time.now)
64
+ end
65
+ end'
66
+
67
+ RuTils::overrides = true
68
+ foo = Foo.new
69
+ assert_equal "20 минут", foo.get_dst
70
+ end
71
+ end
72
+
@@ -0,0 +1,10 @@
1
+ $KCODE = 'u'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/../lib/rutils'
4
+
5
+ class RutilsBaseTest < Test::Unit::TestCase
6
+ def test_rutils_location
7
+ libdir = File.expand_path(File.dirname(__FILE__) + '/../')
8
+ assert_equal libdir, RuTils::INSTALLATION_DIRECTORY
9
+ end
10
+ end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
3
3
  specification_version: 1
4
4
  name: rutils
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.1.0
7
- date: 2005-10-23 00:00:00 +02:00
6
+ version: 0.1.1
7
+ date: 2005-10-29 00:00:00 +02:00
8
8
  summary: Simple processing of russian strings
9
9
  require_paths:
10
10
  - lib
@@ -31,11 +31,14 @@ authors:
31
31
  - Julian "Julik" Tarkhanov
32
32
  files:
33
33
  - bin/gilensize
34
+ - bin/rutilize
34
35
  - test/run_tests.rb
36
+ - test/t_binaries.rb
35
37
  - test/t_datetime.rb
36
38
  - test/t_gilenson.rb
37
39
  - test/t_integration.rb
38
40
  - test/t_pluralize.rb
41
+ - test/t_rutils_base.rb
39
42
  - test/t_transliteration.rb
40
43
  - test/t_typografica.rb
41
44
  - lib/datetime
@@ -61,6 +64,7 @@ test_files:
61
64
  rdoc_options:
62
65
  - "--main=README"
63
66
  - "--line-numbers"
67
+ - "--webcvs http://rubyforge.org/cgi-bin/viewcvs.cgi/rutils/%s?cvsroot=rutils"
64
68
  - "--charset=utf-8"
65
69
  - "--promiscuous"
66
70
  extra_rdoc_files:
@@ -69,6 +73,7 @@ extra_rdoc_files:
69
73
  - CHANGELOG
70
74
  executables:
71
75
  - gilensize
76
+ - rutilize
72
77
  extensions: []
73
78
  requirements: []
74
79
  dependencies: []