goon 0.0.2 → 0.0.3
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.
- data/README.md +29 -30
- data/lib/goon.rb +3 -3
- data/lib/goon/{heist.rb → task.rb} +6 -6
- data/lib/goon/version.rb +1 -1
- metadata +17 -16
data/README.md
CHANGED
@@ -1,36 +1,37 @@
|
|
1
1
|
## Goon ##
|
2
2
|
|
3
|
-
Goon is a minion that
|
3
|
+
Goon is a minion that performs tasks
|
4
4
|
|
5
5
|
## Release Notes ##
|
6
6
|
|
7
|
+
* 0.0.3 - Renamed "Heist" to "Task," as that makes more sense.
|
7
8
|
* 0.0.2 - For example, our naivite caused us to think that we could cut a gem without jumping through hoops.
|
8
9
|
* 0.0.1 - Initial release. Basically usable and spec'd, but probably has some
|
9
10
|
naive implementation.
|
10
11
|
|
11
12
|
## Goons? ##
|
12
13
|
|
13
|
-
That is, a goon object, being taught the proper competencies, will
|
14
|
-
valid
|
14
|
+
That is, a goon object, being taught the proper competencies, will perform a
|
15
|
+
valid Task and remember facts related to the process.
|
15
16
|
|
16
17
|
### .new ###
|
17
18
|
|
18
|
-
Creating a Goon is pretty easy, but a Goon created without a
|
19
|
+
Creating a Goon is pretty easy, but a Goon created without a Task is just
|
19
20
|
about worthless. The following will actually do the trick:
|
20
21
|
|
21
22
|
goon = Goon.new
|
22
23
|
|
23
|
-
The following, however, is a lot more useful (or would be if the
|
24
|
+
The following, however, is a lot more useful (or would be if the Task wasn't
|
24
25
|
just terribly cordial):
|
25
26
|
|
26
27
|
goon = Goon.new(
|
27
|
-
:
|
28
|
-
:name => '
|
28
|
+
:task => OpenStruct(
|
29
|
+
:name => 'Hello!!!',
|
29
30
|
:body => 'puts "hello"'
|
30
31
|
)
|
31
32
|
)
|
32
33
|
|
33
|
-
In addition to the :
|
34
|
+
In addition to the :task option, you can pass in an array of Competency objects
|
34
35
|
with the :competencies option or a hash of facts with the :facts option.
|
35
36
|
|
36
37
|
### #learn_competency ###
|
@@ -55,40 +56,38 @@ A goon can forget facts that it has remembered. The forget method takes a fact n
|
|
55
56
|
|
56
57
|
### #run ###
|
57
58
|
|
58
|
-
A goon can
|
59
|
+
A goon can perform a Task. The run method takes no arguments, but returns the facts that it has remembered when it is done with the job.
|
59
60
|
|
60
|
-
##
|
61
|
+
## Tasks? ##
|
61
62
|
|
62
|
-
|
63
|
-
|
64
|
-
A Heist, when it comes down, is any object that fits this bill:
|
63
|
+
A Task, when it comes down, is any object that fits this bill:
|
65
64
|
|
66
65
|
* Has a name method that returns a non-empty string
|
67
66
|
* Has a body method that returns a non-empty string
|
68
67
|
|
69
|
-
That said, goon/
|
68
|
+
That said, goon/task contains the Goon::Task class that will absolutely always
|
70
69
|
work with Goon, and it also validates itself on creation. Unfortunately, using
|
71
|
-
this class to make a
|
70
|
+
this class to make a Task means that exceptions will be raised if an invalid
|
72
71
|
name or body is provided.
|
73
72
|
|
74
73
|
### name ###
|
75
74
|
|
76
|
-
The name of a
|
75
|
+
The name of a Task is just that ... it is a (preferably) unique identifier.
|
77
76
|
|
78
77
|
### body ###
|
79
78
|
|
80
|
-
The body of a
|
79
|
+
The body of a Task is a snippet of code. Most typically,
|
81
80
|
|
82
81
|
## Competencies? ##
|
83
82
|
|
84
|
-
A Competency is a skill that one can teach one's goons. Much like a
|
83
|
+
A Competency is a skill that one can teach one's goons. Much like a Task, a
|
85
84
|
competency can be pretty much any object so long as it fits the following:
|
86
85
|
|
87
86
|
* Has a name method that returns a non-empty string
|
88
87
|
* Has a body method that returns a non-empty string
|
89
88
|
|
90
89
|
If you would like to use our reference Competency, it lives in goon/competency.
|
91
|
-
The same caveats (and then some) apply to this as do to our reference
|
90
|
+
The same caveats (and then some) apply to this as do to our reference Task.
|
92
91
|
|
93
92
|
When a Goon learns a Competency, the Goon in question gains an equivalent
|
94
93
|
instance method to said Competency. So, say that we have a Competency named
|
@@ -123,7 +122,7 @@ on this, but take our word that you absolutely want this to be valid Ruby.
|
|
123
122
|
<pre>
|
124
123
|
require 'goon'
|
125
124
|
require 'goon/competency'
|
126
|
-
require 'goon/
|
125
|
+
require 'goon/task'
|
127
126
|
require 'json'
|
128
127
|
|
129
128
|
competencies = []
|
@@ -142,7 +141,7 @@ competencies << Goon::Competency.new(
|
|
142
141
|
:body => "puts options[:phrase]"
|
143
142
|
)
|
144
143
|
|
145
|
-
|
144
|
+
task = Goon::Task.new(
|
146
145
|
:name => 'The Stinky Teen Job',
|
147
146
|
:body => <<-EOS
|
148
147
|
hello
|
@@ -154,17 +153,17 @@ heist = Goon::Heist.new(
|
|
154
153
|
EOS
|
155
154
|
)
|
156
155
|
|
157
|
-
my_goon = Goon.new(:competencies => competencies, :
|
158
|
-
puts "## Running the '#{
|
156
|
+
my_goon = Goon.new(:competencies => competencies, :task => task)
|
157
|
+
puts "## Running the '#{task.name}' task ..."
|
159
158
|
goon_results = my_goon.run
|
160
|
-
puts "## Finished the '#{
|
159
|
+
puts "## Finished the '#{task.name}' task"
|
161
160
|
|
162
161
|
# Since the goon was not instructed to remember anything, an empty hash is
|
163
162
|
# returned.
|
164
163
|
|
165
|
-
puts "## '#{
|
164
|
+
puts "## '#{task.name}' Results: #{goon_results.to_json}\n"
|
166
165
|
|
167
|
-
|
166
|
+
task = Goon::Task.new(
|
168
167
|
:name => 'Remember Remember',
|
169
168
|
:body => <<-EOS
|
170
169
|
puts "remembering the date"
|
@@ -174,15 +173,15 @@ heist = Goon::Heist.new(
|
|
174
173
|
EOS
|
175
174
|
)
|
176
175
|
|
177
|
-
my_goon = Goon.new(:
|
176
|
+
my_goon = Goon.new(:task => task)
|
178
177
|
|
179
|
-
puts "## Running the '#{
|
178
|
+
puts "## Running the '#{task.name}' task ..."
|
180
179
|
|
181
180
|
goon_results = my_goon.run
|
182
181
|
|
183
|
-
puts "## Finished the '#{
|
182
|
+
puts "## Finished the '#{task.name}' task"
|
184
183
|
|
185
184
|
# Since the goon was told to remember things, we get back a non-empty hash.
|
186
185
|
|
187
|
-
puts "## '#{
|
186
|
+
puts "## '#{task.name}' Results: #{goon_results.to_json}"
|
188
187
|
</pre>
|
data/lib/goon.rb
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
require 'goon/version'
|
2
2
|
|
3
3
|
class Goon
|
4
|
-
attr_reader :competencies, :
|
4
|
+
attr_reader :competencies, :task, :facts
|
5
5
|
|
6
6
|
def initialize(options = {})
|
7
7
|
competencies = options[:competencies] || []
|
8
8
|
@competencies = []
|
9
|
-
@
|
9
|
+
@task = options[:task]
|
10
10
|
@facts = options[:facts] || {}
|
11
11
|
learn_competencies(competencies)
|
12
12
|
end
|
@@ -52,7 +52,7 @@ class Goon
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def run
|
55
|
-
instance_eval @
|
55
|
+
instance_eval @task.body
|
56
56
|
@facts
|
57
57
|
end
|
58
58
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'goon'
|
2
2
|
|
3
|
-
class Goon::
|
4
|
-
class
|
3
|
+
class Goon::Task
|
4
|
+
class InvalidTask < Exception
|
5
5
|
end
|
6
6
|
|
7
7
|
attr_reader :name, :body
|
@@ -28,12 +28,12 @@ class Goon::Heist
|
|
28
28
|
private
|
29
29
|
|
30
30
|
def validate_name!
|
31
|
-
raise
|
32
|
-
raise
|
31
|
+
raise InvalidTask, "name cannot be nil" if @name.nil?
|
32
|
+
raise InvalidTask, "name cannot be blank" if @name.gsub(/\s+/, '').empty?
|
33
33
|
end
|
34
34
|
|
35
35
|
def validate_body!
|
36
|
-
raise
|
37
|
-
raise
|
36
|
+
raise InvalidTask, "body cannot be nil" if @body.nil?
|
37
|
+
raise InvalidTask, "body cannot be blank" if @body.gsub(/\s+/, '').empty?
|
38
38
|
end
|
39
39
|
end
|
data/lib/goon/version.rb
CHANGED
metadata
CHANGED
@@ -1,19 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: goon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
|
+
- Applied Awesome
|
8
9
|
- Dennis Walters
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date: 2012-03-
|
13
|
+
date: 2012-03-18 00:00:00.000000000Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: rake
|
16
|
-
requirement: &
|
17
|
+
requirement: &7220880 !ruby/object:Gem::Requirement
|
17
18
|
none: false
|
18
19
|
requirements:
|
19
20
|
- - ~>
|
@@ -21,10 +22,10 @@ dependencies:
|
|
21
22
|
version: 0.9.2
|
22
23
|
type: :development
|
23
24
|
prerelease: false
|
24
|
-
version_requirements: *
|
25
|
+
version_requirements: *7220880
|
25
26
|
- !ruby/object:Gem::Dependency
|
26
27
|
name: rdoc
|
27
|
-
requirement: &
|
28
|
+
requirement: &7219780 !ruby/object:Gem::Requirement
|
28
29
|
none: false
|
29
30
|
requirements:
|
30
31
|
- - ~>
|
@@ -32,10 +33,10 @@ dependencies:
|
|
32
33
|
version: '3.8'
|
33
34
|
type: :development
|
34
35
|
prerelease: false
|
35
|
-
version_requirements: *
|
36
|
+
version_requirements: *7219780
|
36
37
|
- !ruby/object:Gem::Dependency
|
37
38
|
name: rspec
|
38
|
-
requirement: &
|
39
|
+
requirement: &7218760 !ruby/object:Gem::Requirement
|
39
40
|
none: false
|
40
41
|
requirements:
|
41
42
|
- - ~>
|
@@ -43,10 +44,10 @@ dependencies:
|
|
43
44
|
version: 2.8.0
|
44
45
|
type: :development
|
45
46
|
prerelease: false
|
46
|
-
version_requirements: *
|
47
|
+
version_requirements: *7218760
|
47
48
|
- !ruby/object:Gem::Dependency
|
48
49
|
name: coco
|
49
|
-
requirement: &
|
50
|
+
requirement: &7217100 !ruby/object:Gem::Requirement
|
50
51
|
none: false
|
51
52
|
requirements:
|
52
53
|
- - ~>
|
@@ -54,10 +55,10 @@ dependencies:
|
|
54
55
|
version: '0.6'
|
55
56
|
type: :development
|
56
57
|
prerelease: false
|
57
|
-
version_requirements: *
|
58
|
+
version_requirements: *7217100
|
58
59
|
- !ruby/object:Gem::Dependency
|
59
60
|
name: mocha
|
60
|
-
requirement: &
|
61
|
+
requirement: &7215980 !ruby/object:Gem::Requirement
|
61
62
|
none: false
|
62
63
|
requirements:
|
63
64
|
- - ~>
|
@@ -65,21 +66,21 @@ dependencies:
|
|
65
66
|
version: 0.10.5
|
66
67
|
type: :development
|
67
68
|
prerelease: false
|
68
|
-
version_requirements: *
|
69
|
-
description: ! ' Goon is a minion that
|
69
|
+
version_requirements: *7215980
|
70
|
+
description: ! ' Goon is a minion that performs Tasks
|
70
71
|
|
71
72
|
'
|
72
|
-
email:
|
73
|
+
email: hi@appliedawesome.com
|
73
74
|
executables: []
|
74
75
|
extensions: []
|
75
76
|
extra_rdoc_files: []
|
76
77
|
files:
|
77
78
|
- lib/goon.rb
|
79
|
+
- lib/goon/task.rb
|
78
80
|
- lib/goon/version.rb
|
79
|
-
- lib/goon/heist.rb
|
80
81
|
- lib/goon/competency.rb
|
81
82
|
- README.md
|
82
|
-
homepage: https://github.com/
|
83
|
+
homepage: https://github.com/appliedawesome/goon
|
83
84
|
licenses: []
|
84
85
|
post_install_message:
|
85
86
|
rdoc_options:
|