rubylabs 0.9.8 → 1.0.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: 4a37f158acc1a78c47cc98c2e28fdfdd039041aa
4
+ data.tar.gz: 5cacbad6cc3c4cbbf0a8c8b0055ccbd8b8240fab
5
+ SHA512:
6
+ metadata.gz: 16ebf839dd3bd5ebf8823265cf9b48b13a75798d69dcc127259dc2660da7330b529737026aaa3d6d8a504442d5527a2382388f48496a1186ffa0c92e4e35a1d7
7
+ data.tar.gz: 108bbb297f34f25519863f534f44ea880bfcad617318250a0949c6cfdca478e35ee28629e8487b9eb4d620fa87ddfd5dbc23714f6e14e3e9443030b8e57df128
data/Rakefile CHANGED
@@ -48,7 +48,7 @@ end
48
48
 
49
49
  task :default => :test
50
50
 
51
- require 'rake/rdoctask'
51
+ require 'rdoc/task'
52
52
  Rake::RDocTask.new do |rdoc|
53
53
  if File.exist?('VERSION.yml')
54
54
  config = YAML.load(File.read('VERSION.yml'))
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.9.8
1
+ 1.0.0
data/lib/bitlab.rb CHANGED
@@ -174,10 +174,8 @@ module BitLab
174
174
  m.array.each do |x|
175
175
  if x.even_parity?
176
176
  res << (x.value >> 1).chr
177
- elsif $KCODE[0] == ?U
178
- res << "\xe2\x80\xa2"
179
177
  else
180
- res << "?"
178
+ res << "\xe2\x80\xa2"
181
179
  end
182
180
  end
183
181
  else
@@ -1042,3 +1040,24 @@ characters in +String+ objects.
1042
1040
  end
1043
1041
 
1044
1042
  end
1043
+
1044
+ class String
1045
+
1046
+ =begin rdoc
1047
+
1048
+ == String
1049
+
1050
+ In Ruby 1.9 and above elements in strings are chars, not integers. This
1051
+ method adds a code method to the String class that returns a Code object
1052
+ for a single-letter string.
1053
+ =end
1054
+
1055
+ def code(*args)
1056
+ if self.length > 1
1057
+ raise "code: defined only for single characters or integers"
1058
+ else
1059
+ return self[0].ord.code(*args)
1060
+ end
1061
+ end
1062
+
1063
+ end
data/lib/hashlab.rb CHANGED
@@ -53,8 +53,8 @@ module HashLab
53
53
  # :begin :radix26
54
54
  def radix26(s)
55
55
  x = 0
56
- s.each_byte do |b|
57
- x = x * 26 + b.ord
56
+ s.each_char do |b|
57
+ x = x * 26 + b.iord
58
58
  end
59
59
  return x
60
60
  end
@@ -64,7 +64,7 @@ module HashLab
64
64
  # string to hash, +n+ is the size of the hash table.
65
65
  #
66
66
  # Example:
67
- # >> ?b.ord
67
+ # >> ?b.iord
68
68
  # => 1
69
69
  # >> h0("beer", 10)
70
70
  # => 1
@@ -72,7 +72,7 @@ module HashLab
72
72
  #--
73
73
  # :begin :h0
74
74
  def h0(s, n)
75
- return s[0].ord % n
75
+ return s[0].iord % n
76
76
  end
77
77
  # :end :h0
78
78
 
@@ -81,7 +81,7 @@ module HashLab
81
81
  # string to hash, +n+ is the size of the hash table.
82
82
  #
83
83
  # Example:
84
- # >> ?b.ord * 26 + ?e.ord
84
+ # >> ?b.iord * 26 + ?e.iord
85
85
  # => 30
86
86
  # >> h1("beer", 10)
87
87
  # => 0
@@ -89,7 +89,7 @@ module HashLab
89
89
  #--
90
90
  # :begin :h1
91
91
  def h1(s, n)
92
- return ((s[0].ord * 26) + s[1].ord) % n
92
+ return ((s[0].iord * 26) + s[1].iord) % n
93
93
  end
94
94
  # :end :h1
95
95
 
@@ -114,7 +114,7 @@ module HashLab
114
114
  # size +n+ (which has a default value of 10).
115
115
  #
116
116
  # Example:
117
- # >> ?z.ord
117
+ # >> ?z.iord
118
118
  # => 25
119
119
  # >> h("zymurgy")
120
120
  # => 5
@@ -124,7 +124,7 @@ module HashLab
124
124
  #--
125
125
  # :begin :h
126
126
  def h(s, n = 10)
