pru 0.1.5 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (6) hide show
  1. data/Readme.md +9 -2
  2. data/VERSION +1 -1
  3. data/bin/pru +29 -3
  4. data/pru.gemspec +3 -3
  5. data/spec/pru_spec.rb +32 -0
  6. metadata +5 -5
data/Readme.md CHANGED
@@ -4,7 +4,7 @@ Install
4
4
  =======
5
5
  sudo gem install pru
6
6
 
7
- Working with rvm / many gemsets -> only install once (1.9 recommended)
7
+ Working with rvm / many gemsets -> only install once
8
8
 
9
9
  rvm 1.9.2 exec gem install pru
10
10
  echo 'alias pru="rvm 1.9.2 exec pru"' >> ~/.bash_profile
@@ -24,6 +24,7 @@ Reduce works on all lines as Array<br/>
24
24
 
25
25
  -I, --libdir DIR Add DIR to load path
26
26
  --require LIB Require LIB (also comma-separated)
27
+ -i, --inplace-edit FILE Edit FILE inplace
27
28
 
28
29
  -h, --help Show this.
29
30
  -v, --version Show Version
@@ -52,7 +53,7 @@ Reduce works on all lines as Array<br/>
52
53
 
53
54
  # wc --- count lines
54
55
  ls -al | wc -l
55
- ls -al | pru --reuduce 'size'
56
+ ls -al | pru --reduce 'size'
56
57
 
57
58
  # sed -- replace a 5 with five
58
59
  ls -al | sed 's/5/five/'
@@ -70,6 +71,12 @@ Reduce works on all lines as Array<br/>
70
71
  # quotes inside a string
71
72
  something | pru 'include?(%{"string"})'
72
73
 
74
+ # Find a gem version matching a requirement e.g. ~> 1.0.0
75
+ curl http://rubygems.org/api/v1/versions/bundler | pru --require json 'JSON.parse(self).map{|g|g["number"]}.find{|v| Gem::Requirement.new("~>1.0.1").satisfied_by? Gem::Version.new(v) }'
76
+
77
+ # Cleanup strange whitespace in a file
78
+ pru -i Rakefile 'gsub(/\r\n/,"\n").gsub(/\t/," ")'
79
+
73
80
  Authors
74
81
  =======
75
82
  ### [Contributors](http://github.com/grosser/pru/contributors)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.5
1
+ 0.1.6
data/bin/pru CHANGED
@@ -4,7 +4,9 @@ require 'optparse'
4
4
  $LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
5
5
  require 'pru'
6
6
 
7
+ usage = nil
7
8
  options = {}
9
+
8
10
  OptionParser.new do |opts|
9
11
  opts.banner = <<BANNER
10
12
  Pipeable Ruby
@@ -32,20 +34,44 @@ BANNER
32
34
  end
33
35
  lib.split(',').each{|l| require l }
34
36
  }
37
+ opts.on('-i', '--inplace-edit FILE', 'Edit FILE inplace') { |file| options[:file] = file }
35
38
  opts.separator ''
36
39
  opts.on("-h", "--help","Show this.") { puts opts; exit }
37
40
  opts.on('-v', '--version','Show Version'){ puts Pru::VERSION; exit}
41
+ usage = opts
38
42
  end.parse!
39
43
 
44
+ if ARGV.empty? and options.empty? # no arguments -> show usage
45
+ puts usage
46
+ exit
47
+ end
48
+
40
49
  abort "Too many arguments, see --help" if ARGV.size > 2
50
+
41
51
  map, reduce = ARGV
42
52
  reduce ||= options[:reduce]
43
53
  map = 'true' if not map or map.empty?
44
54
 
55
+ if options[:file]
56
+ output_lines = []
57
+ input = File.read(options[:file])
58
+ newline = input[/\r\n|\r|\n/]
59
+ else
60
+ input = $stdin
61
+ end
62
+
63
+ collector = lambda{|line|
64
+ output_lines ? output_lines << line : puts(line)
65
+ }
66
+
45
67
  if reduce
46
68
  results = []
