russian_inflect 0.0.4 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c307716037dd2adeaa77a714c95ad9cea3809c2f
4
- data.tar.gz: 159838d9e8a3eda32cf893e6c93fcd08e98c95c3
3
+ metadata.gz: 5381c2481facf07752dd9021d46a529f59c0c948
4
+ data.tar.gz: 145b237507fcf48233128505432a5d606b24478e
5
5
  SHA512:
6
- metadata.gz: de84706386e7b118efe2a232aa8106134e898239e459f6edd5e40077cc6ba6c0638e71b807a501958ce110be08ea6fdb27fc85e1c67703d2bbc0bc63012944b8
7
- data.tar.gz: c8d982b06b4934cba1c46131473401ae3e6ada5791b63ebe755ff141ed7fe8c09f1b71eb373d461c303481b7951c0d69b0f20a04b3572db785d1f3bec5d3d475
6
+ metadata.gz: 652c3c75efa74eae5cf7fadeeb070aaa019d788c5f31cffefb25cddfa0489c3f3954262fa50edb48d4e71ac3df76df09de6b0494bf4cc1bebc5eefc80c5661ad
7
+ data.tar.gz: 8d6bfbc904c7f181775a15bfc2af9d27178fb19f9e61cb865097370663fdbf31a30d3d622b6dd65abdef584203ae8b242dba966d2948fa74c121e3d3f7ce430f
data/.gitignore CHANGED
@@ -3,6 +3,7 @@
3
3
  .bundle
4
4
  .config
5
5
  .yardoc
6
+ .ruby-version
6
7
  Gemfile.lock
7
8
  InstalledFiles
8
9
  _yardoc
data/README.md CHANGED
@@ -20,15 +20,26 @@ Or install it yourself as:
20
20
 
21
21
  ## Usage
22
22
 
23
- RussianInflect.inflect("Хорошая погода", :nominative) # Хорошая погода
24
- RussianInflect.inflect("Хорошая погода", :genitive) # Хорошей погоды
25
- RussianInflect.inflect("Хорошая погода", :dative) # Хорошей погоде
26
- RussianInflect.inflect("Хорошая погода", :accusative) # Хорошую погоду
27
- RussianInflect.inflect("Хорошая погода", :instrumental) # Хорошей погодой
28
- RussianInflect.inflect("Хорошая погода", :prepositional) # Хорошей погоде
23
+ ```ruby
24
+ RussianInflect.inflect("Хорошая погода", :nominative) # => Хорошая погода
25
+ RussianInflect.inflect("Хорошая погода", :genitive) # => Хорошей погоды
26
+ RussianInflect.inflect("Хорошая погода", :dative) # => Хорошей погоде
27
+ RussianInflect.inflect("Хорошая погода", :accusative) # => Хорошую погоду
28
+ RussianInflect.inflect("Хорошая погода", :instrumental) # => Хорошей погодой
29
+ RussianInflect.inflect("Хорошая погода", :prepositional) # => Хорошей погоде
30
+ ```
31
+
32
+ или
33
+
34
+ ```ruby
35
+ words = RussianInflect.new("Хорошая погода")
36
+ words.to_case :genitive # => Хорошей погоды
37
+ words.to_case :dative # => Хорошей погоде
38
+ # etc...
39
+ ```
29
40
 
30
41
  ## Помощь гему
31
42
  * Нужны тесты для всяких окончаний, исключений и т.п.
32
43
  Дополнять их просто: в [spec/lib/russian_inflect_spec.rb](/estum/russian_inflect/blob/master/spec/lib/russian_inflect_spec.rb) нужно добавить пример словосочетания и правильные результаты склонения по аналогии с уже добавленными примерами.
33
- * Правила склонения пока далеки от идеала и тоже ждут своего Розенталя. Они похожи на правила из гема [petrovich](https://github.com/rocsci/petrovich) и находятся в [lib/russian_inflect/rules.yml](/estum/russian_inflect/blob/master/lib/russian_inflect/rules.yml).
34
- * Как видите, ридми тоже не мешало бы переписать.
44
+ * Правила склонения пока далеки от идеала и тоже ждут своего Розенталя. Они похожи на правила из гема [petrovich](https://github.com/rocsci/petrovich) и находятся в [lib/russian_inflect/rules.yml](/lib/russian_inflect/rules.yml).
45
+ * Как видите, ридми тоже не мешало бы переписать.
@@ -1,70 +1,78 @@
1
- # encoding: UTF-8
2
-
3
1
  require 'yaml'
4
2
  require 'unicode_utils'
5
- require 'active_support'
6
- require 'active_support/core_ext'
7
3
  require 'russian_inflect/rules'
8
4
  require "russian_inflect/version"
9
5
 
10
6
  class RussianInflect
11
- CASES = [:nominative, :genitive, :dative, :accusative, :instrumental, :prepositional]
12
- GROUPS = [nil, :first, :second, :third]
13
-
14
7
  NOMINATIVE = :nominative # именительный
15
8
  GENITIVE = :genitive # родительный
16
9
  DATIVE = :dative # дательный
17
10
  ACCUSATIVE = :accusative # винительный
18
11
  INSTRUMENTAL = :instrumental # творительный
19
12
  PREPOSITIONAL = :prepositional # предложный
20
-
13
+
14
+ CASES = [NOMINATIVE, GENITIVE, DATIVE, ACCUSATIVE, INSTRUMENTAL, PREPOSITIONAL]
15
+ GROUPS = [nil, :first, :second, :third]
16
+
21
17
  attr_accessor :source, :words, :noun, :case_group
22
-
23
- def initialize(source, options = {})
18
+
19
+ def initialize(source, options = nil)
20
+ options ||= {}
21
+
24
22
  @source = source
25
- @words = source.split
23
+ @words = source.split
24
+
26
25
  @noun = case options[:noun]
27
26
  when String then options[:noun]
28
27
  when Fixnum then @words[options[:noun]]
29
- else @words[0]
28
+ else @words.detect { |w| self.class.detect_type(w) == :noun }
30
29
  end
31
- group = options[:group].presence || self.class.detect_case_group(@noun)
30
+ group = options.fetch(:group) { self.class.detect_case_group(@noun) }
32
31
  @case_group = GROUPS[group]
33
32
  end
34
-
35
- def to_case(gcase)
33
+
34
+ def to_case(gcase, force_downcase: false)
36
35
  after_prepositions = false
36
+
37
37
  inflected_words = words.map do |word|
38
- result = word
39
38
  unless after_prepositions
40
- if word.in?(RULES['prepositions'])
39
+ downcased = UnicodeUtils.downcase(word)
40
+ if Rules.prepositions.include?(downcased)
41
41
  after_prepositions = true
42
42
  else
43
- result = Rules.new(case_group).inflect(word, gcase)
43
+ result = Rules[case_group].inflect(downcased, gcase)
44
+ word = if force_downcase
45
+ result
46
+ else
47
+ len = downcased.each_char.take_while.with_index { |x, n| x == result[n] }.size
48
+ word[0, len] << result[len..-1]
49
+ end
44
50
  end
45
51
  end
46
- result
52
+
53
+ word
47
54
  end
55
+
48
56
  inflected_words.join(' ')
49
57
  end
50
-
58
+
51
59
  def self.inflect(text, gcase)
52
- self.new(text).to_case(gcase)
60
+ new(text).to_case(gcase)
53
61
  end
54
-
62
+
55
63
  def self.detect_case_group(noun)
56
64
  case noun
57
65
  when /(а|я|и)$/i then 1
58
66
  when /(о|е|ы)$/i then 2
59
- when /(мя|ь)$/i then 3
60
- else 2
67
+ when /(мя|ь)$/i then 3
68
+ else 2
61
69
  end
62
70
  end
63
-
71
+
64
72
  def self.detect_type(word)
65
73
  case word
66
74
  when /(ая|яя|ые|ие|ый|ой|[^р]ий|ое|ее)$/i then :adjective
67
- else :noun
75
+ else :noun
68
76
  end
69
77
  end
70
78
  end
@@ -1,93 +1,111 @@
1
- # encoding: UTF-8
2
-
3
1
  class RussianInflect
4
- RULES = YAML.load_file(File.expand_path 'rules.yml', File.dirname(__FILE__))
5
-
6
- class UnknownCaseException < Exception;;end
7
- class UnknownRuleException < Exception;;end
2
+ UnknownError = Class.new(StandardError)
8
3
 
9
- # Набор методов для нахождения и применения правил к имени, фамилии и отчеству.
10
- class Rules
11
- def initialize(args)
12
- @group = args
4
+ class UnknownCaseException < UnknownError
5
+ def initialize(gcase)
6
+ super "Unknown grammatical case: `#{gcase}'."
13
7
  end
14
-
15
- def inflect(word, gcase)
16
- type = RussianInflect.detect_type(word)
17
- find_and_apply(word, gcase, RussianInflect::RULES["#{@group.to_s}_group"][type.to_s])
8
+ end
9
+
10
+ class UnknownRuleException < UnknownError
11
+ def initialize(name)
12
+ super "Can't find rule for `#{name}'."
18
13
  end
19
-
20
- protected
14
+ end
21
15
 
22
- def match?(name, rule, match_whole_word)
23
- name = UnicodeUtils.downcase(name)
24
- rule['test'].each do |chars|
25
- test = match_whole_word ? name : name.slice([name.size - chars.size, 0].max .. -1)
26
- return true if test == chars
16
+ Rules = Struct.new(:group, :rules)
17
+
18
+ # Набор методов для нахождения и применения правил к имени, фамилии и отчеству.
19
+ class Rules
20
+ class << self
21
+ def prepositions
22
+ @prepositions ||= []
27
23
  end
28
24
 
29
- false
30
- end
25
+ def dictionary
26
+ @dictionary ||= {}
27
+ end
31
28
 
32
- # Применить правило
33
- def apply(name, gcase, rule)
34
- modificator_for(gcase, rule).each_char do |char|
35
- case char
36
- when '.'
37
- when '-'
38
- name = name.slice(0, name.size - 1)
39
- else
40
- name += char
29
+ def [](group)
30
+ dictionary.fetch(group)
31
+ end
32
+
33
+ def load_dictionary(hash)
34
+ @prepositions = Array(hash[:prepositions])
35
+ hash[:rules].each do |group, rules|
36
+ dictionary[group] = new(group, rules)
41
37
  end
42
38
  end
39
+ end
43
40
 
44
- name
41
+ load_dictionary YAML.load_file(File.expand_path('../rules.yml', __FILE__))
42
+
43
+ def inflect(word, gcase)
44
+ type = RussianInflect.detect_type(word)
45
+ find_and_apply(word, gcase, type)
45
46
  end
46
47
 
48
+ protected
49
+
47
50
  # Найти правило и применить к имени с учетом склонения
48
- def find_and_apply(name, gcase, rules)
49
- rule = find_for(name, rules)
50
- apply(name, gcase, rule)
51
+ def find_and_apply(name, gcase, type)
52
+ apply(name, gcase, find_for(name, type))
51
53
  rescue UnknownRuleException
52
- # Если не найдено правило для имени, возвращаем неизмененное имя.
53
54
  name
54
55
  end
55
56
 
56
57
  # Найти подходящее правило в исключениях или суффиксах
57
- def find_for(name, rules)
58
- # Сначала пытаемся найти исключения
59
- if rules.has_key?('exceptions')
60
- p = find(name, rules['exceptions'], true)
61
- return p if p
58
+ def find_for(name, type)
59
+ if scoped_rules = rules[type][:exceptions]
60
+ ex = find(name, scoped_rules, true)
61
+ return ex if ex
62
+ else
63
+ scoped_rules = rules[type][:suffixes]
62
64
  end
63
65
 
64
- # Не получилось, ищем в суффиксах. Если не получилось найти и в них,
65
- # возвращаем неизмененное имя.
66
- find(name, rules['suffixes'], false) or raise UnknownRuleException, "Cannot find rule for #{name}"
66
+ find(name, scoped_rules) || fail(UnknownRuleException, name)
67
+ end
68
+
69
+ def find(name, scoped_rules, match_whole_word = false)
70
+ scoped_rules.detect { |rule| match?(name, rule, match_whole_word) }
71
+ end
72
+
73
+ # Проверить правило
74
+ def match?(word, rule, match_whole_word = false)
75
+ # word = UnicodeUtils.downcase(word)
76
+
77
+ rule[:test].any? do |chars|
78
+ test = match_whole_word ? word : word.slice([word.length - chars.length, 0].max .. -1)
79
+ test == chars
80
+ end
67
81
  end
68
82
 
69
- # Найти подходящее правило в конкретном списке правил
70
- def find(name, rules, match_whole_word)
71
- rules.find { |rule| match?(name, rule, match_whole_word) }
83
+ # Применить правило
84
+ def apply(word, gcase, rule)
85
+ modificator = modificator_for(gcase, rule)
86
+ result = word.dup
87
+
88
+ modificator.each_char do |char|
89
+ case char
90
+ when '.'
91
+ when '-' then result.slice!(-1)
92
+ else result << char
93
+ end
94
+ end
95
+
96
+ result
72
97
  end
73
98
 
74
99
  # Получить модификатор из указанного правиля для указанного склонения
75
100
  def modificator_for(gcase, rule)
76
101
  case gcase.to_sym
77
- when NOMINATIVE
78
- '.'
79
- when GENITIVE
80
- rule['mods'][0]
81
- when DATIVE
82
- rule['mods'][1]
83
- when ACCUSATIVE
84
- rule['mods'][2]
85
- when INSTRUMENTAL
86
- rule['mods'][3]
87
- when PREPOSITIONAL
88
- rule['mods'][4]
89
- else
90
- raise UnknownCaseException, "Unknown grammatic case: #{gcase}"
102
+ when NOMINATIVE then '.'
103
+ when GENITIVE then rule[:mods][0]
104
+ when DATIVE then rule[:mods][1]
105
+ when ACCUSATIVE then rule[:mods][2]
106
+ when INSTRUMENTAL then rule[:mods][3]
107
+ when PREPOSITIONAL then rule[:mods][4]
108
+ else fail UnknownCaseException, gcase
91
109
  end
92
110
  end
93
111
  end
@@ -1,85 +1,86 @@
1
- prepositions: [в, без, до, из, к, на, по, о, от, перед, при, через, у, за, над, об, под, про, для, с, со, без]
1
+ :prepositions: [в, без, до, из, к, на, по, о, от, перед, при, через, у, за, над, об, под, про, для, с, со, без]
2
2
 
3
- first_group:
4
- adjective:
5
- suffixes:
6
- -
7
- test: [шая]
8
- mods: [--ей, --ей, --ую, --ей, --ей]
9
- -
10
- test: [ая]
11
- mods: [--ой, --ой, --ую, --ой, --ой]
12
- -
13
- test: [яя]
14
- mods: [--ей, --ей, --юю, --ей, --ей]
15
- -
16
- test: [ые, ие]
17
- mods: [-х, -м, ., -ми, -х]
18
- noun:
19
- suffixes:
20
- -
21
- test: [га, ка, ха, ча, ша, ща]
22
- mods: [-и, -е, -у, -ой, ]
23
- -
24
- test: [ба, ва, да, жа, за, ла, ма, на, па, ра, са, та, фа, ца]
25
- mods: [-ы, -е, -у, -ой, ]
26
- -
27
- test: [я]
28
- mods: [-и, -е, -ю, -ей, -е]
29
- -
30
- test: [и]
31
- mods: [--ок, -ам, ., -ами, -ах]
3
+ :rules:
4
+ :first:
5
+ :adjective:
6
+ :suffixes:
7
+ -
8
+ :test: [шая]
9
+ :mods: [--ей, --ей, --ую, --ей, --ей]
10
+ -
11
+ :test: [ая]
12
+ :mods: [--ой, --ой, --ую, --ой, --ой]
13
+ -
14
+ :test: [яя]
15
+ :mods: [--ей, --ей, --юю, --ей, --ей]
16
+ -
17
+ :test: [ые, ие]
18
+ :mods: [-х, -м, ., -ми, -х]
19
+ :noun:
20
+ :suffixes:
21
+ -
22
+ :test: [га, ка, ха, ча, ша, ща]
23
+ :mods: [-и, -е, -у, -ой, -е]
24
+ -
25
+ :test: [ба, ва, да, жа, за, ла, ма, на, па, ра, са, та, фа, ца]
26
+ :mods: [-ы, -е, -у, -ой, -е]
27
+ -
28
+ :test: [я]
29
+ :mods: [-и, -е, -ю, -ей, -е]
30
+ -
31
+ :test: [и]
32
+ :mods: [--ок, -ам, ., -ами, -ах]
32
33
 
33
- second_group:
34
- adjective:
35
- suffixes:
36
- -
37
- test: [шое, шый, шой]
38
- mods: [--ого, --ому, ., --им, --ом]
39
- -
40
- test: [ое, ый, ой]
41
- mods: [--ого, --ому, ., --ым, --ом]
42
- -
43
- test: [ее, ий]
44
- mods: [--его, --ему, ., --им, --ем]
45
- noun:
46
- suffixes:
47
- -
48
- test: [б, в, г, д, ж, з, к, л, м, н, п, р, с, т, ф, х, ц, ч, щ]
49
- mods: [а, у, ., ом, е]
50
- -
51
- test: [ш]
52
- mods: [а, у, ., ем, е]
53
- -
54
- test: [о]
55
- mods: [-а, -у, ., м, -е]
56
- -
57
- test: [е]
58
- mods: [-я, -ю, ., м, .]
59
- -
60
- test: [ы]
61
- mods: [-ов, -ам, ., -ами, -ах]
62
- -
63
- test: [ий]
64
- mods: [-я, -ю, ., -ем, -и]
34
+ :second:
35
+ :adjective:
36
+ :suffixes:
37
+ -
38
+ :test: [шое, шый, шой]
39
+ :mods: [--ого, --ому, ., --им, --ом]
40
+ -
41
+ :test: [ое, ый, ой]
42
+ :mods: [--ого, --ому, ., --ым, --ом]
43
+ -
44
+ :test: [ее, ий]
45
+ :mods: [--его, --ему, ., --им, --ем]
46
+ :noun:
47
+ :suffixes:
48
+ -
49
+ :test: [б, в, г, д, ж, з, к, л, м, н, п, р, с, т, ф, х, ц, ч, щ]
50
+ :mods: [а, у, ., ом, е]
51
+ -
52
+ :test: [ш]
53
+ :mods: [а, у, ., ем, е]
54
+ -
55
+ :test: [о]
56
+ :mods: [-а, -у, ., м, -е]
57
+ -
58
+ :test: [е]
59
+ :mods: [-я, -ю, ., м, .]
60
+ -
61
+ :test: [ы]
62
+ :mods: [-ов, -ам, ., -ами, -ах]
63
+ -
64
+ :test: [ий]
65
+ :mods: [-я, -ю, ., -ем, -и]
65
66
 
66
- third_group:
67
- adjective:
68
- suffixes:
69
- -
70
- test: [ая]
71
- mods: [--ой, --ой, --ую, --ой, --ой]
72
- -
73
- test: [яя]
74
- mods: [--ей, --ей, --юю, --ей, --ей]
75
- -
76
- test: [ые, ие]
77
- mods: [-х, -м, ., -ми, -х]
78
- noun:
79
- suffixes:
80
- -
81
- test: [ь]
82
- mods: [-и, -и, ., -ью, -и]
83
- -
84
- test: [мя]
85
- mods: [-ени, --ени, ., -енем, -ени]
67
+ :third:
68
+ :adjective:
69
+ :suffixes:
70
+ -
71
+ :test: [ая]
72
+ :mods: [--ой, --ой, --ую, --ой, --ой]
73
+ -
74
+ :test: [яя]
75
+ :mods: [--ей, --ей, --юю, --ей, --ей]
76
+ -
77
+ :test: [ые, ие]
78
+ :mods: [-х, -м, ., -ми, -х]
79
+ :noun:
80
+ :suffixes:
81
+ -
82
+ :test: [ь]
83
+ :mods: [-и, -и, ., -ью, -и]
84
+ -
85
+ :test: [мя]
86
+ :mods: [-ени, --ени, ., -енем, -ени]
@@ -1,3 +1,3 @@
1
1
  class RussianInflect
2
- VERSION = "0.0.4"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -1,7 +1,6 @@
1
- # encoding: UTF-8
2
-
3
1
  lib = File.expand_path('../lib', __FILE__)
4
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+
5
4
  require 'russian_inflect/version'
6
5
 
7
6
  Gem::Specification.new do |spec|
@@ -19,9 +18,8 @@ Gem::Specification.new do |spec|
19
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
19
  spec.require_paths = ["lib"]
21
20
 
22
- spec.add_dependency "activesupport", ">= 3.0.0"
23
- spec.add_dependency "unicode_utils", "~> 1.4"
24
- spec.add_development_dependency "bundler", "~> 1.3"
21
+ spec.add_dependency "unicode_utils", ">= 1.4"
22
+ spec.add_development_dependency "bundler"
25
23
  spec.add_development_dependency "rake"
26
24
  spec.add_development_dependency "rspec"
27
25
  end
data/spec/spec_helper.rb CHANGED
@@ -4,11 +4,11 @@ class RussianInflect
4
4
  def self.each_case(&block)
5
5
  CASES.each_with_index &block
6
6
  end
7
-
7
+
8
8
  def test_each_case(*answers)
9
9
  puts ''
10
10
  RussianInflect.each_case do |c, index|
11
- result = self.to_case(c)
11
+ result = to_case(c)
12
12
  puts %{RussianInflect.inflect("#{source}", :#{c}) # #{result}}
13
13
  result.should == answers[index]
14
14
  end
metadata CHANGED
@@ -1,83 +1,69 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: russian_inflect
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tõnis Simo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-22 00:00:00.000000000 Z
11
+ date: 2016-01-17 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: activesupport
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - '>='
18
- - !ruby/object:Gem::Version
19
- version: 3.0.0
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - '>='
25
- - !ruby/object:Gem::Version
26
- version: 3.0.0
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: unicode_utils
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
- - - ~>
17
+ - - ">="
32
18
  - !ruby/object:Gem::Version
33
19
  version: '1.4'
34
20
  type: :runtime
35
21
  prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
- - - ~>
24
+ - - ">="
39
25
  - !ruby/object:Gem::Version
40
26
  version: '1.4'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: bundler
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
- - - ~>
31
+ - - ">="
46
32
  - !ruby/object:Gem::Version
47
- version: '1.3'
33
+ version: '0'
48
34
  type: :development
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
- - - ~>
38
+ - - ">="
53
39
  - !ruby/object:Gem::Version
54
- version: '1.3'
40
+ version: '0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: rake
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
- - - '>='
45
+ - - ">="
60
46
  - !ruby/object:Gem::Version
61
47
  version: '0'
62
48
  type: :development
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
- - - '>='
52
+ - - ">="
67
53
  - !ruby/object:Gem::Version
68
54
  version: '0'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: rspec
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
- - - '>='
59
+ - - ">="
74
60
  - !ruby/object:Gem::Version
75
61
  version: '0'
76
62
  type: :development
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
- - - '>='
66
+ - - ">="
81
67
  - !ruby/object:Gem::Version
82
68
  version: '0'
83
69
  description: Склонение по падежам заголовков на русском языке
@@ -87,7 +73,7 @@ executables: []
87
73
  extensions: []
88
74
  extra_rdoc_files: []
89
75
  files:
90
- - .gitignore
76
+ - ".gitignore"
91
77
  - Gemfile
92
78
  - LICENSE.txt
93
79
  - README.md
@@ -109,17 +95,17 @@ require_paths:
109
95
  - lib
110
96
  required_ruby_version: !ruby/object:Gem::Requirement
111
97
  requirements:
112
- - - '>='
98
+ - - ">="
113
99
  - !ruby/object:Gem::Version
114
100
  version: '0'
115
101
  required_rubygems_version: !ruby/object:Gem::Requirement
116
102
  requirements:
117
- - - '>='
103
+ - - ">="
118
104
  - !ruby/object:Gem::Version
119
105
  version: '0'
120
106
  requirements: []
121
107
  rubyforge_project:
122
- rubygems_version: 2.0.5
108
+ rubygems_version: 2.5.1
123
109
  signing_key:
124
110
  specification_version: 4
125
111
  summary: Склоняет заданный заголовок по падежам