cheferize 0.1.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 +7 -0
- data/.gitignore +10 -0
- data/.rspec +1 -0
- data/.travis.yml +6 -0
- data/Gemfile +7 -0
- data/README.md +61 -0
- data/Rakefile +2 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/cheferize.gemspec +25 -0
- data/lib/cheferize/chef_string.rb +44 -0
- data/lib/cheferize/version.rb +3 -0
- data/lib/cheferize.rb +282 -0
- metadata +58 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 9fa03403afe8b4ffb4e8497a31e6cc0bbf7437c0
|
4
|
+
data.tar.gz: d60518b042be9e1a98a79115a8700aaabf8af5af
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d238a4e1b2b52515245c3902b90dbf96ab6047b6076d4007991a04308f2a9e12d003c2dc9ca548fb27f5567592856e88990f5b99bc46e93986928b4cef84343f
|
7
|
+
data.tar.gz: 800ba6f46bf60d9c91e7615f924f96b963d7bc0f773420786b6ba858a251744d6094e8e9a983294d42e3d60fea5c8fb64b8c8dc52e368b9c64ce62de761cadac
|
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--require spec_helper
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
# Cheferize
|
2
|
+
|
3
|
+
Cheferize is a Ruby gem which 'translates' strings into Swedish Chef.
|
4
|
+
|
5
|
+
## Inspiration / Prior Art
|
6
|
+
|
7
|
+
Inspired by encheferizer.php by eamelink (Erik Bakker).
|
8
|
+
|
9
|
+
About encheferizer.php
|
10
|
+
|
11
|
+
* http://bork.eamelink.nl (defunct as of 17 Jan 2010)
|
12
|
+
* Based on the original chef.x from John Hagerman.
|
13
|
+
* More info about the original chef.x : http://tbrowne.best.vwh.net/chef/ (also defunct as of 17 Jan 2010)
|
14
|
+
|
15
|
+
## Build Status
|
16
|
+
|
17
|
+
[](https://travis-ci.org/alexdean/cheferize)
|
18
|
+
|
19
|
+
## Installation
|
20
|
+
|
21
|
+
Add this line to your application's Gemfile:
|
22
|
+
|
23
|
+
```ruby
|
24
|
+
gem 'cheferize'
|
25
|
+
```
|
26
|
+
|
27
|
+
And then execute:
|
28
|
+
|
29
|
+
$ bundle
|
30
|
+
|
31
|
+
Or install it yourself as:
|
32
|
+
|
33
|
+
$ gem install cheferize
|
34
|
+
|
35
|
+
## Usage
|
36
|
+
|
37
|
+
```
|
38
|
+
>> class String; include Cheferize; end
|
39
|
+
>> "This is a test!".to_chef
|
40
|
+
=> "Tees is e test, bork bork bork!"
|
41
|
+
```
|
42
|
+
|
43
|
+
## License
|
44
|
+
|
45
|
+
Cheffereeze-a is free-a sufftvere; yuoo cun redeestriboote-a it und/ur mudeeffy
|
46
|
+
it under zee terms ooff zee GNU Generel Poobleec Leecense-a es poobleeshed by
|
47
|
+
zee Free-a Sufftvere-a Fuoondeshun; ieezeer ferseeun 2 ooff zee Leecense, oor
|
48
|
+
(et yuoor oopshun) uny leter ferseeun.
|
49
|
+
|
50
|
+
Cheffereeze-a is deestribooted in zee hupe-a tet it veell be-a useffool,
|
51
|
+
boot VITOUT UnY VERRUnTY; veetuoot ifee zee impleeed verrunty ooff
|
52
|
+
MERCHUnTEBILITY oor FITNESS FOR E PERTICULER PURPOSE. See-a zee
|
53
|
+
GNU Generel Poobleec Leecense-a fur mure-a deteeels.
|
54
|
+
|
55
|
+
Yuoo shuoold hefe-a receeefed e cupy ooff zee GNU Generel Poobleec Leecense-a
|
56
|
+
elung veet Cheffereeze; iff nut, vreete-a tu zee Free-a Sufftvere-a
|
57
|
+
Fuoondeshun, Inc., 51 Frunkleen St, Feefft Fluur, Bustun, MA 02110-1301 USA
|
58
|
+
|
59
|
+
## Contributing
|
60
|
+
|
61
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/alexdean/cheferize.
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "cheferize"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
class String
|
10
|
+
include Cheferize
|
11
|
+
end
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start(__FILE__)
|
data/bin/setup
ADDED
data/cheferize.gemspec
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require "cheferize/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "cheferize"
|
8
|
+
spec.version = Cheferize::VERSION
|
9
|
+
spec.authors = ["Alex Dean"]
|
10
|
+
spec.email = ["github@mostlyalex.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{Transliterate strings into Swedish Chef.}
|
13
|
+
spec.homepage = "https://github.com/alexdean/cheferize."
|
14
|
+
|
15
|
+
spec.required_ruby_version = '>= 2.3', '<= 2.7'
|
16
|
+
|
17
|
+
# Specify which files should be added to the gem when it is released.
|
18
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
19
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
20
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
21
|
+
end
|
22
|
+
spec.bindir = "exe"
|
23
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
24
|
+
spec.require_paths = ["lib"]
|
25
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Cheferize
|
2
|
+
# A ChefString provides an additional public method for String. in_same_case_as.
|
3
|
+
class ChefString
|
4
|
+
instance_methods.each { |m| undef_method m unless m =~ /(^__|^send$|^object_id$)/ }
|
5
|
+
|
6
|
+
def initialize(str)
|
7
|
+
@target = str
|
8
|
+
end
|
9
|
+
|
10
|
+
# return target string, transformed into the same case as the first character of target.
|
11
|
+
def in_same_case_as(target)
|
12
|
+
to_case(@target, get_case(target))
|
13
|
+
end
|
14
|
+
|
15
|
+
def get_case(letter)
|
16
|
+
code = letter.codepoints[0]
|
17
|
+
if code > 96 && code < 123
|
18
|
+
:lower
|
19
|
+
elsif code > 64 && code < 91
|
20
|
+
:upper
|
21
|
+
else
|
22
|
+
:non_alpha
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def to_case(letter, sym)
|
27
|
+
case sym
|
28
|
+
when :upper
|
29
|
+
letter.upcase
|
30
|
+
when :lower
|
31
|
+
letter.downcase
|
32
|
+
else
|
33
|
+
letter
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
protected
|
38
|
+
|
39
|
+
# proxy any remaining calls to the underlying string.
|
40
|
+
def method_missing(name, *args, &block)
|
41
|
+
@target.send(name, *args, &block)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/cheferize.rb
ADDED
@@ -0,0 +1,282 @@
|
|
1
|
+
require "cheferize/version"
|
2
|
+
require "cheferize/chef_string"
|
3
|
+
|
4
|
+
# Cheferize : A Ruby library to 'translate' strings into Swedish Chef.
|
5
|
+
# Copyright 2010 by Alex Dean <github@mostlyalex.com>.
|
6
|
+
#
|
7
|
+
# Usage:
|
8
|
+
# >> class String; include Cheferize; end
|
9
|
+
# >> "This is a test!".to_chef
|
10
|
+
# => "Tees is e test, bork bork bork!"
|
11
|
+
#
|
12
|
+
# Cheffereeze-a is free-a sufftvere; yuoo cun redeestriboote-a it und/ur mudeeffy
|
13
|
+
# it under zee terms ooff zee GNU Generel Poobleec Leecense-a es poobleeshed by
|
14
|
+
# zee Free-a Sufftvere-a Fuoondeshun; ieezeer ferseeun 2 ooff zee Leecense, oor
|
15
|
+
# (et yuoor oopshun) uny leter ferseeun.
|
16
|
+
#
|
17
|
+
# Cheffereeze-a is deestribooted in zee hupe-a tet it veell be-a useffool,
|
18
|
+
# boot VITOUT UnY VERRUnTY; veetuoot ifee zee impleeed verrunty ooff
|
19
|
+
# MERCHUnTEBILITY oor FITNESS FOR E PERTICULER PURPOSE. See-a zee
|
20
|
+
# GNU Generel Poobleec Leecense-a fur mure-a deteeels.
|
21
|
+
#
|
22
|
+
# Yuoo shuoold hefe-a receeefed e cupy ooff zee GNU Generel Poobleec Leecense-a
|
23
|
+
# elung veet Cheffereeze; iff nut, vreete-a tu zee Free-a Sufftvere-a
|
24
|
+
# Fuoondeshun, Inc., 51 Frunkleen St, Feefft Fluur, Bustun, MA 02110-1301 USA
|
25
|
+
#
|
26
|
+
# Inspired by encheferizer.php by eamelink (Erik Bakker).
|
27
|
+
# About encheferizer.php :
|
28
|
+
# http://bork.eamelink.nl (defunct as of 17 Jan 2010)
|
29
|
+
# Based on the original chef.x from John Hagerman.
|
30
|
+
# More info about the original chef.x : http://tbrowne.best.vwh.net/chef/ (also defunct as of 17 Jan 2010)
|
31
|
+
#
|
32
|
+
module Cheferize
|
33
|
+
def self.included(other)
|
34
|
+
if !other.respond_to?(:to_s)
|
35
|
+
raise "#{other} cannot include Cheferize. #{other} does not respond to to_s."
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def to_chef
|
40
|
+
# TODO : punctuation will break rules which assert :last position.
|
41
|
+
output = to_s.split(' ').map do |word|
|
42
|
+
cheferize_word(word)
|
43
|
+
end
|
44
|
+
output.join(' ')
|
45
|
+
end
|
46
|
+
|
47
|
+
def cheferize_word(input)
|
48
|
+
i=0
|
49
|
+
output = ''
|
50
|
+
# see rule "interior ir becomes ur, or first-occurring interior i becomes ee"
|
51
|
+
@chef_saw_an_i = nil
|
52
|
+
|
53
|
+
while i < input.size do
|
54
|
+
# a single character will be :first but not :last.
|
55
|
+
position = nil
|
56
|
+
if i == 0
|
57
|
+
position = :first
|
58
|
+
elsif i == (input.size - 1)
|
59
|
+
position = :last
|
60
|
+
end
|
61
|
+
|
62
|
+
# apply rules to each character, breaking on the first one which returns output
|
63
|
+
# for the word 'testify', the rules will see 'testify', 'estify', 'stify', 'tify', etc...
|
64
|
+
subject = input[i..(input.size-1)]
|
65
|
+
|
66
|
+
Cheferize.cheferize_rules.each do |rule|
|
67
|
+
out = self.send(rule, subject, position)
|
68
|
+
# uncomment to see to_chef in action.
|
69
|
+
#puts "#{subject} #{' ('+position.to_s+') ' if position}: '#{rule.to_s}' returns '#{out.inspect}'"
|
70
|
+
if out
|
71
|
+
output += out[0]
|
72
|
+
i += out[1]
|
73
|
+
break
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
output
|
79
|
+
end
|
80
|
+
|
81
|
+
# Define a transformation rule.
|
82
|
+
# Block must accept subject & position parameters.
|
83
|
+
def self.cheferize_rule(name, &block)
|
84
|
+
@rules ||= []
|
85
|
+
sym = name.to_sym
|
86
|
+
@rules << sym
|
87
|
+
define_method(sym, block)
|
88
|
+
end
|
89
|
+
|
90
|
+
# Shows the transliteration rules.
|
91
|
+
def self.cheferize_rules
|
92
|
+
@rules
|
93
|
+
end
|
94
|
+
|
95
|
+
# General rules
|
96
|
+
#
|
97
|
+
# after a replacement occurs, skip to the next source character. (only 1 transformation per letter)
|
98
|
+
# if a multi-character test matches, skip over to the next chars.
|
99
|
+
#
|
100
|
+
# Rule API :
|
101
|
+
#
|
102
|
+
# Each rule must accept parameters:
|
103
|
+
# - subject : a string to consider for transformation
|
104
|
+
# - position : a symbol indicating where the beginning of the subject string falls, in relationship
|
105
|
+
# to the entire word being transformed. Value will be :first, :last, or nil.
|
106
|
+
#
|
107
|
+
# A rule may return either:
|
108
|
+
# - nil : Meaning this rule does not apply.
|
109
|
+
# - A array with element 0 containing a replacement string, and element 1 containing an integer describing the
|
110
|
+
# number of characters this match consumes in the entire word being transformed.
|
111
|
+
# Example : The string 'ew' is changed to 'oo' by the rule 'interior ew becomes oo'. Because this match
|
112
|
+
# involves both the 'e' and the 'w', it consumes both characters. The 'w' will not be considered
|
113
|
+
# for matching on its own.
|
114
|
+
#
|
115
|
+
#
|
116
|
+
# Outline of rules. Taken from encheferizer.php by Erik Bakker.
|
117
|
+
#
|
118
|
+
# for first char
|
119
|
+
#
|
120
|
+
# ^e->i
|
121
|
+
# ^o->oo
|
122
|
+
#
|
123
|
+
# for non-first chars
|
124
|
+
#
|
125
|
+
# ew->oo
|
126
|
+
# e$->e-a
|
127
|
+
# f->ff
|
128
|
+
# ir->ur, or i->ee if no i has occurred.
|
129
|
+
# ow->oo or o->u
|
130
|
+
# tion -> shun
|
131
|
+
# u->oo
|
132
|
+
#
|
133
|
+
# An->Un
|
134
|
+
# Au->Oo
|
135
|
+
# A.->E (A not at the end becomes E)
|
136
|
+
# en$->ee
|
137
|
+
# e not at the beginning, do nothing. Pointless?
|
138
|
+
# th->tt
|
139
|
+
# the->zee
|
140
|
+
# v->f
|
141
|
+
# w->v
|
142
|
+
# pass
|
143
|
+
|
144
|
+
# no recursive cheferizing yet.
|
145
|
+
cheferize_rule "pass the bork" do |subject, position|
|
146
|
+
[subject, 4] if position == :first && subject[0,4].downcase == 'bork'
|
147
|
+
end
|
148
|
+
|
149
|
+
cheferize_rule "randomly borkify after . or !" do |subject, position|
|
150
|
+
if position == :last && (subject[0,1] == '.' || subject[0,1] == '!') && rand(3) == 0
|
151
|
+
[', bork bork bork!', 1]
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
# ^e->i
|
156
|
+
cheferize_rule "initial e becomes i" do |subject, position|
|
157
|
+
if position == :first && subject[0,1].downcase == 'e'
|
158
|
+
[ChefString.new('i').in_same_case_as(subject[0,1]), 1]
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
# ^o->oo
|
163
|
+
cheferize_rule "initial o becomes oo" do |subject, position|
|
164
|
+
if position == :first && subject[0,1].downcase == 'o'
|
165
|
+
[ChefString.new('o').in_same_case_as(subject[0,1]) + 'o', 1]
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
# ew->oo, if not at the beginning
|
170
|
+
cheferize_rule "interior ew becomes oo" do |subject, position|
|
171
|
+
['oo', 2] if position != :first && subject[0,2] == 'ew'
|
172
|
+
end
|
173
|
+
|
174
|
+
# e$->e-a, if at the end
|
175
|
+
cheferize_rule "final e becomes e-a" do |subject, position|
|
176
|
+
['e-a', 1] if position == :last && subject[0,1] == 'e'
|
177
|
+
end
|
178
|
+
|
179
|
+
# f->ff if not at the beginning
|
180
|
+
cheferize_rule "interior f becomes ff" do |subject, position|
|
181
|
+
['ff', 1] if position != :first && subject[0,1] == 'f'
|
182
|
+
end
|
183
|
+
|
184
|
+
# ir->ur, or i->ee if no i has occurred.
|
185
|
+
cheferize_rule "interior ir becomes ur, or first-occurring interior i becomes ee" do |subject, position|
|
186
|
+
if position != :first
|
187
|
+
if subject[0,2] == 'ir'
|
188
|
+
['ur', 2]
|
189
|
+
elsif subject[0,1] == 'i' && !@chef_saw_an_i
|
190
|
+
@chef_saw_an_i = true
|
191
|
+
['ee', 1]
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
# ow->oo or o->u
|
197
|
+
cheferize_rule "ow becomes oo, or o becomes u" do |subject, position|
|
198
|
+
if position != :first
|
199
|
+
if subject[0,2] == 'ow'
|
200
|
+
['oo', 2]
|
201
|
+
elsif subject[0,1] == 'o'
|
202
|
+
['u', 1]
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
# tion -> shun
|
208
|
+
cheferize_rule "tion becomes shun" do |subject, position|
|
209
|
+
if position != :first && subject[0,4] == 'tion'
|
210
|
+
['shun', 4]
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
# u->oo
|
215
|
+
cheferize_rule "interior u becomes oo" do |subject, position|
|
216
|
+
if position != :first && subject[0,1] == 'u'
|
217
|
+
['oo', 1]
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
# An->Un, an->un
|
222
|
+
cheferize_rule "an becomes un" do |subject, position|
|
223
|
+
if subject[0,2].downcase == 'an'
|
224
|
+
[ChefString.new('u').in_same_case_as(subject[0,1]) + 'n', 2]
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
# Au->Oo, au->oo
|
229
|
+
cheferize_rule "au becomes oo" do |subject, position|
|
230
|
+
if subject[0,2].downcase == 'au'
|
231
|
+
[ChefString.new('o').in_same_case_as(subject[0,1]) + 'o', 2]
|
232
|
+
end
|
233
|
+
end
|
234
|
+
|
235
|
+
# A.->E (A not at the end becomes E)
|
236
|
+
cheferize_rule "non-final a becomes e" do |subject, position|
|
237
|
+
if position != :last && subject[0,1].downcase == 'a'
|
238
|
+
[ChefString.new('e').in_same_case_as(subject[0,1]), 1]
|
239
|
+
end
|
240
|
+
end
|
241
|
+
|
242
|
+
# en$->ee
|
243
|
+
cheferize_rule "final en becomes ee" do |subject, position|
|
244
|
+
if position != :first && subject == 'en'
|
245
|
+
['ee', 2]
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
249
|
+
# e not at the beginning, do nothing. Pointless?
|
250
|
+
|
251
|
+
# the->zee
|
252
|
+
cheferize_rule "the becomes zee" do |subject, position|
|
253
|
+
if subject[0,3].downcase == 'the'
|
254
|
+
[ChefString.new('z').in_same_case_as(subject[0,1]) + 'ee', 3]
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
258
|
+
# th->t
|
259
|
+
cheferize_rule "th becomes t" do |subject, position|
|
260
|
+
if subject[0,2].downcase == 'th'
|
261
|
+
[ChefString.new('t').in_same_case_as(subject[0,1]), 2]
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
265
|
+
# v->f
|
266
|
+
cheferize_rule "v becomes f" do |subject, position|
|
267
|
+
if subject[0,1].downcase == 'v'
|
268
|
+
[ChefString.new('f').in_same_case_as(subject[0,1]), 1]
|
269
|
+
end
|
270
|
+
end
|
271
|
+
|
272
|
+
# w->v
|
273
|
+
cheferize_rule "w becomes v" do |subject, position|
|
274
|
+
if subject[0,1].downcase == 'w'
|
275
|
+
[ChefString.new('v').in_same_case_as(subject[0,1]), 1]
|
276
|
+
end
|
277
|
+
end
|
278
|
+
|
279
|
+
cheferize_rule "pass on anything else" do |subject, position|
|
280
|
+
[subject[0,1], 1]
|
281
|
+
end
|
282
|
+
end
|
metadata
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cheferize
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Alex Dean
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-08-13 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description:
|
14
|
+
email:
|
15
|
+
- github@mostlyalex.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- ".gitignore"
|
21
|
+
- ".rspec"
|
22
|
+
- ".travis.yml"
|
23
|
+
- Gemfile
|
24
|
+
- README.md
|
25
|
+
- Rakefile
|
26
|
+
- bin/console
|
27
|
+
- bin/setup
|
28
|
+
- cheferize.gemspec
|
29
|
+
- lib/cheferize.rb
|
30
|
+
- lib/cheferize/chef_string.rb
|
31
|
+
- lib/cheferize/version.rb
|
32
|
+
homepage: https://github.com/alexdean/cheferize.
|
33
|
+
licenses: []
|
34
|
+
metadata: {}
|
35
|
+
post_install_message:
|
36
|
+
rdoc_options: []
|
37
|
+
require_paths:
|
38
|
+
- lib
|
39
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '2.3'
|
44
|
+
- - "<="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '2.7'
|
47
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - ">="
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: '0'
|
52
|
+
requirements: []
|
53
|
+
rubyforge_project:
|
54
|
+
rubygems_version: 2.5.2
|
55
|
+
signing_key:
|
56
|
+
specification_version: 4
|
57
|
+
summary: Transliterate strings into Swedish Chef.
|
58
|
+
test_files: []
|