127
- return s[0].ord % n
127
+ return s[0].iord % n
128
128
  end
129
129
  # :end :h
130
130
 
data/lib/randomlab.rb CHANGED
@@ -298,46 +298,34 @@ and its suit (:spades, :hearts, etc).
298
298
 
299
299
  @@outputform = :utf8
300
300
 
301
- # Make a string to display a Card objects on the terminal. Checks
302
- # Ruby's $KCODE global variable to see if the system is using UTF-8. If so, the code for a glyph that
303
- # shows a spade, heart, diamond, or club is inserted into the string, otherwise a letter is
304
- # used.
305
-
301
+ # Make a string to display a Card objects on the terminal.
302
+
306
303
  def inspect
307
304
  s = ""
308
305
  s << case @rank
309
- when :ace : "A"
310
- when :king : "K"
311
- when :queen : "Q"
312
- when :jack : "J"
313
- when :ten : "10"
314
- when :nine : "9"
315
- when :eight : "8"
316
- when :seven : "7"
317
- when :six : "6"
318
- when :five : "5"
319
- when :four : "4"
320
- when :three : "3"
321
- when :two : "2"
306
+ when :ace then "A"
307
+ when :king then "K"
308
+ when :queen then "Q"
309
+ when :jack then "J"
310
+ when :ten then "10"
311
+ when :nine then "9"
312
+ when :eight then "8"
313
+ when :seven then "7"
314
+ when :six then "6"
315
+ when :five then "5"
316
+ when :four then "4"
317
+ when :three then "3"
318
+ when :two then "2"
322
319
  end
323
- if $KCODE[0] == ?U
324
- if @@outputform == :utf8
325
- s << case @suit
326
- when :spades : "\xe2\x99\xa0"
327
- when :hearts : "\xe2\x99\xa5"
328
- when :clubs : "\xe2\x99\xa3"
329
- when :diamonds : "\xe2\x99\xa6"
330
- end
331
- else
332
- s << "!irb" + @suit.to_s.chop
333
- end
334
- else
320
+ if @@outputform == :utf8
335
321
  s << case @suit
336
- when :spades : "S"
337
- when :hearts : "H"
338
- when :clubs : "C"
339
- when :diamonds : "D"
322
+ when :spades then "\xe2\x99\xa0"
323
+ when :hearts then "\xe2\x99\xa5"
324
+ when :clubs then "\xe2\x99\xa3"
325
+ when :diamonds then "\xe2\x99\xa6"
340
326
  end
327
+ else
328
+ s << "!irb" + @suit.to_s.chop
341
329
  end
342
330
  return s
343
331
  end
data/lib/rubylabs.rb CHANGED
@@ -277,6 +277,13 @@ call <tt>a.random(:success)</tt> to get a value that is in the array +a+, or cal
277
277
 
278
278
  end
279
279
 
280
+ def sort
281
+ tmp = self.clone
282
+ tmp.sort!
283
+ return tmp
284
+ end
285
+
286
+
280
287
  # Return a value that is guaranteed to be in the array or not in the array,
281
288
  # depending on the value of +outcome+. Pass <tt>:success</tt> to get a random
282
289
  # value in the array, or pass <tt>:fail</tt> to get an item of the same type as the
@@ -1510,47 +1517,31 @@ they do for Array objects:
1510
1517
 
1511
1518
  end # RubyLabs
1512
1519
 
1513
- =begin rdoc
1514
-
1515
- == Fixnum
1516
-
1517
- When the RubyLabs module is loaded it defines a new method named +ord+ to the
1518
- Fixnum class. In Ruby 1.8, using the <tt>[]</tt> operator to access items in a String object
1519
- returns the ASCII value of a character. The +ord+ method defined here (and used by hash functions defined in hashlab.rb)
1520
- maps the ASCII value of a letter to a number between 0 and 25.
1520
+ class String
1521
1521
 
1522
- The BitLab module also extends Fixnum by defining a method named +code+ that returns a Code
1523
- object containing the binary or hexadecimal representation of an integer.
1524
- #--
1525
- NOTE: +ord+ is built in to Ruby 1.9, so this method will have to be renamed or reimplemented
1526
- when RubyLabs is ported to 1.9.
1527
- =end
1528
-
1529
- class Fixnum
1530
-
1531
- # If a number is the ASCII code for a letter from the Roman alphabet (upper or lower case,
1522
+ # If a character is a letter from the Roman alphabet (upper or lower case,
1532
1523
  # in the range 'A' to 'Z') map it to a number between 0 and 25, otherwise just return the
