hack_tree 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,10 +1,12 @@
1
1
  # General Ruby.
2
+ /.bundle
2
3
  .ref-*
3
4
  .old*
4
5
  *-old*
6
+ /.rvmrc
5
7
 
6
8
  # Project-specific.
7
9
  /*.rb
8
10
  /doc/
9
11
  /pkg/
10
- /.rvmrc
12
+ /.yardoc
data/Gemfile.lock ADDED
@@ -0,0 +1,26 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ hack_tree (0.1.0)
5
+
6
+ GEM
7
+ remote: http://rubygems.org/
8
+ specs:
9
+ diff-lcs (1.1.3)
10
+ rspec (2.8.0)
11
+ rspec-core (~> 2.8.0)
12
+ rspec-expectations (~> 2.8.0)
13
+ rspec-mocks (~> 2.8.0)
14
+ rspec-core (2.8.0)
15
+ rspec-expectations (2.8.0)
16
+ diff-lcs (~> 1.1.2)
17
+ rspec-mocks (2.8.0)
18
+ yard (0.7.5)
19
+
20
+ PLATFORMS
21
+ ruby
22
+
23
+ DEPENDENCIES
24
+ hack_tree!
25
+ rspec
26
+ yard
data/README.md CHANGED
@@ -2,13 +2,17 @@
2
2
  Organize and share your console hacks
3
3
  =====================================
4
4
 
5
- WARNING! THIS IS WORK IN PROGRESS, NOTHING IS GUARANDEED TO WORK AT ALL
6
- -----------------------------------------------------------------------
7
-
8
5
  Introduction
9
6
  ------------
10
7
 
11
- HackTree lets you organize and share your console hacks in an effective and uniform way. Blah-blah-blah.
8
+ HackTree lets you organize and share your console hacks in a simple and efficient way.
9
+
10
+ Console hacks (or tricks) are handy methods you use in IRB console to do repetitive tasks. HackTree gives you the following opportunities:
11
+
12
+ * Create hacks using a **simple and uniform DSL**.
13
+ * **Describe** your hacks, much like you describe tasks in Rakefiles.
14
+ * **List available** hacks with descriptions right in your console.
15
+ * **Share** hacks with your teammates, **reuse** them in different projects.
12
16
 
13
17
 
14
18
  Setup (Rails 3)
@@ -17,9 +21,8 @@ Setup (Rails 3)
17
21
  Add to your `Gemfile`:
18
22
 
19
23
  ~~~
20
- group :development do
21
- gem "hack_tree"
22
- end
24
+ gem "hack_tree"
25
+ #gem "hack_tree", :git => "git://github.com/dadooda/hack_tree.git" # Edge version.
23
26
  ~~~
24
27
 
25
28
  Install the gem:
@@ -28,6 +31,12 @@ Install the gem:
28
31
  $ bundle install
29
32
  ~~~
30
33
 
34
+ Generate essentials:
35
+
36
+ ~~~
37
+ $ rails generate hack_tree
38
+ ~~~
39
+
31
40
 
32
41
  Usage
33
42
  -----
@@ -50,14 +59,275 @@ Request help on a hack:
50
59
  >> c.hello?
51
60
  ~~~
52
61
 
53
- Use the hack:
62
+ Use a hack:
54
63
 
55
64
  ~~~
56
65
  >> c.hello
66
+ Hello, world!
67
+
68
+ >> c.hello "Ruby"
69
+ Hello, Ruby!
70
+ ~~~
71
+
72
+ Create a hack (create and edit `lib/hacks/ping.rb`):
73
+
74
+ ~~~
75
+ HackTree.define do
76
+ desc "Play ping-pong"
77
+ hack :ping do
78
+ puts "Pong!"
79
+ end
80
+ end
81
+ ~~~
82
+
83
+ Reload hacks:
84
+
85
+ ~~~
86
+ >> c.hack_tree.reload
87
+ ~~~
88
+
89
+ Use your hack:
90
+
91
+ ~~~
92
+ >> c.ping
93
+ Pong!
94
+ ~~~
95
+
96
+ That's it for the basics, read further for more detailed information.
97
+
98
+
99
+ Definition language
100
+ -------------------
101
+
102
+ ### Overview ###
103
+
104
+ The definition language has just 3 statements: `desc`, `group` and `hack`.
105
+
106
+ To enter the definition language use the wrapper block:
107
+
108
+ ~~~
109
+ HackTree.define do
110
+ ...
111
+ end
112
+ ~~~
113
+
114
+ > NOTE: Inside the wrapper `self` is the object of type `HackTree::Instance`.
115
+
116
+ ### Defining hacks ###
117
+
118
+ To define a hack, use `hack`. To describe it, use `desc`.
119
+
120
+ ~~~
121
+ HackTree.define do
122
+ desc "Say hello to the world"
123
+ hack :hello do
124
+ puts "Hello, world!"
125
+ end
126
+ end
127
+ ~~~
128
+
129
+ ### Handling hack arguments ###
130
+
131
+ Hack arguments are block arguments in regular Ruby syntax.
132
+
133
+ ~~~
134
+ HackTree.define do
135
+ desc "Say hello to the world or to a specific person"
136
+ hack :hello do |*args|
137
+ puts "Hello, %s!" % (args[0] || "world")
138
+ end
139
+ ~~~
140
+
141
+ In Ruby 1.9 this form will also work:
142
+
143
+ ~~~
144
+ HackTree.define do
145
+ desc "Say hello to the world or to a specific person"
146
+ hack :hello do |who = "world"|
147
+ puts "Hello, #{who}!"
148
+ end
149
+ end
150
+ ~~~
151
+
152
+ ### Using full descriptions ###
153
+
154
+ Once your hack begins to take arguments it is recommended that you extend `desc` to a full block of text. Keep the heading line, **add a few examples** and possibly some other descriptive information.
155
+
156
+ ~~~
157
+ HackTree.define do
158
+ desc <<-EOT
159
+ Say hello to the world or to a specific person
160
+
161
+ Examples:
162
+
163
+ >> c.hello
164
+ Hello, world!
165
+
166
+ >> c.hello "Ruby"
167
+ Hello, Ruby!
168
+ EOT
169
+ hack :hello do |*args|
170
+ puts "Hello, %s!" % (args[0] || "world")
171
+ end
172
+ end
173
+ ~~~
174
+
175
+ See it in console:
176
+
177
+ ~~~
178
+ >> c
179
+ hello # Say hello to the world or to a specific person
180
+
181
+ >> c.hello?
182
+ Say hello to the world or to a specific person
183
+
184
+ Examples:
185
+
186
+ >> c.hello
187
+ Hello, world!
188
+
189
+ >> c.hello "Ruby"
190
+ Hello, Ruby!
191
+ ~~~
192
+
193
+ ### Defining groups ###
194
+
195
+ Groups act as namespaces and are used to encapsulate hacks and other groups. You can nest groups to any level.
196
+
197
+ ~~~
198
+ HackTree.define do
199
+ desc "DB management"
200
+ group :db do
201
+ desc "List tables in native format"
202
+ hack :tables do
203
+ ...
204
+ end
205
+
206
+ desc "Get `ActiveRecord::Base.connection`"
207
+ hack :conn do
208
+ ...
209
+ end
210
+ end
211
+ end
212
+ ~~~
213
+
214
+ See it in console:
215
+
216
+ ~~~
217
+ >> c
218
+ db/ # DB management
219
+ ...
220
+
221
+ >> c.db
222
+ conn # Get `ActiveRecord::Base.connection`
223
+ tables # List tables in native format
224
+ ~~~
225
+
226
+ ### Exiting from hacks, returning values ###
227
+
228
+ If the hack runs uninterrupted, it returns the result of its last statement.
229
+
230
+ ~~~
231
+ >> HackTree.define do
232
+ hack :five do
233
+ 5
234
+ end
235
+ end
236
+
237
+ >> c.five
238
+ => 5
239
+ ~~~
240
+
241
+ To exit from a hack, use `next`. Unfortunately, **you cannot** use `break` or `return`, please keep that in mind.
242
+
243
+ ~~~
244
+ HackTree.define do
245
+ hack :hello do |*args|
246
+ who = args[0] || "world"
247
+
248
+ if who == "Java"
249
+ puts "Goodbye, Java!"
250
+ next false
251
+ end
252
+
253
+ puts "Hello, #{who}!"
254
+
255
+ true
256
+ end
257
+ end
258
+ ~~~
259
+
260
+ In the above example, the hack should return `false` if the argument is "Java".
261
+
262
+ See it in console:
263
+
264
+ ~~~
57
265
  >> c.hello "Ruby"
266
+ Hello, Ruby!
267
+ => true
268
+
269
+ >> c.hello "Java"
270
+ Goodbye, Java!
271
+ => false
272
+ ~~~
273
+
274
+ ### Handling external dependencies ###
275
+
276
+ In real life it's possible that your hack depends on particular gems, environment settings, etc.
277
+
278
+ Please follow these recommendations when dealing with dependencies:
279
+
280
+ * Make sure your hack can be loaded regardless of dependencies. In other words, use dependencies **inside** the hack, not outside of it.
281
+ * Use `begin ... rescue` to catch possible unmet dependencies. Upon an unmet dependency report about it and return a noticeable result, e.g. `false`.
282
+
283
+ Example:
284
+
285
+ ~~~
286
+ HackTree.define do
287
+ group :db do
288
+ desc "Get `ActiveRecord::Base.connection`"
289
+ hack :conn do
290
+ begin
291
+ ActiveRecord::Base.connection
292
+ rescue
293
+ puts "Error: ActiveRecord not found"
294
+ false
295
+ end
296
+ end
297
+ end
298
+ end
58
299
  ~~~
59
300
 
60
- Place your application's hacks in `lib/hacks/`.
301
+ ### Defining classes and methods to be used in hacks ###
302
+
303
+ If your hack needs to use a custom method or class, it is recommended that you use a hierarchy of Ruby module namespaces matching your hack's name.
304
+
305
+ Example (`lib/hacks/db/tables.rb`):
306
+
307
+ ~~~
308
+ HackTree.define do
309
+ group :db do
310
+ desc "List tables in native format"
311
+ hack :tables do
312
+ tables = Hacks::DB::Tables.get_tables
313
+ tables.each do |table|
314
+ puts table
315
+ end
316
+ end
317
+ end
318
+ end
319
+
320
+ module Hacks
321
+ module DB
322
+ module Tables
323
+ def self.get_tables
324
+ # Some logic here.
325
+ ["authors", "books"]
326
+ end
327
+ end
328
+ end
329
+ end
330
+ ~~~
61
331
 
62
332
 
63
333
  Copyright
data/hack_tree.gemspec CHANGED
@@ -1,22 +1,23 @@
1
- $: << File.join(File.dirname(__FILE__), "lib")
2
- require "hack_tree"
1
+ require File.expand_path("../lib/hack_tree/version", __FILE__)
3
2
 
4
3
  Gem::Specification.new do |s|
5
- s.name = "hack_tree"
6
- s.version = HackTree::VERSION
7
- s.authors = ["Alex Fortuna"]
8
- s.email = ["alex.r@askit.org"]
9
- s.homepage = "http://github.com/dadooda/hack_tree"
4
+ s.name = "hack_tree"
5
+ s.version = HackTree::VERSION
6
+ s.authors = ["Alex Fortuna"]
7
+ s.email = ["alex.r@askit.org"]
8
+ s.homepage = "http://github.com/dadooda/hack_tree"
10
9
 
11
10
  # Copy these from class's description, adjust markup.
12
- s.summary = %q{Organize and share your console hacks}
11
+ s.summary = %q{Organize and share your console hacks}
12
+ # TODO: Proper text.
13
13
  s.description = %q{HackTree lets you organize and share your console hacks in an effective and uniform way. Blah-blah-blah.}
14
14
  # end of s.description=
15
15
 
16
- s.files = `git ls-files`.split("\n")
17
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map {|f| File.basename(f)}
19
19
  s.require_paths = ["lib"]
20
20
 
21
21
  s.add_development_dependency "rspec"
22
+ s.add_development_dependency "yard"
22
23
  end
@@ -1,5 +1,5 @@
1
1
  class HackTreeGenerator < Rails::Generators::Base #:nodoc:
2
- source_root File.join(File.dirname(__FILE__), "templates")
2
+ source_root File.expand_path("../templates", __FILE__)
3
3
 
4
4
  def go
5
5
  copy_file (bn = "hack_tree.rb"), "config/initializers/#{bn}"
@@ -42,7 +42,10 @@ module HackTree
42
42
  end
43
43
 
44
44
  def inspect
45
- # NOTE: Exceptions raised here result in `(Object doesn't support #inspect)`. No other details are available, be careful.
45
+ # NOTES:
46
+ #
47
+ # * Exceptions raised here result in `(Object doesn't support #inspect)`. No other details are available, be careful.
48
+ # * We don't return value from here, we **print** it directly.
46
49
 
47
50
  nodes = @instance.nodes.select {|node| node.parent == @parent}
48
51
 
@@ -103,7 +106,13 @@ module HackTree
103
106
  (["", node.full_desc] if node.full_desc),
104
107
  ].flatten(1).compact
105
108
 
109
+ # `out` are lines of text, eventually.
106
110
  ::Kernel.puts out.empty?? "No description, please provide one" : out
111
+
112
+ # For groups list contents after description.
113
+ #if node.is_a? Node::Group
114
+ # ::Kernel.puts ["", self.class.new(@instance, node).inspect]
115
+ #end
107
116
  else
108
117
  # Group/hack request.
109
118
  case node
@@ -12,21 +12,17 @@ module HackTree
12
12
  attrs.each {|k, v| send("#{k}=", v)}
13
13
  end
14
14
 
15
- # Get action object.
15
+ # Create action object.
16
16
  #
17
17
  # >> r.action
18
18
  # hello # Say hello
19
+ #
19
20
  # >> r.action.hello
20
21
  # Hello, world!
21
22
  def action
22
23
  ActionContext.new(self)
23
24
  end
24
25
 
25
- # Create action object. See HackTree::action for examples.
26
- def action
27
- ActionContext.new(self)
28
- end
29
-
30
26
  # List direct children of <tt>node</tt>. Return Array, possibly an empty one.
31
27
  #
32
28
  # children_of(nil) # => [...], children of root.
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), "base")
1
+ require File.expand_path("../base", __FILE__)
2
2
 
3
3
  module HackTree
4
4
  module Node
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), "base")
1
+ require File.expand_path("../base", __FILE__)
2
2
 
3
3
  module HackTree
4
4
  module Node
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), "base")
1
+ require File.expand_path("../base", __FILE__)
2
2
 
3
3
  module HackTree
4
4
  module Parser
@@ -0,0 +1,4 @@
1
+ module HackTree
2
+ # Gem version.
3
+ VERSION = "0.1.1"
4
+ end
data/lib/hack_tree.rb CHANGED
@@ -1,14 +1,14 @@
1
+
2
+ # Load all stuff.
1
3
  [
2
4
  "hack_tree/**/*.rb",
3
5
  ].each do |fmask|
4
- Dir[File.join(File.dirname(__FILE__), fmask)].each do |fn|
6
+ Dir[File.expand_path("../#{fmask}", __FILE__)].each do |fn|
5
7
  require fn
6
8
  end
7
9
  end
8
10
 
9
11
  module HackTree
10
- VERSION = "0.1.0"
11
-
12
12
  # Standard hacks bundled with the gem, their global names.
13
13
  STD_HACKS = [
14
14
  "hack_tree.reload",
@@ -57,22 +57,20 @@ module HackTree
57
57
  # Enable HackTree globally.
58
58
  #
59
59
  # >> HackTree.enable
60
- # Greetings.
60
+ # Console hacks are available. Use `c`, `c.hack?`, `c.hack [args]`
61
+ #
61
62
  # >> c
62
63
  # hello # Say hello
64
+ #
63
65
  # >> c.hello
64
66
  # Hello, world!
65
67
  #
66
68
  # Options:
67
69
  #
68
- # :completion => T|F # Enable completion enhancement. Default is true.
70
+ # :completion => T|F # Enable completion enhancement. Default is `true`.
69
71
  # :with_std => [...] # Load only these standard hacks.
70
72
  # :without_std => [...] # Load all but these standard hacks.
71
- # :quiet => T|F # Be quiet. Default is false.
72
- #
73
- # Examples:
74
- #
75
- # TODO.
73
+ # :quiet => T|F # Be quiet. Default is `false`.
76
74
  def self.enable(method_name = :c, options = {})
77
75
  options = options.dup
78
76
  o = {}
@@ -142,8 +140,8 @@ module HackTree
142
140
 
143
141
  global_names.each do |global_name|
144
142
  bn = global_name.gsub(".", "/") + ".rb"
145
- fn = File.join(File.dirname(__FILE__), "../hacks", bn)
146
- load fn
143
+ fn = File.expand_path("../hacks/#{bn}", __FILE__)
144
+ require fn
147
145
  end
148
146
 
149
147
  nil
@@ -157,77 +155,3 @@ module HackTree
157
155
  @instance ||= Instance.new
158
156
  end
159
157
  end
160
-
161
- #--------------------------------------- Junk
162
-
163
- if false
164
- # * Using array is a reliable way to ensure a newline after the banner.
165
- ::Kernel.puts [
166
- #"",
167
- "Console hacks are available. Use `%s`, `%s.hack?`, `%s.hack [args]`" % ([@enabled_as]*3),
168
- #"",
169
- ]
170
- end
171
-
172
- if false
173
- # Node (group/hack) regexp without delimiters.
174
- NAME_REGEXP = /[a-zA-Z_]\w*/
175
-
176
- # Node names which can't be used due to serious reasons.
177
- FORBIDDEN_NAMES = [
178
- :inspect,
179
- :method_missing,
180
- :to_s,
181
- ]
182
- end
183
-
184
- if false
185
- # Create the action object.
186
- #
187
- # module Kernel
188
- # # Access our hacks via <tt>c</tt>.
189
- # def c
190
- # ::HackTree.action
191
- # end
192
- # end
193
- #
194
- # >> c
195
- # hello # Say hello
196
- # >> c.hello
197
- # Hello, world!
198
- #
199
- # See also ::enable.
200
- def self.action
201
- ActionContext.new(@nodes)
202
- end
203
-
204
- # Clear self.
205
- def self.clear
206
- # Request re-initialization upon first use of any kind.
207
- @is_initialized = false
208
- end
209
-
210
- # Access nodes (groups/hacks) created via the DSL.
211
- def self.nodes
212
- @nodes
213
- end
214
-
215
- # See #nodes.
216
- def self.nodes=(ar)
217
- @nodes = ar
218
- end
219
-
220
- # NOTE: We need this wrapper to create private singletons.
221
- class << self
222
- private
223
-
224
- # On-the-fly initializer.
225
- def _otf_init
226
- return if @is_initialized
227
-
228
- @is_initialized = true
229
- @nodes = []
230
- @dsl_root = DslContext.new(@nodes)
231
- end
232
- end # class << self
233
- end
@@ -1,5 +1,4 @@
1
1
  HackTree.define do
2
- desc "HackTree management hacks"
3
2
  group :hack_tree do
4
3
  desc <<-EOT
5
4
  Reload application hacks
@@ -0,0 +1,5 @@
1
+ HackTree.define do
2
+ desc "HackTree management"
3
+ group :hack_tree do
4
+ end
5
+ end
@@ -41,8 +41,9 @@ HackTree.define do
41
41
  r.global_name =~ re,
42
42
  r.brief_desc && r.brief_desc =~ re,
43
43
 
44
- # TODO: Include full as an option, later.
45
- #r.full_desc && r.full_desc =~ re, # Better without full_desc, or examples may match.
44
+ # Might some time include search in `full_desc` as an option.
45
+ # Must not be enabled by default since it returns too many results.
46
+ #r.full_desc && r.full_desc =~ re,
46
47
  ].any?
47
48
  end
48
49
  end
@@ -50,7 +51,7 @@ HackTree.define do
50
51
  nodes = nodes.sort_by do |node|
51
52
  [
52
53
  node.is_a?(::HackTree::Node::Group) ? 0 : 1, # Groups first.
53
- node.name.to_s,
54
+ node.global_name,
54
55
  ]
55
56
  end
56
57
 
@@ -1,4 +1,4 @@
1
- require File.join(File.dirname(__FILE__), "spec_helper")
1
+ require File.expand_path("../spec_helper", __FILE__)
2
2
 
3
3
  describe HackTree::Parser::Desc do
4
4
  before :each do
@@ -0,0 +1,3 @@
1
+ require File.expand_path("../../spec_helper", __FILE__)
2
+
3
+ # Custom stuff for this group.
data/spec/spec_helper.rb CHANGED
@@ -1,16 +1,33 @@
1
- require "pathname"
1
+ # NOTE: I usually support `STANDALONE` mode in specs for Rails projects' components
2
+ # to be able to test them without loading the environment. This project does not
3
+ # depend on Rails *BUT* I still want a consistent RSpec file structure.
4
+ # If this is confusing, feel free to propose something better. :)
2
5
 
3
- # Load stuff.
4
- [
5
- "lib/**/*.rb",
6
- ].each do |fmask|
7
- Dir["./#{fmask}"].each do |fn|
8
- ##puts "-- req '#{fn}'"
9
- require fn
6
+ # No Rails, we're always standalone... and free! :)
7
+ STANDALONE = 1
8
+
9
+ if STANDALONE
10
+ # Provide root path object.
11
+ module Standalone
12
+ eval <<-EOT
13
+ def self.root
14
+ # This is an absolute path, it's perfectly safe to do a `+` and then `require`.
15
+ Pathname("#{File.expand_path('../..', __FILE__)}")
16
+ end
17
+ EOT
18
+ end
19
+
20
+ # Load stuff.
21
+ [
22
+ "lib/hack_tree/**/*.rb",
23
+ ].each do |fmask|
24
+ Dir[Standalone.root + fmask].each do |fn|
25
+ require fn
26
+ end
10
27
  end
11
28
  end
12
29
 
13
- # TODO: When this becomes a gem, use gem instead of direct copy.
30
+ # When this becomes a gem, use gem instead of direct copy.
14
31
  module RSpec
15
32
  module PrintOnFailure
16
33
  module Helpers
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hack_tree
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,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-04 00:00:00.000000000Z
12
+ date: 2012-03-09 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &71051990 !ruby/object:Gem::Requirement
16
+ requirement: &75379870 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,18 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *71051990
24
+ version_requirements: *75379870
25
+ - !ruby/object:Gem::Dependency
26
+ name: yard
27
+ requirement: &75361840 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *75361840
25
36
  description: HackTree lets you organize and share your console hacks in an effective
26
37
  and uniform way. Blah-blah-blah.
27
38
  email:
@@ -33,12 +44,11 @@ files:
33
44
  - .gitignore
34
45
  - .rspec
35
46
  - Gemfile
47
+ - Gemfile.lock
36
48
  - MIT-LICENSE
37
49
  - README.md
38
50
  - Rakefile
39
51
  - hack_tree.gemspec
40
- - hacks/hack_tree/reload.rb
41
- - hacks/ls.rb
42
52
  - lib/generators/hack_tree/USAGE
43
53
  - lib/generators/hack_tree/hack_tree_generator.rb
44
54
  - lib/generators/hack_tree/templates/INSTALL
@@ -56,16 +66,18 @@ files:
56
66
  - lib/hack_tree/parser/base.rb
57
67
  - lib/hack_tree/parser/desc.rb
58
68
  - lib/hack_tree/tools.rb
59
- - spec/lib/hack_tree/parser/desc_spec.rb
60
- - spec/lib/hack_tree/parser/desc_spec/000,brief.txt
61
- - spec/lib/hack_tree/parser/desc_spec/000,full.txt
62
- - spec/lib/hack_tree/parser/desc_spec/000.txt
63
- - spec/lib/hack_tree/parser/desc_spec/010,brief.txt
64
- - spec/lib/hack_tree/parser/desc_spec/010,full.txt
65
- - spec/lib/hack_tree/parser/desc_spec/010.txt
66
- - spec/lib/hack_tree/parser/spec_helper.rb
67
- - spec/lib/hack_tree/spec_helper.rb
68
- - spec/lib/spec_helper.rb
69
+ - lib/hack_tree/version.rb
70
+ - lib/hacks/hack_tree.rb
71
+ - lib/hacks/hack_tree/reload.rb
72
+ - lib/hacks/ls.rb
73
+ - spec/parser/desc_spec.rb
74
+ - spec/parser/desc_spec/000,brief.txt
75
+ - spec/parser/desc_spec/000,full.txt
76
+ - spec/parser/desc_spec/000.txt
77
+ - spec/parser/desc_spec/010,brief.txt
78
+ - spec/parser/desc_spec/010,full.txt
79
+ - spec/parser/desc_spec/010.txt
80
+ - spec/parser/spec_helper.rb
69
81
  - spec/spec_helper.rb
70
82
  homepage: http://github.com/dadooda/hack_tree
71
83
  licenses: []
@@ -92,3 +104,4 @@ signing_key:
92
104
  specification_version: 3
93
105
  summary: Organize and share your console hacks
94
106
  test_files: []
107
+ has_rdoc:
@@ -1,3 +0,0 @@
1
- require File.join(File.dirname(__FILE__), "../spec_helper")
2
-
3
- # Custom stuff for this group.
@@ -1,3 +0,0 @@
1
- require File.join(File.dirname(__FILE__), "../spec_helper")
2
-
3
- # Custom stuff for this group.
@@ -1,3 +0,0 @@
1
- require File.join(File.dirname(__FILE__), "../spec_helper")
2
-
3
- # Custom stuff for this group.