ronin 0.1.0 → 0.1.1

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.
Files changed (50) hide show
  1. data/History.txt +13 -0
  2. data/Manifest.txt +19 -17
  3. data/README.txt +9 -9
  4. data/Rakefile +1 -1
  5. data/bin/ronin +2 -2
  6. data/lib/ronin/author.rb +1 -1
  7. data/lib/ronin/cache/extension.rb +4 -12
  8. data/lib/ronin/cache/extension_cache.rb +1 -3
  9. data/lib/ronin/cache/overlay.rb +3 -3
  10. data/lib/ronin/cache/overlay_cache.rb +21 -15
  11. data/lib/ronin/chars/char_set.rb +6 -12
  12. data/lib/ronin/code/reference.rb +142 -0
  13. data/lib/ronin/code/symbol_table.rb +90 -0
  14. data/lib/ronin/context.rb +1 -1
  15. data/lib/ronin/database.rb +12 -3
  16. data/lib/ronin/extensions/string.rb +49 -0
  17. data/lib/ronin/formatting/extensions/text/string.rb +10 -5
  18. data/lib/ronin/object_context.rb +3 -9
  19. data/lib/ronin/pending_context.rb +8 -0
  20. data/lib/ronin/platform.rb +2 -2
  21. data/lib/ronin/product.rb +2 -2
  22. data/lib/ronin/program/command.rb +203 -0
  23. data/lib/ronin/program/commands/add.rb +71 -0
  24. data/lib/ronin/{runner/program → program}/commands/help.rb +14 -16
  25. data/lib/ronin/program/commands/install.rb +64 -0
  26. data/lib/ronin/program/commands/list.rb +79 -0
  27. data/lib/ronin/{runner/program/commands/update.rb → program/commands/remove.rb} +18 -18
  28. data/lib/ronin/{runner/program/commands/remove.rb → program/commands/uninstall.rb} +17 -19
  29. data/lib/ronin/{runner/program/commands/uninstall.rb → program/commands/update.rb} +17 -21
  30. data/lib/ronin/{runner/program → program}/commands.rb +9 -9
  31. data/lib/ronin/{runner/program → program}/exceptions/unknown_command.rb +2 -4
  32. data/lib/ronin/{runner.rb → program/exceptions.rb} +1 -1
  33. data/lib/ronin/{runner/program → program}/options.rb +4 -8
  34. data/lib/ronin/program/program.rb +168 -0
  35. data/lib/ronin/{runner/program/exceptions.rb → program.rb} +2 -1
  36. data/lib/ronin/rpc/client.rb +1 -1
  37. data/lib/ronin/version.rb +1 -1
  38. data/spec/code/reference_spec.rb +72 -0
  39. data/spec/code/symbol_table_spec.rb +35 -0
  40. data/spec/extensions/string_spec.rb +88 -4
  41. data/spec/formatting/text_spec.rb +2 -2
  42. data/spec/helpers.rb +0 -0
  43. metadata +25 -23
  44. data/lib/ronin/runner/program/command.rb +0 -204
  45. data/lib/ronin/runner/program/commands/add.rb +0 -73
  46. data/lib/ronin/runner/program/commands/install.rb +0 -65
  47. data/lib/ronin/runner/program/commands/list.rb +0 -81
  48. data/lib/ronin/runner/program/program.rb +0 -175
  49. data/lib/ronin/runner/program/runner.rb +0 -35
  50. data/lib/ronin/runner/program.rb +0 -26
@@ -21,37 +21,33 @@
21
21
  #++
22
22
  #
23
23
 
24
- require 'ronin/runner/program/command'
24
+ require 'ronin/program/command'
25
25
  require 'ronin/cache/overlay'
26
26
 
27
27
  module Ronin
28
- module Runner
29
- module Program
30
- class UninstallCommand < Command
28
+ module Program
29
+ class UpdateCommand < Command
31
30
 
32
- command :uninstall
31
+ command :update, :up
33
32
 
34
- options('NAME [NAME ...] [options]') do |opts|
35
- opts.options
33
+ options('[NAME ...] [options]') do |opts|
34
+ opts.options
36
35
 
37
- opts.arguments do
38
- opts.arg('NAME','The repository to uninstall')
39
- end
40
-
41
- opts.summary('Uninstall the specified repositories')
36
+ opts.arguments do
37
+ opts.arg('NAME','The repository to update')
42
38
  end
43
39
 
44
- def arguments(*args)
45
- args.each do |name|
46
- Cache::Overlay.save_cache do
47
- Cache::Overlay.uninstall(name) do |repo|
48
- puts "Uninstalling #{repo}..."
49
- end
50
- end
51
- end
52
- end
40
+ opts.summary('Updates all or the specified repositories')
41
+ end
53
42
 
43
+ def arguments(*args)
44
+ if args.empty?
45
+ Cache::Overlay.each { |repo| repo.update }
46
+ else
47
+ args.each { |name| Cache::Overlay.update(name) }
48
+ end
54
49
  end
50
+
55
51
  end
56
52
  end
57
53
  end
@@ -21,13 +21,13 @@
21
21
  #++
22
22
  #
23
23
 
24
- require 'ronin/runner/program/commands/add'
25
- require 'ronin/runner/program/commands/install'
26
- require 'ronin/runner/program/commands/list'
27
- require 'ronin/runner/program/commands/update'
28
- require 'ronin/runner/program/commands/uninstall'
29
- require 'ronin/runner/program/commands/remove'
30
- require 'ronin/runner/program/commands/help'
31
- require 'ronin/extensions'
24
+ require 'ronin/program/commands/add'
25
+ require 'ronin/program/commands/install'
26
+ require 'ronin/program/commands/list'
27
+ require 'ronin/program/commands/update'
28
+ require 'ronin/program/commands/uninstall'
29
+ require 'ronin/program/commands/remove'
30
+ require 'ronin/program/commands/help'
31
+ require 'ronin/extensions/kernel'
32
32
 
33
- ronin_require 'ronin/runner/program/commands'
33
+ ronin_require 'ronin/program/commands'
@@ -22,10 +22,8 @@
22
22
  #
23
23
 
24
24
  module Ronin
25
- module Runner
26
- module Program
27
- class UnknownCommand < RuntimeError
28
- end
25
+ module Program
26
+ class UnknownCommand < RuntimeError
29
27
  end
30
28
  end
31
29
  end
@@ -21,4 +21,4 @@
21
21
  #++
22
22
  #
23
23
 
24
- require 'ronin/runner/program'
24
+ require 'ronin/program/exceptions/unknown_command'
@@ -21,13 +21,13 @@
21
21
  #++
22
22
  #
23
23
 
24
- require 'ronin/runner/program/program'
24
+ require 'ronin/program/program'
25
25
 
26
26
  require 'optparse'
27
27
  require 'ostruct'
28
28
 
29
29
  module Ronin
30
- module Runner
30
+ module Program
31
31
  class Options
32
32
 
33
33
  # Settings used by the options
@@ -147,9 +147,7 @@ module Ronin
147
147
  def summary(*lines)
148
148
  @parser.separator ' Summary:'
149
149
 
150
- lines.each do |line|
151
- @parser.separator " #{line}"
152
- end
150
+ lines.each { |line| @parser.separator " #{line}" }
153
151
 
154
152
  @parser.separator ''
155
153
  return self
@@ -161,9 +159,7 @@ module Ronin
161
159
  def defaults(*flags)
162
160
  @parser.separator ' Defaults:'
163
161
 
164
- flags.each do |flag|
165
- @parser.separator " #{flag}"
166
- end
162
+ flags.each { |flag| @parser.separator " #{flag}" }
167
163
 
168
164
  @parser.separator ''
169
165
  return self
@@ -0,0 +1,168 @@
1
+ #
2
+ #--
3
+ # Ronin - A Ruby platform designed for information security and data
4
+ # exploration tasks.
5
+ #
6
+ # Copyright (c) 2006-2008 Hal Brodigan (postmodern.mod3 at gmail.com)
7
+ #
8
+ # This program is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program; if not, write to the Free Software
20
+ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
21
+ #++
22
+ #
23
+
24
+ require 'ronin/program/command'
25
+ require 'ronin/program/options'
26
+ require 'ronin/program/exceptions/unknown_command'
27
+ require 'ronin/console'
28
+ require 'ronin/version'
29
+
30
+ module Ronin
31
+ module Program
32
+ #
33
+ # Returns the commands registered with the Program.
34
+ #
35
+ def Program.commands
36
+ @@ronin_commands ||= []
37
+ end
38
+
39
+ #
40
+ # Returns the Hash of the Command names and their Command objects
41
+ # registered with the Program.
42
+ #
43
+ def Program.commands_by_name
44
+ @@ronin_commands_by_name ||= {}
45
+ end
46
+
47
+ #
48
+ # Returns +true+ if the a Command with the specified _name_ was
49
+ # registered with the Program.
50
+ #
51
+ def Program.has_command?(name)
52
+ Program.commands_by_name.has_key?(name.to_s)
53
+ end
54
+
55
+ #
56
+ # Returns the Command registered with the Program with the specified
57
+ # _name_.
58
+ #
59
+ def Program.get_command(name)
60
+ name = name.to_s
61
+
62
+ unless Program.has_command?(name)
63
+ raise(UnknownCommand,"unknown command #{name.dump}",caller)
64
+ end
65
+
66
+ return Program.commands_by_name[name]
67
+ end
68
+
69
+ #
70
+ # Prints the specified error _message_.
71
+ #
72
+ def Program.error(message)
73
+ STDERR.puts "ronin: #{message}"
74
+ return false
75
+ end
76
+
77
+ #
78
+ # Exits successfully from the Program. If a _block_ is given, it will
79
+ # be called before the Program is exited.
80
+ #
81
+ def Program.success(&block)
82
+ block.call(self) if block
83
+ exit
84
+ end
85
+
86
+ #
87
+ # Prints the given error _messages_ and exits unseccessfully from the
88
+ # Program. If a _block_ is given, it will be called before any
89
+ # error _messages_ are printed.
90
+ #
91
+ def Program.fail(*messages,&block)
92
+ block.call(self) if block
93
+ messages.each { |mesg| Program.error(mesg) }
94
+
95
+ exit -1
96
+ end
97
+
98
+ #
99
+ # If a _topic_ is given, the help message for that _topic_ will be
100
+ # printed, otherwise a list of available commands will be printed.
101
+ #
102
+ def Program.help(topic=nil)
103
+ if topic
104
+ begin
105
+ get_command(topic).help
106
+ rescue UnknownCommand => exp
107
+ Program.fail(exp)
108
+ end
109
+ else
110
+ puts 'Available commands:'
111
+
112
+ Program.commands.sort_by { |cmd| cmd.command_names[0] }.each { |cmd|
113
+ puts " #{cmd.command_names.join(', ')}"
114
+ }
115
+ end
116
+ end
117
+
118
+ #
119
+ # The default command to run with the given _argv_ Array when no
120
+ # sub-command is given.
121
+ #
122
+ def Program.default_command(*argv)
123
+ opts = Options.new('ronin','<command> [options]') { |opts|
124
+ opts.options do |opts|
125
+ opts.on('-r','--require LIB','require the specified library or path') do |lib|
126
+ Console.auto_load << lib.to_s
127
+ end
128
+
129
+ opts.on('-V','--version','print version information and exit') do
130
+ Program.success do
131
+ puts "Ronin #{Ronin::VERSION}"
132
+ end
133
+ end
134
+ end
135
+
136
+ opts.summary('Ronin is a Ruby development platform designed for information security','and data exploration tasks.')
137
+ }
138
+
139
+ return opts.parse(argv) { |opts,args| Console.start }
140
+ end
141
+
142
+ #
143
+ # Runs the Program with the given _argv_ Array. If the first argument
144
+ # is a sub-command name, the Program will attempt to find and execute
145
+ # the Command with the same name.
146
+ #
147
+ def Program.run(*argv)
148
+ begin
149
+ if (argv.empty? || argv[0][0..0]=='-')
150
+ Program.default_command(*argv)
151
+ else
152
+ cmd = argv.first
153
+ argv = argv[1..-1]
154
+
155
+ if Program.has_command?(cmd)
156
+ Program.commands_by_name[cmd].run(*argv)
157
+ else
158
+ Program.fail("unknown command #{cmd.dump}")
159
+ end
160
+ end
161
+ rescue OptionParser::MissingArgument, OptionParser::InvalidOption => e
162
+ Program.fail(e)
163
+ end
164
+
165
+ return true
166
+ end
167
+ end
168
+ end
@@ -21,4 +21,5 @@
21
21
  #++
22
22
  #
23
23
 
24
- require 'ronin/runner/program/exceptions/unknown_command'
24
+ require 'ronin/program/program'
25
+ require 'ronin/program/commands'
@@ -22,7 +22,7 @@
22
22
  #
23
23
 
24
24
  require 'ronin/rpc/exceptions/not_implemented'
25
- require 'ronin/rpc/exceptions/unknown_service'
25
+ require 'ronin/rpc/exceptions/response_missing'
26
26
  require 'ronin/rpc/service'
27
27
  require 'ronin/extensions/meta'
28
28
 
data/lib/ronin/version.rb CHANGED
@@ -23,5 +23,5 @@
23
23
 
24
24
  module Ronin
25
25
  # Ronin version
26
- VERSION = '0.1.0'
26
+ VERSION = '0.1.1'
27
27
  end
@@ -0,0 +1,72 @@
1
+ require 'ronin/code/reference'
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Code::Reference do
6
+ before(:all) do
7
+ class Thing
8
+
9
+ def exposed
10
+ 1
11
+ end
12
+
13
+ protected
14
+
15
+ def not_exposed
16
+ 2
17
+ end
18
+
19
+ end
20
+
21
+ @object = Thing.new
22
+ @ref = Code::Reference.new(@object)
23
+ end
24
+
25
+ it "should provide direct access to the referenced object" do
26
+ @ref.value.should == @object
27
+ end
28
+
29
+ it "should be a kind of Reference" do
30
+ @ref.kind_of?(Code::Reference).should == true
31
+ @ref.is_a?(Code::Reference).should == true
32
+ @ref.instance_of?(Code::Reference).should == true
33
+ end
34
+
35
+ it "should have the class of the referenced object" do
36
+ @ref.class.should == Thing
37
+ end
38
+
39
+ it "should be a kind of the referenced object type" do
40
+ @ref.kind_of?(Thing).should == true
41
+ @ref.is_a?(Thing).should == true
42
+ @ref.instance_of?(Thing).should == true
43
+ end
44
+
45
+ it "should be equal to itself" do
46
+ @ref.eql?(@ref).should == true
47
+ @ref.should == @ref
48
+ @ref.should === @ref
49
+ end
50
+
51
+ it "should be equal to the referenced object" do
52
+ @ref.eql?(@object).should == true
53
+ @ref.should == @object
54
+ @ref.should === @object
55
+ end
56
+
57
+ it "should respond to Reference methods" do
58
+ @ref.respond_to?(:value).should == true
59
+ end
60
+
61
+ it "should respond to the methods of the referenced object" do
62
+ @ref.respond_to?(:exposed).should == true
63
+ end
64
+
65
+ it "should relay method calls to the referenced object" do
66
+ @ref.exposed.should == 1
67
+ end
68
+
69
+ it "should raise a NoMethodError when trying to call a protected or private method" do
70
+ lambda { @ref.not_exposed }.should raise_error(NoMethodError)
71
+ end
72
+ end
@@ -0,0 +1,35 @@
1
+ require 'ronin/code/symbol_table'
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Code::SymbolTable do
6
+ before(:all) do
7
+ @one = [:a, :b, :c]
8
+ @two = {:one => 1, :two => 2}
9
+
10
+ @table = Code::SymbolTable.new(:one => @one, :two => @two)
11
+ end
12
+
13
+ it "should have symbols" do
14
+ @table.has_symbol?(:one).should == true
15
+ @table.has_symbol?(:two).should == true
16
+ end
17
+
18
+ it "should provide transparent access to the symbol values" do
19
+ @table[:one].should == [:a, :b, :c]
20
+
21
+ @table[:one] = [:d, :e]
22
+ @table[:one].should == [:d, :e]
23
+ end
24
+
25
+ it "should provide direct access to the symbols" do
26
+ @table.symbol(:two).value.should == {:one => 1, :two => 2}
27
+ end
28
+
29
+ it "should be able to set symbols en-mass" do
30
+ @table.symbols = {:three => 3, :four => 4}
31
+
32
+ @table[:three].should == 3
33
+ @table[:four].should == 4
34
+ end
35
+ end
@@ -3,11 +3,95 @@ require 'ronin/extensions/string'
3
3
  require 'spec_helper'
4
4
 
5
5
  describe String do
6
- it "should be able to convert proper names to method names" do
7
- "Proper Name".to_method_name.should == 'proper_name'
6
+ describe "to_method_name" do
7
+ it "should be able to convert proper names to method names" do
8
+ "Proper Name".to_method_name.should == 'proper_name'
9
+ end
10
+
11
+ it "should be able to convert Class names to method names" do
12
+ "Namespace::Test".to_method_name.should == 'namespace_test'
13
+ end
14
+ end
15
+
16
+ describe "common_prefix" do
17
+ it "should find the common prefix between two Strings" do
18
+ one = 'What is puzzling you is the nature of my game'
19
+ two = 'What is puzzling you is the nature of my name'
20
+ common = 'What is puzzling you is the nature of my '
21
+
22
+ one.common_prefix(two).should == common
23
+ end
24
+
25
+ it "should return the common prefix between two Strings with no uncommon postfix" do
26
+ one = "1234"
27
+ two = "12345"
28
+ common = "1234"
29
+
30
+ one.common_prefix(two).should == common
31
+ end
32
+
33
+ it "should return an empty String if there is no common prefix" do
34
+ one = 'Tell me people'
35
+ two = 'Whats my name'
36
+
37
+ one.common_prefix(two).should == ''
38
+ end
39
+
40
+ it "should return an empty String if one of the strings is also empty" do
41
+ one = 'Haha'
42
+ two = ''
43
+
44
+ one.common_prefix(two).should == ''
45
+ end
46
+ end
47
+
48
+ describe "common_postfix" do
49
+ it "should find the common postfix between two Strings" do
50
+ one = 'Tell me baby whats my name'
51
+ two = "Can't you guess my name"
52
+ common = 's my name'
53
+
54
+ one.common_postfix(two).should == common
55
+ end
56
+
57
+ it "should return an empty String if there is no common postfix" do
58
+ one = 'You got to right up, stand up'
59
+ two = 'stand up for your rights'
60
+
61
+ one.common_postfix(two).should == ''
62
+ end
63
+
64
+ it "should return an empty String if one of the strings is also empty" do
65
+ one = 'You and I must fight for our rights'
66
+ two = ''
67
+
68
+ one.common_postfix(two).should == ''
69
+ end
8
70
  end
9
71
 
10
- it "should be able to convert Class names to method names" do
11
- "Namespace::Test".to_method_name.should == 'namespace_test'
72
+ describe "uncommon_substring" do
73
+ it "should find the uncommon substring between two Strings" do
74
+ one = "Tell me baby whats my name"
75
+ two = "Tell me honey whats my name"
76
+ uncommon = 'bab'
77
+
78
+ one.uncommon_substring(two).should == uncommon
79
+ end
80
+
81
+ it "should find the uncommon substring between two Strings with a common prefix" do
82
+ one = 'You and I must fight for our rights'
83
+ two = 'You and I must fight to survive'
84
+ uncommon = 'for our rights'
85
+
86
+ one.uncommon_substring(two).should == uncommon
87
+ end
88
+
89
+ it "should find the uncommon substring between two Strings with a common postfix" do
90
+ one = 'Tell me baby whats my name'
91
+ two = "Can't you guess my name"
92
+ uncommon = 'Tell me baby what'
93
+
94
+ one.uncommon_substring(two).should == uncommon
95
+ end
12
96
  end
13
97
  end
@@ -15,7 +15,7 @@ describe String do
15
15
  @string.respond_to?('format_bytes').should == true
16
16
  end
17
17
 
18
- it "should provide String#rand_case" do
19
- @string.respond_to?('rand_case').should == true
18
+ it "should provide String#random_case" do
19
+ @string.respond_to?('random_case').should == true
20
20
  end
21
21
  end
data/spec/helpers.rb ADDED
File without changes
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ronin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Postmodern Modulus III
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-09-28 00:00:00 -07:00
12
+ date: 2008-10-26 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -103,14 +103,14 @@ dependencies:
103
103
  version: 0.9.3
104
104
  version:
105
105
  - !ruby/object:Gem::Dependency
106
- name: reverserequire
106
+ name: reverse-require
107
107
  type: :runtime
108
108
  version_requirement:
109
109
  version_requirements: !ruby/object:Gem::Requirement
110
110
  requirements:
111
111
  - - ">="
112
112
  - !ruby/object:Gem::Version
113
- version: 0.1.0
113
+ version: 0.1.2
114
114
  version:
115
115
  - !ruby/object:Gem::Dependency
116
116
  name: repertoire
@@ -130,7 +130,7 @@ dependencies:
130
130
  requirements:
131
131
  - - ">="
132
132
  - !ruby/object:Gem::Version
133
- version: 1.7.0
133
+ version: 1.8.2
134
134
  version:
135
135
  description: Ronin is a Ruby platform designed for information security and data exploration tasks. Ronin allows for the rapid development and distribution of code over many of the common Source-Code-Management (SCM) systems.
136
136
  email:
@@ -232,6 +232,8 @@ files:
232
232
  - lib/ronin/network/http.rb
233
233
  - lib/ronin/network/http/exceptions.rb
234
234
  - lib/ronin/network/http/exceptions/unknown_request.rb
235
+ - lib/ronin/code/reference.rb
236
+ - lib/ronin/code/symbol_table.rb
235
237
  - lib/ronin/rpc.rb
236
238
  - lib/ronin/rpc/exceptions.rb
237
239
  - lib/ronin/rpc/exceptions/not_implemented.rb
@@ -284,26 +286,24 @@ files:
284
286
  - lib/ronin/cache/ronin.rb
285
287
  - lib/ronin/console.rb
286
288
  - lib/ronin/shell.rb
287
- - lib/ronin/runner.rb
288
- - lib/ronin/runner/program.rb
289
- - lib/ronin/runner/program/exceptions.rb
290
- - lib/ronin/runner/program/exceptions/unknown_command.rb
291
- - lib/ronin/runner/program/command.rb
292
- - lib/ronin/runner/program/options.rb
293
- - lib/ronin/runner/program/commands.rb
294
- - lib/ronin/runner/program/commands/add.rb
295
- - lib/ronin/runner/program/commands/install.rb
296
- - lib/ronin/runner/program/commands/list.rb
297
- - lib/ronin/runner/program/commands/update.rb
298
- - lib/ronin/runner/program/commands/remove.rb
299
- - lib/ronin/runner/program/commands/uninstall.rb
300
- - lib/ronin/runner/program/commands/help.rb
301
- - lib/ronin/runner/program/program.rb
302
- - lib/ronin/runner/program/runner.rb
289
+ - lib/ronin/program.rb
290
+ - lib/ronin/program/exceptions.rb
291
+ - lib/ronin/program/exceptions/unknown_command.rb
292
+ - lib/ronin/program/command.rb
293
+ - lib/ronin/program/options.rb
294
+ - lib/ronin/program/commands.rb
295
+ - lib/ronin/program/commands/add.rb
296
+ - lib/ronin/program/commands/install.rb
297
+ - lib/ronin/program/commands/list.rb
298
+ - lib/ronin/program/commands/update.rb
299
+ - lib/ronin/program/commands/remove.rb
300
+ - lib/ronin/program/commands/uninstall.rb
301
+ - lib/ronin/program/commands/help.rb
302
+ - lib/ronin/program/program.rb
303
303
  - lib/ronin/ronin.rb
304
304
  - lib/ronin/version.rb
305
305
  - tasks/spec.rb
306
- - spec/helpers/
306
+ - spec/helpers.rb
307
307
  - spec/spec_helper.rb
308
308
  - spec/arch_spec.rb
309
309
  - spec/author_spec.rb
@@ -322,6 +322,8 @@ files:
322
322
  - spec/formatting/html_spec.rb
323
323
  - spec/formatting/http_spec.rb
324
324
  - spec/formatting/text_spec.rb
325
+ - spec/code/reference_spec.rb
326
+ - spec/code/symbol_table_spec.rb
325
327
  - spec/license_spec.rb
326
328
  - spec/path_spec.rb
327
329
  - spec/platform_spec.rb
@@ -353,7 +355,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
353
355
  requirements: []
354
356
 
355
357
  rubyforge_project: ronin
356
- rubygems_version: 1.2.0
358
+ rubygems_version: 1.3.0
357
359
  signing_key:
358
360
  specification_version: 2
359
361
  summary: Ronin is a Ruby platform designed for information security and data exploration tasks