rubies 0.0.3 → 0.0.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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/README.md +8 -1
- data/bin/rubies +0 -0
- data/lib/rubies/version.rb +1 -1
- data/lib/rubies.rb +194 -191
- data/rubies.gemspec +4 -3
- metadata +28 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 644ac8ef4c90fcaa27570b9b4f5f55d01b47d4b9
|
4
|
+
data.tar.gz: 42a2230d78085fc443ecc070c73810791f37afce
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5b0f2b142d0602ac68bea6a364f4ec82dd815609db477547fa5ac6038e2e2c70e8bdacdb05cf17d455eb552142f291d92d00b2b4df1b53daa902b379029519dc
|
7
|
+
data.tar.gz: 321d71a1a473ccd6db52e1caf39e9a5511df9455e93591725339c18b215172fa1845f6049162d29d568f2a310e637b266180c8b8fbb40e6cf96fb9668b6a1b12
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -20,7 +20,14 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
-
|
23
|
+
I'm currently working on getting this to run from the command line. For now, you can install the right dependencies: 'faker', 'colorize', 'awesome_print'. Then . . .
|
24
|
+
|
25
|
+
```
|
26
|
+
pry
|
27
|
+
[1] pry(main)> require 'rubies'
|
28
|
+
```
|
29
|
+
|
30
|
+
Then the gem runs.
|
24
31
|
|
25
32
|
## Contributing
|
26
33
|
|
data/bin/rubies
ADDED
File without changes
|
data/lib/rubies/version.rb
CHANGED
data/lib/rubies.rb
CHANGED
@@ -6,230 +6,233 @@ require 'pp'
|
|
6
6
|
require 'awesome_print'
|
7
7
|
|
8
8
|
# module Rubies
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
value.each { |k, v| stack.push [key.dup << k, v] }
|
9
|
+
class Hash
|
10
|
+
def deep_traverse(&block)
|
11
|
+
stack = self.map { |k, v| [[k], v] }
|
12
|
+
while not stack.empty?
|
13
|
+
key, value = stack.pop
|
14
|
+
yield(key, value)
|
15
|
+
if value.is_a? Hash
|
16
|
+
value.each { |k, v| stack.push [key.dup << k, v] }
|
17
|
+
end
|
19
18
|
end
|
20
19
|
end
|
21
20
|
end
|
22
|
-
end
|
23
|
-
|
24
|
-
class RandomHash < Hash
|
25
|
-
def initialize
|
26
|
-
@ds = Hash.new
|
27
|
-
end
|
28
21
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
array << Faker::Name.first_name
|
22
|
+
class RandomHash < Hash
|
23
|
+
def initialize
|
24
|
+
@ds = Hash.new
|
33
25
|
end
|
34
|
-
array
|
35
|
-
end
|
36
26
|
|
37
|
-
|
38
|
-
|
39
|
-
|
27
|
+
def children
|
28
|
+
array = Array.new
|
29
|
+
rand(1..3).times do
|
30
|
+
array << Faker::Name.first_name
|
31
|
+
end
|
32
|
+
array
|
33
|
+
end
|
40
34
|
|
41
|
-
|
42
|
-
|
43
|
-
10.times do
|
44
|
-
name = Faker::Company.name
|
45
|
-
bs = Faker::Company.bs
|
46
|
-
hash[name] = bs
|
35
|
+
def has_kids?
|
36
|
+
rand(2) == 1
|
47
37
|
end
|
48
|
-
hash
|
49
|
-
end
|
50
38
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
39
|
+
def hash_one
|
40
|
+
hash = Hash.new
|
41
|
+
10.times do
|
42
|
+
name = Faker::Company.name
|
43
|
+
bs = Faker::Company.bs
|
44
|
+
hash[name] = bs
|
45
|
+
end
|
46
|
+
hash
|
57
47
|
end
|
58
|
-
hash
|
59
|
-
end
|
60
48
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
company = Faker::Company.name
|
70
|
-
details["phone"] = phone
|
71
|
-
details["company"] = company
|
72
|
-
details["children"] = children if has_kids?
|
73
|
-
hash[name] = details
|
74
|
-
count += 1
|
49
|
+
def hash_two
|
50
|
+
hash = Hash.new
|
51
|
+
10.times do
|
52
|
+
email = Faker::Internet.email
|
53
|
+
num = rand(1..1000)
|
54
|
+
hash[email] = num
|
55
|
+
end
|
56
|
+
hash
|
75
57
|
end
|
76
|
-
hash
|
77
|
-
end
|
78
58
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
59
|
+
def hash_three
|
60
|
+
hash = Hash.new
|
61
|
+
length = rand(1..5)
|
62
|
+
count = 1
|
63
|
+
while count <= length
|
64
|
+
details = Hash.new
|
65
|
+
name = Faker::Name.name
|
66
|
+
phone = Faker::PhoneNumber.cell_phone
|
67
|
+
company = Faker::Company.name
|
68
|
+
details["phone"] = phone
|
69
|
+
details["company"] = company
|
70
|
+
details["children"] = children if has_kids?
|
71
|
+
hash[name] = details
|
72
|
+
count += 1
|
73
|
+
end
|
74
|
+
hash
|
88
75
|
end
|
89
|
-
@ds
|
90
|
-
end
|
91
|
-
end
|
92
76
|
|
93
|
-
|
94
|
-
|
95
|
-
|
77
|
+
def generate
|
78
|
+
pick = rand(1..3)
|
79
|
+
case pick
|
80
|
+
when 1
|
81
|
+
@ds = hash_one
|
82
|
+
when 2
|
83
|
+
@ds = hash_two
|
84
|
+
when 3
|
85
|
+
@ds = hash_three
|
86
|
+
end
|
87
|
+
@ds
|
88
|
+
end
|
96
89
|
end
|
97
90
|
|
98
|
-
|
99
|
-
|
100
|
-
|
91
|
+
class RandomArray < Array
|
92
|
+
def initialize
|
93
|
+
@ds = Array.new
|
94
|
+
end
|
101
95
|
|
102
|
-
|
103
|
-
|
104
|
-
@ds << mini_array
|
96
|
+
def mini_array
|
97
|
+
(-1_000..1_000).sort_by { rand }.sample 3
|
105
98
|
end
|
106
|
-
|
107
|
-
|
99
|
+
|
100
|
+
def nesting_array
|
101
|
+
rand(1..3).times do
|
102
|
+
@ds << mini_array
|
103
|
+
end
|
104
|
+
@ds.each do |array|
|
105
|
+
array << mini_array
|
106
|
+
end
|
107
|
+
@ds
|
108
108
|
end
|
109
|
-
@ds
|
110
|
-
end
|
111
109
|
|
112
|
-
|
113
|
-
|
114
|
-
|
110
|
+
def generate
|
111
|
+
depth = rand(0..3)
|
112
|
+
nesting_array.flatten(depth)
|
113
|
+
end
|
115
114
|
end
|
116
|
-
end
|
117
115
|
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
[RandomHash.new.generate, RandomArray.new.generate, combo].sample
|
124
|
-
end
|
125
|
-
|
126
|
-
def all_values(ds)
|
127
|
-
values = Array.new
|
128
|
-
if ds.is_a? Hash
|
129
|
-
values = ds.values
|
130
|
-
elsif ds.flatten.first.is_a? Fixnum
|
131
|
-
values = ds.flatten
|
132
|
-
else
|
133
|
-
ds.each do |hash|
|
134
|
-
hash.deep_traverse{ |path, value| values << value }
|
135
|
-
end
|
136
|
-
values.each do |value|
|
137
|
-
if value.is_a? Array
|
138
|
-
value.each { |element| values << element }
|
139
|
-
values.delete(value)
|
116
|
+
class Game
|
117
|
+
def data_structure
|
118
|
+
combo = Array.new
|
119
|
+
rand(1..3).times do
|
120
|
+
combo << RandomHash.new.hash_three
|
140
121
|
end
|
122
|
+
[RandomHash.new.generate, RandomArray.new.generate, combo].sample
|
141
123
|
end
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
.
|
149
|
-
|
150
|
-
|
151
|
-
|
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
puts "==============================".colorize(:light_magenta)
|
162
|
-
puts "Press enter to continue . . . "
|
163
|
-
|
164
|
-
gets.chomp
|
165
|
-
puts "\e[H\e[2J"
|
166
|
-
|
167
|
-
num_correct = 0
|
168
|
-
num_wrong = 0
|
169
|
-
current = data_structure
|
170
|
-
playing = true
|
171
|
-
while playing == true
|
172
|
-
correct = false
|
173
|
-
answer = all_values(current).sample
|
174
|
-
while correct == false
|
175
|
-
puts
|
176
|
-
puts "We have some questions for you about this #{current.class.to_s.downcase}:".colorize(:light_blue)
|
177
|
-
puts "current = "
|
178
|
-
if current.is_a? Hash
|
179
|
-
ap current, index: false
|
180
|
-
elsif current.first.is_a? Array
|
181
|
-
PP.pp current
|
182
|
-
elsif current.first.is_a? Fixnum
|
183
|
-
PP.pp current
|
184
|
-
else
|
185
|
-
ap current, index: false
|
124
|
+
|
125
|
+
def all_values(ds)
|
126
|
+
values = Array.new
|
127
|
+
if ds.is_a? Hash
|
128
|
+
values = ds.values
|
129
|
+
elsif ds.flatten.first.is_a? Fixnum
|
130
|
+
values = ds.flatten
|
131
|
+
else
|
132
|
+
ds.each do |hash|
|
133
|
+
hash.deep_traverse{ |path, value| values << value }
|
134
|
+
end
|
135
|
+
values.each do |value|
|
136
|
+
if value.is_a? Array
|
137
|
+
value.each { |element| values << element }
|
138
|
+
values.delete(value)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
values
|
186
143
|
end
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
144
|
+
|
145
|
+
def game
|
146
|
+
puts "\e[H\e[2J"
|
147
|
+
puts "
|
148
|
+
.______ __ __ .______ __ _______ _______.
|
149
|
+
| _ \\ | | | | | _ \\ | | | ____| / |
|
150
|
+
| |_) | | | | | | |_) | | | | |__ | (----`
|
151
|
+
| / | | | | | _ < | | | __| \\ \\
|
152
|
+
| |\\ \\----.| `--' | | |_) | | | | |____.----) |
|
153
|
+
| _| `._____| \\______/ |______/ |__| |_______|_______/
|
154
|
+
|
155
|
+
".colorize(:light_magenta)
|
156
|
+
puts "==============================".colorize(:light_magenta)
|
157
|
+
puts " LEGEND ".colorize(:light_magenta)
|
158
|
+
puts "NEW : get a new data structure"
|
159
|
+
# puts "RUN : executes any inputted code"
|
160
|
+
# puts "EXIT: exit program"
|
161
|
+
puts "==============================".colorize(:light_magenta)
|
162
|
+
puts "Press enter to continue . . . "
|
163
|
+
|
164
|
+
gets.chomp
|
198
165
|
puts "\e[H\e[2J"
|
166
|
+
|
167
|
+
num_correct = 0
|
168
|
+
num_wrong = 0
|
199
169
|
current = data_structure
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
puts
|
206
|
-
puts "Sorry, that code resulted in an error:".colorize(:light_red)
|
207
|
-
puts "#{e}".colorize(:red)
|
208
|
-
else
|
209
|
-
if answer != output
|
210
|
-
num_wrong += 1
|
211
|
-
puts "=> " + output.to_s
|
170
|
+
playing = true
|
171
|
+
while playing == true
|
172
|
+
correct = false
|
173
|
+
answer = all_values(current).sample
|
174
|
+
while correct == false
|
212
175
|
puts
|
213
|
-
puts "
|
176
|
+
puts "We have some questions for you about this #{current.class.to_s.downcase}:".colorize(:light_blue)
|
177
|
+
puts "current = "
|
178
|
+
if current.is_a? Hash
|
179
|
+
ap current, index: false
|
180
|
+
elsif current.first.is_a? Array
|
181
|
+
PP.pp current
|
182
|
+
elsif current.first.is_a? Fixnum
|
183
|
+
PP.pp current
|
184
|
+
else
|
185
|
+
ap current, index: false
|
186
|
+
end
|
214
187
|
puts
|
215
|
-
puts "
|
188
|
+
puts "Write some ruby code to find the following value (or enter NEW for a new challenge): ".colorize(:light_blue)
|
216
189
|
puts answer.to_s
|
217
|
-
puts "Try again!".colorize(:light_red)
|
218
|
-
else
|
219
|
-
num_correct += 1
|
220
|
-
puts "=> " + output.to_s
|
221
190
|
puts
|
222
|
-
|
223
|
-
|
191
|
+
print "[1] ruby_drills(main)> "
|
192
|
+
input = gets.chomp
|
193
|
+
input.gsub("\"", "\'")
|
194
|
+
# $/ = "RUN"
|
195
|
+
# input = STDIN.gets
|
196
|
+
# input = input.gsub("\n", ";").gsub("RUN", "")
|
197
|
+
if input == "NEW"
|
198
|
+
puts "\e[H\e[2J"
|
199
|
+
current = data_structure
|
200
|
+
break
|
201
|
+
else
|
202
|
+
begin
|
203
|
+
output = eval(input)
|
204
|
+
rescue StandardError => e
|
205
|
+
puts
|
206
|
+
puts "Sorry, that code resulted in an error:".colorize(:light_red)
|
207
|
+
puts "#{e}".colorize(:red)
|
208
|
+
else
|
209
|
+
if answer != output
|
210
|
+
num_wrong += 1
|
211
|
+
puts "=> " + output.to_s
|
212
|
+
puts
|
213
|
+
puts "Sorry, that code is incorrect. ".colorize(:light_red)
|
214
|
+
puts
|
215
|
+
puts "The right answer is . . . ".colorize(:light_red)
|
216
|
+
puts answer.to_s
|
217
|
+
puts "Try again!".colorize(:light_red)
|
218
|
+
else
|
219
|
+
num_correct += 1
|
220
|
+
puts "=> " + output.to_s
|
221
|
+
puts
|
222
|
+
puts "Correct!".colorize(:green)
|
223
|
+
correct = true
|
224
|
+
end
|
225
|
+
end
|
226
|
+
end
|
227
|
+
puts "==============================".colorize(:light_yellow)
|
228
|
+
puts "Number correct this session: ".colorize(:green) + num_correct.to_s
|
229
|
+
puts "Number wrong this session : ".colorize(:light_red) + num_wrong.to_s
|
230
|
+
puts "==============================".colorize(:light_yellow)
|
231
|
+
puts "Press enter to continue . . . "
|
232
|
+
gets.chomp
|
233
|
+
puts "\e[H\e[2J"
|
224
234
|
end
|
225
235
|
end
|
226
236
|
end
|
227
|
-
puts "==============================".colorize(:light_yellow)
|
228
|
-
puts "Number correct this session: ".colorize(:green) + num_correct.to_s
|
229
|
-
puts "Number wrong this session : ".colorize(:light_red) + num_wrong.to_s
|
230
|
-
puts "==============================".colorize(:light_yellow)
|
231
|
-
puts "Press enter to continue . . . "
|
232
|
-
gets.chomp
|
233
|
-
puts "\e[H\e[2J"
|
234
237
|
end
|
235
|
-
end
|
238
|
+
#end
|
data/rubies.gemspec
CHANGED
@@ -18,9 +18,10 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
+
spec.add_dependency "faker"
|
22
|
+
spec.add_dependency "colorize"
|
23
|
+
spec.add_dependency "awesome_print"
|
24
|
+
|
21
25
|
spec.add_development_dependency "bundler", "~> 1.7"
|
22
26
|
spec.add_development_dependency "rake", "~> 10.0"
|
23
|
-
spec.add_development_dependency "faker"
|
24
|
-
spec.add_development_dependency "colorize"
|
25
|
-
spec.add_development_dependency "awesome_print"
|
26
27
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubies
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vikram Ramakrishnan
|
@@ -11,41 +11,41 @@ cert_chain: []
|
|
11
11
|
date: 2014-12-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: faker
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
20
|
-
type: :
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: colorize
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
34
|
-
type: :
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: awesome_print
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
|
-
type: :
|
48
|
+
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
@@ -53,40 +53,41 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: bundler
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '1.7'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ~>
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '1.7'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: rake
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ~>
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
75
|
+
version: '10.0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ~>
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
82
|
+
version: '10.0'
|
83
83
|
description: 'Newcomers to programming would benefit from practicing drills regularly
|
84
84
|
until basic problem solving becomes second nature. This gem is a command line tool
|
85
85
|
that allows users to solve randomly generated small problems. It currently supports
|
86
86
|
drills surrounding complex data structures. '
|
87
87
|
email:
|
88
88
|
- lord.ezar@gmail.com
|
89
|
-
executables:
|
89
|
+
executables:
|
90
|
+
- rubies
|
90
91
|
extensions: []
|
91
92
|
extra_rdoc_files: []
|
92
93
|
files:
|
@@ -95,6 +96,7 @@ files:
|
|
95
96
|
- LICENSE.txt
|
96
97
|
- README.md
|
97
98
|
- Rakefile
|
99
|
+
- bin/rubies
|
98
100
|
- lib/rubies.rb
|
99
101
|
- lib/rubies/version.rb
|
100
102
|
- rubies.gemspec
|