rage_flip 1.1.0 → 1.2.1
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 +4 -4
- data/Gemfile +2 -1
- data/LICENSE +21 -0
- data/README.md +85 -6
- data/Rakefile +23 -23
- data/exe/chaos +4 -5
- data/exe/chaos_level +4 -4
- data/exe/disapproval +17 -0
- data/exe/doubleunderline +4 -5
- data/exe/emote +4 -5
- data/exe/flip +17 -0
- data/exe/flip_text +4 -5
- data/exe/rage_flip +4 -5
- data/exe/sarcasm +4 -5
- data/exe/strikethrough +4 -5
- data/exe/table_flip +4 -5
- data/exe/underline +4 -5
- data/lib/rage_flip/chaos.rb +13 -13
- data/lib/rage_flip/clipboard.rb +1 -1
- data/lib/rage_flip/emote.rb +47 -17
- data/lib/rage_flip/flipper.rb +11 -11
- data/lib/rage_flip/sarcasm.rb +1 -1
- data/lib/rage_flip/strikethrough.rb +3 -3
- data/lib/rage_flip/text_substitution.rb +61 -0
- data/lib/rage_flip/underline.rb +5 -5
- data/lib/rage_flip/version.rb +2 -2
- data/lib/rage_flip.rb +3 -2
- data/spec/rage_flip_spec.rb +99 -99
- data/spec/spec_helper.rb +3 -3
- metadata +7 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fa9cda34297e4bfd6fd10db91ca8b3335f95bd627efa60de584885b50d981ba5
|
4
|
+
data.tar.gz: a21987321b127f04a7cf9799d91f87b4892a22579b6c6ee12624e34545360ca6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1e2df21e6f7d91375a6d1e44bf02a2b9431d77054e079623c6d3abb83a5d2fd3de7ada309b18285846157a5416da1876fd8f38e22e27348aeee5481822a5d4a7
|
7
|
+
data.tar.gz: 66215a4590a50a2f70000c9f3314813968e19b151bb912e2cf51cb0cdf909816b21cea27d146a14b2632c72ee39649eda0376511d53bea8f4b9360319ccaeb5b
|
data/Gemfile
CHANGED
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2025 Thomas Powell
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# RageFlip
|
2
2
|
|
3
|
-
`rage_flip` is a Ruby gem that provides text manipulation utilities with clipboard integration. It flips text upside down with rage table flip emoticons and
|
3
|
+
`rage_flip` is a comprehensive Ruby gem that provides text manipulation utilities with clipboard integration. It flips text upside down with rage table flip emoticons, includes extensive text formatting tools, and features a rich collection of emotes and text substitutions for enhanced communication.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -67,21 +67,65 @@ Just the pure flipped text without any rage or table flip decorations.
|
|
67
67
|
|
68
68
|
### emote
|
69
69
|
|
70
|
-
The emote system provides
|
70
|
+
The emote system provides a comprehensive collection of emoticons, text substitutions, and emoji sequences:
|
71
71
|
|
72
72
|
```bash
|
73
73
|
emote # List all available emotes
|
74
74
|
emote list # List all available emotes
|
75
75
|
emote disapproval # Output: (ಠ_ಠ)
|
76
|
+
emote rage # Output: ಠ益ಠ
|
77
|
+
emote flip # Output: (╯°□°)╯︵ ┻━┻
|
78
|
+
emote rageflip # Output: (ノಠ益ಠ)ノ彡┻━┻
|
79
|
+
emote shrug # Output: ¯\_(ツ)_/¯
|
80
|
+
emote fu # Output: t(-__-t)
|
81
|
+
emote facepalm # Output: (-‸ლ)
|
82
|
+
emote rock # Output: \m/ (>_<) \m/
|
83
|
+
```
|
84
|
+
|
85
|
+
#### Shit Emotes
|
86
|
+
Various poop emoji combinations:
|
87
|
+
|
88
|
+
```bash
|
76
89
|
emote bullshit # Output: 🐄💩
|
77
|
-
emote catshit # Output:
|
78
|
-
emote dogshit # Output:
|
90
|
+
emote catshit # Output: 🐱💩
|
91
|
+
emote dogshit # Output: 🐶💩
|
79
92
|
emote pandashit # Output: 🐼💩
|
80
93
|
emote horseshit # Output: 🐴💩
|
94
|
+
emote koalashit # Output: 🐨💩
|
81
95
|
emote batshit # Output: 🦇💩
|
82
96
|
```
|
83
97
|
|
84
|
-
|
98
|
+
#### Text Substitutions
|
99
|
+
Keyboard shortcuts and symbols:
|
100
|
+
|
101
|
+
```bash
|
102
|
+
emote cmd # Output: ⌘
|
103
|
+
emote command # Output: ⌘
|
104
|
+
emote cmd- # Output: ⌘-
|
105
|
+
emote optn # Output: ⌥
|
106
|
+
emote option # Output: ⌥
|
107
|
+
emote cntl # Output: ⌃
|
108
|
+
emote shft # Output: ⇧
|
109
|
+
emote shift # Output: ⇧
|
110
|
+
```
|
111
|
+
|
112
|
+
#### Special Emotes
|
113
|
+
Multi-line and unique expressions:
|
114
|
+
|
115
|
+
```bash
|
116
|
+
emote kungfuhamster # Output: Multi-line ASCII hamster
|
117
|
+
emote noevil # Output: 🙈🙉🙊
|
118
|
+
emote omw # Output: On my way!
|
119
|
+
emote bugeyes # Output: (⊙_◎)
|
120
|
+
emote dogshrug # Output: ¯\_🐶_/¯
|
121
|
+
emote javaflip # Output: (╯°□°)╯︵ ┻ɐʌɐɾ┻
|
122
|
+
emote heresatable # Output: ┬─┬ ノ( ゜-゜ノ)
|
123
|
+
emote shrugtable # Output: ┻━┻ ︵ ¯\(ツ)/¯ ︵ ┻━┻
|
124
|
+
emote unsee # Output: ♨_♨
|
125
|
+
emote yuno # Output: ლ(ಠ益ಠლ)
|
126
|
+
```
|
127
|
+
|
128
|
+
All emotes are accessed through the `emote` command followed by the emote name. Use `emote list` to see the complete collection of available emotes.
|
85
129
|
|
86
130
|
### sarcasm
|
87
131
|
|
@@ -163,6 +207,27 @@ The flip functionality uses comprehensive character mappings including:
|
|
163
207
|
- Common punctuation and symbols
|
164
208
|
- Special Unicode characters for upside-down equivalents
|
165
209
|
|
210
|
+
## Comprehensive Emote Collection
|
211
|
+
|
212
|
+
The gem includes an extensive collection of emotes organized into categories:
|
213
|
+
|
214
|
+
### Rage & Flipping
|
215
|
+
- `disapproval`, `rage`, `flip`, `rageflip`, `javaflip`, `shrugtable`
|
216
|
+
|
217
|
+
### Expressions & Gestures
|
218
|
+
- `shrug`, `fu`, `facepalm`, `rock`, `bugeyes`, `dogshrug`, `yuno`
|
219
|
+
|
220
|
+
### Poop Emotes
|
221
|
+
- `bullshit`, `catshit`, `dogshit`, `pandashit`, `horseshit`, `koalashit`, `batshit`
|
222
|
+
|
223
|
+
### Keyboard Symbols
|
224
|
+
- `cmd`/`command` (⌘), `optn`/`option` (⌥), `cntl` (⌃), `shft`/`shift` (⇧), `cmd-` (⌘-)
|
225
|
+
|
226
|
+
### Special Characters
|
227
|
+
- `noevil` (🙈🙉🙊), `omw` ("On my way!"), `heresatable`, `kungfuhamster` (ASCII art), `unsee`
|
228
|
+
|
229
|
+
Use `emote list` to see all available emotes with their outputs.
|
230
|
+
|
166
231
|
## Persistent Settings
|
167
232
|
|
168
233
|
- **Chaos Level**: Stored in `~/.chaos_level.txt` and controls the intensity of the chaos effect (default: 10). This setting persists across terminal sessions and system reboots.
|
@@ -216,8 +281,22 @@ RageFlip::Emote.process("disapproval")
|
|
216
281
|
RageFlip::Emote.process("bullshit")
|
217
282
|
# => "🐄💩"
|
218
283
|
|
284
|
+
RageFlip::Emote.process("cmd")
|
285
|
+
# => "⌘"
|
286
|
+
|
287
|
+
RageFlip::Emote.process("shrug")
|
288
|
+
# => "¯\_(ツ)_/¯"
|
289
|
+
|
219
290
|
RageFlip::Emote.list_emotes
|
220
|
-
# => "Available emotes:\n
|
291
|
+
# => "Available emotes:\n batshit - 🦇💩\n bugeyes - (⊙_◎)\n..."
|
292
|
+
|
293
|
+
# Check if emote exists
|
294
|
+
RageFlip::Emote.emote_exists?("rage")
|
295
|
+
# => true
|
296
|
+
|
297
|
+
# Get all emote names
|
298
|
+
RageFlip::Emote.emote_names
|
299
|
+
# => ["disapproval", "bullshit", "catshit", ...]
|
221
300
|
|
222
301
|
# Copy to clipboard
|
223
302
|
RageFlip::Clipboard.copy("text to copy")
|
data/Rakefile
CHANGED
@@ -1,36 +1,36 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require_relative
|
1
|
+
require "rake"
|
2
|
+
require "rake/testtask"
|
3
|
+
require "rspec/core/rake_task"
|
4
|
+
require_relative "lib/rage_flip/version"
|
5
5
|
|
6
6
|
# Define the default task
|
7
|
-
task :
|
7
|
+
task default: :test
|
8
8
|
|
9
9
|
# Define a task for running tests with RSpec
|
10
10
|
RSpec::Core::RakeTask.new(:test) do |t|
|
11
|
-
t.pattern =
|
11
|
+
t.pattern = "spec/**/*_spec.rb"
|
12
12
|
end
|
13
13
|
|
14
14
|
# Alias for backwards compatibility
|
15
|
-
task :
|
15
|
+
task spec: :test
|
16
16
|
|
17
17
|
# Define a task for building the gem
|
18
18
|
task :build do
|
19
|
-
sh
|
19
|
+
sh "gem build rage_flip.gemspec"
|
20
20
|
end
|
21
21
|
|
22
22
|
# Define a task for installing the gem
|
23
23
|
task :install do
|
24
|
-
sh
|
24
|
+
sh "gem install rage_flip-*.gem"
|
25
25
|
end
|
26
26
|
|
27
27
|
# Define a task for cleaning up generated files
|
28
28
|
task :clean do
|
29
|
-
rm_rf Dir[
|
29
|
+
rm_rf Dir["*.gem"]
|
30
30
|
end
|
31
31
|
|
32
32
|
# Define a task for running all tasks
|
33
|
-
task :
|
33
|
+
task all: [:build, :install, :test]
|
34
34
|
|
35
35
|
# Version management tasks
|
36
36
|
namespace :version do
|
@@ -60,12 +60,12 @@ namespace :version do
|
|
60
60
|
puts "Usage: rake version:set[1.2.3]"
|
61
61
|
exit 1
|
62
62
|
end
|
63
|
-
|
63
|
+
|
64
64
|
unless args[:version].match?(/^\d+\.\d+\.\d+$/)
|
65
65
|
puts "Error: Version must be in format X.Y.Z (e.g., 1.2.3)"
|
66
66
|
exit 1
|
67
67
|
end
|
68
|
-
|
68
|
+
|
69
69
|
update_version_file(args[:version])
|
70
70
|
puts "Version set to #{args[:version]}"
|
71
71
|
end
|
@@ -101,8 +101,8 @@ end
|
|
101
101
|
# Helper method to bump version
|
102
102
|
def bump_version(type)
|
103
103
|
current_version = read_current_version
|
104
|
-
current = current_version.split(
|
105
|
-
|
104
|
+
current = current_version.split(".").map(&:to_i)
|
105
|
+
|
106
106
|
case type
|
107
107
|
when :patch
|
108
108
|
current[2] += 1
|
@@ -114,28 +114,28 @@ def bump_version(type)
|
|
114
114
|
current[1] = 0
|
115
115
|
current[2] = 0
|
116
116
|
end
|
117
|
-
|
118
|
-
new_version = current.join(
|
117
|
+
|
118
|
+
new_version = current.join(".")
|
119
119
|
update_version_file(new_version)
|
120
120
|
puts "Version bumped from #{current_version} to #{new_version}"
|
121
121
|
end
|
122
122
|
|
123
123
|
# Helper method to read current version from file
|
124
124
|
def read_current_version
|
125
|
-
version_file =
|
125
|
+
version_file = "lib/rage_flip/version.rb"
|
126
126
|
content = File.read(version_file)
|
127
127
|
content.match(/VERSION = "([^"]+)"/)[1]
|
128
128
|
end
|
129
129
|
|
130
130
|
# Helper method to update version file
|
131
131
|
def update_version_file(new_version)
|
132
|
-
version_file =
|
132
|
+
version_file = "lib/rage_flip/version.rb"
|
133
133
|
content = File.read(version_file)
|
134
|
-
|
134
|
+
|
135
135
|
updated_content = content.gsub(
|
136
|
-
/VERSION = "[^"]+"/,
|
136
|
+
/VERSION = "[^"]+"/,
|
137
137
|
"VERSION = \"#{new_version}\""
|
138
138
|
)
|
139
|
-
|
139
|
+
|
140
140
|
File.write(version_file, updated_content)
|
141
|
-
end
|
141
|
+
end
|
data/exe/chaos
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require_relative
|
3
|
+
require_relative "../lib/rage_flip"
|
4
4
|
|
5
|
-
text = ARGV.join(
|
5
|
+
text = ARGV.join(" ")
|
6
6
|
|
7
7
|
if text.empty?
|
8
8
|
puts "Usage: chaos <text_to_chaos>"
|
@@ -12,8 +12,7 @@ end
|
|
12
12
|
result = RageFlip::Chaos.process(text)
|
13
13
|
|
14
14
|
if RageFlip::Clipboard.copy(result)
|
15
|
-
puts result
|
16
15
|
else
|
17
16
|
puts "Failed to copy to clipboard, but here's your chaotic text:"
|
18
|
-
|
19
|
-
|
17
|
+
end
|
18
|
+
puts result
|
data/exe/chaos_level
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require_relative
|
3
|
+
require_relative "../lib/rage_flip"
|
4
4
|
|
5
5
|
if ARGV.length == 0
|
6
6
|
puts "Current chaos level: #{RageFlip::Chaos.current_chaos_level}"
|
@@ -9,7 +9,7 @@ elsif ARGV.length != 1
|
|
9
9
|
puts "Usage: chaos_level [more|less|number|show]"
|
10
10
|
puts " (no args) - Show current chaos level"
|
11
11
|
puts " more - Increase chaos level by 1"
|
12
|
-
puts " less - Decrease chaos level by 1"
|
12
|
+
puts " less - Decrease chaos level by 1"
|
13
13
|
puts " number - Set chaos level to specific number"
|
14
14
|
puts " show - Show current chaos level"
|
15
15
|
exit 1
|
@@ -17,9 +17,9 @@ end
|
|
17
17
|
|
18
18
|
instruction = ARGV[0]
|
19
19
|
|
20
|
-
if instruction ==
|
20
|
+
if instruction == "show"
|
21
21
|
puts "Current chaos level: #{RageFlip::Chaos.current_chaos_level}"
|
22
22
|
else
|
23
23
|
result = RageFlip::Chaos.set_chaos_level(instruction)
|
24
24
|
puts result
|
25
|
-
end
|
25
|
+
end
|
data/exe/disapproval
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require_relative "../lib/rage_flip"
|
4
|
+
|
5
|
+
SUBSTITUTION_NAME = File.basename($0)
|
6
|
+
result = RageFlip::TextSubstitution.process(SUBSTITUTION_NAME)
|
7
|
+
|
8
|
+
if result
|
9
|
+
if RageFlip::Clipboard.copy(result)
|
10
|
+
else
|
11
|
+
puts "Failed to copy to clipboard, but here's your text substitution:"
|
12
|
+
end
|
13
|
+
puts result
|
14
|
+
else
|
15
|
+
puts "Unknown substitution: #{SUBSTITUTION_NAME}"
|
16
|
+
exit 1
|
17
|
+
end
|
data/exe/doubleunderline
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require_relative
|
3
|
+
require_relative "../lib/rage_flip"
|
4
4
|
|
5
|
-
text = ARGV.join(
|
5
|
+
text = ARGV.join(" ")
|
6
6
|
|
7
7
|
if text.empty?
|
8
8
|
puts "Usage: doubleunderline <text_to_double_underline>"
|
@@ -12,8 +12,7 @@ end
|
|
12
12
|
result = RageFlip::Underline.double_underline(text)
|
13
13
|
|
14
14
|
if RageFlip::Clipboard.copy(result)
|
15
|
-
puts result
|
16
15
|
else
|
17
16
|
puts "Failed to copy to clipboard, but here's your double underlined text:"
|
18
|
-
|
19
|
-
|
17
|
+
end
|
18
|
+
puts result
|
data/exe/emote
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require_relative
|
3
|
+
require_relative "../lib/rage_flip"
|
4
4
|
|
5
5
|
if ARGV.length == 0
|
6
6
|
puts RageFlip::Emote.list_emotes
|
@@ -9,7 +9,7 @@ end
|
|
9
9
|
|
10
10
|
emote_name = ARGV[0].downcase
|
11
11
|
|
12
|
-
if emote_name ==
|
12
|
+
if emote_name == "list"
|
13
13
|
puts RageFlip::Emote.list_emotes
|
14
14
|
exit 0
|
15
15
|
end
|
@@ -19,14 +19,13 @@ result = RageFlip::Emote.process(emote_name)
|
|
19
19
|
if result
|
20
20
|
# Copy to clipboard
|
21
21
|
if RageFlip::Clipboard.copy(result)
|
22
|
-
puts result
|
23
22
|
else
|
24
23
|
puts "Failed to copy to clipboard, but here's your emote:"
|
25
|
-
puts result
|
26
24
|
end
|
25
|
+
puts result
|
27
26
|
else
|
28
27
|
puts "Unknown emote: #{emote_name}"
|
29
28
|
puts ""
|
30
29
|
puts RageFlip::Emote.list_emotes
|
31
30
|
exit 1
|
32
|
-
end
|
31
|
+
end
|
data/exe/flip
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require_relative "../lib/rage_flip"
|
4
|
+
|
5
|
+
SUBSTITUTION_NAME = File.basename($0)
|
6
|
+
result = RageFlip::TextSubstitution.process(SUBSTITUTION_NAME)
|
7
|
+
|
8
|
+
if result
|
9
|
+
if RageFlip::Clipboard.copy(result)
|
10
|
+
else
|
11
|
+
puts "Failed to copy to clipboard, but here's your text substitution:"
|
12
|
+
end
|
13
|
+
puts result
|
14
|
+
else
|
15
|
+
puts "Unknown substitution: #{SUBSTITUTION_NAME}"
|
16
|
+
exit 1
|
17
|
+
end
|
data/exe/flip_text
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require_relative
|
3
|
+
require_relative "../lib/rage_flip"
|
4
4
|
|
5
|
-
text = ARGV.join(
|
5
|
+
text = ARGV.join(" ")
|
6
6
|
|
7
7
|
if text.empty?
|
8
8
|
puts "Usage: flip_text <text_to_flip>"
|
@@ -14,8 +14,7 @@ result = RageFlip::Flipper.flip_text(text)
|
|
14
14
|
|
15
15
|
# Copy to clipboard
|
16
16
|
if RageFlip::Clipboard.copy(result)
|
17
|
-
puts result
|
18
17
|
else
|
19
18
|
puts "Failed to copy to clipboard, but here's your flipped text:"
|
20
|
-
|
21
|
-
|
19
|
+
end
|
20
|
+
puts result
|
data/exe/rage_flip
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require_relative
|
3
|
+
require_relative "../lib/rage_flip"
|
4
4
|
|
5
5
|
# Get the arguments passed to the script
|
6
|
-
text = ARGV.join(
|
6
|
+
text = ARGV.join(" ")
|
7
7
|
|
8
8
|
if text.empty?
|
9
9
|
puts "Usage: rage_flip <text_to_flip>"
|
@@ -15,8 +15,7 @@ result = RageFlip::Flipper.rage_flip(text)
|
|
15
15
|
|
16
16
|
# Copy to clipboard
|
17
17
|
if RageFlip::Clipboard.copy(result)
|
18
|
-
puts result
|
19
18
|
else
|
20
19
|
puts "Failed to copy to clipboard, but here's your flipped text:"
|
21
|
-
|
22
|
-
|
20
|
+
end
|
21
|
+
puts result
|
data/exe/sarcasm
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require_relative
|
3
|
+
require_relative "../lib/rage_flip"
|
4
4
|
|
5
|
-
text = ARGV.join(
|
5
|
+
text = ARGV.join(" ")
|
6
6
|
|
7
7
|
if text.empty?
|
8
8
|
puts "Usage: sarcasm <text_to_sarcasm>"
|
@@ -12,8 +12,7 @@ end
|
|
12
12
|
result = RageFlip::Sarcasm.process(text)
|
13
13
|
|
14
14
|
if RageFlip::Clipboard.copy(result)
|
15
|
-
puts result
|
16
15
|
else
|
17
16
|
puts "Failed to copy to clipboard, but here's your sarcastic text:"
|
18
|
-
|
19
|
-
|
17
|
+
end
|
18
|
+
puts result
|
data/exe/strikethrough
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require_relative
|
3
|
+
require_relative "../lib/rage_flip"
|
4
4
|
|
5
|
-
text = ARGV.join(
|
5
|
+
text = ARGV.join(" ")
|
6
6
|
|
7
7
|
if text.empty?
|
8
8
|
puts "Usage: strikethrough <text_to_strikethrough>"
|
@@ -12,8 +12,7 @@ end
|
|
12
12
|
result = RageFlip::Strikethrough.process(text)
|
13
13
|
|
14
14
|
if RageFlip::Clipboard.copy(result)
|
15
|
-
puts result
|
16
15
|
else
|
17
16
|
puts "Failed to copy to clipboard, but here's your strikethrough text:"
|
18
|
-
|
19
|
-
|
17
|
+
end
|
18
|
+
puts result
|
data/exe/table_flip
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require_relative
|
3
|
+
require_relative "../lib/rage_flip"
|
4
4
|
|
5
|
-
text = ARGV.join(
|
5
|
+
text = ARGV.join(" ")
|
6
6
|
|
7
7
|
if text.empty?
|
8
8
|
puts "Usage: table_flip <text_to_flip>"
|
@@ -14,8 +14,7 @@ result = RageFlip::Flipper.table_flip(text)
|
|
14
14
|
|
15
15
|
# Copy to clipboard
|
16
16
|
if RageFlip::Clipboard.copy(result)
|
17
|
-
puts result
|
18
17
|
else
|
19
18
|
puts "Failed to copy to clipboard, but here's your table flipped text:"
|
20
|
-
|
21
|
-
|
19
|
+
end
|
20
|
+
puts result
|
data/exe/underline
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require_relative
|
3
|
+
require_relative "../lib/rage_flip"
|
4
4
|
|
5
|
-
text = ARGV.join(
|
5
|
+
text = ARGV.join(" ")
|
6
6
|
|
7
7
|
if text.empty?
|
8
8
|
puts "Usage: underline <text_to_underline>"
|
@@ -12,8 +12,7 @@ end
|
|
12
12
|
result = RageFlip::Underline.single_underline(text)
|
13
13
|
|
14
14
|
if RageFlip::Clipboard.copy(result)
|
15
|
-
puts result
|
16
15
|
else
|
17
16
|
puts "Failed to copy to clipboard, but here's your underlined text:"
|
18
|
-
|
19
|
-
|
17
|
+
end
|
18
|
+
puts result
|
data/lib/rage_flip/chaos.rb
CHANGED
@@ -2,25 +2,25 @@ module RageFlip
|
|
2
2
|
class Chaos
|
3
3
|
DEFAULT_CHAOS_LEVEL = 10
|
4
4
|
CHAOS_LEVEL_FILE = File.expand_path("~/.chaos_level.txt")
|
5
|
-
|
5
|
+
|
6
6
|
def self.process(text, chaos_level = nil)
|
7
7
|
chaos_level ||= read_chaos_level
|
8
|
-
|
8
|
+
|
9
9
|
text.each_char.map do |c|
|
10
10
|
combining_chars = rand(1..chaos_level).times.map do
|
11
11
|
"%c" % rand(0x300..0x36f)
|
12
12
|
end
|
13
13
|
[c, combining_chars]
|
14
|
-
end.
|
14
|
+
end.join
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
def self.set_chaos_level(instruction)
|
18
18
|
current_level = read_chaos_level
|
19
|
-
|
19
|
+
|
20
20
|
case instruction
|
21
|
-
when
|
21
|
+
when "more"
|
22
22
|
new_level = current_level + 1
|
23
|
-
when
|
23
|
+
when "less"
|
24
24
|
new_level = [current_level - 1, 1].max # Don't go below 1
|
25
25
|
else
|
26
26
|
new_level = instruction.to_i
|
@@ -28,26 +28,26 @@ module RageFlip
|
|
28
28
|
return "Error: Chaos level must be a positive number"
|
29
29
|
end
|
30
30
|
end
|
31
|
-
|
31
|
+
|
32
32
|
write_chaos_level(new_level)
|
33
33
|
"chaos level is now #{new_level}"
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
36
|
def self.read_chaos_level
|
37
37
|
if File.exist?(CHAOS_LEVEL_FILE)
|
38
38
|
level = File.read(CHAOS_LEVEL_FILE).strip.to_i
|
39
|
-
level > 0 ? level : DEFAULT_CHAOS_LEVEL
|
39
|
+
(level > 0) ? level : DEFAULT_CHAOS_LEVEL
|
40
40
|
else
|
41
41
|
DEFAULT_CHAOS_LEVEL
|
42
42
|
end
|
43
43
|
end
|
44
|
-
|
44
|
+
|
45
45
|
def self.write_chaos_level(level)
|
46
46
|
File.write(CHAOS_LEVEL_FILE, level.to_s)
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
def self.current_chaos_level
|
50
50
|
read_chaos_level
|
51
51
|
end
|
52
52
|
end
|
53
|
-
end
|
53
|
+
end
|
data/lib/rage_flip/clipboard.rb
CHANGED
data/lib/rage_flip/emote.rb
CHANGED
@@ -1,39 +1,69 @@
|
|
1
1
|
module RageFlip
|
2
2
|
class Emote
|
3
3
|
EMOTES = {
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
4
|
+
"disapproval" => "(ಠ_ಠ)",
|
5
|
+
"bullshit" => "🐄💩",
|
6
|
+
"catshit" => "🐱💩",
|
7
|
+
"dogshit" => "🐶💩",
|
8
|
+
"pandashit" => "🐼💩",
|
9
|
+
"horseshit" => "🐴💩",
|
10
|
+
"koalashit" => "🐨💩",
|
11
|
+
"batshit" => "🦇💩",
|
12
|
+
"bugeyes" => "(⊙_◎)",
|
13
|
+
"cmd-" => "⌘-",
|
14
|
+
"cmd" => "⌘",
|
15
|
+
"command" => "⌘",
|
16
|
+
"cntl" => "⌃",
|
17
|
+
"dogshrug" => '¯\_🐶_/¯',
|
18
|
+
"facepalm" => "(-‸ლ)",
|
19
|
+
"flip" => "(╯°□°)╯︵ ┻━┻",
|
20
|
+
"fu" => "t(-__-t)",
|
21
|
+
"heresatable" => "┬─┬ ノ( ゜-゜ノ)",
|
22
|
+
"javaflip" => "(╯°□°)╯︵ ┻ɐʌɐɾ┻",
|
23
|
+
"kungfuhamster" => " ()__()\n / o o\\ ;\n |'=Y=';-/\n { \\ / }\n mmm mmm ",
|
24
|
+
"noevil" => "🙈🙉🙊",
|
25
|
+
"omw" => "On my way!",
|
26
|
+
"optn" => "⌥",
|
27
|
+
"option" => "⌥",
|
28
|
+
"rage" => "ಠ益ಠ",
|
29
|
+
"rageflip" => "(ノಠ益ಠ)ノ彡┻━┻",
|
30
|
+
"rock" => '\m/ (>_<) \m/',
|
31
|
+
"shft" => "⇧",
|
32
|
+
"shift" => "⇧",
|
33
|
+
"shrug" => '¯\_(ツ)_/¯',
|
34
|
+
"shrugtable" => '┻━┻ ︵ ¯\(ツ)/¯ ︵ ┻━┻',
|
35
|
+
"unsee" => "♨_♨",
|
36
|
+
"yuno" => "ლ(ಠ益ಠლ)"
|
11
37
|
}.freeze
|
12
|
-
|
38
|
+
|
13
39
|
def self.process(emote_name)
|
14
40
|
emote_name = emote_name.downcase
|
15
|
-
|
41
|
+
|
16
42
|
if EMOTES.key?(emote_name)
|
17
43
|
EMOTES[emote_name]
|
18
|
-
else
|
19
|
-
nil
|
20
44
|
end
|
21
45
|
end
|
22
|
-
|
46
|
+
|
23
47
|
def self.list_emotes
|
24
48
|
output = ["Available emotes:"]
|
25
|
-
|
26
|
-
|
49
|
+
# Sort emotes by name for better organization
|
50
|
+
sorted_emotes = EMOTES.sort_by { |name, _| name }
|
51
|
+
|
52
|
+
# Calculate max name length for better alignment
|
53
|
+
max_name_length = sorted_emotes.map { |name, _| name.length }.max
|
54
|
+
|
55
|
+
sorted_emotes.each do |name, emote|
|
56
|
+
output << " #{name.ljust(max_name_length + 2)} - #{emote}"
|
27
57
|
end
|
28
58
|
output.join("\n")
|
29
59
|
end
|
30
|
-
|
60
|
+
|
31
61
|
def self.emote_exists?(name)
|
32
62
|
EMOTES.key?(name.downcase)
|
33
63
|
end
|
34
|
-
|
64
|
+
|
35
65
|
def self.emote_names
|
36
66
|
EMOTES.keys
|
37
67
|
end
|
38
68
|
end
|
39
|
-
end
|
69
|
+
end
|
data/lib/rage_flip/flipper.rb
CHANGED
@@ -1,44 +1,44 @@
|
|
1
1
|
module RageFlip
|
2
2
|
class Flipper
|
3
3
|
FORWARD = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890-=!@#$%^&*()_+ "
|
4
|
-
BACKSIDEDOWN = " +‾()
|
5
|
-
|
4
|
+
BACKSIDEDOWN = " +‾()*⅋^%$#{@¡}=-068𝘓95ߤ↋↊⇂zʎxʍʌnʇsɹbdouɯʅʞɾᴉɥƃⅎǝpɔqɐZ⅄XϺɅՈꓕSꓤꝹԀONꟽ⅂ꓘᒋIH⅁ᖵƎᗡϽꓭ∀"
|
5
|
+
|
6
6
|
def self.flip(word)
|
7
7
|
# Create the upside down map by reversing the backsidedown string
|
8
8
|
upsidedown = BACKSIDEDOWN.reverse
|
9
|
-
|
9
|
+
|
10
10
|
# Create mapping from forward to upsidedown characters
|
11
11
|
upsidedownmap = {}
|
12
12
|
FORWARD.each_char.with_index do |char, index|
|
13
13
|
upsidedownmap[char] = upsidedown[index] if upsidedown[index]
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
# Flip the word: reverse the string and map each character
|
17
17
|
flipped = ""
|
18
18
|
word.each_char do |char|
|
19
19
|
mapped_char = upsidedownmap[char] || char
|
20
20
|
flipped = mapped_char + flipped
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
flipped
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
def self.rage_flip(text)
|
27
27
|
rageflip_front = "(ノಠ益ಠ)ノ彡┻"
|
28
28
|
rageflip_back = "┻"
|
29
|
-
|
29
|
+
|
30
30
|
"#{rageflip_front}#{flip(text)}#{rageflip_back}"
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
def self.table_flip(text)
|
34
34
|
table_flip_front = "(╯°□°)╯︵ "
|
35
35
|
table_flip_back = " ┻━┻"
|
36
|
-
|
36
|
+
|
37
37
|
"#{table_flip_front}#{flip(text)}#{table_flip_back}"
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
def self.flip_text(text)
|
41
41
|
flip(text)
|
42
42
|
end
|
43
43
|
end
|
44
|
-
end
|
44
|
+
end
|
data/lib/rage_flip/sarcasm.rb
CHANGED
@@ -0,0 +1,61 @@
|
|
1
|
+
module RageFlip
|
2
|
+
class TextSubstitution
|
3
|
+
SUBSTITUTIONS = {
|
4
|
+
"bugeyes" => "(⊙_◎)",
|
5
|
+
"cmd-" => "⌘-",
|
6
|
+
"cmd" => "⌘",
|
7
|
+
"cntl" => "⌃",
|
8
|
+
"disapproval" => "ಠ_ಠ",
|
9
|
+
"dogshrug" => '¯\_🐶_/¯',
|
10
|
+
"duck-flip" => "(╯°□°)╯︵ ┻(duckflip)┻",
|
11
|
+
"facepalm" => "(-‸ლ)",
|
12
|
+
"flip" => "(╯°□°)╯︵ ┻━┻",
|
13
|
+
"fu" => "t(-__-t)",
|
14
|
+
"heresatable" => "┬─┬ ノ( ゜-゜ノ)",
|
15
|
+
"javaflip" => "(╯°□°)╯︵ ┻ɐʌɐɾ┻",
|
16
|
+
"kungfuhamster" => ' ()__()
|
17
|
+
/ o o\ ;
|
18
|
+
|\'=Y=\';-/
|
19
|
+
{ \ / }
|
20
|
+
mmm mmm ',
|
21
|
+
"noevil" => "🙈🙉🙊",
|
22
|
+
"omw" => "On my way!",
|
23
|
+
"optn" => "⌥",
|
24
|
+
"rage" => "ಠ益ಠ",
|
25
|
+
"rageflip" => "(ノಠ益ಠ)ノ彡┻━┻",
|
26
|
+
"rock" => '\m/ (>_<) \m/',
|
27
|
+
"shft" => "⇧",
|
28
|
+
"shift" => "⇧",
|
29
|
+
"shrug" => '¯\_(ツ)_/¯',
|
30
|
+
"shrugtable" => '┻━┻ ︵ ¯\(ツ)/¯ ︵ ┻━┻',
|
31
|
+
"unsee" => "♨_♨",
|
32
|
+
"yuno" => "ლ(ಠ益ಠლ)"
|
33
|
+
}.freeze
|
34
|
+
|
35
|
+
def self.process(substitution_name)
|
36
|
+
substitution_name = substitution_name.downcase
|
37
|
+
|
38
|
+
if SUBSTITUTIONS.key?(substitution_name)
|
39
|
+
SUBSTITUTIONS[substitution_name]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.list_substitutions
|
44
|
+
output = ["Available text substitutions:"]
|
45
|
+
SUBSTITUTIONS.each do |name, text|
|
46
|
+
# Truncate long substitutions for display
|
47
|
+
display_text = (text.length > 50) ? "#{text[0..47]}..." : text
|
48
|
+
output << " #{name.ljust(15)} - #{display_text}"
|
49
|
+
end
|
50
|
+
output.join("\n")
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.substitution_exists?(name)
|
54
|
+
SUBSTITUTIONS.key?(name.downcase)
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.substitution_names
|
58
|
+
SUBSTITUTIONS.keys
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
data/lib/rage_flip/underline.rb
CHANGED
@@ -2,18 +2,18 @@ module RageFlip
|
|
2
2
|
class Underline
|
3
3
|
UNDERLINE_CHAR = "\u0332"
|
4
4
|
DOUBLE_UNDERLINE_CHAR = "\u0333"
|
5
|
-
|
5
|
+
|
6
6
|
def self.process(text, double: false)
|
7
7
|
underline_char = double ? DOUBLE_UNDERLINE_CHAR : UNDERLINE_CHAR
|
8
|
-
text.each_char.map { |c| [c, underline_char] }.
|
8
|
+
text.each_char.map { |c| [c, underline_char] }.join
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
def self.single_underline(text)
|
12
12
|
process(text, double: false)
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
15
|
def self.double_underline(text)
|
16
16
|
process(text, double: true)
|
17
17
|
end
|
18
18
|
end
|
19
|
-
end
|
19
|
+
end
|
data/lib/rage_flip/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
module RageFlip
|
2
|
-
VERSION = "1.1
|
3
|
-
end
|
2
|
+
VERSION = "1.2.1"
|
3
|
+
end
|
data/lib/rage_flip.rb
CHANGED
@@ -6,8 +6,9 @@ require_relative "rage_flip/underline"
|
|
6
6
|
require_relative "rage_flip/chaos"
|
7
7
|
require_relative "rage_flip/clipboard"
|
8
8
|
require_relative "rage_flip/emote"
|
9
|
-
|
9
|
+
require_relative "rage_flip/text_substitution"
|
10
|
+
require "shellwords"
|
10
11
|
|
11
12
|
module RageFlip
|
12
13
|
class Error < StandardError; end
|
13
|
-
end
|
14
|
+
end
|
data/spec/rage_flip_spec.rb
CHANGED
@@ -1,70 +1,70 @@
|
|
1
|
-
require
|
1
|
+
require "spec_helper"
|
2
2
|
|
3
3
|
RSpec.describe RageFlip do
|
4
4
|
describe RageFlip::Flipper do
|
5
|
-
describe
|
6
|
-
it
|
7
|
-
result = RageFlip::Flipper.flip(
|
8
|
-
expect(result).to eq(
|
5
|
+
describe ".flip" do
|
6
|
+
it "flips text upside down" do
|
7
|
+
result = RageFlip::Flipper.flip("Hello")
|
8
|
+
expect(result).to eq("oʅʅǝH")
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
12
|
-
describe
|
13
|
-
it
|
14
|
-
result = RageFlip::Flipper.rage_flip(
|
15
|
-
expect(result).to include(
|
16
|
-
expect(result).to include(
|
12
|
+
describe ".rage_flip" do
|
13
|
+
it "adds rage emoticons to flipped text" do
|
14
|
+
result = RageFlip::Flipper.rage_flip("test")
|
15
|
+
expect(result).to include("(ノಠ益ಠ)ノ彡┻")
|
16
|
+
expect(result).to include("┻")
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
describe
|
21
|
-
it
|
22
|
-
result = RageFlip::Flipper.table_flip(
|
23
|
-
expect(result).to include(
|
24
|
-
expect(result).to include(
|
25
|
-
expect(result).to include(
|
20
|
+
describe ".table_flip" do
|
21
|
+
it "adds table flip emoticons to flipped text" do
|
22
|
+
result = RageFlip::Flipper.table_flip("test")
|
23
|
+
expect(result).to include("(╯°□°)╯︵")
|
24
|
+
expect(result).to include("┻━┻")
|
25
|
+
expect(result).to include("ʇsǝʇ") # flipped version of 'test'
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
-
describe
|
30
|
-
it
|
31
|
-
result = RageFlip::Flipper.flip_text(
|
32
|
-
expect(result).to eq(
|
33
|
-
expect(result).not_to include(
|
34
|
-
expect(result).not_to include(
|
29
|
+
describe ".flip_text" do
|
30
|
+
it "flips text without any emoticons" do
|
31
|
+
result = RageFlip::Flipper.flip_text("test")
|
32
|
+
expect(result).to eq("ʇsǝʇ")
|
33
|
+
expect(result).not_to include("(")
|
34
|
+
expect(result).not_to include("┻")
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
39
|
describe RageFlip::Sarcasm do
|
40
|
-
describe
|
41
|
-
it
|
42
|
-
result = RageFlip::Sarcasm.process(
|
43
|
-
expect(result).to eq(
|
40
|
+
describe ".process" do
|
41
|
+
it "alternates case of characters" do
|
42
|
+
result = RageFlip::Sarcasm.process("hello")
|
43
|
+
expect(result).to eq("HeLlO")
|
44
44
|
end
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
48
48
|
describe RageFlip::Strikethrough do
|
49
|
-
describe
|
50
|
-
it
|
51
|
-
result = RageFlip::Strikethrough.process(
|
49
|
+
describe ".process" do
|
50
|
+
it "adds strikethrough characters" do
|
51
|
+
result = RageFlip::Strikethrough.process("test")
|
52
52
|
expect(result).to include("\u0336")
|
53
53
|
end
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
57
57
|
describe RageFlip::Underline do
|
58
|
-
describe
|
59
|
-
it
|
60
|
-
result = RageFlip::Underline.single_underline(
|
58
|
+
describe ".single_underline" do
|
59
|
+
it "adds single underline characters" do
|
60
|
+
result = RageFlip::Underline.single_underline("test")
|
61
61
|
expect(result).to include("\u0332")
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
-
describe
|
66
|
-
it
|
67
|
-
result = RageFlip::Underline.double_underline(
|
65
|
+
describe ".double_underline" do
|
66
|
+
it "adds double underline characters" do
|
67
|
+
result = RageFlip::Underline.double_underline("test")
|
68
68
|
expect(result).to include("\u0333")
|
69
69
|
end
|
70
70
|
end
|
@@ -72,117 +72,117 @@ RSpec.describe RageFlip do
|
|
72
72
|
|
73
73
|
describe RageFlip::Chaos do
|
74
74
|
let(:chaos_file) { File.expand_path("~/.chaos_level.txt") }
|
75
|
-
|
75
|
+
|
76
76
|
before do
|
77
77
|
# Clean up chaos file before each test
|
78
78
|
File.delete(chaos_file) if File.exist?(chaos_file)
|
79
79
|
end
|
80
|
-
|
80
|
+
|
81
81
|
after do
|
82
82
|
# Clean up chaos file after each test
|
83
83
|
File.delete(chaos_file) if File.exist?(chaos_file)
|
84
84
|
end
|
85
85
|
|
86
|
-
describe
|
87
|
-
it
|
88
|
-
result = RageFlip::Chaos.process(
|
86
|
+
describe ".process" do
|
87
|
+
it "adds combining characters for chaos effect" do
|
88
|
+
result = RageFlip::Chaos.process("test", 5)
|
89
89
|
expect(result.length).to be > 4 # Should be longer than original
|
90
90
|
end
|
91
|
-
|
92
|
-
it
|
93
|
-
result = RageFlip::Chaos.process(
|
91
|
+
|
92
|
+
it "uses default chaos level when no file exists" do
|
93
|
+
result = RageFlip::Chaos.process("test")
|
94
94
|
expect(result.length).to be > 4 # Should be longer than original
|
95
95
|
end
|
96
96
|
end
|
97
97
|
|
98
|
-
describe
|
99
|
-
it
|
100
|
-
result = RageFlip::Chaos.set_chaos_level(
|
101
|
-
expect(File.read(chaos_file).strip).to eq(
|
102
|
-
expect(result).to eq(
|
98
|
+
describe ".set_chaos_level" do
|
99
|
+
it "sets chaos level to specific number" do
|
100
|
+
result = RageFlip::Chaos.set_chaos_level("15")
|
101
|
+
expect(File.read(chaos_file).strip).to eq("15")
|
102
|
+
expect(result).to eq("chaos level is now 15")
|
103
103
|
end
|
104
|
-
|
105
|
-
it
|
106
|
-
RageFlip::Chaos.set_chaos_level(
|
107
|
-
result = RageFlip::Chaos.set_chaos_level(
|
108
|
-
expect(File.read(chaos_file).strip).to eq(
|
109
|
-
expect(result).to eq(
|
104
|
+
|
105
|
+
it "increases chaos level with more" do
|
106
|
+
RageFlip::Chaos.set_chaos_level("10")
|
107
|
+
result = RageFlip::Chaos.set_chaos_level("more")
|
108
|
+
expect(File.read(chaos_file).strip).to eq("11")
|
109
|
+
expect(result).to eq("chaos level is now 11")
|
110
110
|
end
|
111
|
-
|
112
|
-
it
|
113
|
-
RageFlip::Chaos.set_chaos_level(
|
114
|
-
result = RageFlip::Chaos.set_chaos_level(
|
115
|
-
expect(File.read(chaos_file).strip).to eq(
|
116
|
-
expect(result).to eq(
|
111
|
+
|
112
|
+
it "decreases chaos level with less" do
|
113
|
+
RageFlip::Chaos.set_chaos_level("10")
|
114
|
+
result = RageFlip::Chaos.set_chaos_level("less")
|
115
|
+
expect(File.read(chaos_file).strip).to eq("9")
|
116
|
+
expect(result).to eq("chaos level is now 9")
|
117
117
|
end
|
118
|
-
|
119
|
-
it
|
120
|
-
RageFlip::Chaos.set_chaos_level(
|
121
|
-
result = RageFlip::Chaos.set_chaos_level(
|
122
|
-
expect(File.read(chaos_file).strip).to eq(
|
123
|
-
expect(result).to eq(
|
118
|
+
|
119
|
+
it "does not go below 1" do
|
120
|
+
RageFlip::Chaos.set_chaos_level("1")
|
121
|
+
result = RageFlip::Chaos.set_chaos_level("less")
|
122
|
+
expect(File.read(chaos_file).strip).to eq("1")
|
123
|
+
expect(result).to eq("chaos level is now 1")
|
124
124
|
end
|
125
125
|
end
|
126
126
|
|
127
|
-
describe
|
128
|
-
it
|
127
|
+
describe ".read_chaos_level" do
|
128
|
+
it "returns default when file does not exist" do
|
129
129
|
expect(RageFlip::Chaos.read_chaos_level).to eq(10)
|
130
130
|
end
|
131
|
-
|
132
|
-
it
|
133
|
-
File.write(chaos_file,
|
131
|
+
|
132
|
+
it "reads level from file when it exists" do
|
133
|
+
File.write(chaos_file, "25")
|
134
134
|
expect(RageFlip::Chaos.read_chaos_level).to eq(25)
|
135
135
|
end
|
136
136
|
end
|
137
137
|
end
|
138
138
|
|
139
139
|
describe RageFlip::Emote do
|
140
|
-
describe
|
141
|
-
it
|
142
|
-
result = RageFlip::Emote.process(
|
143
|
-
expect(result).to eq(
|
140
|
+
describe ".process" do
|
141
|
+
it "returns correct emote for disapproval" do
|
142
|
+
result = RageFlip::Emote.process("disapproval")
|
143
|
+
expect(result).to eq("(ಠ_ಠ)")
|
144
144
|
end
|
145
145
|
|
146
|
-
it
|
147
|
-
result = RageFlip::Emote.process(
|
148
|
-
expect(result).to eq(
|
146
|
+
it "returns correct emote for bullshit" do
|
147
|
+
result = RageFlip::Emote.process("bullshit")
|
148
|
+
expect(result).to eq("🐄💩")
|
149
149
|
end
|
150
150
|
|
151
|
-
it
|
152
|
-
result = RageFlip::Emote.process(
|
153
|
-
expect(result).to eq(
|
151
|
+
it "returns correct emote for dogshit" do
|
152
|
+
result = RageFlip::Emote.process("dogshit")
|
153
|
+
expect(result).to eq("🐶💩")
|
154
154
|
end
|
155
155
|
|
156
|
-
it
|
157
|
-
result = RageFlip::Emote.process(
|
158
|
-
expect(result).to eq(
|
156
|
+
it "handles case insensitive input" do
|
157
|
+
result = RageFlip::Emote.process("DISAPPROVAL")
|
158
|
+
expect(result).to eq("(ಠ_ಠ)")
|
159
159
|
end
|
160
160
|
|
161
|
-
it
|
162
|
-
result = RageFlip::Emote.process(
|
161
|
+
it "returns nil for unknown emote" do
|
162
|
+
result = RageFlip::Emote.process("unknown")
|
163
163
|
expect(result).to be_nil
|
164
164
|
end
|
165
165
|
end
|
166
166
|
|
167
|
-
describe
|
168
|
-
it
|
167
|
+
describe ".list_emotes" do
|
168
|
+
it "returns formatted list of all emotes" do
|
169
169
|
result = RageFlip::Emote.list_emotes
|
170
|
-
expect(result).to include(
|
171
|
-
expect(result).to include(
|
172
|
-
expect(result).to include(
|
173
|
-
expect(result).to include(
|
174
|
-
expect(result).to include(
|
170
|
+
expect(result).to include("Available emotes:")
|
171
|
+
expect(result).to include("disapproval")
|
172
|
+
expect(result).to include("(ಠ_ಠ)")
|
173
|
+
expect(result).to include("bullshit")
|
174
|
+
expect(result).to include("🐄💩")
|
175
175
|
end
|
176
176
|
end
|
177
177
|
|
178
|
-
describe
|
179
|
-
it
|
180
|
-
expect(RageFlip::Emote.emote_exists?(
|
178
|
+
describe ".emote_exists?" do
|
179
|
+
it "returns true for existing emote" do
|
180
|
+
expect(RageFlip::Emote.emote_exists?("disapproval")).to be true
|
181
181
|
end
|
182
182
|
|
183
|
-
it
|
184
|
-
expect(RageFlip::Emote.emote_exists?(
|
183
|
+
it "returns false for non-existing emote" do
|
184
|
+
expect(RageFlip::Emote.emote_exists?("nonexistent")).to be false
|
185
185
|
end
|
186
186
|
end
|
187
187
|
end
|
188
|
-
end
|
188
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
require_relative
|
1
|
+
require "rspec"
|
2
|
+
require_relative "../lib/rage_flip"
|
3
3
|
|
4
4
|
RSpec.configure do |config|
|
5
5
|
config.expect_with :rspec do |c|
|
@@ -13,4 +13,4 @@ RSpec.configure do |config|
|
|
13
13
|
config.disable_monkey_patching!
|
14
14
|
config.order = :random
|
15
15
|
Kernel.srand config.seed
|
16
|
-
end
|
16
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rage_flip
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas Powell
|
@@ -45,8 +45,10 @@ email:
|
|
45
45
|
executables:
|
46
46
|
- chaos
|
47
47
|
- chaos_level
|
48
|
+
- disapproval
|
48
49
|
- doubleunderline
|
49
50
|
- emote
|
51
|
+
- flip
|
50
52
|
- flip_text
|
51
53
|
- rage_flip
|
52
54
|
- sarcasm
|
@@ -58,6 +60,7 @@ extra_rdoc_files: []
|
|
58
60
|
files:
|
59
61
|
- CHANGELOG.md
|
60
62
|
- Gemfile
|
63
|
+
- LICENSE
|
61
64
|
- README.md
|
62
65
|
- Rakefile
|
63
66
|
- bin/console
|
@@ -65,8 +68,10 @@ files:
|
|
65
68
|
- bin/version
|
66
69
|
- exe/chaos
|
67
70
|
- exe/chaos_level
|
71
|
+
- exe/disapproval
|
68
72
|
- exe/doubleunderline
|
69
73
|
- exe/emote
|
74
|
+
- exe/flip
|
70
75
|
- exe/flip_text
|
71
76
|
- exe/rage_flip
|
72
77
|
- exe/sarcasm
|
@@ -80,6 +85,7 @@ files:
|
|
80
85
|
- lib/rage_flip/flipper.rb
|
81
86
|
- lib/rage_flip/sarcasm.rb
|
82
87
|
- lib/rage_flip/strikethrough.rb
|
88
|
+
- lib/rage_flip/text_substitution.rb
|
83
89
|
- lib/rage_flip/underline.rb
|
84
90
|
- lib/rage_flip/version.rb
|
85
91
|
- spec/rage_flip_spec.rb
|