rage_flip 1.0.1 → 1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 63cef068ded99a79213e516650f5c8af352e54d56b40fbac108655cf8534380b
4
- data.tar.gz: 276ecb0beecce2fdd08eeb99d42a41ced8eff9701a15ef060171ff8b416d617f
3
+ metadata.gz: 1511661bf220838be2dabc493a7ba1769a2780909ad33f285d21b0482c79038b
4
+ data.tar.gz: 61a701d70ad291b667144056763746f4c09ab7c70955b07d66e45c9df3390e87
5
5
  SHA512:
6
- metadata.gz: 58ad3abfe8d692cc13f3ab14131f58426f3a7e6463cab8d8442a217025ec16ddbe2eabe7e5e0f507a2f2ff02591c353318205200a2c499b121979e5846d9dcef
7
- data.tar.gz: bcb13ace487889aab8f435693ebd79f6d8aa23c35f91a33396520e32b7df36bb1df9ef4decd28ce00cc2383cf48de4e804bdb6261ca3640445a7955ee0f03b8b
6
+ metadata.gz: 65378ff0cd33a514d229c313366227dcb38051355bfc403ad47bac9b82811682adee897bba7ec84bfbaba7fba5e14f5551b3ba87b59fbf67b5b1175d8e612e08
7
+ data.tar.gz: 2dce9f11ceafea826aae4604fae2a71dd132d85e01648075bb061f157e48eb39d1e4b097fae9275af2559f224ec182407315b1ef3c6743bb8b2976d58c8a8611
data/CHANGELOG.md CHANGED
@@ -7,6 +7,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ### Added
11
+ - `flip_text` command for flipping text without any emoticons
12
+ - `emote` command system with disapproval and animal+poop combinations
13
+ - `emote disapproval` outputs `(ಠ_ಠ)`
14
+ - `emote bullshit`, `catshit`, `dogshit`, `pandashit`, `horseshit`, `batshit` commands
15
+ - `emote list` to display all available emotes
16
+ - `table_flip` command with classic `(╯°□°)╯︵` and `┻━┻` emoticons
17
+
18
+ ## [1.0.1] - 2025-10-04
19
+
20
+ ### Added
21
+ - Persistent chaos level storage in `~/.chaos_level.txt`
22
+ - `chaos_level show` command to display current chaos level
23
+ - Chaos level minimum enforcement (cannot go below 1)
24
+
25
+ ### Changed
26
+ - Chaos level now persists across terminal sessions and reboots
27
+ - Removed dependency on `CHAOS_LEVEL` environment variable
28
+
29
+ ## [1.0.0] - 2025-10-03
30
+
10
31
  ### Added
11
32
  - Version management and release automation
12
33
 
data/README.md CHANGED
@@ -41,6 +41,48 @@ The flip transformation:
41
41
  - Maps characters to their upside-down equivalents
42
42
  - Wraps the result with `(ノಠ益ಠ)ノ彡┻` and `┻`
43
43
 
44
+ ### table_flip
45
+
46
+ The classic table flip command flips text upside down with the iconic table flip emoticons:
47
+
48
+ ```bash
49
+ table_flip "Hello World"
50
+ # Output: (╯°□°)╯︵ plɹoM ollǝH ┻━┻
51
+ # Result is automatically copied to clipboard
52
+ ```
53
+
54
+ Uses the classic `(╯°□°)╯︵` and `┻━┻` emoticons for a more traditional table flip style.
55
+
56
+ ### flip_text
57
+
58
+ Flips text upside down without any emoticons:
59
+
60
+ ```bash
61
+ flip_text "Hello World"
62
+ # Output: plɹoM ollǝH
63
+ # Result is automatically copied to clipboard
64
+ ```
65
+
66
+ Just the pure flipped text without any rage or table flip decorations.
67
+
68
+ ### emote
69
+
70
+ The emote system provides various emoticons and emoji sequences:
71
+
72
+ ```bash
73
+ emote # List all available emotes
74
+ emote list # List all available emotes
75
+ emote disapproval # Output: (ಠ_ಠ)
76
+ emote bullshit # Output: 🐄💩
77
+ emote catshit # Output: �💩
78
+ emote dogshit # Output: �💩
79
+ emote pandashit # Output: 🐼💩
80
+ emote horseshit # Output: 🐴💩
81
+ emote batshit # Output: 🦇💩
82
+ ```
83
+
84
+ All emotes are accessed through the `emote` command followed by the emote name.
85
+
44
86
  ### sarcasm
45
87
 
46
88
  Alternates between uppercase and lowercase characters:
@@ -136,10 +178,18 @@ require 'rage_flip'
136
178
  RageFlip::Flipper.rage_flip("Hello World")
