orion 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 743d93cb31ed4bcca866db0bf6838b608a5c7fdf
4
+ data.tar.gz: 71c0116bc3e84484f9739a356ce57ceec1390b2c
5
+ SHA512:
6
+ metadata.gz: 2a50cacc408923ef9dcacfa4a43bc37f7ddb54569c5c8e8f0eb68965214022264065b0087089fea556724342c16ddb67db1c37d7b13157e9f6fd9c3dd0af0b88
7
+ data.tar.gz: bb9e9ac65200025da60284b1cefe2b3430bab682165e60d8ab075d6d4f00302f5ead4e422a9595936bd241bf1c4ac7949a5cdbc0cc9580e93004136d49ff1fff
@@ -0,0 +1,90 @@
1
+ require "boyer_moore/rich_hash"
2
+ # ported directly from this version wikipedia:
3
+ # http://en.wikipedia.org/w/index.php?title=Boyer%E2%80%93Moore_string_search_algorithm&diff=391986850&oldid=391398281
4
+ # it's not very rubyish but it works
5
+ module Orion
6
+ module BoyerMoore
7
+
8
+ def self.compute_prefix(str)
9
+ size = str.length
10
+ k = 0
11
+ result = [0]
12
+ 1.upto(size - 1) do |q|
13
+ while (k > 0) && (str[k] != str[q])
14
+ k = result[k-1]
15
+ end
16
+ k += 1 if(str[k] == str[q])
17
+ result[q] = k
18
+ end
19
+ result
20
+ end
21
+
22
+ def self.prepare_badcharacter_heuristic(str)
23
+ result = Orion::RichHash.new
24
+ 0.upto(str.length - 1) do |i|
25
+ result[str[i]] = i
26
+ end
27
+ result
28
+ end
29
+
30
+ def self.prepare_goodsuffix_heuristic(normal)
31
+ size = normal.size
32
+ result = []
33
+
34
+ reversed = normal.dup.reverse
35
+ prefix_normal = compute_prefix(normal)
36
+ prefix_reversed = compute_prefix(reversed)
37
+
38
+ 0.upto(size) do |i|
39
+ result[i] = size - prefix_normal[size-1]
40
+ end
41
+
42
+ 0.upto(size-1) do |i|
43
+ j = size - prefix_reversed[i]
44
+ k = i - prefix_reversed[i]+1
45
+ result[j] = k if result[j] > k
46
+ end
47
+ result
48
+ end
49
+
50
+ def self.search(haystack, needle)
51
+ needle_len = needle.size
52
+ haystack_len = haystack.size
53
+
54
+ return nil if haystack_len == 0
55
+ return haystack if needle_len == 0
56
+
57
+ badcharacter = self.prepare_badcharacter_heuristic(needle)
58
+ goodsuffix = self.prepare_goodsuffix_heuristic(needle)
59
+
60
+ s = 0
61
+ while s <= haystack_len - needle_len
62
+ j = needle_len
63
+ while (j > 0) && self.needle_matches?(needle[j-1], haystack[s+j-1])
64
+ j -= 1
65
+ end
66
+
67
+ if(j > 0)
68
+ k = badcharacter[haystack[s+j-1]]
69
+ k = -1 unless k
70
+ if (k < j) && (m = j-k-1) > goodsuffix[j]
71
+ s += m
72
+ else
73
+ s += goodsuffix[j]
74
+ end
75
+ else
76
+ return s
77
+ end
78
+ end
79
+ return nil
80
+ end
81
+
82
+ def self.needle_matches?(needle, haystack)
83
+ if needle.kind_of?(Regexp)
84
+ needle.match(haystack) ? true : false
85
+ else
86
+ needle == haystack
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,29 @@
1
+ # Hash impersonator that accepts regular expressions as keys. But the regular
2
+ # expression lookups are slow, so don't use them (unless you have to).
3
+ module Orion
4
+ class RichHash
5
+ def initialize
6
+ @regexps = {}
7
+ @regular = {}
8
+ end
9
+
10
+ def [](k)
11
+ regular = @regular[k]
12
+ return regular if regular
13
+ if @regexps.size > 0
14
+ @regexps.each do |regex,v| # linear search is going to be slow
15
+ return v if regex.match(k)
16
+ end
17
+ end
18
+ nil
19
+ end
20
+
21
+ def []=(k,v)
22
+ if k.kind_of?(Regexp)
23
+ @regexps[k] = v
24
+ else
25
+ @regular[k] = v
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,22 @@
1
+ require 'orion/result'
2
+ include Orion::Result
3
+
4
+ module Orion
5
+ module Delete
6
+ def self.delete(files)
7
+ result(delete_files(files))
8
+ end
9
+
10
+ private
11
+
12
+ def self.delete_files(files)
13
+ if files.empty?
14
+ nil
15
+ else
16
+ deleted_files = files.inject([]) do |deleted_files, file|
17
+ deleted_files << file if File.delete(file)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,7 @@
1
+ module Orion
2
+ module Result
3
+ def result(array)
4
+ array.nil? || array.empty? ? {success: false, count: nil, files: nil} : {success: true ,count: array.size, files: array}
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,33 @@
1
+ require 'find'
2
+ require 'orion/result'
3
+ # require 'boyer_moore/boyer_moore'
4
+ include Orion::Result
5
+
6
+ module Orion
7
+ class Search
8
+ attr_accessor :root_path
9
+
10
+ def initialize(root_path)
11
+ @root_path ||= root_path
12
+ end
13
+
14
+ def search(query)
15
+ result(find(query))
16
+ end
17
+
18
+ private
19
+
20
+ def find(query)
21
+ results = []
22
+ Find.find(@root_path) do |path|
23
+ unless FileTest.directory?(path)
24
+ file = File.basename(path)
25
+ results << path if file.include?(query)
26
+ end
27
+ end
28
+ results
29
+ end
30
+
31
+ end
32
+
33
+ end
@@ -0,0 +1,3 @@
1
+ module Orion
2
+ VERSION = "0.0.1"
3
+ end
data/lib/orion.rb ADDED
@@ -0,0 +1,14 @@
1
+ require "orion/version"
2
+ require "orion/search"
3
+ require "orion/delete"
4
+
5
+ module Orion
6
+ def self.search(root_path, query)
7
+ Orion::Search.new(root_path).search(query)
8
+ end
9
+
10
+ def self.delete(root_path, query)
11
+ found_files = Orion::Search.new(root_path).search(query)
12
+ Orion::Delete.delete(found_files[:files])
13
+ end
14
+ end
metadata ADDED
@@ -0,0 +1,121 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: orion
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Bismark
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-07-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ruby-progressbar
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: 1.1.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: 1.1.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: factory_girl
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: Orion allows you to search and delete files in your system.
84
+ email:
85
+ - bismark64@gmail.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - lib/boyer_moore/rich_hash.rb
91
+ - lib/boyer_moore/boyer_moore.rb
92
+ - lib/orion.rb
93
+ - lib/orion/version.rb
94
+ - lib/orion/delete.rb
95
+ - lib/orion/result.rb
96
+ - lib/orion/search.rb
97
+ homepage: https://github.com/bismark64/orion
98
+ licenses:
99
+ - MIT
100
+ metadata: {}
101
+ post_install_message:
102
+ rdoc_options: []
103
+ require_paths:
104
+ - lib
105
+ required_ruby_version: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ required_rubygems_version: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - '>='
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ requirements: []
116
+ rubyforge_project:
117
+ rubygems_version: 2.0.3
118
+ signing_key:
119
+ specification_version: 4
120
+ summary: Orion allows you to search and delete files in your system
121
+ test_files: []