ruby-fizzbuzz 0.7.0 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- checksums.yaml.gz.sig +5 -0
- data.tar.gz.sig +0 -0
- data/AUTHORS +1 -1
- data/CHANGELOG.md +175 -0
- data/COPYRIGHT +1 -1
- data/README.md +46 -0
- data/VERSION +1 -1
- data/bin/fizzbuzz +33 -61
- data/ext/fizzbuzz/common.h +39 -29
- data/ext/fizzbuzz/extconf.rb +24 -43
- data/ext/fizzbuzz/fizzbuzz.c +100 -117
- data/ext/fizzbuzz/fizzbuzz.h +60 -118
- data/kwilczynski-public.pem +25 -0
- data/lib/fizzbuzz.rb +106 -40
- data/lib/fizzbuzz/core/array.rb +9 -36
- data/lib/fizzbuzz/core/bignum.rb +9 -38
- data/lib/fizzbuzz/core/integer.rb +9 -38
- data/lib/fizzbuzz/core/range.rb +2 -31
- data/lib/fizzbuzz/version.rb +2 -29
- metadata +51 -24
- metadata.gz.sig +0 -0
- data/CHANGES +0 -84
- data/CHANGES.rdoc +0 -84
- data/README +0 -5
- data/README.rdoc +0 -12
- data/Rakefile +0 -97
- data/TODO +0 -16
- data/benchmark/benchmark_fizzbuzz.rb +0 -107
- data/ruby-fizzbuzz.gemspec +0 -65
- data/test/test_fizzbuzz.rb +0 -639
data/ext/fizzbuzz/fizzbuzz.h
CHANGED
@@ -1,23 +1,3 @@
|
|
1
|
-
/* :enddoc: */
|
2
|
-
|
3
|
-
/*
|
4
|
-
* fizzbuzz.h
|
5
|
-
*
|
6
|
-
* Copyright 2012-2014 Krzysztof Wilczynski
|
7
|
-
*
|
8
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
9
|
-
* you may not use this file except in compliance with the License.
|
10
|
-
* You may obtain a copy of the License at
|
11
|
-
*
|
12
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
13
|
-
*
|
14
|
-
* Unless required by applicable law or agreed to in writing, software
|
15
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
16
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
17
|
-
* See the License for the specific language governing permissions and
|
18
|
-
* limitations under the License.
|
19
|
-
*/
|
20
|
-
|
21
1
|
#if !defined(_FIZZBUZZ_H)
|
22
2
|
#define _FIZZBUZZ_H 1
|
23
3
|
|
@@ -36,14 +16,15 @@ extern "C" {
|
|
36
16
|
#define MINUS(a, b) fizzbuzz_minus((a), (b))
|
37
17
|
#define MOD(a, b) fizzbuzz_modulo((a), (b))
|
38
18
|
|
39
|
-
#define GREATER(a, b)
|
19
|
+
#define GREATER(a, b) fizzbuzz_greater((a), (b))
|
40
20
|
#define GREATER_EQUAL(a, b) fizzbuzz_greater_equal((a), (b))
|
41
21
|
#define LESS_EQUAL(a, b) fizzbuzz_less_equal((a), (b))
|
42
22
|
|
43
|
-
#define INTEGER_P(x)
|
23
|
+
#define INTEGER_P(x) \
|
24
|
+
(RB_TYPE_P((x), T_FIXNUM) || RB_TYPE_P((x), T_BIGNUM))
|
44
25
|
|
45
26
|
#define ZERO_P(x) \
|
46
|
-
|
27
|
+
(FIXNUM_P(x) ? (NUM2TYPE(x) == 0) : fizzbuzz_equal((x), ZERO))
|
47
28
|
|
48
29
|
#define INCREASE(x) PLUS((x), ONE)
|
49
30
|
#define DECREASE(x) MINUS((x), ONE)
|
@@ -51,11 +32,11 @@ extern "C" {
|
|
51
32
|
#define COMPUTE_MOD_3(x) ZERO_P(MOD((x), THREE))
|
52
33
|
#define COMPUTE_MOD_5(x) ZERO_P(MOD((x), FIVE))
|
53
34
|
|
54
|
-
#define SCORE_FIXNUM(x) (
|
55
|
-
#define SCORE_BIGNUM(x) (
|
35
|
+
#define SCORE_FIXNUM(x) (int)(!((x) % 3) + 2 * !((x) % 5))
|
36
|
+
#define SCORE_BIGNUM(x) (int)(COMPUTE_MOD_3(x) + 2 * COMPUTE_MOD_5(x))
|
56
37
|
|
57
38
|
#define SCORE_VALUE(x) \
|
58
|
-
|
39
|
+
(FIXNUM_P(x) ? SCORE_FIXNUM(NUM2TYPE(x)) : SCORE_BIGNUM(x))
|
59
40
|
|
60
41
|
#define IS_FIZZ(x) (!ZERO_P(x) && (SCORE_VALUE(x) == 1))
|
61
42
|
#define IS_BUZZ(x) (!ZERO_P(x) && (SCORE_VALUE(x) == 2))
|
@@ -66,157 +47,120 @@ extern "C" {
|
|
66
47
|
#define LOOP_FORWARD(x) ((x) == D_LOOP_FORWARD)
|
67
48
|
#define LOOP_REVERSE(x) ((x) == D_LOOP_REVERSE)
|
68
49
|
|
69
|
-
#define CHECK_TYPE(x, m)
|
70
|
-
do {
|
71
|
-
|
72
|
-
|
73
|
-
rb_exc_raise(__e_type); \
|
74
|
-
} \
|
50
|
+
#define CHECK_TYPE(x, m) \
|
51
|
+
do { \
|
52
|
+
if (!INTEGER_P(x)) \
|
53
|
+
rb_exc_raise(fizzbuzz_type_error(rb_fb_eTypeError, (m))); \
|
75
54
|
} while (0)
|
76
55
|
|
77
|
-
#define CHECK_RANGE(x, y, m)
|
78
|
-
do {
|
79
|
-
|
80
|
-
|
81
|
-
rb_exc_raise(__e_range); \
|
82
|
-
} \
|
56
|
+
#define CHECK_RANGE(x, y, m) \
|
57
|
+
do { \
|
58
|
+
if (GREATER(x, y)) \
|
59
|
+
rb_exc_raise(fizzbuzz_range_error(rb_fb_eRangeError, (x), (y), (m))); \
|
83
60
|
} while (0)
|
84
61
|
|
85
62
|
#define error(t) errors[(t)]
|
86
63
|
#define word(n) words[(n) - 1]
|
87
64
|
|
88
|
-
enum fizzbuzz_error {
|
65
|
+
typedef enum fizzbuzz_error {
|
89
66
|
E_INVALID_TYPE = 0,
|
90
67
|
E_INVALID_START_TYPE,
|
91
68
|
E_INVALID_STOP_TYPE,
|
92
69
|
E_BAD_VALUE_START,
|
93
70
|
E_BAD_VALUE_STOP
|
94
|
-
};
|
71
|
+
} fizzbuzz_error_t;
|
95
72
|
|
96
|
-
enum fizzbuzz_return {
|
73
|
+
typedef enum fizzbuzz_return {
|
97
74
|
R_TYPE_ARRAY = 0,
|
98
75
|
R_TYPE_ENUMERATOR
|
99
|
-
};
|
76
|
+
} fizzbuzz_return_t;
|
100
77
|
|
101
|
-
enum fizzbuzz_direction {
|
78
|
+
typedef enum fizzbuzz_direction {
|
102
79
|
D_LOOP_FORWARD = 0,
|
103
80
|
D_LOOP_REVERSE
|
104
|
-
};
|
105
|
-
|
106
|
-
typedef enum fizzbuzz_return fizzbuzz_return_t;
|
107
|
-
typedef enum fizzbuzz_direction fizzbuzz_direction_t;
|
81
|
+
} fizzbuzz_direction_t;
|
108
82
|
|
109
|
-
struct fizzbuzz_exception {
|
83
|
+
typedef struct fizzbuzz_exception {
|
110
84
|
VALUE start;
|
111
85
|
VALUE stop;
|
112
86
|
const char *message;
|
113
87
|
VALUE klass;
|
114
|
-
};
|
115
|
-
|
116
|
-
typedef struct fizzbuzz_exception fizzbuzz_exception_t;
|
88
|
+
} fizzbuzz_exception_t;
|
117
89
|
|
118
90
|
static const char *errors[] = {
|
91
|
+
#if defined(HAVE_INTEGER_UNIFICATION)
|
92
|
+
"must be an Integer type",
|
93
|
+
"must be an Integer type for start",
|
94
|
+
"must be an Integer type for stop",
|
95
|
+
#else
|
119
96
|
"must be a Fixnum or Bignum type",
|
120
97
|
"must be a Fixnum or Bignum type for start",
|
121
98
|
"must be a Fixnum or Bignum type for stop",
|
99
|
+
#endif
|
122
100
|
"start value is higher than stop value",
|
123
101
|
"stop value is lower than start value",
|
124
102
|
NULL
|
125
103
|
};
|
126
104
|
|
127
|
-
static
|
128
|
-
|
129
|
-
|
105
|
+
static VALUE words[] = {
|
106
|
+
Qnil, Qnil, Qnil,
|
107
|
+
Qundef
|
130
108
|
};
|
131
109
|
|
132
|
-
|
110
|
+
static VALUE
|
133
111
|
fizzbuzz_plus(VALUE a, VALUE b)
|
134
112
|
{
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
return rb_funcall(a, rb_intern("+"), 1, b);
|
113
|
+
return (FIXNUM_P(a) && FIXNUM_P(b)) ? \
|
114
|
+
TYPE2NUM(NUM2TYPE(a) + NUM2TYPE(b)) : \
|
115
|
+
rb_funcall(a, rb_intern("+"), 1, b);
|
140
116
|
}
|
141
117
|
|
142
|
-
|
118
|
+
static VALUE
|
143
119
|
fizzbuzz_minus(VALUE a, VALUE b)
|
144
120
|
{
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
return rb_funcall(a, rb_intern("-"), 1, b);
|
121
|
+
return (FIXNUM_P(a) && FIXNUM_P(b)) ? \
|
122
|
+
TYPE2NUM(NUM2TYPE(a) - NUM2TYPE(b)) : \
|
123
|
+
rb_funcall(a, rb_intern("-"), 1, b);
|
150
124
|
}
|
151
125
|
|
152
|
-
|
126
|
+
static VALUE
|
153
127
|
fizzbuzz_modulo(VALUE a, VALUE b)
|
154
128
|
{
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
return rb_funcall(a, rb_intern("%"), 1, b);
|
129
|
+
return (FIXNUM_P(a) && FIXNUM_P(b)) ? \
|
130
|
+
TYPE2NUM(NUM2TYPE(a) % NUM2TYPE(b)) : \
|
131
|
+
rb_funcall(a, rb_intern("%"), 1, b);
|
160
132
|
}
|
161
133
|
|
162
|
-
|
134
|
+
static int
|
163
135
|
fizzbuzz_equal(VALUE a, VALUE b)
|
164
136
|
{
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
result = (NUM2TYPE(a) == NUM2TYPE(b));
|
169
|
-
}
|
170
|
-
else {
|
171
|
-
result = rb_funcall(a, rb_intern("=="), 1, b);
|
172
|
-
}
|
173
|
-
|
174
|
-
return RVAL2CBOOL(result);
|
137
|
+
return RB_LIKELY(FIXNUM_P(a) && FIXNUM_P(b)) ? \
|
138
|
+
(NUM2TYPE(a) == NUM2TYPE(b)) : \
|
139
|
+
RVAL2CBOOL(rb_funcall(a, rb_intern("=="), 1, b));
|
175
140
|
}
|
176
141
|
|
177
|
-
|
142
|
+
static int
|
178
143
|
fizzbuzz_greater(VALUE a, VALUE b)
|
179
144
|
{
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
result = (NUM2TYPE(a) > NUM2TYPE(b));
|
184
|
-
}
|
185
|
-
else {
|
186
|
-
result = rb_funcall(a, rb_intern(">"), 1, b);
|
187
|
-
}
|
188
|
-
|
189
|
-
return RVAL2CBOOL(result);
|
145
|
+
return RB_LIKELY(FIXNUM_P(a) && FIXNUM_P(b)) ? \
|
146
|
+
(NUM2TYPE(a) > NUM2TYPE(b)) : \
|
147
|
+
RVAL2CBOOL(rb_funcall(a, rb_intern(">"), 1, b));
|
190
148
|
}
|
191
149
|
|
192
|
-
|
150
|
+
static int
|
193
151
|
fizzbuzz_greater_equal(VALUE a, VALUE b)
|
194
152
|
{
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
result = (NUM2TYPE(a) >= NUM2TYPE(b));
|
199
|
-
}
|
200
|
-
else {
|
201
|
-
result = rb_funcall(a, rb_intern(">="), 1, b);
|
202
|
-
}
|
203
|
-
|
204
|
-
return RVAL2CBOOL(result);
|
153
|
+
return RB_LIKELY(FIXNUM_P(a) && FIXNUM_P(b)) ? \
|
154
|
+
(NUM2TYPE(a) >= NUM2TYPE(b)) : \
|
155
|
+
RVAL2CBOOL(rb_funcall(a, rb_intern(">="), 1, b));
|
205
156
|
}
|
206
157
|
|
207
|
-
|
158
|
+
static int
|
208
159
|
fizzbuzz_less_equal(VALUE a, VALUE b)
|
209
160
|
{
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
result = (NUM2TYPE(a) <= NUM2TYPE(b));
|
214
|
-
}
|
215
|
-
else {
|
216
|
-
result = rb_funcall(a, rb_intern("<="), 1, b);
|
217
|
-
}
|
218
|
-
|
219
|
-
return RVAL2CBOOL(result);
|
161
|
+
return RB_LIKELY(FIXNUM_P(a) && FIXNUM_P(b)) ? \
|
162
|
+
(NUM2TYPE(a) <= NUM2TYPE(b)) : \
|
163
|
+
RVAL2CBOOL(rb_funcall(a, rb_intern("<="), 1, b));
|
220
164
|
}
|
221
165
|
|
222
166
|
RUBY_EXTERN ID id_at_start, id_at_stop;
|
@@ -249,5 +193,3 @@ RUBY_EXTERN VALUE rb_fb_square(VALUE object, VALUE value);
|
|
249
193
|
#endif
|
250
194
|
|
251
195
|
#endif /* _FIZZBUZZ_H */
|
252
|
-
|
253
|
-
/* vim: set ts=8 sw=4 sts=2 et : */
|
@@ -0,0 +1,25 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIEIDCCAoigAwIBAgIBATANBgkqhkiG9w0BAQsFADAdMRswGQYDVQQDDBJrdy9E
|
3
|
+
Qz1saW51eC9EQz1jb20wHhcNMTkwODAzMTUzOTEzWhcNMjAwODAyMTUzOTEzWjAd
|
4
|
+
MRswGQYDVQQDDBJrdy9EQz1saW51eC9EQz1jb20wggGiMA0GCSqGSIb3DQEBAQUA
|
5
|
+
A4IBjwAwggGKAoIBgQCroSgHc4BNx1gFHRHBbLvyKbsQPoa8uZVUbQ4uXuI9URdR
|
6
|
+
Uho84FcXnFOLjWaTHXX6aG9OI08zWSwV0mcg19PZakjqbdUw8WAGvBnpkwFNz/gG
|
7
|
+
J46+T+BDQ0gLWuoMLYEAOjUcRqcaMUgsspUXpKCbbtBId782yieyKsCWDgBxtUZd
|
8
|
+
5jPgrAEpOW8C1p8K+MlNXjBvib/K5ODk28BqGcKGa0udRJ9yfD/k4MczUcRGgaNg
|
9
|
+
Pno2ncH8Jw/Dcfy4gZgHKsTGCtqOQbsKc5G5u0hDgIGJ6FVvR620TUPGvpFUG1A/
|
10
|
+
otGkdoe6MDLciUbJmYIr6I3ykNF+IWmPmZCHsOKd9a7neVk+TGJQYiKo74XG9cbo
|
11
|
+
Ms8HQomJTNWMM0csu0fWq/jB0T2Lbg9N1gjJ4neR82CwE1galmWCNguD7EVO+axn
|
12
|
+
nFrxCnT9Lc1YvyJMfx1Rr+guC/S2LMY/GgSwxiSwt7eh+AGv5tfgNdHuFyFHNFrz
|
13
|
+
pAdaz5CqFRalQkZ169ECAwEAAaNrMGkwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAw
|
14
|
+
HQYDVR0OBBYEFPa4Bg07AC8HR7uy6WCYWXP8wLGwMBcGA1UdEQQQMA6BDGt3QGxp
|
15
|
+
bnV4LmNvbTAXBgNVHRIEEDAOgQxrd0BsaW51eC5jb20wDQYJKoZIhvcNAQELBQAD
|
16
|
+
ggGBAEBJuRhodAsjx52dYS/9tKTCbXOoGH1qYYiGHWVXCt2ZJYXB34bTWjqpT7w9
|
17
|
+
dw/I0HydvKk8kYs3LWDDmg6hDIPJ5Br4+sadBD1r5dBhpY3WNkMHoTziOTiNr+Pw
|
18
|
+
GqF0vWVmZ704XX2S2jzu05EWefDQ+wnMzfevx8hEGIvg2P/d7z3wxce2TvsrpBBY
|
19
|
+
iocpBLUiK0EVHBf1BvgC/V01i9xGNg7KdN2dVfLoLSyvrB5MV3ITxiKgrIU0xi6v
|
20
|
+
J1KaY5b2N5ZnZaN8cTs5Z0skUkUqPQPFxQL5SM9LyK5gVT2qcF8QhChst8RCUXz9
|
21
|
+
3DdMAGkSExtG/qLRnpPwBszjGZqASIi/OJ9QsAESmMExgwqH1bYAoGNQ60V7iiI0
|
22
|
+
Vygrj8cyzqtclWVwszcoLCcEPQW0S4sXmIuvIQ9Uc6UuKM4mHkNTMvSjNSShdAkA
|
23
|
+
7/RnMCIYLU7PievOwRMbF7/22H+PSuMW6/JqGRYk8pph//oNh1EoNFqu7h+bV0Ph
|
24
|
+
Y0aXRQ==
|
25
|
+
-----END CERTIFICATE-----
|
data/lib/fizzbuzz.rb
CHANGED
@@ -1,35 +1,15 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
# :stopdoc:
|
4
|
-
|
5
|
-
#
|
6
|
-
# fizzbuzz.rb
|
7
|
-
#
|
8
|
-
# Copyright 2012-2014 Krzysztof Wilczynski
|
9
|
-
#
|
10
|
-
# Licensed under the Apache License, Version 2.0 (the "License");
|
11
|
-
# you may not use this file except in compliance with the License.
|
12
|
-
# You may obtain a copy of the License at
|
13
|
-
#
|
14
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
15
|
-
#
|
16
|
-
# Unless required by applicable law or agreed to in writing, software
|
17
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
18
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
19
|
-
# See the License for the specific language governing permissions and
|
20
|
-
# limitations under the License.
|
21
|
-
#
|
22
|
-
|
23
|
-
# :startdoc:
|
24
|
-
|
25
|
-
gem 'json', '>= 1.8.1'
|
1
|
+
# frozen_string_literal: true
|
26
2
|
|
27
3
|
require 'json'
|
28
4
|
|
29
5
|
require_relative 'fizzbuzz/fizzbuzz'
|
30
6
|
require_relative 'fizzbuzz/version'
|
31
7
|
require_relative 'fizzbuzz/core/integer'
|
32
|
-
|
8
|
+
|
9
|
+
unless 0.class == Integer
|
10
|
+
require_relative 'fizzbuzz/core/bignum'
|
11
|
+
end
|
12
|
+
|
33
13
|
require_relative 'fizzbuzz/core/array'
|
34
14
|
require_relative 'fizzbuzz/core/range'
|
35
15
|
|
@@ -54,8 +34,8 @@ class FizzBuzz
|
|
54
34
|
#
|
55
35
|
# Example:
|
56
36
|
#
|
57
|
-
# FizzBuzz.fizzbuzz(1, 15)
|
58
|
-
# FizzBuzz.fizzbuzz(1, 15, true)
|
37
|
+
# FizzBuzz.fizzbuzz(1, 15) #=> [1, 2, "Fizz", 4, "Buzz", "Fizz", 7, 8, "Fizz", "Buzz", 11, "Fizz", 13, 14, "FizzBuzz"]
|
38
|
+
# FizzBuzz.fizzbuzz(1, 15, true) #=> ["FizzBuzz", 14, 13, "Fizz", 11, "Buzz", "Fizz", 8, 7, "Fizz", "Buzz", 4, "Fizz", 2, 1]
|
59
39
|
#
|
60
40
|
# Example:
|
61
41
|
#
|
@@ -92,6 +72,97 @@ class FizzBuzz
|
|
92
72
|
end
|
93
73
|
end
|
94
74
|
|
75
|
+
#
|
76
|
+
# call-seq:
|
77
|
+
# FizzBuzz.step( start, stop, step ) {|value| block } -> an integer
|
78
|
+
# FizzBuzz.step( start, stop, step ) -> an Enumerator
|
79
|
+
#
|
80
|
+
# Calls the block _once_ for each subsequent value for a given range
|
81
|
+
# from +start+ to +stop+, passing the value as a parameter to the block
|
82
|
+
# in the increments of +step+.
|
83
|
+
#
|
84
|
+
# If no block is given, an +Enumerator+ is returned instead.
|
85
|
+
#
|
86
|
+
# Example:
|
87
|
+
#
|
88
|
+
# s = FizzBuzz.step #=> #<Enumerator: #<Enumerator::Generator:0x559db8e7>:each>
|
89
|
+
# s.take(15).each {|value| puts "Got #{value}" }
|
90
|
+
#
|
91
|
+
# Produces:
|
92
|
+
#
|
93
|
+
# Got 1
|
94
|
+
# Got 2
|
95
|
+
# Got Fizz
|
96
|
+
# Got 4
|
97
|
+
# Got Buzz
|
98
|
+
# Got Fizz
|
99
|
+
# Got 7
|
100
|
+
# Got 8
|
101
|
+
# Got Fizz
|
102
|
+
# Got Buzz
|
103
|
+
# Got 11
|
104
|
+
# Got Fizz
|
105
|
+
# Got 13
|
106
|
+
# Got 14
|
107
|
+
# Got FizzBuzz
|
108
|
+
#
|
109
|
+
# See also: FizzBuzz::fizzbuzz, FizzBuzz::[] and FizzBuzz#step
|
110
|
+
#
|
111
|
+
def self.step(start = 1, stop = nil, step = 1, &block)
|
112
|
+
if block_given?
|
113
|
+
start.step(stop, step) do |n|
|
114
|
+
yield FB[n]
|
115
|
+
end
|
116
|
+
else
|
117
|
+
Enumerator.new do |y|
|
118
|
+
start.step(stop, step).each do |n|
|
119
|
+
y << FB[n]
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
#
|
126
|
+
# call-seq:
|
127
|
+
# fizzbuzz.step( start, stop, step ) {|value| block } -> an integer
|
128
|
+
# fizzbuzz.step( start, stop, step ) -> an Enumerator
|
129
|
+
#
|
130
|
+
# Calls the block _once_ for each subsequent value for a given range
|
131
|
+
# from +start+ to +stop+, passing the value as a parameter to the block
|
132
|
+
# in the increments of +step+.
|
133
|
+
#
|
134
|
+
# If no block is given, an +Enumerator+ is returned instead.
|
135
|
+
#
|
136
|
+
# Example:
|
137
|
+
#
|
138
|
+
# fb = FizzBuzz.new(1, 15) #=> #<FizzBuzz:0x5653a2d1 @start=1, @stop=15>
|
139
|
+
# s = fb.step #=> #<Enumerator: #<Enumerator::Generator:0x559db8e7>:each>
|
140
|
+
# s.take(15).each {|value| puts "Got #{value}" }
|
141
|
+
#
|
142
|
+
# Produces:
|
143
|
+
#
|
144
|
+
# Got 1
|
145
|
+
# Got 2
|
146
|
+
# Got Fizz
|
147
|
+
# Got 4
|
148
|
+
# Got Buzz
|
149
|
+
# Got Fizz
|
150
|
+
# Got 7
|
151
|
+
# Got 8
|
152
|
+
# Got Fizz
|
153
|
+
# Got Buzz
|
154
|
+
# Got 11
|
155
|
+
# Got Fizz
|
156
|
+
# Got 13
|
157
|
+
# Got 14
|
158
|
+
# Got FizzBuzz
|
159
|
+
#
|
160
|
+
# See also: FizzBuzz::step, FizzBuzz::fizzbuzz and FizzBuzz::[]
|
161
|
+
#
|
162
|
+
def step(start = @start, stop = @stop, step = 1, &block)
|
163
|
+
self.class.step(start, stop, step, &block)
|
164
|
+
end
|
165
|
+
|
95
166
|
#
|
96
167
|
# call-seq:
|
97
168
|
# fizzbuzz.to_hash -> hash
|
@@ -100,7 +171,7 @@ class FizzBuzz
|
|
100
171
|
#
|
101
172
|
# Example:
|
102
173
|
#
|
103
|
-
# fb = FizzBuzz.new(1, 15)
|
174
|
+
# fb = FizzBuzz.new(1, 15) #=> #<FizzBuzz:0x007fbe84 @start=1, @stop=15>
|
104
175
|
# fb.to_hash
|
105
176
|
#
|
106
177
|
# Produces:
|
@@ -125,14 +196,14 @@ class FizzBuzz
|
|
125
196
|
|
126
197
|
#
|
127
198
|
# call-seq:
|
128
|
-
# fizzbuzz.as_json -> hash
|
199
|
+
# fizzbuzz.as_json( arguments ) -> hash
|
129
200
|
#
|
130
201
|
# Returns a +hash+ representing the _FizzBuzz_ object that will be
|
131
202
|
# used when generating a _JSON_ string representation.
|
132
203
|
#
|
133
204
|
# Example:
|
134
205
|
#
|
135
|
-
# fb = FizzBuzz.new(1, 15)
|
206
|
+
# fb = FizzBuzz.new(1, 15) #=> #<FizzBuzz:0x007f90c1 @start=1, @stop=15>
|
136
207
|
# fb.as_json
|
137
208
|
#
|
138
209
|
# Produces:
|
@@ -147,19 +218,19 @@ class FizzBuzz
|
|
147
218
|
#
|
148
219
|
# See also: FizzBuzz#to_json and FizzBuzz#to_hash
|
149
220
|
#
|
150
|
-
def as_json(*
|
221
|
+
def as_json(*)
|
151
222
|
{ JSON.create_id => self.class.name }.merge(to_hash)
|
152
223
|
end
|
153
224
|
|
154
225
|
#
|
155
226
|
# call-seq:
|
156
|
-
# fizzbuzz.to_json -> string
|
227
|
+
# fizzbuzz.to_json( arguments ) -> string
|
157
228
|
#
|
158
229
|
# Returns a _JSON_ string representing the _FizzBuzz_ object.
|
159
230
|
#
|
160
231
|
# Example:
|
161
232
|
#
|
162
|
-
# fb = FizzBuzz.new(1, 15)
|
233
|
+
# fb = FizzBuzz.new(1, 15) #=> #<FizzBuzz:0x007fce83 @start=1, @stop=15>
|
163
234
|
# fb.to_json
|
164
235
|
#
|
165
236
|
# Produces:
|
@@ -198,7 +269,7 @@ class FizzBuzz
|
|
198
269
|
# }
|
199
270
|
# EOS
|
200
271
|
#
|
201
|
-
# fb = JSON.load(json)
|
272
|
+
# fb = JSON.load(json) #=> #<FizzBuzz:0x007fc082 @start=1, @stop=15>
|
202
273
|
# fb.to_hash
|
203
274
|
#
|
204
275
|
# Produces:
|
@@ -219,9 +290,4 @@ class FizzBuzz
|
|
219
290
|
alias_method :to_h, :to_hash
|
220
291
|
end
|
221
292
|
|
222
|
-
# :enddoc:
|
223
|
-
|
224
293
|
FB = FizzBuzz
|
225
|
-
|
226
|
-
# vim: set ts=2 sw=2 sts=2 et :
|
227
|
-
# encoding: utf-8
|