typefactory 0.0.12 → 0.0.20

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c2fe21cb2ab6aa014e67f167bfe81b267ef4c40c
4
- data.tar.gz: d73ee014c70f97d1c22c2a15fb1a19308e524241
3
+ metadata.gz: 4bbbc519a8a1162821d6ee306243f79ad558cdcd
4
+ data.tar.gz: 061fbe8213e937c9cfa5f563ee776a360bc9646b
5
5
  SHA512:
6
- metadata.gz: 6a003ce61ed456fcc81d4d7c9fc25f0c91429995c01e37975c3af3545be14f8a047060107ea0480deb14616716afe60e6924889fe1e7f09d8c0c1dbc96e25a6a
7
- data.tar.gz: f419813e8aca8619caae749a68c93fd2c531963ecd5294e2234d1bd07a38ae6455b9cdb2847c848d56b2803425775f261d6c98766faff691e21740ef64640c02
6
+ metadata.gz: 3bf1298abf0f8959a104d8f600ea21cae28ffdf14617a28f565195de68ddd2d4b3ad4653a23434f1156cd005763f17fe62808921d0c5676c855a36d57f66d5bf
7
+ data.tar.gz: 102865abd53e6586222dbfceadfa8c30617ca20d0dc40077f5cbca0650e9cf910bbe7d5546ee3db6d872dd135188023456126c6f63b2a221464dd7e112500b79
data/README.md CHANGED
@@ -1,40 +1,44 @@
1
- # Typefactory
1
+ # Тайпфектори
2
2
 
3
- This simple plugin helps you to prepare your texts for publishing on the web. Typefactory was created for Russian grammar and punctuation but can be used in other languages (such as English or German).
3
+ Этот небольшой плагин поможет вам подготовить тексты к публикации в вебе. Тайпфектор разрабатывался для русского языка, но может быть легко адаптирован для других языков (к примеру, для англо-германской группы).
4
4
 
5
- _This is my first gem and I'll be glad to hear from you any advices about Ruby/Rails as well as about my English :-)_
5
+ _Тайпфектори мой первый гем и я буду благодарен за любую критику_
6
6
 
7
- ## Abilities
7
+ ## Возможности
8
8
 
9
- Current beta version has only methods for processing three levels of quote marks. All used glyphs can be customized.
9
+ Текущая версия расставляет:
10
+ * правильные многоуровневые кавычки;
11
+ * неразрывные проблелы после коротких слов;
12
+ * длинные тире.
10
13
 
11
- ## Install
12
14
 
13
- ### Ruby on Rails
15
+ ## Установка
14
16
 
15
- $ gem "typefactory", "~> 0.0.10"
17
+ ### Ruby on rails
18
+
19
+ $ gem "typefactory", "~> 0.0.20"
16
20
  $ bundle install
17
21
 
18
22
 
19
- ### Extension for `String`
23
+ ### Метод в классе String
20
24
 
21
- Typefactory adds method `prepare` for standard Ruby class `String`. You can use this feature as well as default way.
25
+ Тайпфектори добавляет метод `prepare` в стандартный класс `String`, который вы также можете использовать:
22
26
 
23
- 'Some text here'.prepare
27
+ 'Правильно "оформленный" в вебе текст'.prepare
24
28
  <%= @description.prepare %>
25
29
 
26
30
 
27
- ## Customize
31
+ ## Настройка
28
32
 
29
- Need customization? Please use generator:
33
+ Сгенерируйте шаблон файла настроек:
30
34
 
31
35
  $ rails generate typefactory config
32
36
 
33
- Now you can modify `config/initializers/typefactory.rb`
37
+ Отредактируте параметры в файле `config/initializers/typefactory.rb` по своему усмотрению
34
38
 
35
- ## Help to improve
39
+ ## Помогите улучшить
36
40
 
37
- If you have text where parsing algorithm makes mistakes, send it to me (eboyko@eboyko.ru), please.
41
+ Если вы нашли ошибку в работе алгоритма, пришлите исходный текст по электронной почте: eboyko@eboyko.ru
38
42
 
39
43
  ## Contribute
40
44
 
@@ -1,9 +1,33 @@
1
1
  Typefactory.setup do |config|
2
2
 
3
- config.quote_marks = [
4
- { :left => '«', :right => '»' },
5
- { :left => '„', :right => '“' },
6
- { :left => '‘', :right => '’' }
7
- ]
3
+ config.mode = :entity
4
+
5
+ config.locale = :ru
6
+
7
+ config.settings = [:clean, :quotes, :dashes, :glue_widows]
8
+
9
+ config.glyphs = {
10
+ nbsp: { mark: ' ', symbol: ' ', entity: '&nbsp;', decimal: '&#160;' },
11
+ quot: { mark: '"', symbol: '"', entity: '&quot;', decimal: '&#34;' },
12
+ mdash: { mark: '-', symbol: '—', entity: '&mdash;', decimal: '&#151;' },
13
+ copy: { mark: '(c)', symbol: '©', entity: '&copy;', decimal: '&#169;' }
14
+ }
15
+
16
+ config.quotes = {
17
+ ru: [
18
+ {
19
+ left: { mark: '"', symbol: '«', entity: '&laquo;', decimal: '&#171;' },
20
+ right: { mark: '"', symbol: '»', entity: '&raquo;', decimal: '&#187;' }
21
+ },
22
+ {
23
+ left: { mark: '"', symbol: '„', entity: '&bdquo;', decimal: '&#132;' },
24
+ right: { mark: '"', symbol: '“', entity: '&ldquo;', decimal: '&#147;' }
25
+ },
26
+ {
27
+ left: { mark: '"', symbol: '‘', entity: '&lsquo;', decimal: '&#145;' },
28
+ right: { mark: '"', symbol: '’', entity: '&rsquo;', decimal: '&#146;' }
29
+ }
30
+ ]
31
+ }
8
32
 
9
33
  end
@@ -1,15 +1,21 @@
1
1
  require 'typefactory/core_ext'
2
- require 'active_support/dependencies'
3
2
 
4
3
  module Typefactory
5
4
 
6
5
  autoload :Processor, 'typefactory/processor'
7
6
 
8
- MODE = :entity
7
+ @mode = :symbol
9
8
 
10
- LOCALE = :ru
9
+ @locale = :ru
11
10
 
12
- QUOTES = {
11
+ @settings = [
12
+ :clean,
13
+ :quotes,
14
+ :dashes,
15
+ :glue_widows
16
+ ]
17
+
18
+ @quotes = {
13
19
  ru: [
14
20
  {
15
21
  left: { mark: '"', symbol: '«', entity: '&laquo;', decimal: '&#171;' },
@@ -36,15 +42,89 @@ module Typefactory
36
42
  ]
37
43
  }
38
44
 
39
- GLYPHS = {
45
+ @glyphs = {
40
46
  nbsp: { mark: ' ', symbol: ' ', entity: '&nbsp;', decimal: '&#160;' },
41
47
  quot: { mark: '"', symbol: '"', entity: '&quot;', decimal: '&#34;' },
42
48
  mdash: { mark: '-', symbol: '—', entity: '&mdash;', decimal: '&#151;' },
43
49
  copy: { mark: '(c)', symbol: '©', entity: '&copy;', decimal: '&#169;' }
44
50
  }
45
51
 
46
- def self.prepare(text)
47
- Processor.new(text).prepare
52
+
53
+ # @param mode [Symbol] возможные значения `:symbol`, `:entity` или `:decimal`
54
+ def self.mode=(mode)
55
+ @mode = mode
56
+ end
57
+
58
+ # @return [Symbol]
59
+ def self.mode
60
+ @mode
61
+ end
62
+
63
+ # @param locale [Symbol]
64
+ def self.locale=(locale)
65
+ @locale = locale
66
+ end
67
+
68
+ # Локаль, определяющая используемые глифы; по умолчанию `:ru`
69
+ # @return [Symbol]
70
+ def self.locale
71
+ @locale
72
+ end
73
+
74
+ # @param settings [Array<Symbol>]
75
+ def self.settings=(settings)
76
+ @settings = settings
77
+ end
78
+
79
+ # @return [Array<Symbol>]
80
+ def self.settings
81
+ @settings
82
+ end
83
+
84
+ # @param glyphs [Hash{Symbol => Hash}]
85
+ def self.glyphs=(glyphs)
86
+ @glyphs = glyphs
87
+ end
88
+
89
+ # @todo по-человечески описать формат возвращаемых данных
90
+ # @return [Hash{Symbol => Hash}]
91
+ def self.glyphs
92
+ @glyphs
93
+ end
94
+
95
+ # @param quotes [Hash]
96
+ def self.quotes=(quotes)
97
+ @quotes = quotes
98
+ end
99
+
100
+ # @todo по-человечески описать формат возвращаемых данных
101
+ # @return [Hash]
102
+ def self.quotes
103
+ @quotes
104
+ end
105
+
106
+ # Возвращает знак кавычки для выбранных уровня глубины и стороны
107
+ # @param depth [Integer]
108
+ # @param side [Symbol] `:left` or `:right`
109
+ def self.quote(depth = 0, side = :left)
110
+ depth = 0 if depth < 0
111
+ count = @quotes[@locale].length - 1
112
+ depth = count if depth > count
113
+ @quotes[@locale][depth][side][@mode]
114
+ end
115
+
116
+ # Метод настройки модуля с помощью файла инициализации (по аналогии с Devise)
117
+ # @yield [Typefactory]
118
+ def self.setup
119
+ yield self
120
+ end
121
+
122
+ # Обрабатывает текст с учетом заданных параметров
123
+ # @param text [String]
124
+ # @param [Array<Symbol>] settings
125
+ # @return [String]
126
+ def self.prepare(text, *settings)
127
+ Processor.new(text).prepare(settings)
48
128
  end
49
129
 
50
130
  end
@@ -1,7 +1,5 @@
1
1
  String.class_eval do
2
-
3
- def prepare
4
- Typefactory::prepare(self)
2
+ def prepare(*settings)
3
+ Typefactory::prepare(self, *settings)
5
4
  end
6
-
7
5
  end
@@ -2,122 +2,196 @@ module Typefactory
2
2
 
3
3
  class Processor
4
4
 
5
- @buffer = nil
6
-
5
+ # @param original [String]
7
6
  def initialize(original)
8
7
  @buffer = original
9
8
  end
10
9
 
11
- def prepare
12
- cleanup
10
+ # @param settings [Array]
11
+ # @return [String]
12
+ def prepare(settings = nil)
13
+
14
+ @settings = settings.nil? ? Typefactory::settings : Typefactory::settings | settings
15
+
16
+ cleanup if @settings.include?(:clean) and !@settings.include?(:no_clean)
17
+
13
18
  preserve_html
14
- process_quotes
19
+
20
+ process_quotes if @settings.include?(:quotes) and !@settings.include?(:no_quotes)
21
+
15
22
  revive_html
16
- process_emdaches
17
- process_short_words
23
+
24
+ process_dashes if @settings.include?(:dashes) and !@settings.include?(:no_dashes)
25
+
26
+ process_widows if @settings.include?(:glue_widows) and !@settings.include?(:no_glue_widows)
18
27
 
19
28
  @buffer
29
+
20
30
  end
21
31
 
22
32
  private
23
33
 
34
+ # Очищает текст от уже расставленных глифов
24
35
  def cleanup
25
- GLYPHS.each do |key, glyph|
36
+ Typefactory::glyphs.each do |key, glyph|
26
37
  @buffer.gsub!(/#{glyph[:entity]}|#{glyph[:decimal]}|#{glyph[:symbol]}/) do
27
38
  glyph[:mark]
28
39
  end
29
40
  end
30
41
 
31
42
  expression = ''
32
- QUOTES.each_pair do |locale, quotes|
43
+ Typefactory::quotes.each_pair do |locale, quotes|
33
44
  quotes.each do |level|
34
45
  level.each do |side, glyph|
35
46
  expression += "#{glyph[:symbol]}|#{glyph[:entity]}|#{glyph[:decimal]}|"
36
47
  end
37
48
  end
38
49
  end
39
- @buffer.gsub!(/#{expression[0..-2]}/, GLYPHS[:quot][:mark])
50
+ @buffer.gsub!(/#{expression[0..-2]}/, Typefactory::glyphs[:quot][:mark])
40
51
  end
41
52
 
53
+ # Экранирует параметры тегов HTML
42
54
  def preserve_html
43
55
  @buffer.gsub!(/<([^\/].*?)>/) do |tag|
44
56
  tag.gsub(/"/, '\'')
45
57
  end
46
58
  end
47
59
 
60
+ # Снимает экранирование с тегов HTML
48
61
  def revive_html
49
62
  @buffer.gsub!(/<([^\/].*?)>/) do |tag|
50
63
  tag.gsub(/'/, '"')
51
64
  end
52
65
  end
53
66
 
67
+ # Расставляет правильные многоуровневые кавычки
54
68
  def process_quotes
55
- result = String.new
56
- level = -1
57
- @buffer.split('').each_with_index do |character, index|
58
- if character == '"'
59
- side = quote_mark_side(index)
69
+ result = ''
70
+ depth = -1
71
+ @buffer.split('').each_with_index do |char, index|
72
+ if char == '"'
73
+ side = quote_mark_side index
60
74
  if side == :left
61
- level += 1
62
- level = QUOTES[LOCALE].length - 1 if level > QUOTES[LOCALE].length - 1
63
- result += QUOTES[LOCALE][level][side][MODE]
75
+ depth += 1
76
+ result += Typefactory::quote(depth, side)
64
77
  else
65
- result += QUOTES[LOCALE][level][side][MODE]
66
- level -= 1
67
- level = -1 if level < -1
78
+ result += Typefactory::quote(depth, side)
79
+ depth -= 1
68
80
  end
69
81
  else
70
- result += character
82
+ result += char
71
83
  end
72
84
  end
85
+
73
86
  @buffer.replace result
74
87
  end
75
88
 
89
+ # Определяет сторону кавычки на указаной позиции
90
+ # @param index [Integer] позиция кавычки в строке
76
91
  def quote_mark_side(index)
77
- before = space_before_position(index)
78
- after = space_after_position(index)
92
+ before = space_before_position index
93
+ after = space_after_position index
94
+
79
95
  if !before.nil? and !after.nil?
80
- (before < after) ? :left : :right
96
+ if before == after
97
+
98
+ if index == 0
99
+ :left
100
+ elsif index == @buffer.length-1
101
+ :right
102
+ else
103
+
104
+ if @buffer[index+1..index+1].scan(/[A-Za-zА-Яа-я0-9]/).any?
105
+ :left
106
+ else
107
+ :right
108
+ end
109
+
110
+ end
111
+
112
+ elsif before < after
113
+ :left
114
+ else
115
+ :right
116
+ end
81
117
  elsif !before.nil? and after.nil?
82
118
  :left
83
- elsif before.nil? and !after.nil?
84
- :right
85
- else
119
+ elsif !after.nil? and before.nil?
86
120
  :right
87
121
  end
88
122
  end
89
123
 
124
+ # @param index [Integer] контрольная позиция селектора
125
+ # @param length [Integer] количество возвращаемых символов перед контрольной позицией
126
+ # @return [String]
127
+ def characters_before(index, length)
128
+ start_position = (index-length > 0) ? index-length : 0
129
+ end_position = (index-1 > 0) ? index-1 : 0
130
+ @buffer[start_position..end_position]
131
+ end
132
+
133
+ # @param index [Integer] контрольная позиция селектора
134
+ # @param length [Integer] количество возвращаемых символов после контрольной позиции
135
+ # @return [String]
136
+ def characters_after(index, length)
137
+ start_position = index+1 < @buffer.length ? index+1 : @buffer.length-1
138
+ end_position = index+length < @buffer.length ? index+length : @buffer.length-1
139
+ @buffer[start_position..end_position]
140
+ end
141
+
142
+ # Расстояние до ближайшего пробельного символа слева от текущей позиции
143
+ # @param index [Integer]
144
+ # @param length [Integer]
145
+ # @return [Integer, Nil]
90
146
  def space_before_position(index, length = 4)
91
- to = (index-1 < 0) ? 0 : index-1
92
- from = (index-length < 0) ? 0 : index-length
93
- position = @buffer[from..to].rindex(/\s|\-|>/)
94
- if position.nil?
95
- index < length ? 0 : nil
147
+ expression = /\s|\-|>|\(/
148
+ space_at = characters_before(index, length).rindex(expression)
149
+ if space_at.nil?
150
+ if index < length
151
+ 0
152
+ else
153
+ nil
154
+ end
96
155
  else
97
- length - position
156
+ if index < length
157
+ space_at + 1
158
+ else
159
+ length - space_at
160
+ end
98
161
  end
162
+
99
163
  end
100
164
 
165
+ # Расстояние до ближайшего пробельного символа справа от текущей позиции
166
+ # @param index [Integer]
167
+ # @param length [Integer]
168
+ # @return [Integer, Nil]
101
169
  def space_after_position(index, length = 4)
102
- to = (index+length > @buffer.length) ? @buffer.length : index+length
103
- from = (index+1 > @buffer.length) ? @buffer.length : index+1
104
- position = @buffer[from..to].index(/\s|\-|<|,/)
105
- if position.nil?
106
- length if index > @buffer.length - length
170
+ expression = /\s|\-|<|\.|,|!|\?|:|;|\)/
171
+ space_at = characters_after(index, length).index(expression)
172
+ if space_at.nil?
173
+ if index > @buffer.length-length-1
174
+ 0
175
+ else
176
+ nil
177
+ end
107
178
  else
108
- position
179
+ space_at + 1
109
180
  end
181
+
110
182
  end
111
183
 
112
- def process_short_words
184
+ # Расставляет неразрывные пробелы после слов длиной до трех символов
185
+ def process_widows
113
186
  @buffer.gsub!(/(\s)([a-z,A-Z,а-я,А-Я]{1,2})\s(\S)/) do
114
- "#{$1}#{$2}#{GLYPHS[:nbsp][MODE]}#{$3}"
187
+ "#{$1}#{$2}#{Typefactory::glyphs[:nbsp][Typefactory::mode]}#{$3}"
115
188
  end
116
189
  end
117
190
 
118
- def process_emdaches
191
+ # Расставляет длинные тире
192
+ def process_dashes
119
193
  @buffer.gsub!(/\s\-\s/) do
120
- "#{GLYPHS[:nbsp][MODE]}#{GLYPHS[:mdash][MODE]} "
194
+ "#{Typefactory::glyphs[:nbsp][Typefactory::mode]}#{Typefactory::glyphs[:mdash][Typefactory::mode]} "
121
195
  end
122
196
  end
123
197
 
@@ -1,3 +1,3 @@
1
1
  module Typefactory
2
- VERSION = '0.0.12'
2
+ VERSION = '0.0.20'
3
3
  end
@@ -1,47 +1,80 @@
1
1
  require 'spec_helper'
2
2
 
3
- RSpec.describe 'Typefactory' do
3
+ RSpec.describe 'Тайпфектори' do
4
4
 
5
- describe 'Core' do
6
- it 'Parameters can be updated successfully' do
5
+ describe 'В принципе' do
6
+ it 'Нормально конфигурируется' do
7
7
  Typefactory.setup do |config|
8
- config.locale = :ru
9
- # config.quote_marks = [
10
- # { :left => '«', :right => '»' },
11
- # { :left => '„', :right => '“' },
12
- # { :left => '', :right => '' }
13
- # ]
14
- expect(config.quote_marks.class).to eq(Array)
15
- expect(config.quote_marks[2][:right]).to eq('')
8
+ config.mode = :symbol
9
+ config.locale = :ru
10
+ config.settings = [:clean, :quotes, :dashes, :glue_widows]
11
+ config.glyphs = {
12
+ nbsp: { mark: ' ', symbol: ' ', entity: '&nbsp;', decimal: '&#160;' },
13
+ quot: { mark: '"', symbol: '"', entity: '&quot;', decimal: '&#34;' },
14
+ mdash: { mark: '-', symbol: '—', entity: '&mdash;', decimal: '&#151;' },
15
+ copy: { mark: '(c)', symbol: '©', entity: '&copy;', decimal: '&#169;' }
16
+ }
17
+ config.quotes = {
18
+ ru: [
19
+ {
20
+ left: { mark: '"', symbol: '«', entity: '&laquo;', decimal: '&#171;' },
21
+ right: { mark: '"', symbol: '»', entity: '&raquo;', decimal: '&#187;' }
22
+ },
23
+ {
24
+ left: { mark: '"', symbol: '„', entity: '&bdquo;', decimal: '&#132;' },
25
+ right: { mark: '"', symbol: '“', entity: '&ldquo;', decimal: '&#147;' }
26
+ },
27
+ {
28
+ left: { mark: '"', symbol: '‘', entity: '&lsquo;', decimal: '&#145;' },
29
+ right: { mark: '"', symbol: '’', entity: '&rsquo;', decimal: '&#146;' }
30
+ }
31
+ ],
32
+ en: [
33
+ {
34
+ left: { mark: '"', symbol: '“', entity: '&ldquo;', decimal: '&#147;' },
35
+ right: { mark: '"', symbol: '”', entity: '&rdquo;', decimal: '&#148;' }
36
+ },
37
+ {
38
+ left: { mark: '"', symbol: '‘', entity: '&lsquo;', decimal: '&#145;' },
39
+ right: { mark: '"', symbol: '’', entity: '&rsquo;', decimal: '&#146;' }
40
+ }
41
+ ]
42
+ }
43
+ expect(config.locale).to eq(:ru)
44
+ expect(config.mode).to eq(:symbol)
45
+ expect(config.settings.class).to eq(Array)
46
+ expect(config.glyphs.class).to eq(Hash)
47
+ expect(config.quotes[config.locale].class).to eq(Array)
16
48
  end
17
49
  end
50
+ it 'Не ломает HTML' do
51
+ example = '<p>Некоторые а используют на типограф <a href="http://artlebedev.ru" class="external" target="_blank">Лебедева</a></p>'
52
+ expect(example.prepare(:no_glue_widows)).to eq('<p>Некоторые а используют на типограф <a href="http://artlebedev.ru" class="external" target="_blank">Лебедева</a></p>')
53
+ end
18
54
  end
19
55
 
20
- describe 'Quotation (basic examples)' do
21
- it 'Processing first level' do
22
- example = 'Типовой "текст" в кавычках'
23
- expect(example.prepare).to eq('Типовой «текст» в кавычках')
56
+ describe 'Кавычки' do
57
+ it 'Одноуровневые без содержимого' do
58
+ expect('""'.prepare).to eq('«»')
59
+ expect(' "" '.prepare).to eq(' «» ')
24
60
  end
25
61
 
26
- it 'Processing second level' do
27
- example = '"Различные "ученые" от пикап-индустрии"'
28
- expect(example.prepare).to eq('«Различные „ученые“ от пикап-индустрии»')
62
+ it 'Одноуровневые в стандартном предложении' do
63
+ example = 'Типовой "текст" в кавычках'
64
+ expect(example.prepare(:no_glue_widows)).to eq('Типовой «текст» в кавычках')
29
65
  end
30
66
 
31
- it 'Processing third level' do
32
- example = '"Быть может, когда-нибудь "все мы будем жить в "лучшем" мире""'
33
- expect(example.prepare).to eq('«Быть может, когда-нибудь „все мы будем жить в ‘лучшем’ мире“»')
67
+ it 'Двухуровневые в стандартном предложении' do
68
+ example = '"Различные "ученые" от пикап-индустрии"'
69
+ expect(example.prepare(:no_glue_widows)).to eq('«Различные „ученые“ от пикап-индустрии»')
34
70
  end
35
- end
36
-
37
71
 
38
- describe 'Quotation (complicated exampled)' do
39
- it 'processing marks in start/end positions' do
40
- example = '"""Никакой" другой" типограф"'
41
- expect(example.prepare).to eq('«„‘Никакой’ другой“ типограф»')
72
+ it 'Трехуровневые в стандартном предложении' do
73
+ example = '"Быть может, когда-нибудь "все мы будем жить в "лучшем" мире""'
74
+ expect(example.prepare(:no_glue_widows)).to eq('«Быть может, когда-нибудь „все мы будем жить в ‘лучшем’ мире“»')
42
75
  end
43
76
 
44
- it 'Корректно распознает один уровень кавычек в составных словах с дефисом' do
77
+ it 'Одноуровневые в дефисных словосочетаниях' do
45
78
  example = 'Кавычки-"елочки"'
46
79
  expect(example.prepare).to eq('Кавычки-«елочки»')
47
80
 
@@ -49,24 +82,18 @@ RSpec.describe 'Typefactory' do
49
82
  expect(example.prepare).to eq('«Елочки»-сосны')
50
83
  end
51
84
 
52
- it 'Расставляет неразрывные пробелы' do
85
+ end
86
+
87
+ describe 'Глифы' do
88
+ it 'Неразрывные пробелы после коротких слов' do
53
89
  example = 'Едет Санта на оленях'
54
90
  expect(example.prepare).to eq('Едет Санта на оленях')
55
91
  end
56
-
57
- it 'Processing demo paragraph' do
58
- example = <<eot
59
- <p>&laquo;Можем "Демо" однозначно констатировать, что, по&nbsp;данным Системы контроля космического пространства Российской Федерации, в&nbsp;период с&nbsp;10:00 до&nbsp;13:00 мск (09:00 до&nbsp;12:00 укр) 12, 16, 17, и&nbsp;18 июля украинские спутники &bdquo;Сич-1&ldquo; и&nbsp;&bdquo;Сич-2&ldquo; над указанными территориями не&nbsp;пролетали. В&nbsp;обозначенное на&nbsp;снимках время над зоной катастрофы находился американский спутник оптико-электронной разведки типа &bdquo;Кихоул&ldquo; (KeyHole). Таким образом, источник получения фотоосновы для дальнейшей обработки СБУ не&nbsp;должен вызывать ни&nbsp;у кого сомнений&raquo;,&nbsp;&mdash; замечает Минобороны.</p>
60
- eot
61
- puts example.prepare
62
- end
63
- end
64
-
65
- describe 'Glyphs' do
66
- it 'Process long dashes' do
92
+ it 'Длинные тире' do
67
93
  example = 'Писец - не только ценный мех'
68
- expect(example.prepare).to eq('Писец — не только ценный мех')
94
+ expect(example.prepare(:no_glue_widows)).to eq('Писец — не только ценный мех')
69
95
  end
70
96
  end
71
97
 
98
+
72
99
  end
@@ -18,7 +18,6 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_runtime_dependency 'rails', '~> 4.1', '>= 4.1.0'
22
21
  spec.add_development_dependency 'bundler', '~> 1.6'
23
22
  spec.add_development_dependency 'rake', '~> 10.1', '>= 10.1.0'
24
23
  spec.add_development_dependency 'rspec', '~> 3.0', '>= 3.0.0'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: typefactory
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.12
4
+ version: 0.0.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evgeny Boyko
@@ -9,28 +9,8 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-08-02 00:00:00.000000000 Z
12
+ date: 2014-08-07 00:00:00.000000000 Z
13
13
  dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: rails
16
- requirement: !ruby/object:Gem::Requirement
17
- requirements:
18
- - - "~>"
19
- - !ruby/object:Gem::Version
20
- version: '4.1'
21
- - - ">="
22
- - !ruby/object:Gem::Version
23
- version: 4.1.0
24
- type: :runtime
25
- prerelease: false
26
- version_requirements: !ruby/object:Gem::Requirement
27
- requirements:
28
- - - "~>"
29
- - !ruby/object:Gem::Version
30
- version: '4.1'
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: 4.1.0
34
14
  - !ruby/object:Gem::Dependency
35
15
  name: bundler
36
16
  requirement: !ruby/object:Gem::Requirement