137
179
  # => "(ノಠ益ಠ)ノ彡┻plɹoM ollǝH┻"
138
180
 
181
+ # Flip text with classic table flip emoticons
182
+ RageFlip::Flipper.table_flip("Hello World")
183
+ # => "(╯°□°)╯︵ plɹoM ollǝH ┻━┻"
184
+
139
185
  # Just flip without emoticons
140
186
  RageFlip::Flipper.flip("Hello")
141
187
  # => "ollǝH"
142
188
 
189
+ # Flip text (same as flip)
190
+ RageFlip::Flipper.flip_text("Hello")
191
+ # => "ollǝH"
192
+
143
193
  # Sarcastic text
144
194
  RageFlip::Sarcasm.process("hello world")
145
195
  # => "HeLlO WoRlD"
@@ -159,6 +209,16 @@ RageFlip::Underline.double_underline("text")
159
209
  RageFlip::Chaos.process("text", 5)
160
210
  # => "t̸e̷x̸t̷"
161
211
 
212
+ # Emotes
213
+ RageFlip::Emote.process("disapproval")
214
+ # => "(ಠ_ಠ)"
215
+
216
+ RageFlip::Emote.process("bullshit")
217
+ # => "🐄💩"
218
+
219
+ RageFlip::Emote.list_emotes
220
+ # => "Available emotes:\n disapproval - (ಠ_ಠ)\n bullshit - 🐄💩\n..."
221
+
162
222
  # Copy to clipboard
163
223
  RageFlip::Clipboard.copy("text to copy")
164
224
  ```
data/exe/emote ADDED
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../lib/rage_flip'
4
+
5
+ if ARGV.length == 0
6
+ puts RageFlip::Emote.list_emotes
7
+ exit 0
8
+ end
9
+
10
+ emote_name = ARGV[0].downcase
11
+
12
+ if emote_name == 'list'
13
+ puts RageFlip::Emote.list_emotes
14
+ exit 0
15
+ end
16
+
17
+ result = RageFlip::Emote.process(emote_name)
18
+
19
+ if result
20
+ # Copy to clipboard
21
+ if RageFlip::Clipboard.copy(result)
22
+ puts result
23
+ else
24
+ puts "Failed to copy to clipboard, but here's your emote:"
25
+ puts result
26
+ end
27
+ else
28
+ puts "Unknown emote: #{emote_name}"
29
+ puts ""
30
+ puts RageFlip::Emote.list_emotes
31
+ exit 1
32
+ end
data/exe/flip_text ADDED
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../lib/rage_flip'
4
+
5
+ text = ARGV.join(' ')
6
+
7
+ if text.empty?
8
+ puts "Usage: flip_text <text_to_flip>"
9
+ exit 1
10
+ end
11
+
12
+ # Just flip the text without any emoticons
13
+ result = RageFlip::Flipper.flip_text(text)
14
+
15
+ # Copy to clipboard
16
+ if RageFlip::Clipboard.copy(result)
17
+ puts result
18
+ else
19
+ puts "Failed to copy to clipboard, but here's your flipped text:"
20
+ puts result
21
+ end
data/exe/table_flip ADDED
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require_relative '../lib/rage_flip'
4
+
5
+ text = ARGV.join(' ')
6
+
7
+ if text.empty?
8
+ puts "Usage: table_flip <text_to_flip>"
9
+ exit 1
10
+ end
11
+
12
+ # Create the table flip with classic table flip emoticons
13
+ result = RageFlip::Flipper.table_flip(text)
14
+
15
+ # Copy to clipboard
16
+ if RageFlip::Clipboard.copy(result)
17
+ puts result
18
+ else
19
+ puts "Failed to copy to clipboard, but here's your table flipped text:"
20
+ puts result
21
+ end
@@ -0,0 +1,39 @@
1
+ module RageFlip
2
+ class Emote
3
+ EMOTES = {
4
+ 'disapproval' => '(ಠ_ಠ)',
5
+ 'bullshit' => '🐄💩',
6
+ 'catshit' => '🐱💩',
7
+ 'dogshit' => '🐶💩',
8
+ 'pandashit' => '🐼💩',
9
+ 'horseshit' => '🐴💩',
10
+ 'batshit' => '🦇💩'
11
+ }.freeze
12
+
13
+ def self.process(emote_name)
14
+ emote_name = emote_name.downcase
15
+
16
+ if EMOTES.key?(emote_name)
17
+ EMOTES[emote_name]
18
+ else
19
+ nil
20
+ end
21
+ end
22
+
23
+ def self.list_emotes
24
+ output = ["Available emotes:"]
25
+ EMOTES.each do |name, emote|
26
+ output << " #{name.ljust(12)} - #{emote}"
27
+ end
28
+ output.join("\n")
29
+ end
30
+
31
+ def self.emote_exists?(name)
32
+ EMOTES.key?(name.downcase)
33
+ end
34
+
35
+ def self.emote_names
36
+ EMOTES.keys
37
+ end
38
+ end
39
+ end
@@ -29,5 +29,16 @@ module RageFlip
29
29
 
30
30
  "#{rageflip_front}#{flip(text)}#{rageflip_back}"
31
31
  end
32
+
33
+ def self.table_flip(text)
34
+ table_flip_front = "(╯°□°)╯︵ "
35
+ table_flip_back = " ┻━┻"
36
+
37
+ "#{table_flip_front}#{flip(text)}#{table_flip_back}"
38
+ end
39
+
40
+ def self.flip_text(text)
41
+ flip(text)
42
+ end
32
43
  end
33
44
  end
@@ -1,3 +1,3 @@
1
1
  module RageFlip
2
- VERSION = "1.0.1"
2
+ VERSION = "1.1.0"
3
3
  end
data/lib/rage_flip.rb CHANGED
@@ -5,6 +5,7 @@ require_relative "rage_flip/strikethrough"
5
5
  require_relative "rage_flip/underline"
6
6
  require_relative "rage_flip/chaos"
7
7
  require_relative "rage_flip/clipboard"
8
+ require_relative "rage_flip/emote"
8
9
  require 'shellwords'
9
10
 
10
11
  module RageFlip
@@ -16,6 +16,24 @@ RSpec.describe RageFlip do
16
16
  expect(result).to include('┻')
17
17
  end
18
18
  end
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'
26
+ end
27
+ end
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('┻')
35
+ end
36
+ end
19
37
  end
20
38
 
21
39
  describe RageFlip::Sarcasm do
@@ -117,4 +135,54 @@ RSpec.describe RageFlip do
117
135
  end
118
136
  end
119
137
  end
138
+
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('(ಠ_ಠ)')
144
+ end
145
+
146
+ it 'returns correct emote for bullshit' do
147
+ result = RageFlip::Emote.process('bullshit')
148
+ expect(result).to eq('🐄💩')
149
+ end
150
+
151
+ it 'returns correct emote for dogshit' do
152
+ result = RageFlip::Emote.process('dogshit')
153
+ expect(result).to eq('🐶💩')
154
+ end
155
+
156
+ it 'handles case insensitive input' do
157
+ result = RageFlip::Emote.process('DISAPPROVAL')
158
+ expect(result).to eq('(ಠ_ಠ)')
159
+ end
160
+
161
+ it 'returns nil for unknown emote' do
162
+ result = RageFlip::Emote.process('unknown')
163
+ expect(result).to be_nil
164
+ end
165
+ end
166
+
167
+ describe '.list_emotes' do
168
+ it 'returns formatted list of all emotes' do
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('🐄💩')
175
+ end
176
+ end
177
+
178
+ describe '.emote_exists?' do
179
+ it 'returns true for existing emote' do
180
+ expect(RageFlip::Emote.emote_exists?('disapproval')).to be true
181
+ end
182
+
183
+ it 'returns false for non-existing emote' do
184
+ expect(RageFlip::Emote.emote_exists?('nonexistent')).to be false
185
+ end
186
+ end
187
+ end
120
188
  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.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Powell
@@ -46,9 +46,12 @@ executables:
46
46
  - chaos
47
47
  - chaos_level
48
48
  - doubleunderline
49
+ - emote
50
+ - flip_text
49
51
  - rage_flip
50
52
  - sarcasm
51
53
  - strikethrough
54
+ - table_flip
52
55
  - underline
53
56
  extensions: []
54
57
  extra_rdoc_files: []
@@ -63,13 +66,17 @@ files:
63
66
  - exe/chaos
64
67
  - exe/chaos_level
65
68
  - exe/doubleunderline
69
+ - exe/emote
70
+ - exe/flip_text
66
71
  - exe/rage_flip
67
72
  - exe/sarcasm
68
73
  - exe/strikethrough
74
+ - exe/table_flip
69
75
  - exe/underline
70
76
  - lib/rage_flip.rb
71
77
  - lib/rage_flip/chaos.rb
72
78
  - lib/rage_flip/clipboard.rb
79
+ - lib/rage_flip/emote.rb
73
80
  - lib/rage_flip/flipper.rb
74
81
  - lib/rage_flip/sarcasm.rb
75
82
  - lib/rage_flip/strikethrough.rb