Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,13 @@ Or install it yourself as:
## Usage

```
pod ack-filter PATTERN [--input=FILENAME] [--output=FILENAME]
pod ack-filter PATTERN [--input=FILENAME] [--output=FILENAME] [--filterfile=FILENAME]
```

- PATTERN is regexp pattern string
- --input is input acknowledgements.plist filename
- --output is output filename
- --filterfile is a file containing a regular expression for filtering (e.g. "Pod1|Pod2" filters all occurrences of the string Pod1 and Pod2)

### Example

Expand All @@ -40,6 +41,11 @@ pod ack-filter MyCompany --output=Filtered.plist
# => Licenses which includes "MyCompany" are filtered out and output to "Filtered.plist"
```

```
pod ack-filter --input=unfiltered.plist --output=filtered.plist --filterfile=filterfile
# => Regular expression from "filterfile" is used to filter "unfiltered.plist" and save it to "filtered.plist"
```

Also, you can use ack_filter within Podfile.

```
Expand Down
14 changes: 11 additions & 3 deletions lib/pod/command/ack_filter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ class AckFilter < Command

def self.options
[['--input=FILE_PATH', 'Read acknowledgements file from FILE_PATH'],
['--output=FILENAME', 'Output filtered acknowledgements to FILENAME']]
['--output=FILENAME', 'Output filtered acknowledgements to FILENAME'],
['--filterfile=FILENAME', 'Read a Regex filter from FILENAME']]
end

def self.filter(args, &block)
Expand All @@ -20,23 +21,25 @@ def self.filter(args, &block)

def initialize(argv, &block)
if argv.kind_of?(CLAide::ARGV)
@pattern = Regexp.new(argv.shift_argument) unless argv.empty?
@pattern = Regexp.new(argv.shift_argument) unless argv.empty? || argv.shift_argument == nil
@input = argv.option('input')
@filename = argv.option('output')
@filterfile = argv.option('filterfile')
super
else
if argv[:pattern]
@pattern = argv[:pattern].kind_of?(Regexp) ? argv[:pattern] : Regexp.new(argv[:pattern])
end
@input = argv[:input]
@filename = argv[:output]
@filterfile = argv[:filterfile]
@filter_block = block
end
end

def validate!
super
help! 'Specify filtering pattern' if !@pattern && !@filter_block
help! 'Specify filtering pattern' if !@pattern && !@filter_block && !@filterfile
end

def input
Expand All @@ -50,9 +53,14 @@ def output_filename
def run
plist = CFPropertyList::List.new(file: input)
specs = plist.value.value['PreferenceSpecifiers']
if @filterfile
filter = File.read(@filterfile)
end
specs.value.reject! do |spec|
if @filter_block
@filter_block.call(spec.value['FooterText'].value)
elsif filter
spec.value['FooterText'].value =~ Regexp.new(filter)
else
spec.value['FooterText'].value =~ @pattern
end
Expand Down