1533
- # value of the number.
1524
+ # ASCII code of the letter.
1534
1525
  #
1535
1526
  # Example:
1536
- # >> "Ducks!".each_byte { |x| puts x.ord }
1527
+ # >> "Ducks!".each_char { |x| puts x.iord }
1537
1528
  # 3
1538
1529
  # 20
1539
1530
  # 2
1540
1531
  # 10
1541
1532
  # 18
1542
1533
  # 33
1543
-
1544
- def ord
1545
- if self >= ?a && self <= ?z
1546
- self - ?a
1547
- elsif self >= ?A && self <= ?Z
1548
- self - ?A
1534
+
1535
+ def iord
1536
+ if self[0] >= ?a && self[0] <= ?z
1537
+ self[0].ord - ?a.ord
1538
+ elsif self[0] >= ?A && self[0] <= ?Z
1539
+ self[0].ord - ?A.ord
1549
1540
  else
1550
- self
1541
+ self[0].ord
1551
1542
  end
1552
1543
  end
1553
1544
 
1554
- end # Fixnum
1545
+ end # String
1555
1546
 
1556
1547
  include RubyLabs
data/lib/spherelab.rb CHANGED
@@ -406,8 +406,8 @@ to move in as smooth a circle as possible about a central point.
406
406
 
407
407
  def track(val)
408
408
  case val
409
- when :off : @tracking = :off
410
- when :on : @tracking = :track
409
+ when :off then @tracking = :off
410
+ when :on then @tracking = :track
411
411
  else
412
412
  puts "tracking is either :on or :off"
413
413
  return nil
data/lib/tsplab.rb CHANGED
@@ -1313,3 +1313,15 @@ module Enumerable
1313
1313
 
1314
1314
  end
1315
1315
 
1316
+ # Ruby 2.0: String doesn't mix in Enumerable...
1317
+
1318
+ class String
1319
+ def each_permutation
1320
+ if block_given?
1321
+ self.chars.each_permutation { |p| yield p.join('') }
1322
+ else
1323
+ return self.chars.each_permutation.map { |p| p.join('') }
1324
+ end
1325
+ end
1326
+ end
1327
+
data/test/hash_test.rb CHANGED
@@ -2,6 +2,7 @@ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
2
  require 'test_helper'
3
3
  require 'stringio'
4
4
 
5
+ include RubyLabs
5
6
  include HashLab
6
7
 
7
8
  class TestHash < Test::Unit::TestCase
@@ -107,15 +107,15 @@ class RubyLabsTest < Test::Unit::TestCase
107
107
  assert_raise(NoMethodError) { pq[0] = 100 }
108
108
  end
109
109
 
110
- # 'ord' method -- maps upper and lower case letters to 0..25, others return
111
- # self (i.e. ASCII code)
110
+ # 'iord' method -- maps upper and lower case letters to 0..25, others return
111
+ # ASCII code of char
112
112
 
113
113
  def test_09_ord
114
- assert_equal 0, ?A.ord
115
- assert_equal 25, ?Z.ord
116
- assert_equal 0, ?a.ord
117
- assert_equal 25, ?z.ord
118
- assert_equal ?:.ord, ?:
114
+ assert_equal 0, ?A.iord
115
+ assert_equal 25, ?Z.iord
116
+ assert_equal 0, ?a.iord
117
+ assert_equal 25, ?z.iord
118
+ assert_equal ?:.iord, ?:.ord
119
119
  end
120
120
 
121
121
  end
metadata CHANGED
@@ -1,46 +1,38 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: rubylabs
3
- version: !ruby/object:Gem::Version
4
- hash: 43
5
- prerelease:
6
- segments:
7
- - 0
8
- - 9
9
- - 8
10
- version: 0.9.8
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - conery
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2012-10-14 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
11
+ date: 2016-03-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
21
14
  name: rubygems-test
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
32
20
  type: :runtime
33
- version_requirements: *id001
34
- description: A set of modules for interactive experiments in an introductory computer science class.
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ description: A set of modules for interactive experiments in an introductory computer
28
+ science class.
35
29
  email: conery@cs.uoregon.edu
36
30
  executables: []
37
-
38
31
  extensions: []
39
-
40
- extra_rdoc_files:
32
+ extra_rdoc_files:
41
33
  - LICENSE
42
34
  - README.rdoc
43
- files:
35
+ files:
44
36
  - .gemtest
45
37
  - LICENSE
46
38
  - README.rdoc
@@ -86,7 +78,6 @@ files:
86
78
  - lib/bitlab.rb
87
79
  - lib/demos.rb
88
80
  - lib/elizalab.rb
89
- - lib/encryptionlab.rb
90
81
  - lib/hashlab.rb
91
82
  - lib/introlab.rb
92
83
  - lib/iterationlab.rb
@@ -101,7 +92,6 @@ files:
101
92
  - lib/tsplab.rb
102
93
  - test/bit_test.rb
103
94
  - test/eliza_test.rb
104
- - test/encryption_test.rb
105
95
  - test/hash_test.rb
106
96
  - test/iteration_test.rb
107
97
  - test/mars_test.rb
@@ -114,41 +104,30 @@ files:
114
104
  - test/tsp_test.rb
115
105
  homepage: http://github.com/conery/rubylabs
116
106
  licenses: []
117
-
107
+ metadata: {}
118
108
  post_install_message:
119
109
  rdoc_options: []
120
-
121
- require_paths:
110
+ require_paths:
122
111
  - lib
123
- required_ruby_version: !ruby/object:Gem::Requirement
124
- none: false
125
- requirements:
126
- - - ">="
127
- - !ruby/object:Gem::Version
128
- hash: 3
129
- segments:
130
- - 0
131
- version: "0"
132
- required_rubygems_version: !ruby/object:Gem::Requirement
133
- none: false
134
- requirements:
135
- - - ">="
136
- - !ruby/object:Gem::Version
137
- hash: 3
138
- segments:
139
- - 0
140
- version: "0"
112
+ required_ruby_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - '>='
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ required_rubygems_version: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - '>='
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
141
122
  requirements: []
142
-
143
123
  rubyforge_project: rubylabs
144
- rubygems_version: 1.8.24
124
+ rubygems_version: 2.4.6
145
125
  signing_key:
146
- specification_version: 3
126
+ specification_version: 4
147
127
  summary: Software and data for lab projects for Explorations in Computing.
148
- test_files:
128
+ test_files:
149
129
  - test/bit_test.rb
150
130
  - test/eliza_test.rb
151
- - test/encryption_test.rb
152
131
  - test/hash_test.rb
153
132
  - test/iteration_test.rb
154
133
  - test/mars_test.rb
data/lib/encryptionlab.rb DELETED
@@ -1,42 +0,0 @@
1
-
2
- =begin rdoc
3
-
4
- == Encryption Lab
5
-
6
- Ruby implementation of Caesar cypher and RSA encryption.
7
-
8
- =end
9
-
10
- module RubyLabs
11
-
12
- module EncryptionLab
13
-
14
- =begin rdoc
15
- Caesar cipher -- single letter substitution based on "rotating" each letter +n+ places.
16
- =end
17
-
18
- # :begin :caesar
19
- def caesar(s, n = 3)
20
- res = String.new
21
- s.each_byte do |byte|
22
- if byte >= ?a && byte <= ?z
23
- res << rot(byte, ?a, n)
24
- elsif byte >= ?A && byte <= ?Z
25
- res << rot(byte, ?A, n)
26
- else
27
- res << byte
28
- end
29
- end
30
- return res
31
- end
32
- # :end :caesar
33
-
34
- def rot(char, base, n)
35
- return ((char - base) + n) % 26 + base
36
- end
37
-
38
-
39
-
40
- end # EncryptionLab
41
-
42
- end # RubyLabs
@@ -1,23 +0,0 @@
1
- $LOAD_PATH.unshift(File.dirname(__FILE__))
2
- require 'test_helper'
3
-
4
- include EncryptionLab
5
-
6
- class TestEncryption < Test::Unit::TestCase
7
-
8
- def test_00_banner
9
- print "\nEncryptionLab"
10
- end
11
-
12
- # Caesar cypher
13
-
14
- def test_01_caesar
15
- assert_equal caesar("abcdefghijklmnopqrstuvwxyz"), "defghijklmnopqrstuvwxyzabc"
16
- assert_equal caesar("ABCDEFGHIJKLMNOPQRSTUVWXYZ"), "DEFGHIJKLMNOPQRSTUVWXYZABC"
17
- assert_equal caesar("abcdefghijklmnopqrstuvwxyz", 13), "nopqrstuvwxyzabcdefghijklm"
18
- assert_equal caesar("ABCDEFGHIJKLMNOPQRSTUVWXYZ", 13), "NOPQRSTUVWXYZABCDEFGHIJKLM"
19
- assert_equal caesar("Et tu, Brute?"), "Hw wx, Euxwh?"
20
- assert_equal caesar("Et tu, Brute?", 13), "Rg gh, Oehgr?"
21
- end
22
-
23
- end