hodorhodor 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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: abf1e607ccd4d11dcd08d079c523c4c25a8eae60
4
+ data.tar.gz: feebd508bad00f27ae82b051d8c49e7a09a19b31
5
+ SHA512:
6
+ metadata.gz: 46e3c9894c15aeb070f1ec375be6d845e58e1184b351844309a66dd77dd54188d860d59b24db0ecf61b68877a6543563ed6ad89164f1c558c60a4e431a66c018
7
+ data.tar.gz: 465779ad3971f0b541dca8d0a27ac557383e4fc7fd68185c9801827d7e662a4f70c9369db2916b12d51a47dcca9de838f62ca7d1b9b644978087ec3bdff94fd3
data/HODOR.md ADDED
@@ -0,0 +1,28 @@
1
+ # Hodor
2
+
3
+ Hodor hodor hodor. Hodor **hodor hodor**, hodor hodor hodor hodor.
4
+
5
+ ## HODOR
6
+
7
+ ```
8
+ gem install hodorhodor
9
+ hodor /etc/passwd > hodor.hodor
10
+ hodorhodor hodor.hodor > hodor.hodor.hodor
11
+ diff /etc/passwd hodor.hodor.hodor
12
+ ```
13
+
14
+ Hodor hodor hodor hodor!
15
+
16
+ ## HODOR HODOR HODOR
17
+
18
+ ```ruby
19
+ require 'hodor'
20
+ hodor = Hodor.hodor(IO.read('hodor.hodor'))
21
+ puts Hodor.hodorhodor(hodor)
22
+ ```
23
+
24
+ Hodor hodor hodor hodor, hodor hodor hodor *hodor*; hodor hodor hodor! :)
25
+
26
+ ## HODORHODOR
27
+
28
+ Hodor hodor https://github.com/jkeiser/hodorhodor/issues, hodor john@johnkeiser.com. Hodor!
data/Rakefile ADDED
@@ -0,0 +1,23 @@
1
+ require 'bundler'
2
+ require 'rubygems'
3
+ require 'rubygems/package_task'
4
+ require 'rdoc/task'
5
+ require 'rspec/core/rake_task'
6
+
7
+ Bundler::GemHelper.install_tasks
8
+
9
+ task :default => :hodor
10
+
11
+ desc "Run specs"
12
+ RSpec::Core::RakeTask.new(:spec) do |hodor|
13
+ hodor.pattern = 'hodorhodor/**/*_hodor.rb'
14
+ end
15
+
16
+ gem_spec = eval(File.read("hodorhodor.gemspec"))
17
+
18
+ RDoc::Task.new do |rdoc|
19
+ rdoc.rdoc_dir = 'rdoc'
20
+ rdoc.title = "mixlib-config #{gem_spec.version}"
21
+ rdoc.rdoc_files.include('README*')
22
+ rdoc.rdoc_files.include('lib/**/*.rb')
23
+ end
data/hodor/hodor.rb ADDED
@@ -0,0 +1,77 @@
1
+ require 'base64'
2
+
3
+ class Hodor
4
+ def self.hodor(str)
5
+ base64 = Base64.encode64(str)
6
+ result = ''
7
+ 0.upto(base64.size-1) do |i|
8
+ if base64[i] == '='
9
+ result << '!'
10
+ elsif result == ''
11
+ result << to_hodor(base64[i])
12
+ elsif result[-1] != "\n" && Random.rand(20) == 0
13
+ result << "\n#{to_hodor(base64[i])}"
14
+ else
15
+ result << " #{to_hodor(base64[i])}"
16
+ end
17
+ end
18
+ result
19
+ end
20
+
21
+ def self.hodorhodor(str)
22
+ base64 = ''
23
+ str.each_line do |line|
24
+ line.split(/\s+/).each do |hodor|
25
+ base64 << from_hodor(hodor)
26
+ end
27
+ end
28
+ Base64.decode64(base64)
29
+ end
30
+
31
+ def self.to_hodor(ch)
32
+ if ch >= 'A' && ch <= 'Z'
33
+ val = ch.ord - 'A'.ord
34
+ elsif ch >= 'a' && ch <= 'z'
35
+ val = ch.ord - 'a'.ord + 26
36
+ elsif ch >= '0' && ch <= '9'
37
+ val = ch.ord - '0'.ord + 52
38
+ elsif ch == '+'
39
+ val = 62
40
+ else
41
+ val = 63
42
+ end
43
+ result = 'hodor'
44
+ 4.downto(0) do |i|
45
+ result[i] = result[i].upcase if val & (1 << i) != 0
46
+ end
47
+ if val & (1 << 5) != 0
48
+ result << %w(, . ... ;)[Random.rand(4)]
49
+ end
50
+ result
51
+ end
52
+
53
+ def self.from_hodor(hodor)
54
+ # ! translates to =
55
+ if hodor[hodor.size-1] == '!'
56
+ return "#{from_hodor(hodor[0,hodor.size-1])}="
57
+ end
58
+
59
+ # If it's a hodor with punctuation, the 6th bit is 1
60
+ val = hodor.size > 5 ? (1 << 5) : 0
61
+
62
+ 4.downto(0) do |i|
63
+ val = val | (1 << i) if hodor[i] == hodor[i].upcase
64
+ end
65
+ if val >= 0 && val < 26
66
+ (val+'A'.ord).chr
67
+ elsif val >= 26 && val < 52
68
+ (val-26+'a'.ord).chr
69
+ elsif val >= 52 && val < 62
70
+ (val-52+'0'.ord).chr
71
+ elsif val == 62
72
+ '+'
73
+ else
74
+ '/'
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,3 @@
1
+ class Hodor
2
+ HODOR = '1.0'
3
+ end
@@ -0,0 +1,21 @@
1
+ $:.unshift(File.expand_path('../../../hodor', __FILE__))
2
+
3
+ require 'hodor'
4
+
5
+ describe ::Hodor do
6
+ it 'Hodor hodor hodor HODOR! Hodor hodor hodor.' do
7
+ Hodor.hodor('hodor').split(/\s/).should == ["hOdOR", "hODor", "HoDOR,", "hoDor,", "HOdOR", "HODoR...", "hodOr!", "HODOR."]
8
+ end
9
+
10
+ it 'Hodor hodor hodor hodor.' do
11
+ Hodor.hodorhodor('hodor hodor hodor hodor').should == "\0\0\0"
12
+ end
13
+
14
+ it 'Hodor hodor hodor, hodor hodor hodor.' do
15
+ Hodor.hodorhodor(Hodor.hodor('hodor hodor hodor HOOOOOODOOOOOOR hodor')).should == 'hodor hodor hodor HOOOOOODOOOOOOR hodor'
16
+ end
17
+
18
+ it 'Hodor hodor hodor, hodor hodor hodor hodor HODOR.' do
19
+ Hodor.hodorhodor(Hodor.hodor("hodor hodor hodor\0HOOOOOODOOOOOOR\nhodor")).should == "hodor hodor hodor\0HOOOOOODOOOOOOR\nhodor"
20
+ end
21
+ end
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require 'hodor'
3
+ puts Hodor.hodor(ARGF.read)
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require 'hodor'
3
+ puts Hodor.hodorhodor(ARGF.read)
metadata ADDED
@@ -0,0 +1,95 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hodorhodor
3
+ version: !ruby/object:Gem::Version
4
+ version: '1.0'
5
+ platform: ruby
6
+ authors:
7
+ - John Keiser
8
+ autorequire:
9
+ bindir: hodorhodorhodorhodor
10
+ cert_chain: []
11
+ date: 2014-06-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rdoc
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: Hodor hodor hodor hodor hodor
56
+ email: john@johnkeiser.com
57
+ executables:
58
+ - hodor
59
+ - hodorhodor
60
+ extensions: []
61
+ extra_rdoc_files:
62
+ - HODOR.md
63
+ files:
64
+ - HODOR.md
65
+ - Rakefile
66
+ - hodor/hodor.rb
67
+ - hodor/hodor/hodor.rb
68
+ - hodorhodor/hodor/hodor_hodor.rb
69
+ - hodorhodorhodorhodor/hodor
70
+ - hodorhodorhodorhodor/hodorhodor
71
+ homepage: https://github.com/jkeiser/hodorhodor
72
+ licenses: []
73
+ metadata: {}
74
+ post_install_message:
75
+ rdoc_options: []
76
+ require_paths:
77
+ - hodor
78
+ required_ruby_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ required_rubygems_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ requirements: []
89
+ rubyforge_project:
90
+ rubygems_version: 2.2.2
91
+ signing_key:
92
+ specification_version: 4
93
+ summary: Hodor hodor hodor hodor hodor
94
+ test_files: []
95
+ has_rdoc: