code_lister 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2bdff7bff041d0b4d759f83eee1c841b8df72a83
4
- data.tar.gz: 6c49de38ba9129b15adb68941f220e604faccf17
3
+ metadata.gz: ab05b837c5a1c82a86f45b2a732e1c94b5aa9f4c
4
+ data.tar.gz: 7c511a1e1297223d9f96671045be7da41449e8d9
5
5
  SHA512:
6
- metadata.gz: 2e72b7065dfa0be584d26b8e72a424519508e41bbc937e8a20ee8dd0641e4a1af175da7131a17430fdb1935e02156da3380428f71279ed3ab22e535ebd092a6b
7
- data.tar.gz: 186354e7fac1115b89bc0ab54c316b8639054ab40b2b138f101ad0e670f2c17c70cb82e51664181fd34705bca3392ea5dcb119255b38228d08f9ac468ab5172a
6
+ metadata.gz: c58b793ebff0bd9e64f588983f4950c2f83b8ebfae3d2b3b5df0303c199be31d2409682b5198389db3c70416a6904d3f860ff892261039e5cca13545967f95a4
7
+ data.tar.gz: c55a500f6437006295cb9dc1322a799d0420395ef6d761a970cc94a2cbba6533005c9ed763838da93c9478bcef2f2c88d9580d17acdb2c220b909d13614e527e
data/README.md CHANGED
@@ -1,7 +1,9 @@
1
1
  ## code_lister
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/code_lister.svg)](http://badge.fury.io/rb/code_lister)
4
+
3
5
  This is the simple gem to search/filter the files based on simple criteria.
4
- It provides the functionality similar to `find` command in Linux/Unix system.
6
+ It provides the functionality similar to subset of `find` command in Linux/Unix system.
5
7
 
6
8
  Initially it was part of my internal project. I extracted this out as a gem so
7
9
  that I can re-use it in other project. I hope you will find it useful.
@@ -30,33 +32,91 @@ List all pdf and epub files in the `/opts/downloads/` directory recursively
30
32
  $code_lister find --base-dir /opt/downloads/ --exts pdf epub --recursive
31
33
  ```
32
34
 
33
- Usage:
35
+ Usage/Synopsis:
34
36
 
35
37
  ```
36
38
  Usage:
37
39
  code_lister find
38
40
 
39
41
  Options:
40
- -b, [--base-dir=BASE_DIR] # Base directory
41
- # Default: /Users/agilecreativity/Dropbox/spikes/code_explorer
42
- -e, [--exts=one two three] # List of extensions to search for
43
- # Default: ["rb"]
44
- -i, [--inc-words=one two three] # List of words to be included in the result if any
45
- -x, [--exc-words=one two three] # List of words to be excluded from the result if any
46
- -r, [--recursive], [--no-recursive] # Search for files recursively
47
- -v, [--version], [--no-version] # Display version information
48
-
49
- List files based on select multiple criteria
42
+ -b, [--base-dir=BASE_DIR] # Base directory
43
+ # Default: . (current directory)
44
+ -e, [--exts=one two three] # List of extensions to search for
45
+ -n, [--inc-words=one two three] # List of words to be included in the result if any
46
+ -x, [--exc-words=one two three] # List of words to be excluded from the result if any
47
+ -i, [--ignore-case], [--no-ignore-case] # Match case insensitively
48
+ # Default: true
49
+ -r, [--recursive], [--no-recursive] # Search for files recursively
50
+ # Default: true
51
+ -v, [--version], [--no-version] # Display version information
52
+
53
+ List files by extensions, patterns, and simple criteria
54
+ ```
55
+
56
+ Example Usage:
57
+
58
+ - Find all java and ruby files in a given directory
59
+
60
+ e.g.
61
+
62
+ ```ruby
63
+
64
+ # find all files that ends with '*.java' or '*.rb' in a given directory
65
+ #
66
+ # ./bin/code_lister find -b spec/fixtures/ -e rb java
67
+
68
+ spec/fixtures/demo1.xxx.rb
69
+ spec/fixtures/demo1.yyy.rb
70
+ spec/fixtures/demo2.xxx.rb
71
+ spec/fixtures/demo2.yyy.rb
72
+ spec/fixtures/java/demo3.xxx.java
73
+ spec/fixtures/java/demo3.yyy.java
74
+ spec/fixtures/java/demo4.xxx.java
75
+ spec/fixtures/java/demo4.yyy.java
76
+ ```
77
+
78
+ - Find all java java and ruby files but include only the files that contain the word `xxx`
79
+
80
+ ```ruby
81
+ # ./bin/code_lister find -b spec/fixtures/ -e rb java -n xxx
82
+ spec/fixtures/demo1.xxx.rb
83
+ spec/fixtures/demo2.xxx.rb
84
+ spec/fixtures/java/demo3.xxx.java
85
+ spec/fixtures/java/demo4.xxx.java
86
+
87
+ ```
88
+
89
+ - Same as previous step, but filter out result that contain the word `demo3` or `demo4`
90
+
91
+ ```ruby
92
+ # ./bin/code_lister find -b spec/fixtures/ -e rb java -n xxx -x demo3 demo4
93
+ spec/fixtures/demo1.xxx.rb
94
+ spec/fixtures/demo2.xxx.rb
50
95
  ```
51
96
 
52
97
  #### Using as ruby library
53
98
 
99
+ This is probably the proper way to utilize the library as the CLI only serve to
100
+ demonstrate purpose only.
101
+
102
+ Example of how you might use the library in your own project.
103
+
54
104
  ```ruby
55
105
  require 'code_lister'
56
106
  include CodeLister
107
+
57
108
  # To search for everything that ends in '*.java' and '*.rb" recursively
58
- list1 = CodeLister.files(base_dir: "spec/fixtures", exts: %w(rb java), recursive: true)
59
- puts list1
109
+ file_list = CodeLister.files base_dir: "spec/fixtures",
110
+ exts: %w(rb java),
111
+ recursive: true
112
+ puts file_list
113
+
114
+ # To filter out the result you may do so with the `CodeLister.filter` method
115
+
116
+ new_list = CodeLister.filter(file_list, inc_words: %w(some list of word),
117
+ exc_words: %w(other text to excluded),
118
+ ignore_case: false)
119
+
60
120
  ```
61
121
 
62
122
  ### Development/Testing
@@ -76,7 +136,8 @@ rake irb
76
136
  From inside `Pry` or `IRB`
77
137
 
78
138
  ```ruby
79
- #include CodeLister
139
+ include CodeLister
140
+
80
141
  # To search for everything that ends in '*.java' and '*.rb" recursively
81
142
  list1 = CodeLister.files(base_dir: "spec/fixtures", exts: %w(rb java), recursive: true)
82
143
  puts list1
@@ -84,8 +145,22 @@ puts list1
84
145
  # To filter out the result list
85
146
  list2 = CodeLister.filter(list1, inc_words: %w(final complete), exc_words: %w(demo test))
86
147
  ```
148
+
149
+ ### Disclaimers
150
+
151
+ This is still work in progress. I may make several adjustment to the API and thus I might break
152
+ the compatibility as the result. Please let me know if you find any problem. Pull request is
153
+ always welcome.
154
+
87
155
  ### Changelogs
88
156
 
157
+ #### 0.0.4
158
+
159
+ - Add `ignore-case` option
160
+ - Use `-n' for `--include-words` and use `-i` for `--ignore-case`.
161
+ - Make the `--recursive` the default option
162
+ - Make the `--ignore-case` the default option
163
+
89
164
  #### 0.0.3
90
165
 
91
166
  - Update README.md to include better sample usage, and misc cleanup.
@@ -1,9 +1,10 @@
1
1
  require 'thor'
2
2
  require_relative 'core_ext/hash'
3
+
3
4
  module CodeLister
4
5
  class CLI < Thor
5
6
 
6
- desc "find", "List files by extension, patterns, and other criteria"
7
+ desc "find", "List files by extensions, patterns, and simple criteria"
7
8
 
8
9
  method_option :base_dir,
9
10
  aliases: "-b",
@@ -14,10 +15,10 @@ module CodeLister
14
15
  aliases: "-e",
15
16
  desc: "List of extensions to search for",
16
17
  type: :array,
17
- default: %w(rb)
18
+ default: []
18
19
 
19
20
  method_option :inc_words,
20
- aliases: "-i",
21
+ aliases: "-n",
21
22
  desc: "List of words to be included in the result if any",
22
23
  type: :array,
23
24
  default: []
@@ -28,11 +29,17 @@ module CodeLister
28
29
  type: :array,
29
30
  default: []
30
31
 
32
+ method_option :ignore_case,
33
+ aliases: "-i",
34
+ desc: "Match case insensitively",
35
+ type: :boolean,
36
+ default: true
37
+
31
38
  method_option :recursive,
32
39
  aliases: "-r",
33
40
  desc: "Search for files recursively",
34
41
  type: :boolean,
35
- default: false
42
+ default: true
36
43
 
37
44
  method_option :version,
38
45
  aliases: "-v",
@@ -58,16 +65,18 @@ Usage:
58
65
  code_lister find
59
66
 
60
67
  Options:
61
- -b, [--base-dir=BASE_DIR] # Base directory
62
- # Default: /Users/agilecreativity/Dropbox/spikes/code_explorer
63
- -e, [--exts=one two three] # List of extensions to search for
64
- # Default: ["rb"]
65
- -i, [--inc-words=one two three] # List of words to be included in the result if any
66
- -x, [--exc-words=one two three] # List of words to be excluded from the result if any
67
- -r, [--recursive], [--no-recursive] # Search for files recursively
68
- -v, [--version], [--no-version] # Display version information
68
+ -b, [--base-dir=BASE_DIR] # Base directory
69
+ # Default: . (current directory)
70
+ -e, [--exts=one two three] # List of extensions to search for
71
+ -n, [--inc-words=one two three] # List of words to be included in the result if any
72
+ -x, [--exc-words=one two three] # List of words to be excluded from the result if any
73
+ -i, [--ignore-case], [--no-ignore-case] # Match case insensitively
74
+ # Default: true
75
+ -r, [--recursive], [--no-recursive] # Search for files recursively
76
+ # Default: true
77
+ -v, [--version], [--no-version] # Display version information
69
78
 
70
- List files based on select multiple criteria
79
+ List files by extensions, patterns, and simple criteria
71
80
  EOS
72
81
  end
73
82
 
@@ -25,28 +25,57 @@ module CodeLister
25
25
  def filter(file_list, args = {})
26
26
  opts = {
27
27
  inc_words: [],
28
- exc_words: []
28
+ exc_words: [],
29
+ ignore_case: true
29
30
  }.merge(args)
30
31
 
31
- inc_words = opts[:inc_words]
32
- exc_words = opts[:exc_words]
32
+ inc_words = opts[:inc_words]
33
+ exc_words = opts[:exc_words]
34
+ ignore_case = opts[:ignore_case]
33
35
 
34
- take_any!(file_list, inc_words)
35
- drop_any!(file_list, exc_words)
36
+ take_any!(file_list, opts)
37
+ drop_any!(file_list, opts)
36
38
 
37
39
  file_list
38
40
  end
39
41
 
40
- private
42
+ protected
43
+
44
+ def take_any!(file_list, args = {})
45
+ words = args[:inc_words]
46
+ ignore_case = args[:ignore_case]
47
+
48
+ unless words.empty?
49
+ file_list.select! do |f|
50
+ words.any? do |w|
51
+ if ignore_case
52
+ /#{w}/i =~ File.basename(f)
53
+ else
54
+ /#{w}/ =~ File.basename(f)
55
+ end
56
+ end
57
+ end
58
+ end
41
59
 
42
- def take_any!(file_list, words)
43
- # need to take only the filename
44
- file_list.select! { |f| words.any? { |w| /#{w}/ =~ File.basename(f) } } unless words.empty?
45
60
  file_list
46
61
  end
47
62
 
48
- def drop_any!(file_list, words)
49
- file_list.delete_if { |f| words.any? { |w| /#{w}/ =~ File.basename(f) } } unless words.empty?
63
+ def drop_any!(file_list, args = {})
64
+ words = args[:exc_words]
65
+ ignore_case = args[:ignore_case]
66
+
67
+ unless words.empty?
68
+ file_list.delete_if do |f|
69
+ words.any? do |w|
70
+ if ignore_case
71
+ /#{w}/i =~ File.basename(f)
72
+ else
73
+ /#{w}/ =~ File.basename(f)
74
+ end
75
+ end
76
+ end
77
+ end
78
+
50
79
  file_list
51
80
  end
52
81
 
@@ -13,7 +13,8 @@ module CodeLister
13
13
 
14
14
  files = CodeLister.filter(files, inc_words: inc_words,
15
15
  exc_words: exc_words)
16
- # TODO: remove when done!
16
+
17
+ # Note: for now just print out the list of files
17
18
  puts files
18
19
 
19
20
  files
@@ -25,6 +26,7 @@ module CodeLister
25
26
  options = {
26
27
  base_dir: Dir.pwd,
27
28
  recursive: false,
29
+ ignore_case: true,
28
30
  inc_words: [],
29
31
  exc_words: [],
30
32
  exts: []
@@ -1,3 +1,3 @@
1
1
  module CodeLister
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -39,9 +39,19 @@ describe CodeLister do
39
39
 
40
40
  it "filters out the words that we don't want" do
41
41
  expect(CodeLister.filter(file_list, exc_words: %w(demo1))).to eq ["spec/fixtures/demo2.xxx.rb"]
42
-
43
42
  expect(CodeLister.filter(file_list, exc_words: %w(xxx))).to eq []
44
43
  end
44
+
45
+ context 'with ignore_case' do
46
+ it 'ignores case by default' do
47
+ expect(CodeLister.filter(file_list, exc_words: %w(DeMo1))).to eq CodeLister.filter(file_list, exc_words: %w(demo1))
48
+ expect(CodeLister.filter(file_list, exc_words: %w(DeMo1))).to eq ["spec/fixtures/demo2.xxx.rb"]
49
+ end
50
+ it 'does not ignore case if specified' do
51
+ expect(CodeLister.filter(file_list, exc_words: %w(DeMo1), ignore_case: false)).to eq ["spec/fixtures/demo1.xxx.rb",
52
+ "spec/fixtures/demo2.xxx.rb" ]
53
+ end
54
+ end
45
55
  end
46
56
 
47
57
  end
@@ -0,0 +1 @@
1
+ # file: spec/fixtures/demo1.yyy.rb
@@ -0,0 +1 @@
1
+ # file: spec/fixtures/demo2.yyy.rb
@@ -1 +1 @@
1
- // file: test/fixtures/java/demo3.java
1
+ // file: test/fixtures/java/demo3.xxx.java
@@ -0,0 +1 @@
1
+ // file: test/fixtures/java/demo3.yyy.java
@@ -1 +1 @@
1
- // file: test/fixtures/java/demo4.java
1
+ // file: test/fixtures/java/demo4.xxx.java
@@ -0,0 +1 @@
1
+ // file: test/fixtures/java/demo4.yyy.java
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: code_lister
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Burin Choomnuan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-13 00:00:00.000000000 Z
11
+ date: 2014-04-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -149,9 +149,13 @@ files:
149
149
  - lib/code_lister/version.rb
150
150
  - spec/code_lister/code_lister_spec.rb
151
151
  - spec/fixtures/demo1.xxx.rb
152
+ - spec/fixtures/demo1.yyy.rb
152
153
  - spec/fixtures/demo2.xxx.rb
154
+ - spec/fixtures/demo2.yyy.rb
153
155
  - spec/fixtures/java/demo3.xxx.java
156
+ - spec/fixtures/java/demo3.yyy.java
154
157
  - spec/fixtures/java/demo4.xxx.java
158
+ - spec/fixtures/java/demo4.yyy.java
155
159
  - spec/spec_helper.rb
156
160
  homepage: https://github.com/agilecreativity/code_lister
157
161
  licenses:
@@ -180,8 +184,12 @@ summary: Search, filter files easily using the power of ruby
180
184
  test_files:
181
185
  - spec/code_lister/code_lister_spec.rb
182
186
  - spec/fixtures/demo1.xxx.rb
187
+ - spec/fixtures/demo1.yyy.rb
183
188
  - spec/fixtures/demo2.xxx.rb
189
+ - spec/fixtures/demo2.yyy.rb
184
190
  - spec/fixtures/java/demo3.xxx.java
191
+ - spec/fixtures/java/demo3.yyy.java
185
192
  - spec/fixtures/java/demo4.xxx.java
193
+ - spec/fixtures/java/demo4.yyy.java
186
194
  - spec/spec_helper.rb
187
195
  has_rdoc: