collapser 0.2.2.3

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.
@@ -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: []