collapser 0.2.2.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 0b70c35a7bc110f7e8e16a063747a6d6fd03755dd1660adc94eeac9ae02bb160
4
+ data.tar.gz: c1ceb452d54716fc9087d25564b0fb9f318cdd222aeb543d84b73287f9392ead
5
+ SHA512:
6
+ metadata.gz: 7ec3d57fead0472f60368c378ecf7e8726da913b6e74664863edaf1513b1b7cee4e02328995382b7207ea180e2fb6b5ce47e0709b96b67ec272070c922db01aa
7
+ data.tar.gz: 10128f5b56ab0047a4f93b8a23b89cca0f44c1df462cd957c71c645748645b53e757f765e0d6caff29e5342fbefb10f917c3bddc3611e9c6e5e78adf05fa71c7
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler'
4
+ Bundler.require
5
+
6
+ class Collapser
7
+ require_relative 'collapser/version'
8
+ require_relative 'string'
9
+
10
+ DEFAULT_REPLACER = 'коллапс'
11
+
12
+ REPLACED_CHARS = [
13
+ ('A'..'Z').to_a,
14
+ ('А'..'Я').to_a,
15
+ ('a'..'z').to_a,
16
+ ('а'..'я').to_a
17
+ ].flatten.freeze
18
+
19
+ def initialize(text:, replacer: nil)
20
+ @text_arr = text.split('')
21
+ @replacer_arr = (replacer || DEFAULT_REPLACER).split('')
22
+ @replacer_arr_idx = 0
23
+ end
24
+
25
+ attr_reader :text_arr, :replacer_arr
26
+
27
+ def run
28
+ text_arr.map { |char| convert_char(char: char) }.join
29
+ end
30
+
31
+ private
32
+
33
+ attr_accessor :replacer_arr_idx
34
+
35
+ def convert_char(char:)
36
+ case char_type(char: char)
37
+ when :other
38
+ char
39
+ when :downcase
40
+ next_replace_char.downcase
41
+ when :upcase
42
+ next_replace_char.upcase
43
+ end
44
+ end
45
+
46
+ def next_replace_char
47
+ char = replacer_arr[replacer_arr_idx]
48
+ increment_replacer_arr_idx!
49
+ char
50
+ end
51
+
52
+ def char_type(char:)
53
+ return :other unless REPLACED_CHARS.include?(char)
54
+ return :downcase if char.downcase == char
55
+
56
+ :upcase
57
+ end
58
+
59
+ def increment_replacer_arr_idx!
60
+ self.replacer_arr_idx = replacer_arr_idx + 1
61
+ self.replacer_arr_idx = 0 if replacer_arr_idx >= replacer_arr.size
62
+ replacer_arr_idx
63
+ end
64
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Collapser
4
+ VERSION = '0.2.2.3'
5
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class String
4
+ def to_collapse(replacer = nil)
5
+ Collapser.new(text: self, replacer: replacer).run
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: collapser
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.2.3
5
+ platform: ruby
6
+ authors:
7
+ - Vladimir Bardokin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-01-13 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description:
14
+ email:
15
+ - mecha@twodev.ru
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/collapser.rb
21
+ - lib/collapser/version.rb
22
+ - lib/string.rb
23
+ homepage: https://github.com/Mecha23/collapser
24
+ licenses:
25
+ - MIT
26
+ metadata: {}
27
+ post_install_message:
28
+ rdoc_options: []
29
+ require_paths:
30
+ - lib
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: 2.7.1
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubygems_version: 3.1.2
43
+ signing_key:
44
+ specification_version: 4
45
+ summary: A much needed gem
46
+ test_files: []