ruby_drills 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,6 +1,12 @@
1
- ### 0.1.1 (2014/1/?)
1
+ ### 0.1.2 (2014/2/?)
2
2
 
3
3
 
4
+ ### 0.1.1 (2014/1/22)
5
+
6
+ * Added several String drills. Thank you, Joe Shidel.
7
+ * Added a timeout to the data collector to allow offline mode.
8
+ * Removed 'stats' from the menu until the Drill Collector API supports it.
9
+
4
10
  ### 0.1.0 (2014/1/13)
5
11
 
6
12
  Ship It!
data/README.md CHANGED
@@ -89,7 +89,7 @@ Each drill consists of five methods:
89
89
 
90
90
  ## Contributing
91
91
 
92
- Please check the [Issues List](http://github.com/bobbyno/ruby_drills/issues) on Github to find something to do.
92
+ It's easy to get involved by creating new drills. Please check the [Issues List](http://github.com/bobbyno/ruby_drills/issues) on Github to find something to do.
93
93
 
94
94
  If you're new to Github:
95
95
 
@@ -104,6 +104,7 @@ If you're new to Github:
104
104
 
105
105
  * [Bobby Norton](https://twitter.com/bobbynorton)
106
106
  * [David Chelimsky](https://twitter.com/dchelimsky)
107
+ * [Joe Shidel](https://github.com/shidel-dev)
107
108
 
108
109
  ## Acknowledgments
109
110
 
@@ -0,0 +1,28 @@
1
+ class MapDrill < Drill
2
+
3
+ def setup
4
+ @numbers = (0..10).to_a
5
+ @hints = ["You want to divide each member of this collection by two...",
6
+ "http://ruby-doc.org/core-1.9.3/Enumerable.html#method-i-map"]
7
+ end
8
+
9
+ def show
10
+ puts %{
11
+ @numbers = #{@numbers.inspect}
12
+
13
+ Use the method that returns a new array with the results of
14
+ running block once for every element in enum to produce
15
+ #{expected}
16
+
17
+ }
18
+ end
19
+
20
+ def reference
21
+ "@numbers.map {|x| x / 2}"
22
+ end
23
+
24
+ def valid?(input)
25
+ ['map', 'collect'].any? {|x| input.include? x}
26
+ end
27
+
28
+ end
@@ -1,15 +1,22 @@
1
1
  class ReduceDrill < Drill
2
2
 
3
3
  def setup
4
- @values = [ 1, 2, 3 ]
5
- @hints = ["Use a method from the Enumerable module", "How could you use reduce to solve this problem?"]
4
+ @values = [0, 5, 19, 25, 23, 40, 55, 36, 32, 52]
5
+ @hints = ["How could you reduce this problem to something simpler?",
6
+ "TODO: Inject a hint here...",
7
+ "This method is called foldLeft in some languages.",
8
+ "http://ruby-doc.org/core-1.9.3/Enumerable.html#method-i-reduce"]
6
9
  end
7
10
 
8
11
  def show
9
12
  puts %{
10
13
  @values = #{@values.inspect}
11
14
 
12
- Calculate the mean of this array.
15
+ The mean of the numbers in @values is #{expected.inspect}.
16
+
17
+ Use a method that combines the items in an Enumerable by
18
+ iterating over them to calculate this mean.
19
+
13
20
  }
14
21
  end
15
22
 
@@ -18,7 +25,7 @@ Calculate the mean of this array.
18
25
  end
19
26
 
20
27
  def valid?(input)
21
- input.include?("reduce")
28
+ ['reduce', 'inject'].any? {|x| input.include?(x) }
22
29
  end
23
30
 
24
31
  end
@@ -16,6 +16,18 @@ class Drill
16
16
  eval(reference)
17
17
  end
18
18
 
19
+ def non!(method, input)
20
+ if (input.include?('!'))
21
+ puts "\n\tAvoid using ! methods that modify their receiver...".red
22
+ # We need to rerun setup since the user changed the state of
23
+ # the drill.
24
+ setup
25
+ return false
26
+ end
27
+
28
+ input.include?(method)
29
+ end
30
+
19
31
  def done?(input)
20
32
  case input.to_sym
21
33
  when :menu
@@ -7,6 +7,7 @@ module Sessions
7
7
  base_uri 'https://drill-collector.herokuapp.com'
8
8
  # base_uri 'http://localhost:9091'
9
9
  # debug_output $stderr
10
+ default_timeout 2 #seconds
10
11
 
11
12
  attr_reader :session_id
12
13
 
@@ -25,13 +26,11 @@ module Sessions
25
26
  private
26
27
 
27
28
  def store(entry)
28
- Thread.new do
29
- begin
30
- data = entry.merge(timestamp: Sessions::Timestamp.collector, session_id: @session_id)
31
- self.class.post('/record', {:body => data})
32
- rescue => e
33
- # silent scream for now...
34
- end
29
+ begin
30
+ data = entry.merge(timestamp: Sessions::Timestamp.collector, session_id: @session_id)
31
+ self.class.post('/record', {:body => data})
32
+ rescue => e
33
+ # silent scream for now...
35
34
  end
36
35
  end
37
36
 
@@ -0,0 +1,28 @@
1
+ class ChompDrill < Drill
2
+
3
+ def setup
4
+ @value = "Blueberry"
5
+ @hints = ["Would not be a very big bite, but go ahead and take one.",
6
+ "http://www.ruby-doc.org/core-1.9.3/String.html#method-i-chomp"]
7
+ end
8
+
9
+ def show
10
+ puts %{
11
+ @value = #{@value.inspect}
12
+
13
+ Make this delectable berry read as just its color!
14
+
15
+ Use the method that will remove 'berry' from the end of this string
16
+ and return #{expected.inspect}:
17
+ }
18
+ end
19
+
20
+ def reference
21
+ "@value.chomp('berry')"
22
+ end
23
+
24
+ def valid?(input)
25
+ non!("chomp", input)
26
+ end
27
+
28
+ end
@@ -0,0 +1,28 @@
1
+ class DeleteDrill < Drill
2
+
3
+ def setup
4
+ @value = "bobcat"
5
+ @hints = ["bob needs to be deleted before you can let this into the house...",
6
+ "http://www.ruby-doc.org/core-1.9.3/String.html#method-i-delete"]
7
+ end
8
+
9
+ def show
10
+ puts %{
11
+ @value = #{@value.inspect}
12
+
13
+ Remove 'bob' from this string in order to return a much tamer version.
14
+
15
+ Use a non-destructive method to remove 'bob' from this string and return
16
+ #{expected.inspect}:
17
+ }
18
+ end
19
+
20
+ def reference
21
+ "@value.delete('bob')"
22
+ end
23
+
24
+ def valid?(input)
25
+ non!("delete", input)
26
+ end
27
+
28
+ end
@@ -0,0 +1,27 @@
1
+ class GsubDrill < Drill
2
+
3
+ def setup
4
+ @values = "make?this?a?real?sentence"
5
+ @hints = ["you need to substitute all of the question marks globally",
6
+ "http://www.ruby-doc.org/core-1.9.3/String.html#method-i-gsub"]
7
+ end
8
+
9
+ def show
10
+ puts %{
11
+ @values = #{@values.inspect}
12
+
13
+ Non-destructively replace all occurrences of question marks and replace them with a space
14
+ to return #{expected.inspect}.
15
+
16
+ }
17
+ end
18
+
19
+ def reference
20
+ "@values.gsub('?',' ')"
21
+ end
22
+
23
+ def valid?(input)
24
+ non!("gsub", input)
25
+ end
26
+
27
+ end
@@ -0,0 +1,27 @@
1
+ class IncludeDrill < Drill
2
+
3
+ def setup
4
+ @message = "hjwotrubjof15joe7;q;j8eldjowj234nfinskpaohello2j\ndilenudbjsinfjubfhbjisnkfnbfurbrofbdj92"
5
+ @hints = ["What's another way to state that something is comprised of another thing?"]
6
+ end
7
+
8
+ def show
9
+ puts %{
10
+ @message = #{@message.inspect}
11
+
12
+ Find out if this cryptic string contains the string 'hello'.
13
+
14
+ Use the method that will return true or false depending on if the string 'hello'
15
+ is in @message:
16
+ }
17
+ end
18
+
19
+ def reference
20
+ "@message.include?('hello')"
21
+ end
22
+
23
+ def valid?(input)
24
+ input.include?("include?")
25
+ end
26
+
27
+ end
@@ -0,0 +1,27 @@
1
+ class PartitionDrill < Drill
2
+
3
+ def setup
4
+ @sentence = "Half full or half empty?"
5
+ @hints = ["use 'or' as the argument",
6
+ "http://www.ruby-doc.org/core-1.9.3/String.html#method-i-partition"]
7
+ end
8
+
9
+ def show
10
+ puts %{
11
+ @sentence = #{@sentence.inspect}
12
+
13
+ Break this sentence into a three-member array with a method that will use 'or'
14
+ as the substring to match against to produce #{expected.inspect}:
15
+
16
+ }
17
+ end
18
+
19
+ def reference
20
+ "@sentence.partition('or')"
21
+ end
22
+
23
+ def valid?(input)
24
+ input.include?("partition")
25
+ end
26
+
27
+ end
@@ -0,0 +1,30 @@
1
+ class SplitDrill < Drill
2
+
3
+ def setup
4
+ @words = %{under
5
+ the
6
+ ocean}
7
+ @hints = ["Use the newline char '\\n' as the splitting point. You'll need double quotes...",
8
+ "http://www.ruby-doc.org/core-1.9.3/String.html#method-i-split"]
9
+ end
10
+
11
+ def show
12
+ puts %{
13
+ @words = #{@words.inspect}
14
+
15
+ Take each line and make it the member of an array.
16
+
17
+ Use the method that will break up the string by the new line character,
18
+ and returns an array with each line as a member to produce
19
+ #{expected.inspect}:
20
+ }
21
+ end
22
+
23
+ def reference
24
+ "@words.split('\n')"
25
+ end
26
+
27
+ def valid?(input)
28
+ non!("split", input)
29
+ end
30
+ end
@@ -0,0 +1,26 @@
1
+ class SqueezeDrill < Drill
2
+
3
+ def setup
4
+ @value = %{Mississippi}
5
+ @hints = ["How do you get toothpaste out of a tube?",
6
+ "http://www.ruby-doc.org/core-1.9.3/String.html#method-i-squeeze"]
7
+ end
8
+
9
+ def show
10
+ puts %{
11
+ @value = #{@value.inspect}
12
+
13
+ Remove all of the repeating characters from Mississippi,
14
+ leaving only one instance of each, to product #{expected.inspect}.
15
+
16
+ }
17
+ end
18
+
19
+ def reference
20
+ "@value.squeeze"
21
+ end
22
+
23
+ def valid?(input)
24
+ non!("squeeze", input)
25
+ end
26
+ end
@@ -6,9 +6,6 @@ Ruby Drills: String
6
6
 
7
7
  A String object holds and manipulates an arbitrary sequence of bytes,
8
8
  typically representing characters.
9
-
10
- COMING SOON
11
-
12
9
  ------------------------------------------------------------------
13
10
  }
14
11
  end
@@ -0,0 +1,25 @@
1
+ class ToSymDrill < Drill
2
+
3
+ def setup
4
+ @value = %{mouse}
5
+ @hints = ["http://www.ruby-doc.org/core-1.9.3/String.html#method-i-to_sym"]
6
+ end
7
+
8
+ def show
9
+ puts %{
10
+ @value = #{@value.inspect}
11
+
12
+ Take this string and turn it into a symbol. The output should be
13
+ #{expected.inspect}:
14
+ }
15
+ end
16
+
17
+ def reference
18
+ "@value.to_sym"
19
+ end
20
+
21
+ def valid?(input)
22
+ input.include?("to_sym")
23
+ end
24
+ end
25
+
@@ -1,3 +1,3 @@
1
1
  module RubyDrills
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
data/lib/starter.rb CHANGED
@@ -10,6 +10,7 @@ require 'ruby_drills/drill'
10
10
  require 'ruby_drills/drills'
11
11
  require 'ruby_drills/chomper'
12
12
  require 'ruby_drills/sessions/collector_client'
13
+ require 'ruby_drills/sessions/local'
13
14
  require 'ruby_drills/sessions/timestamp'
14
15
  require 'ruby_drills/config'
15
16
 
@@ -39,8 +40,7 @@ class Starter
39
40
 
40
41
  puts "\nWhat would you like to learn next?\n\n"
41
42
  options.each_with_index {|opt, i| puts "\t#{i}: #{opt.capitalize}"}
42
- puts "\n\ts: see your stats"
43
- puts "\tq: quit"
43
+ puts "\n\tq: quit"
44
44
 
45
45
  choice = Readline.readline("\n>> ", true)
46
46
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_drills
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-01-14 00:00:00.000000000 Z
12
+ date: 2014-01-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: pry
@@ -132,6 +132,7 @@ files:
132
132
  - lib/ruby_drills/array/array_drills.rb
133
133
  - lib/ruby_drills/array/chunk_drill.rb
134
134
  - lib/ruby_drills/array/drop_while_drill.rb
135
+ - lib/ruby_drills/array/map_drill.rb
135
136
  - lib/ruby_drills/array/partition_drill.rb
136
137
  - lib/ruby_drills/array/reduce_drill.rb
137
138
  - lib/ruby_drills/array/take_while_drill.rb
@@ -147,7 +148,15 @@ files:
147
148
  - lib/ruby_drills/sessions/collector_client.rb
148
149
  - lib/ruby_drills/sessions/local.rb
149
150
  - lib/ruby_drills/sessions/timestamp.rb
151
+ - lib/ruby_drills/string/chomp_drill.rb
152
+ - lib/ruby_drills/string/delete_drill.rb
153
+ - lib/ruby_drills/string/gsub_drill.rb
154
+ - lib/ruby_drills/string/include_drill.rb
155
+ - lib/ruby_drills/string/partition_drill.rb
156
+ - lib/ruby_drills/string/split_drill.rb
157
+ - lib/ruby_drills/string/squeeze_drill.rb
150
158
  - lib/ruby_drills/string/string_drills.rb
159
+ - lib/ruby_drills/string/to_sym_drill.rb
151
160
  - lib/ruby_drills/version.rb
152
161
  - lib/ruby_drills/welcome/welcome_drills.rb
153
162
  - lib/starter.rb
@@ -171,7 +180,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
171
180
  version: '0'
172
181
  segments:
173
182
  - 0
174
- hash: -525151373519427421
183
+ hash: 2727376454008014728
175
184
  required_rubygems_version: !ruby/object:Gem::Requirement
176
185
  none: false
177
186
  requirements:
@@ -180,7 +189,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
180
189
  version: '0'
181
190
  segments:
182
191
  - 0
183
- hash: -525151373519427421
192
+ hash: 2727376454008014728
184
193
  requirements: []
185
194
  rubyforge_project:
186
195
  rubygems_version: 1.8.25