orion 0.0.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.
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: []