code_lister 0.0.3 → 0.0.4

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 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: