wordlist 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.
@@ -2,19 +2,19 @@ require 'wordlist/builder'
2
2
 
3
3
  require 'spec_helper'
4
4
  require 'helpers/text'
5
+ require 'helpers/wordlist'
5
6
  require 'builder_examples'
6
7
 
7
- require 'tempfile'
8
- require 'fileutils'
9
-
10
8
  describe Builder do
9
+ include Helpers
10
+
11
11
  describe "new wordlist" do
12
12
  before(:all) do
13
13
  @expected = ['dog', 'cat', 'catx', 'dat']
14
14
  end
15
15
 
16
16
  before(:each) do
17
- @path = Tempfile.new('wordlist').path
17
+ @path = wordlist_tempfile
18
18
  end
19
19
 
20
20
  it_should_behave_like "a wordlist Builder"
@@ -27,10 +27,101 @@ describe Builder do
27
27
  end
28
28
 
29
29
  before(:each) do
30
- @path = Tempfile.new('wordlist').path
31
- FileUtils.cp(PREVIOUS_WORDLIST,@path)
30
+ @path = wordlist_tempfile(Helpers::PREVIOUS_WORDLIST)
32
31
  end
33
32
 
34
33
  it_should_behave_like "a wordlist Builder"
35
34
  end
35
+
36
+ describe "word queue" do
37
+ before(:all) do
38
+ @path = wordlist_tempfile
39
+ end
40
+
41
+ before(:each) do
42
+ @builder = Builder.new(@path, :max_words => 2)
43
+ end
44
+
45
+ it "should act like a queue" do
46
+ @builder.enqueue('dog')
47
+ @builder.enqueue('cat')
48
+
49
+ @builder.word_queue.should == ['dog', 'cat']
50
+ end
51
+
52
+ it "should have a maximum length of the queue" do
53
+ @builder.enqueue('dog')
54
+ @builder.enqueue('cat')
55
+ @builder.enqueue('log')
56
+
57
+ @builder.word_queue.should == ['cat', 'log']
58
+ end
59
+ end
60
+
61
+ describe "word combinations" do
62
+ before(:all) do
63
+ @path = wordlist_tempfile
64
+ end
65
+
66
+ it "should yield only one word when max_words is set to 1" do
67
+ builder = Builder.new(@path)
68
+ builder.enqueue('dog')
69
+
70
+ builder.word_combinations do |words|
71
+ words.should == 'dog'
72
+ end
73
+ end
74
+
75
+ it "should include the last seen word in every combination" do
76
+ builder = Builder.new(@path, :max_words => 2)
77
+ builder.enqueue('dog')
78
+ builder.enqueue('cat')
79
+ builder.enqueue('dat')
80
+
81
+ builder.word_combinations do |words|
82
+ words.split(' ').include?('dat').should == true
83
+ end
84
+ end
85
+
86
+ it "should include a minimum number of words" do
87
+ builder = Builder.new(@path, :min_words => 2, :max_words => 3)
88
+ builder.enqueue('dog')
89
+ builder.enqueue('cat')
90
+ builder.enqueue('dat')
91
+
92
+ builder.word_combinations do |words|
93
+ words.split(' ').length.should >= 2
94
+ end
95
+ end
96
+
97
+ it "should not include more than a maximum number of words" do
98
+ builder = Builder.new(@path, :max_words => 2)
99
+ builder.enqueue('dog')
100
+ builder.enqueue('cat')
101
+ builder.enqueue('dat')
102
+
103
+ builder.word_combinations do |words|
104
+ words.split(' ').length.should_not > 2
105
+ end
106
+ end
107
+
108
+ it "should preserve the order words were seen in" do
109
+ builder = Builder.new(@path, :max_words => 3)
110
+ builder.enqueue('dog')
111
+ builder.enqueue('cat')
112
+ builder.enqueue('dat')
113
+
114
+ combinations = []
115
+
116
+ builder.word_combinations do |words|
117
+ combinations << words
118
+ end
119
+
120
+ combinations.should == [
121
+ 'dat',
122
+ 'cat dat',
123
+ 'dog cat dat'
124
+ ]
125
+ end
126
+ end
36
127
  end
@@ -1,3 +1,5 @@
1
+ require 'wordlist/parsers'
2
+
1
3
  class ParserClass
2
4
 
3
5
  include Wordlist::Parsers
@@ -0,0 +1,6 @@
1
+ module Helpers
2
+ TEXT_DIR = File.expand_path(File.join(File.dirname(__FILE__),'..','text'))
3
+
4
+ SAMPLE_TEXT = File.join(TEXT_DIR,'sample.txt')
5
+ PREVIOUS_WORDLIST = File.join(TEXT_DIR,'previous_wordlist.txt')
6
+ end
@@ -0,0 +1,23 @@
1
+ require 'tempfile'
2
+ require 'fileutils'
3
+
4
+ module Helpers
5
+ def wordlist_tempfile(existing_file=nil)
6
+ path = Tempfile.new('wordlist').path
7
+
8
+ FileUtils.cp(existing_file,path) if existing_file
9
+ return path
10
+ end
11
+
12
+ def should_contain_words(path,expected)
13
+ words = []
14
+
15
+ File.open(path) do |file|
16
+ file.each_line do |line|
17
+ words << line.chomp
18
+ end
19
+ end
20
+
21
+ words.sort.should == expected.sort
22
+ end
23
+ end
@@ -1,7 +1,5 @@
1
- require 'rubygems'
2
- gem 'rspec', '>=1.1.12'
3
- require 'spec'
1
+ gem 'rspec', '~> 2.4'
2
+ require 'rspec'
4
3
 
5
4
  require 'wordlist/version'
6
-
7
5
  include Wordlist
@@ -0,0 +1,60 @@
1
+ # encoding: utf-8
2
+
3
+ require 'yaml'
4
+
5
+ Gem::Specification.new do |gem|
6
+ gemspec = YAML.load_file('gemspec.yml')
7
+
8
+ gem.name = gemspec.fetch('name')
9
+ gem.version = gemspec.fetch('version') do
10
+ lib_dir = File.join(File.dirname(__FILE__),'lib')
11
+ $LOAD_PATH << lib_dir unless $LOAD_PATH.include?(lib_dir)
12
+
13
+ require 'wordlist/version'
14
+ Wordlist::VERSION
15
+ end
16
+
17
+ gem.summary = gemspec['summary']
18
+ gem.description = gemspec['description']
19
+ gem.licenses = Array(gemspec['license'])
20
+ gem.authors = Array(gemspec['authors'])
21
+ gem.email = gemspec['email']
22
+ gem.homepage = gemspec['homepage']
23
+
24
+ glob = lambda { |patterns| gem.files & Dir[*patterns] }
25
+
26
+ gem.files = `git ls-files`.split($/)
27
+ gem.files = glob[gemspec['files']] if gemspec['files']
28
+
29
+ gem.executables = gemspec.fetch('executables') do
30
+ glob['bin/*'].map { |path| File.basename(path) }
31
+ end
32
+ gem.default_executable = gem.executables.first if Gem::VERSION < '1.7.'
33
+
34
+ gem.extensions = glob[gemspec['extensions'] || 'ext/**/extconf.rb']
35
+ gem.test_files = glob[gemspec['test_files'] || '{test/{**/}*_test.rb']
36
+ gem.extra_rdoc_files = glob[gemspec['extra_doc_files'] || '*.{txt,md}']
37
+
38
+ gem.require_paths = Array(gemspec.fetch('require_paths') {
39
+ %w[ext lib].select { |dir| File.directory?(dir) }
40
+ })
41
+
42
+ gem.requirements = gemspec['requirements']
43
+ gem.required_ruby_version = gemspec['required_ruby_version']
44
+ gem.required_rubygems_version = gemspec['required_rubygems_version']
45
+ gem.post_install_message = gemspec['post_install_message']
46
+
47
+ split = lambda { |string| string.split(/,\s*/) }
48
+
49
+ if gemspec['dependencies']
50
+ gemspec['dependencies'].each do |name,versions|
51
+ gem.add_dependency(name,split[versions])
52
+ end
53
+ end
54
+
55
+ if gemspec['development_dependencies']
56
+ gemspec['development_dependencies'].each do |name,versions|
57
+ gem.add_development_dependency(name,split[versions])
58
+ end
59
+ end
60
+ end
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wordlist
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ hash: 25
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 1
10
+ version: 0.1.1
5
11
  platform: ruby
6
12
  authors:
7
13
  - Postmodern
@@ -9,115 +15,153 @@ autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2009-08-31 00:00:00 -07:00
13
- default_executable:
18
+ date: 2012-06-12 00:00:00 Z
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: spidr
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ~>
27
+ - !ruby/object:Gem::Version
28
+ hash: 15
29
+ segments:
30
+ - 0
31
+ - 2
32
+ version: "0.2"
17
33
  type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: rubygems-tasks
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
20
40
  requirements:
21
- - - ">="
41
+ - - ~>
22
42
  - !ruby/object:Gem::Version
23
- version: 0.1.9
24
- version:
43
+ hash: 9
44
+ segments:
45
+ - 0
46
+ - 1
47
+ version: "0.1"
48
+ type: :development
49
+ version_requirements: *id002
25
50
  - !ruby/object:Gem::Dependency
26
51
  name: rspec
27
- type: :development
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
52
+ prerelease: false
53
+ requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
30
55
  requirements:
31
- - - ">="
56
+ - - ~>
32
57
  - !ruby/object:Gem::Version
33
- version: 1.1.12
34
- version:
35
- - !ruby/object:Gem::Dependency
36
- name: hoe
58
+ hash: 11
59
+ segments:
60
+ - 2
61
+ - 4
62
+ version: "2.4"
37
63
  type: :development
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
64
+ version_requirements: *id003
65
+ - !ruby/object:Gem::Dependency
66
+ name: yard
67
+ prerelease: false
68
+ requirement: &id004 !ruby/object:Gem::Requirement
69
+ none: false
40
70
  requirements:
41
- - - ">="
71
+ - - ~>
42
72
  - !ruby/object:Gem::Version
