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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1511661bf220838be2dabc493a7ba1769a2780909ad33f285d21b0482c79038b
4
- data.tar.gz: 61a701d70ad291b667144056763746f4c09ab7c70955b07d66e45c9df3390e87
3
+ metadata.gz: fa9cda34297e4bfd6fd10db91ca8b3335f95bd627efa60de584885b50d981ba5
4
+ data.tar.gz: a21987321b127f04a7cf9799d91f87b4892a22579b6c6ee12624e34545360ca6
5
5
  SHA512:
6
- metadata.gz: 65378ff0cd33a514d229c313366227dcb38051355bfc403ad47bac9b82811682adee897bba7ec84bfbaba7fba5e14f5551b3ba87b59fbf67b5b1175d8e612e08
7
- data.tar.gz: 2dce9f11ceafea826aae4604fae2a71dd132d85e01648075bb061f157e48eb39d1e4b097fae9275af2559f224ec182407315b1ef3c6743bb8b2976d58c8a8611
6
+ metadata.gz: 1e2df21e6f7d91375a6d1e44bf02a2b9431d77054e079623c6d3abb83a5d2fd3de7ada309b18285846157a5416da1876fd8f38e22e27348aeee5481822a5d4a7
7
+ data.tar.gz: 66215a4590a50a2f70000c9f3314813968e19b151bb912e2cf51cb0cdf909816b21cea27d146a14b2632c72ee39649eda0376511d53bea8f4b9360319ccaeb5b
data/Gemfile CHANGED
@@ -5,4 +5,5 @@ gemspec
5
5
  group :development, :test do
6
6
  gem "rspec"
7
7
  gem "rake"
8
- end
8
+ gem "standard"
9
+ end
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 includes several other text formatting tools.
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 various emoticons and emoji sequences:
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
- All emotes are accessed through the `emote` command followed by the emote name.
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 disapproval - (_)\n bullshit - 🐄💩\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 'rake'
2
- require 'rake/testtask'
3
- require 'rspec/core/rake_task'
4
- require_relative 'lib/rage_flip/version'
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 :default => :test
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 = 'spec/**/*_spec.rb'
11
+ t.pattern = "spec/**/*_spec.rb"
12
12
  end
13
13
 
14
14
  # Alias for backwards compatibility
15
- task :spec => :test
15
+ task spec: :test
16
16
 
17
17
  # Define a task for building the gem
18
18
  task :build do
19
- sh 'gem build rage_flip.gemspec'
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 'gem install rage_flip-*.gem'
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['*.gem']
29
+ rm_rf Dir["*.gem"]
30
30
  end
31
31
 
32
32
  # Define a task for running all tasks
33
- task :all => [:build, :install, :test]
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('.').map(&:to_i)
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 = 'lib/rage_flip/version.rb'
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 = 'lib/rage_flip/version.rb'
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 '../lib/rage_flip'
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
- puts result
19
- end
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 '../lib/rage_flip'
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 == 'show'
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 '../lib/rage_flip'
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
- puts result
19
- end
17
+ end
18
+ puts result
data/exe/emote CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require_relative '../lib/rage_flip'
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 == 'list'
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 '../lib/rage_flip'
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
- puts result
21
- end
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 '../lib/rage_flip'
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
- puts result
22
- end
20
+ end
21
+ puts result
data/exe/sarcasm CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require_relative '../lib/rage_flip'
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
- puts result
19
- end
17
+ end
18
+ puts result
data/exe/strikethrough CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require_relative '../lib/rage_flip'
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
- puts result
19
- end
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 '../lib/rage_flip'
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
- puts result
21
- end
19
+ end
20
+ puts result
data/exe/underline CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require_relative '../lib/rage_flip'
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
- puts result
19
- end
17
+ end
18
+ puts result
@@ -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.flatten.join
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 'more'
21
+ when "more"
22
22
  new_level = current_level + 1
23
- when 'less'
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
@@ -22,4 +22,4 @@ module RageFlip
22
22
  true
23
23
  end
24
24
  end
25
- end
25
+ end
@@ -1,39 +1,69 @@
1
1
  module RageFlip
2
2
  class Emote
3
3
  EMOTES = {
4
- 'disapproval' => '(ಠ_ಠ)',
5
- 'bullshit' => '🐄💩',
6
- 'catshit' => '🐱💩',
7
- 'dogshit' => '🐶💩',
8
- 'pandashit' => '🐼💩',
9
- 'horseshit' => '🐴💩',
10
- 'batshit' => '🦇💩'
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
- EMOTES.each do |name, emote|
26
- output << " #{name.ljust(12)} - #{emote}"
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
@@ -1,44 +1,44 @@
1
1
  module RageFlip
2
2
  class Flipper
3
3
  FORWARD = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890-=!@#$%^&*()_+ "
4
- BACKSIDEDOWN = " +‾()*⅋^%$#@¡=-068𝘓95ߤ↋↊⇂zʎxʍʌnʇsɹbdouɯʅʞɾᴉɥƃⅎǝpɔqɐZ⅄XϺɅՈꓕSꓤꝹԀONꟽ⅂ꓘᒋIH⅁ᖵƎᗡϽꓭ∀"
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
@@ -5,4 +5,4 @@ module RageFlip
5
5
  text.each_char.map { |c| c.send(cycle_enum.next) }.join
6
6
  end
7
7
  end
8
- end
8
+ end
@@ -1,9 +1,9 @@
1
1
  module RageFlip
2
2
  class Strikethrough
3
3
  STRIKETHROUGH_CHAR = "\u0336"
4
-
4
+
5
5
  def self.process(text)
6
- text.each_char.map { |c| [c, STRIKETHROUGH_CHAR] }.flatten.join
6
+ text.each_char.map { |c| [c, STRIKETHROUGH_CHAR] }.join
7
7
  end
8
8
  end
9
- end
9
+ end
@@ -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
@@ -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] }.flatten.join
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
@@ -1,3 +1,3 @@
1
1
  module RageFlip
2
- VERSION = "1.1.0"
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
- require 'shellwords'
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
@@ -1,70 +1,70 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
3
  RSpec.describe RageFlip do
4
4
  describe RageFlip::Flipper do
5
- describe '.flip' do
6
- it 'flips text upside down' do
7
- result = RageFlip::Flipper.flip('Hello')
8
- expect(result).to eq('oʅʅǝH')
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 '.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('')
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 '.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'
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 '.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('')
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 '.process' do
41
- it 'alternates case of characters' do
42
- result = RageFlip::Sarcasm.process('hello')
43
- expect(result).to eq('HeLlO')
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 '.process' do
50
- it 'adds strikethrough characters' do
51
- result = RageFlip::Strikethrough.process('test')
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 '.single_underline' do
59
- it 'adds single underline characters' do
60
- result = RageFlip::Underline.single_underline('test')
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 '.double_underline' do
66
- it 'adds double underline characters' do
67
- result = RageFlip::Underline.double_underline('test')
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 '.process' do
87
- it 'adds combining characters for chaos effect' do
88
- result = RageFlip::Chaos.process('test', 5)
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 'uses default chaos level when no file exists' do
93
- result = RageFlip::Chaos.process('test')
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 '.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')
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 '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')
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 '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')
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 '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')
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 '.read_chaos_level' do
128
- it 'returns default when file does not exist' do
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 'reads level from file when it exists' do
133
- File.write(chaos_file, '25')
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 '.process' do
141
- it 'returns correct emote for disapproval' do
142
- result = RageFlip::Emote.process('disapproval')
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 'returns correct emote for bullshit' do
147
- result = RageFlip::Emote.process('bullshit')
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 'returns correct emote for dogshit' do
152
- result = RageFlip::Emote.process('dogshit')
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 'handles case insensitive input' do
157
- result = RageFlip::Emote.process('DISAPPROVAL')
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 'returns nil for unknown emote' do
162
- result = RageFlip::Emote.process('unknown')
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 '.list_emotes' do
168
- it 'returns formatted list of all emotes' do
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('Available emotes:')
171
- expect(result).to include('disapproval')
172
- expect(result).to include('(ಠ_ಠ)')
173
- expect(result).to include('bullshit')
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 '.emote_exists?' do
179
- it 'returns true for existing emote' do
180
- expect(RageFlip::Emote.emote_exists?('disapproval')).to be true
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 'returns false for non-existing emote' do
184
- expect(RageFlip::Emote.emote_exists?('nonexistent')).to be false
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 'rspec'
2
- require_relative '../lib/rage_flip'
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.0
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