47
- Pru.map($stdin, map){|x| results << x }
48
- puts Pru.reduce(results, reduce)
69
+ Pru.map(input, map){|out| results << out }
70
+ collector.call Pru.reduce(results, reduce)
49
71
  else
50
- Pru.map($stdin, map){|x| puts x }
72
+ Pru.map(input, map){|out| collector.call out }
73
+ end
74
+
75
+ if options[:file]
76
+ File.open(options[:file], 'w'){|f| f.write output_lines.join(newline) }
51
77
  end
data/pru.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{pru}
8
- s.version = "0.1.5"
8
+ s.version = "0.1.6"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Michael Grosser"]
12
- s.date = %q{2011-04-22}
12
+ s.date = %q{2011-08-27}
13
13
  s.default_executable = %q{pru}
14
14
  s.email = %q{michael@grosser.it}
15
15
  s.executables = ["pru"]
@@ -31,7 +31,7 @@ Gem::Specification.new do |s|
31
31
  ]
32
32
  s.homepage = %q{http://github.com/grosser/pru}
33
33
  s.require_paths = ["lib"]
34
- s.rubygems_version = %q{1.4.2}
34
+ s.rubygems_version = %q{1.6.2}
35
35
  s.summary = %q{Pipeable Ruby - forget about grep / sed / awk / wc ... use pure, readable Ruby!}
36
36
  s.test_files = [
37
37
  "spec/a_test.rb",
data/spec/pru_spec.rb CHANGED
@@ -5,6 +5,10 @@ describe Pru do
5
5
  Pru::VERSION.should =~ /^\d+\.\d+\.\d+$/
6
6
  end
7
7
 
8
+ it "shows help when no arguments are given" do
9
+ `./bin/pru`.should include('Usage:')
10
+ end
11
+
8
12
  describe 'map' do
9
13
  it "selects" do
10
14
  `ls -l | ./bin/pru 'include?("G")'`.split("\n").size.should == 2
@@ -84,4 +88,32 @@ describe Pru do
84
88
  `echo 1 | ./bin/pru --require jeweler,rake --reduce 'Rake.to_s + Jeweler.to_s'`.should == "RakeJeweler\n"
85
89
  end
86
90
  end
91
+
92
+ describe '--inplace-edit FILE' do
93
+ after do
94
+ `rm -f xxx`
95
+ end
96
+
97
+ it "modifies the file" do
98
+ File.open('xxx','w'){|f| f.write "abc\nab\na" }
99
+ `./bin/pru --inplace-edit xxx size`.should == ''
100
+ File.read('xxx').should == "3\n2\n1"
101
+ end
102
+
103
+ it "fails with empty file" do
104
+ `./bin/pru --inplace-edit xxx size 2>&1`.should include('No such file or directory - xxx')
105
+ end
106
+
107
+ it "keeps line separators when modifying" do
108
+ File.open('xxx','w'){|f| f.write "abc\r\nab\r\na" }
109
+ `./bin/pru --inplace-edit xxx size`.should == ''
110
+ File.read('xxx').should == "3\r\n2\r\n1"
111
+ end
112
+
113
+ it "modifies the file with reduce" do
114
+ File.open('xxx','w'){|f| f.write "abc\nab\na" }
115
+ `./bin/pru --inplace-edit xxx size inspect`.should == ''
116
+ File.read('xxx').should == "[3, 2, 1]"
117
+ end
118
+ end
87
119
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pru
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 5
10
- version: 0.1.5
9
+ - 6
10
+ version: 0.1.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - Michael Grosser
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-04-22 00:00:00 +02:00
18
+ date: 2011-08-27 00:00:00 +02:00
19
19
  default_executable: pru
20
20
  dependencies: []
21
21
 
@@ -72,7 +72,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
72
72
  requirements: []
73
73
 
74
74
  rubyforge_project:
75
- rubygems_version: 1.4.2
75
+ rubygems_version: 1.6.2
76
76
  signing_key:
77
77
  specification_version: 3
78
78
  summary: Pipeable Ruby - forget about grep / sed / awk / wc ... use pure, readable Ruby!