hodorhodor 1.0

Sign up to get free protection for your applications and to get access to all the features.
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: