sixarm_ruby_ramp 4.2.3 → 4.2.4

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.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/Rakefile +3 -2
  4. data/lib/sixarm_ruby_ramp/array/join.rb +2 -0
  5. data/lib/sixarm_ruby_ramp/enumerable/each.rb +149 -0
  6. data/lib/sixarm_ruby_ramp/integer/rbit.rb +2 -0
  7. data/lib/sixarm_ruby_ramp/integer.rb +7 -4
  8. data/lib/sixarm_ruby_ramp/string.rb +1 -1
  9. data/lib/sixarm_ruby_ramp.rb +1 -1
  10. data/test/sixarm_ruby_ramp_test/array/join_test.rb +1 -1
  11. data/test/sixarm_ruby_ramp_test/array/shuffle_test.rb +1 -1
  12. data/test/sixarm_ruby_ramp_test/array_test.rb +2 -3
  13. data/test/sixarm_ruby_ramp_test/class_test.rb +2 -4
  14. data/test/sixarm_ruby_ramp_test/csv_test.rb +3 -5
  15. data/test/sixarm_ruby_ramp_test/date_test.rb +13 -15
  16. data/test/sixarm_ruby_ramp_test/enumerable/each_test.rb +337 -0
  17. data/test/sixarm_ruby_ramp_test/enumerable/map_test.rb +1 -1
  18. data/test/sixarm_ruby_ramp_test/enumerable/nitems_test.rb +1 -1
  19. data/test/sixarm_ruby_ramp_test/enumerable/select_test.rb +1 -1
  20. data/test/sixarm_ruby_ramp_test/enumerable_test.rb +2 -4
  21. data/test/sixarm_ruby_ramp_test/file_test.rb +4 -6
  22. data/test/sixarm_ruby_ramp_test/fixnum_test.rb +2 -4
  23. data/test/sixarm_ruby_ramp_test/hash_test.rb +2 -2
  24. data/test/sixarm_ruby_ramp_test/integer/rbit_test.rb +1 -1
  25. data/test/sixarm_ruby_ramp_test/integer_test.rb +4 -5
  26. data/test/sixarm_ruby_ramp_test/io_test.rb +2 -3
  27. data/test/sixarm_ruby_ramp_test/kernel_test.rb +5 -6
  28. data/test/sixarm_ruby_ramp_test/math_test.rb +2 -3
  29. data/test/sixarm_ruby_ramp_test/nil_test.rb +2 -3
  30. data/test/sixarm_ruby_ramp_test/numeric_test.rb +2 -2
  31. data/test/sixarm_ruby_ramp_test/object_test.rb +2 -3
  32. data/test/sixarm_ruby_ramp_test/pairable_test.rb +2 -2
  33. data/test/sixarm_ruby_ramp_test/process_test.rb +2 -2
  34. data/test/sixarm_ruby_ramp_test/string_test.rb +2 -27
  35. data/test/sixarm_ruby_ramp_test/symbol_test.rb +2 -16
  36. data/test/sixarm_ruby_ramp_test/time_test.rb +3 -4
  37. data/test/sixarm_ruby_ramp_test/yaml_test.rb +2 -6
  38. data/test/sixarm_ruby_ramp_test.rb +5 -33
  39. data.tar.gz.sig +0 -0
  40. metadata +85 -11
  41. metadata.gz.sig +0 -0
  42. data/.gemtest +0 -0
  43. data/CHANGES.md +0 -24
  44. data/CONTRIBUTING.md +0 -28
  45. data/LICENSE.md +0 -28
  46. data/README.md +0 -249
  47. data/VERSION +0 -1
  48. data/lib/sixarm_ruby_ramp/xml.rb +0 -0
  49. data/test/sixarm_ruby_ramp_test/xml_test.rb +0 -10
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e7a09b3f5a55209f6e750428efe99e0dd27b39d6
4
- data.tar.gz: 7ddd7f2b6fdd77aa42b18ee5cddc54789c521f36
3
+ metadata.gz: cd28e48ca54cace863d1df36f8db7bfdd6c617af
4
+ data.tar.gz: 5c2a913207a9b83f7da75c8910c5f44b876017a0
5
5
  SHA512:
6
- metadata.gz: d98a9cc2f187fa3ebc8e2cbe26b103746dd6b02590f907c526a044dd02c5273715654cc5f256e457abe29edc0024a49da0d758d83926c415d5ba37eb92340e4d
7
- data.tar.gz: 77a21d90aa018a1c21b6b7c3a3d29c561bd3c427cf267a64a9c6308e9fc6c238597ced3d59692d703f3036f84a648b06178808ffc0d0a1b7c279f168fa730c51
6
+ metadata.gz: 21a8671ccf5d9fe673d8f9da26a2370ec2f4d1c8d1720efaea5b167213b65088bf2b353d2566ea5dc387a3432b9262d90907f32c547183856fb0400e57548633
7
+ data.tar.gz: cdb4647686ddb9417adcffc32c96481033650b5d30a2668ae8609221ad9fbddbf2f27c7949e6e2b09517f91a75305e0c3fe3412c80d613b263a0a42849ad72f1
checksums.yaml.gz.sig CHANGED
Binary file
data/Rakefile CHANGED
@@ -3,8 +3,9 @@ require "rake"
3
3
  require "rake/testtask"
4
4
 
5
5
  Rake::TestTask.new(:test) do |t|
6
- t.libs << 'lib' << 'test'
7
- t.pattern = 'test/*.rb'
6
+ t.libs.push("lib", "test")
7
+ t.pattern = "test/**/*.rb"
8
8
  end
9
9
 
10
10
  task :default => [:test]
11
+ task :default => [:test]
@@ -1,3 +1,5 @@
1
+ # -*- coding: utf-8 -*-
2
+
1
3
  class Array
2
4
 
3
5
  # Alias join because we're going to override it
@@ -0,0 +1,149 @@
1
+ # -*- coding: utf-8 -*-
2
+ module Enumerable
3
+
4
+ # Get each element at a given index or indices.
5
+ #
6
+ # Example: use an index.
7
+ #
8
+ # ["a", "b", "c", "d", "e"].each_at(1)
9
+ # #=> "b"
10
+ #
11
+ # Example: use an index that is negative when size is known.
12
+ #
13
+ # ["a", "b", "c", "d", "e"].each_at(-1)
14
+ # => "e"
15
+ #
16
+ # Example: use a range.
17
+ #
18
+ # ["a", "b", "c", "d", "e"].each_at(1..3)
19
+ # => "b", "c", "d"
20
+ #
21
+ # Example: use a range that has negatives when size is known.
22
+ #
23
+ # ["a", "b", "c", "d", "e"].each_at(-3..-1)
24
+ # => "c", "d", "e"
25
+ #
26
+ # Example: use any object that responds to #each or #include?.
27
+ #
28
+ # ["a", "b", "c", "d", "e"].each_at([4, 2, -2])
29
+ # => "e", "c", "d"
30
+ #
31
+ def each_at(filter)
32
+ filter, optimize_for_whole_numbers = each_at_normalize_filter(filter)
33
+
34
+ # Handle variations.
35
+ #
36
+ # Can we call self#at?
37
+ #
38
+ # * Yes: look up a self element by index.
39
+ # * No: iterate on self, comparing the loop count to filter target.
40
+ #
41
+ # Can we call filter#each?
42
+ #
43
+ # * Yes: iterate on the filter elements.
44
+ # * No: iterate on self, comparing the loop count to filter#include?
45
+ #
46
+ # Can we optimize for whole numbers?
47
+ #
48
+ # * Yes: we know that all filter targets are whole numbers.
49
+ # * No: we must convert the filter target to an index size each time.
50
+ #
51
+ if self.respond_to?(:at) && filter.respond_to?(:each)
52
+ if optimize_for_whole_numbers
53
+ # each_at_strategy_with_self_at_and_filter_each_and_whole_numbers(filter)
54
+ filter.each{|i|
55
+ yield(at(i))
56
+ }
57
+ else
58
+ # each_at_strategy_with_self_at_and_filter_each(filter)
59
+ filter.each{|i|
60
+ yield(at(i >= 0 ? i : i + self.size))
61
+ }
62
+ end
63
+ elsif filter.respond_to?(:include?)
64
+ # each_at_strategy_with_count(filter)
65
+ i = 0
66
+ s = respond_to?(:size) ? size : nil
67
+ each{|e|
68
+ yield(e) if (filter.include?(i) || (size && filter.include(i - size)))
69
+ i += 1
70
+ }
71
+ else
72
+ raise ArgumentError
73
+ end
74
+ end
75
+
76
+ # Implement #each_at by using a strategy with no optimization.
77
+ #
78
+ # When #each_at tests that either self#at is unavailable or filter#each
79
+ # is unavailable, then #each_at calls this strategy.
80
+ #
81
+ # This strategy uses a loop counter and iteration on the self elements,
82
+ # and each iteration, test whether the counter is in the filter.
83
+ #
84
+ # This strategy is the slowest, and for the worst-case need.
85
+ # This strategy is rarely needed in the wild.
86
+ #
87
+ def each_at_strategy_with_optimization_off(filter)
88
+ i = 0
89
+ if respond_to?(:size)
90
+ each{|e|
91
+ yield(e) if (filter.include?(i) || (size && filter.include?(i - size)))
92
+ i += 1
93
+ }
94
+ else
95
+ each{|e|
96
+ yield(e) if (filter.include?(i))
97
+ i += 1
98
+ }
99
+ end
100
+ end
101
+
102
+ # Implement #each_at by using a strategy with some optimization.
103
+ #
104
+ # When #each_at tests that both self#at is available and filter#each
105
+ # is available, yet cannot test that all indexes are whole numbers,
106
+ # then #each_at calls this strategy.
107
+ #
108
+ def each_at_strategy_with_optimization_min(filter)
109
+ filter.each{|i|
110
+ yield(at(i >= 0 ? i : i + self.size))
111
+ }
112
+ end
113
+
114
+ # Implement #each_at by using a strategy with full optimization.
115
+ #
116
+ # When #each_at tests that both self#at is available and filter#each
117
+ # is available, and can test that all indexes are whole numbers,
118
+ # then #each_at calls this strategy.
119
+ #
120
+ def each_at_strategy_with_optimization_max(filter)
121
+ filter.each{|i|
122
+ yield(at(i))
123
+ }
124
+ end
125
+
126
+ # Normalize the filter to make it respond to #each and #include?.
127
+ #
128
+ # If we can guarantee the filter is all whole numbers,
129
+ # then subsequent method calls can optimize the index lookup,
130
+ # by looking for the whole numbers instead of negative numbers.
131
+ #
132
+ def each_at_normalize_filter(filter)
133
+ case filter
134
+ when Numeric
135
+ return [filter.to_i], filter >= 0
136
+ when Range
137
+ if filter.first < 0 || filter.last < 0
138
+ min = filter.first.to_i; min += size if min < 0
139
+ max = filter.last.to_i; max += size if max < 0
140
+ max -= 1 if filter.exclude_end?
141
+ filter = min..max
142
+ end
143
+ return filter, true
144
+ else
145
+ return filter, false
146
+ end
147
+ end
148
+
149
+ end
@@ -1,3 +1,5 @@
1
+ # -*- coding: utf-8 -*-
2
+
1
3
  class Integer
2
4
 
3
5
  # Reverse bit.
@@ -6,21 +6,24 @@ class Integer
6
6
 
7
7
  # Syntactic sugar to yield n times to a block.
8
8
  #
9
- # Comparison to Integer#times:
9
+ # ## Comparison to Integer#times
10
+ #
10
11
  # Integer#maps is similar to Integer#times except that the output from each
11
12
  # call to the block is captured in an array element and that array is
12
13
  # returned to the calling code.
13
14
  #
14
- # @return an array of any results
15
+ # @return an array of results
15
16
  #
16
17
  # @example Generate an array of three random numbers
17
18
  # 3.maps{rand}
18
19
  # => [0.0248131784304143, 0.814666170190905, 0.15812816258206]
19
20
  #
20
-
21
+ # @example Multiply the current index
22
+ # 3.maps{|i| i * 2}
23
+ # => [0, 2, 4]
24
+ #
21
25
  def maps
22
26
  return (0...self).map{|item| yield item}
23
27
  end
24
28
 
25
-
26
29
  end
@@ -221,7 +221,7 @@ class String
221
221
  # This method defaults to length = self.lorem_length.
222
222
 
223
223
  def self.lorem(length=self.lorem_length)
224
- ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'].choices(length).join
224
+ ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'].sample(length).join
225
225
  end
226
226
 
227
227
 
@@ -11,6 +11,7 @@ Please see README
11
11
  'csv',
12
12
  'date',
13
13
  'enumerable',
14
+ 'enumerable/each',
14
15
  'enumerable/map',
15
16
  'enumerable/nitems',
16
17
  'enumerable/select',
@@ -30,7 +31,6 @@ Please see README
30
31
  'string',
31
32
  'symbol',
32
33
  'time',
33
- 'xml',
34
34
  'yaml'
35
35
  ].map{|x|
36
36
  require File.dirname(__FILE__) + "/sixarm_ruby_ramp/#{x}.rb"
@@ -1,5 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
- require "minitest/autorun"
2
+ require "sixarm_ruby_ramp_test"
3
3
  require "sixarm_ruby_ramp/array/join"
4
4
 
5
5
  class ArrayJoinTest < Minitest::Test
@@ -1,5 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
- require "minitest/autorun"
2
+ require "sixarm_ruby_ramp_test"
3
3
  require "sixarm_ruby_ramp/array/shuffle"
4
4
 
5
5
  class ArrayTest < Minitest::Test
@@ -1,8 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
- require "minitest/autorun"
2
+ require "sixarm_ruby_ramp_test"
3
+ require "sixarm_ruby_ramp/array"
3
4
  require "csv"
4
- require "sixarm_ruby_ramp"
5
-
6
5
 
7
6
  class ArrayTest < Minitest::Test
8
7
 
@@ -1,11 +1,9 @@
1
1
  # -*- coding: utf-8 -*-
2
- require "minitest/autorun"
3
- require "sixarm_ruby_ramp"
4
-
2
+ require "sixarm_ruby_ramp_test"
3
+ require "sixarm_ruby_ramp/class"
5
4
 
6
5
  class ClassTest < Minitest::Test
7
6
 
8
-
9
7
  METHOD_REGEXP = /^[abc]\W*$/
10
8
  def test_publicize_methods
11
9
 
@@ -1,7 +1,6 @@
1
1
  # -*- coding: utf-8 -*-
2
- require "minitest/autorun"
3
- require "sixarm_ruby_ramp"
4
-
2
+ require "sixarm_ruby_ramp_test"
3
+ require "sixarm_ruby_ramp/csv"
5
4
 
6
5
  class CSVTest < Minitest::Test
7
6
 
@@ -42,6 +41,5 @@ class MockRequest
42
41
  def env
43
42
  @env
44
43
  end
45
-
44
+
46
45
  end
47
-
@@ -1,14 +1,13 @@
1
1
  # -*- coding: utf-8 -*-
2
- require "minitest/autorun"
3
- require "sixarm_ruby_ramp"
4
-
2
+ require "sixarm_ruby_ramp_test"
3
+ require "sixarm_ruby_ramp/date"
5
4
 
6
5
  class DateTest < Minitest::Test
7
6
 
8
7
 
9
8
  def test_weekday
10
9
  # Start on Monday, January 1, 2007
11
- assert( Date.new(2007,1,1).weekday?)
10
+ assert( Date.new(2007,1,1).weekday?)
12
11
  assert( Date.new(2007,1,2).weekday?)
13
12
  assert( Date.new(2007,1,3).weekday?)
14
13
  assert( Date.new(2007,1,4).weekday?)
@@ -21,14 +20,14 @@ class DateTest < Minitest::Test
21
20
 
22
21
  def test_weekend
23
22
  # Start on Monday, January 1, 2007
24
- assert(!Date.new(2007,1,1).weekend?)
25
- assert(!Date.new(2007,1,2).weekend?)
26
- assert(!Date.new(2007,1,3).weekend?)
27
- assert(!Date.new(2007,1,4).weekend?)
28
- assert(!Date.new(2007,1,5).weekend?)
29
- assert( Date.new(2007,1,6).weekend?)
30
- assert( Date.new(2007,1,7).weekend?)
31
- assert(!Date.new(2007,1,8).weekend?)
23
+ assert(!Date.new(2007,1,1).weekend?)
24
+ assert(!Date.new(2007,1,2).weekend?)
25
+ assert(!Date.new(2007,1,3).weekend?)
26
+ assert(!Date.new(2007,1,4).weekend?)
27
+ assert(!Date.new(2007,1,5).weekend?)
28
+ assert( Date.new(2007,1,6).weekend?)
29
+ assert( Date.new(2007,1,7).weekend?)
30
+ assert(!Date.new(2007,1,8).weekend?)
32
31
  end
33
32
 
34
33
 
@@ -43,8 +42,8 @@ class DateTest < Minitest::Test
43
42
 
44
43
 
45
44
  def test_between
46
- d1= Date.parse('2008-01-01')
47
- d2= Date.parse('2009-01-01')
45
+ d1= Date.parse('2008-01-01')
46
+ d2= Date.parse('2009-01-01')
48
47
  d3= Date.between(d1,d2)
49
48
  assert(d3>=d1)
50
49
  assert(d3<=d2)
@@ -57,4 +56,3 @@ class DateTest < Minitest::Test
57
56
 
58
57
 
59
58
  end
60
-