43
- version: 2.3.3
44
- version:
45
- description: |-
46
- A Ruby library for generating and working with word-lists. Wordlist allows
47
- one to efficiently generate unique word-lists from arbitrary text or
48
- other sources, such as website content. Wordlist can also quickly enumerate
49
- through words within an existing word-list, applying multiple mutation
50
- rules to each word in the list.
51
- email:
52
- - postmodern.mod3@gmail.com
53
- executables: []
54
-
73
+ hash: 27
74
+ segments:
75
+ - 0
76
+ - 8
77
+ version: "0.8"
78
+ type: :development
79
+ version_requirements: *id004
80
+ description: A Ruby library for generating and working with word-lists. Wordlist allows one to efficiently generate unique word-lists from arbitrary text or other sources, such as website content. Wordlist can also quickly enumerate through words within an existing word-list, applying multiple mutation rules to each word in the list.
81
+ email: postmodern.mod3@gmail.com
82
+ executables:
83
+ - wordlist
55
84
  extensions: []
56
85
 
57
86
  extra_rdoc_files:
58
- - History.txt
59
- - Manifest.txt
60
- - README.txt
61
- - scripts/text/comedy_of_errors.txt
87
+ - ChangeLog.md
88
+ - LICENSE.txt
89
+ - README.md
62
90
  files:
63
- - History.txt
64
- - Manifest.txt
65
- - README.txt
91
+ - .document
92
+ - .gitignore
93
+ - .rspec
94
+ - .yardopts
95
+ - ChangeLog.md
96
+ - LICENSE.txt
97
+ - README.md
66
98
  - Rakefile
99
+ - bin/wordlist
100
+ - gemspec.yml
67
101
  - lib/wordlist.rb
68
- - lib/wordlist/unique_filter.rb
69
- - lib/wordlist/parsers.rb
70
102
  - lib/wordlist/builder.rb
71
103
  - lib/wordlist/builders.rb
72
104
  - lib/wordlist/builders/website.rb
73
- - lib/wordlist/mutator.rb
74
- - lib/wordlist/list.rb
75
105
  - lib/wordlist/flat_file.rb
106
+ - lib/wordlist/list.rb
107
+ - lib/wordlist/mutator.rb
108
+ - lib/wordlist/parsers.rb
109
+ - lib/wordlist/runners.rb
110
+ - lib/wordlist/runners/list.rb
111
+ - lib/wordlist/runners/runner.rb
112
+ - lib/wordlist/unique_filter.rb
76
113
  - lib/wordlist/version.rb
77
- - tasks/spec.rb
78
114
  - scripts/benchmark
79
115
  - scripts/text/comedy_of_errors.txt
116
+ - spec/builder_examples.rb
117
+ - spec/builder_spec.rb
80
118
  - spec/classes/parser_class.rb
81
119
  - spec/classes/test_list.rb
120
+ - spec/flat_file_spec.rb
121
+ - spec/helpers/text.rb
122
+ - spec/helpers/wordlist.rb
123
+ - spec/list_spec.rb
124
+ - spec/mutator_spec.rb
125
+ - spec/parsers_spec.rb
126
+ - spec/spec_helper.rb
127
+ - spec/text/flat_file.txt
82
128
  - spec/text/previous_wordlist.txt
83
129
  - spec/text/sample.txt
84
- - spec/text/flat_file.txt
85
- - spec/spec_helper.rb
86
130
  - spec/unique_filter_spec.rb
87
- - spec/parsers_spec.rb
88
- - spec/mutator_spec.rb
89
- - spec/builder_spec.rb
90
- - spec/list_spec.rb
91
- - spec/flat_file_spec.rb
92
131
  - spec/wordlist_spec.rb
93
- has_rdoc: true
94
- homepage: http://wordlist.rubyforge.org/
95
- licenses: []
96
-
132
+ - wordlist.gemspec
133
+ homepage: https://github.com/sophsec/wordlist
134
+ licenses:
135
+ - MIT
97
136
  post_install_message:
98
- rdoc_options:
99
- - --main
100
- - README.txt
137
+ rdoc_options: []
138
+
101
139
  require_paths:
102
140
  - lib
103
141
  required_ruby_version: !ruby/object:Gem::Requirement
142
+ none: false
104
143
  requirements:
105
144
  - - ">="
106
145
  - !ruby/object:Gem::Version
146
+ hash: 3
147
+ segments:
148
+ - 0
107
149
  version: "0"
108
- version:
109
150
  required_rubygems_version: !ruby/object:Gem::Requirement
151
+ none: false
110
152
  requirements:
111
153
  - - ">="
112
154
  - !ruby/object:Gem::Version
155
+ hash: 3
156
+ segments:
157
+ - 0
113
158
  version: "0"
114
- version:
115
159
  requirements: []
116
160
 
117
- rubyforge_project: wordlist
118
- rubygems_version: 1.3.5
161
+ rubyforge_project:
162
+ rubygems_version: 1.8.23
119
163
  signing_key:
120
164
  specification_version: 3
121
- summary: A Ruby library for generating and working with word-lists
165
+ summary: A Ruby library for generating and working with word-lists.
122
166
  test_files: []
123
167