nub 0.0.59 → 0.0.60

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/nub/fileutils.rb +96 -10
  3. metadata +2 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d44b3ec64a04d2f92ed1f47ea2cea94cb61cdbf910597a68e33264fc7a08507a
4
- data.tar.gz: 5adcda6c4ddeedaf96c855e58c41caf84072d246a136038b8f1cc492d9ca14b8
3
+ metadata.gz: e93be4cfe9723de6906362477f61055ee38368002c7df4c4385934bf44d26316
4
+ data.tar.gz: eba15a1db0455f1b09390fab9c4e0600a029954945e70455af584a8f825c9f87
5
5
  SHA512:
6
- metadata.gz: 556d332bb10b0f37ab55f2a53af5b951408928ecc63d3215cc2d4a4216b0c3dc6fcc6d5c9a2770c6a4de61f7c2cddfc22b0f438bbd9757c223308e64d9d180f2
7
- data.tar.gz: fb5d7e41fdb4488e88cdc755f0681da35706eeacf9acef2ce8cc02760f659e01b2f6c47e006dc3d2acd57b4d308a170b1ddeb4c16c30bdc75467d714ae71189a
6
+ metadata.gz: e8fc6b5cb8e1e4d1a5f7c9f31a464c3b09eaac6a43fc946515ffb9f6296e6745e855682e99616881f227bf39fae053770a46cfc03065e5308f828952c2159587
7
+ data.tar.gz: 9ba29c5dc676eee5be89a96e10b26337f6a3f7eac5a46de09a0d020e655c3336533805ae468f8142bce33e796ac4f5174dcdb0b089afe22579e095cec160cd43
data/lib/nub/fileutils.rb CHANGED
@@ -24,23 +24,109 @@ require 'fileutils'
24
24
  # Monkey patch FileUtils with some useful methods
25
25
  module FileUtils
26
26
 
27
+ # Check PATH for executable
28
+ # @param name [String] name of executable to find
29
+ # @param path [Array] path to search
30
+ # @return path of executable or nil
31
+ def self.exec?(name, path:nil)
32
+ (path || ENV['PATH'].split(File::PATH_SEPARATOR).uniq).each{|dir|
33
+ target = File.join(dir, name)
34
+ if stat = File.stat(target) rescue nil
35
+ return target if stat.file? && stat.executable?
36
+ end
37
+ }
38
+ return nil
39
+ end
40
+
41
+ # Increment SemVer formatted versions
42
+ # @param files [String/Array] files to increment version for
43
+ # @param regex [Regex] capture pattern for version match
44
+ # @param major [Bool] true then increment the major
45
+ # @param minor [Bool] true then increment the minor
46
+ # @param rev [Bool] true then increment the revision
47
+ # @param override [String] value to use for version if set
48
+ # @return true on change
49
+ def self.inc_version(files, regex, major:false, minor:false, rev:true, override:nil)
50
+ changed = nil
51
+ files = [files] if files.is_a?(String)
52
+
53
+ files.each{|filename|
54
+ changed |= self.update(filename){|line|
55
+
56
+ # Increment version
57
+ if ver = line[regex, 1]
58
+ new_ver = nil
59
+ if not override
60
+ new_ver = ver.strip.split('.')
61
+ new_ver[0] = new_ver[0].to_i + 1 if major
62
+ new_ver[1] = new_ver[1].to_i + 1 if minor
63
+ new_ver[2] = new_ver[2].to_i + 1 if rev
64
+ new_ver = new_ver * '.'
65
+ else
66
+ new_ver = override
67
+ end
68
+
69
+ # Modify the original line
70
+ line.gsub!(ver, new_ver)
71
+ end
72
+ }
73
+ }
74
+
75
+ return changed
76
+ end
77
+
78
+ # Update the file using a block, revert on failure.
79
+ # Use this for simple line edits. Block is passed in each line of the file
80
+ # @param filename [String] name of the file to change
81
+ # @return true on change
82
+ def self.update(filename)
83
+ changed = false
84
+ block = Proc.new # Most efficient way to get block
85
+
86
+ begin
87
+ lines = nil
88
+ File.open(filename, 'r+'){|f|
89
+ lines = f.readlines
90
+ lines.each{|line|
91
+ line_copy = line.dup
92
+ block.call(line)
93
+ changed |= line_copy != line
94
+ }
95
+
96
+ # Save the changes back to the file
97
+ f.seek(0)
98
+ f.truncate(0)
99
+ f.puts(lines)
100
+ }
101
+ rescue
102
+ # Revert back to the original incase of failure
103
+ File.open(filename, 'w'){|f| f.puts(lines)} if lines
104
+ raise
105
+ end
106
+
107
+ return changed
108
+ end
109
+
27
110
  # Check copyright and update if required
28
111
  # @param path [String] path of the file to update
29
112
  # @param copyright [String] copyright match string e.g. Copyright (c)
30
- def update_copyright(path, copyright, year)
31
- modify(path){|line|
32
- if line =~ /##{Regexp.quote(copyright)}/
33
- year = line[/##{Regexp.quote(copyright)}\s+((\d{4}\s)|(\d{4}-\d{4})).*/, 1].strip
34
- if year.include?("-")
35
- years = year.split("-")
36
- line.gsub!(year, "#{years.first}-#{curr_year}") if years.last != curr_year
37
- else
38
- prev_year = year == curr_year.to_s ? year.to_i - 1 : year
39
- line.gsub!(year.to_s, "#{prev_year}-#{curr_year}")
113
+ # @param year [String] year to add if needed
114
+ # @return true on change
115
+ def self.update_copyright(path, copyright, year:Time.now.year)
116
+ changed = self.update(path){|line|
117
+ if line =~ /#{Regexp.quote(copyright)}/
118
+ _year = line[/#{Regexp.quote(copyright)}\s+((\d{4}\s)|(\d{4}-\d{4})).*/, 1].strip
119
+ if _year.include?("-")
120
+ years = _year.split("-")
121
+ line.gsub!(_year, "#{years.first}-#{year}") if years.last != year
122
+ elsif prev_year = _year != year.to_s ? year.to_i - 1 : nil
123
+ line.gsub!(_year.to_s, "#{prev_year}-#{year}")
40
124
  end
41
125
  end
42
126
  }
127
+ return changed
43
128
  end
129
+
44
130
  end
45
131
 
46
132
  # vim: ft=ruby:ts=2:sw=2:sts=2
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.59
4
+ version: 0.0.60
5
5
  platform: ruby
6
6
  authors:
7
7
  - Patrick Crummett
@@ -31,27 +31,13 @@ dependencies:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: 5.11.3
34
- type: :runtime
34
+ type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 5.11.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: '12.0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '12.0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: coveralls
57
43
  requirement: !ruby/object:Gem::Requirement