cotcube-helpers 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/VERSION +1 -1
- data/bin/gitlog +4 -0
- data/bin/uncommitted +28 -0
- data/lib/cotcube-helpers/array_ext.rb +52 -27
- data/lib/cotcube-helpers/datetime_ext.rb +13 -5
- data/lib/cotcube-helpers/hash_ext.rb +26 -0
- data/lib/cotcube-helpers/init.rb +6 -4
- data/lib/cotcube-helpers/string_ext.rb +4 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 569d3d98802f31608b3525e0b0692a19a67b65a05036f7b9c04cd4d8985017d3
|
4
|
+
data.tar.gz: ad92e036d65e317ab94f179020b4d131ebb085e8ff87395f17ac5c65b0ec02a2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ca30750b5450a285efc24f7d8498919b329fddc848e8eaee24990632701e529ab967aaf4c94d6718858f921297674adaaee36025a2fce2664d11e370e0003a86
|
7
|
+
data.tar.gz: 7b85764c5630f909f87c0987e662b6801e20e22de850945342dddc839a67c7636abe284463f4e5fba1c952aec80e51dce25f24a1795e9c9a6cdb96e8b29907e6
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
## 0.2.4 (January 13, 2022)
|
2
|
+
- minor changes to init and bin/uncommitted
|
3
|
+
- datetime_ext: added #seconds_until_next_minute
|
4
|
+
- hash: added #deep_dup and #reduce_group; array: added #deep_dup
|
5
|
+
- bin/gitlog: pretty formatted git log
|
6
|
+
- string_ext: escape_regex escapes characters that otherwise have functional meanings in a regex
|
7
|
+
- array_ext: elem_raises? checks for each elem if raises with block, return raising elems or false
|
8
|
+
- Merge branch 'main' of github.com:donkeybridge/cotcube-helpers into main
|
9
|
+
- merging conflict
|
10
|
+
|
1
11
|
## 0.2.3 (December 30, 2021)
|
2
12
|
- merging conflict
|
3
13
|
- added bare josch_ and order_client s
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.4
|
data/bin/gitlog
ADDED
data/bin/uncommitted
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
ROOT=${1:-$HOME/GEMS}
|
3
|
+
|
4
|
+
|
5
|
+
check_dir () {
|
6
|
+
CYAN="\033[1;36m"
|
7
|
+
RESET="\033[0m"
|
8
|
+
VGREP="grep --color=always -v"
|
9
|
+
dir=$1
|
10
|
+
if [ -d "${dir}/.git" ]; then
|
11
|
+
echo -e ${CYAN}${dir}${RESET}
|
12
|
+
pushd ${dir} 2>&1 >/dev/null
|
13
|
+
git status 2>&1 | $VGREP 'no changes added to commit' |\
|
14
|
+
$VGREP '^$' |\
|
15
|
+
$VGREP 'to include in what will' |\
|
16
|
+
$VGREP '(use "git ' |\
|
17
|
+
$VGREP 'On branch main' |\
|
18
|
+
$VGREP 'On branch master' |\
|
19
|
+
$VGREP 'nothing to commit' |\
|
20
|
+
$VGREP 'Your branch is up to date'
|
21
|
+
popd 2>&1 >/dev/null
|
22
|
+
fi
|
23
|
+
}
|
24
|
+
|
25
|
+
|
26
|
+
export -f check_dir
|
27
|
+
|
28
|
+
find $ROOT -type d -maxdepth 1 2>/dev/null | xargs -n 1 bash -c 'check_dir "$1"' _
|
@@ -64,38 +64,63 @@ class Array
|
|
64
64
|
def select_within(ranges:, attr: nil, &block)
|
65
65
|
unless attr.nil? || first[attr]
|
66
66
|
raise ArgumentError,
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
67
|
+
"At least first element of Array '#{first}' does not contain attr '#{attr}'!"
|
68
|
+
end
|
69
|
+
raise ArgumentError, 'Ranges should be an Array or, more precisely, respond_to :map' unless ranges.respond_to? :map
|
70
|
+
raise ArgumentError, 'Each range in :ranges should respond to .include!' unless ranges.map do |x|
|
71
|
+
x.respond_to? :include?
|
72
|
+
end.reduce(:&)
|
73
|
+
|
74
|
+
select do |el|
|
75
|
+
value = attr.nil? ? el : el[attr]
|
76
|
+
ranges.map do |range|
|
77
|
+
range.include?(block.nil? ? value : block.call(value))
|
78
|
+
end.reduce(:|)
|
79
|
+
end
|
79
80
|
end
|
80
|
-
end
|
81
81
|
|
82
|
-
def select_right_by(inclusive: false, exclusive: false, initial: [], &block)
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
82
|
+
def select_right_by(inclusive: false, exclusive: false, initial: [], &block)
|
83
|
+
# unless range.is_a? Range and
|
84
|
+
# (range.begin.nil? or range.begin.is_a?(Integer)) and
|
85
|
+
# (range.end.nil? or range.end.is_a?(Integer))
|
86
|
+
# raise ArgumentError, ":range, if given, must be a range of ( nil|Integer..nil|Integer), got '#{range}'"
|
87
|
+
# end
|
88
|
+
|
89
|
+
raise ArgumentError, 'No block given.' unless block.is_a? Proc
|
90
|
+
|
91
|
+
inclusive = true unless exclusive
|
92
|
+
if inclusive && exclusive
|
93
|
+
raise ArgumentError,
|
94
|
+
"Either :inclusive or :exclusive must remain falsey, got '#{inclusive}' and '#{exclusive}'"
|
95
|
+
end
|
96
|
+
|
97
|
+
index = find_index { |obj| block.call(obj) }
|
88
98
|
|
89
|
-
|
99
|
+
self[((inclusive ? index : index + 1)..)]
|
100
|
+
end
|
90
101
|
|
91
|
-
|
92
|
-
|
93
|
-
raise ArgumentError,
|
94
|
-
|
102
|
+
def elem_raises?(&block)
|
103
|
+
raise ArgumentError, "Must provide a block." unless block_given?
|
104
|
+
raise ArgumentError, "Block must have arity of 1." unless block.arity == 1
|
105
|
+
map do |elem|
|
106
|
+
begin
|
107
|
+
block.call(elem)
|
108
|
+
false
|
109
|
+
rescue
|
110
|
+
elem
|
111
|
+
end
|
112
|
+
end.reject{|z| z.is_a? FalseClass }.tap{|z| z.empty? ? (return false) : (return z)}
|
95
113
|
end
|
96
114
|
|
97
|
-
|
115
|
+
def deep_dup
|
116
|
+
map do |el|
|
117
|
+
case el
|
118
|
+
when Hash, Array
|
119
|
+
el.deep_dup
|
120
|
+
else
|
121
|
+
el.dup
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
98
125
|
|
99
|
-
self[((inclusive ? index : index + 1)..)]
|
100
|
-
end
|
101
126
|
end
|
@@ -12,6 +12,14 @@ class DateTime
|
|
12
12
|
end
|
13
13
|
|
14
14
|
alias to_sssm to_seconds_since_sunday_morning
|
15
|
+
|
16
|
+
def seconds_until_next_minute(offset: 60)
|
17
|
+
offset = offset % 60
|
18
|
+
offset = 60 if offset.zero?
|
19
|
+
seconds = (self + offset - (self.to_f % 60).round(3) - self).to_f
|
20
|
+
seconds + (seconds.negative? ? 60 : 0)
|
21
|
+
end
|
22
|
+
|
15
23
|
end
|
16
24
|
|
17
25
|
class Date
|
@@ -21,12 +29,12 @@ class Date
|
|
21
29
|
form = '%Y %W %w'
|
22
30
|
build_range = lambda {|w|
|
23
31
|
begin
|
24
|
-
|
25
|
-
|
32
|
+
( DateTime.strptime("#{year} #{w} 1", form).to_date..
|
33
|
+
DateTime.strptime("#{year} #{w} 0", form).to_date)
|
26
34
|
rescue
|
27
|
-
|
28
|
-
|
29
|
-
|
35
|
+
# beyond Dec 31st #strptime must be called with cw:0 to keep it working
|
36
|
+
( DateTime.strptime("#{year} #{w} 1", form).to_date..
|
37
|
+
DateTime.strptime("#{year+1} 0 0", form).to_date)
|
30
38
|
end
|
31
39
|
}
|
32
40
|
case week
|
@@ -14,4 +14,30 @@ class Hash
|
|
14
14
|
end
|
15
15
|
self
|
16
16
|
end
|
17
|
+
|
18
|
+
# a group_hash was created from an array by running group_by
|
19
|
+
# to reduce a group_hash, the given block is applied to each array of the hash
|
20
|
+
# if its not an array value, the block will auto-yield nil
|
21
|
+
def reduce_group(&block)
|
22
|
+
raise ArgumentError, 'No block given' unless block_given?
|
23
|
+
map do |key,value|
|
24
|
+
case value
|
25
|
+
when Array
|
26
|
+
[key, (block.call(value) rescue nil) ]
|
27
|
+
else
|
28
|
+
[key, nil]
|
29
|
+
end
|
30
|
+
end.to_h
|
31
|
+
end
|
32
|
+
|
33
|
+
def deep_dup
|
34
|
+
map do |k,v|
|
35
|
+
case v
|
36
|
+
when Hash, Array
|
37
|
+
[k, v.deep_dup]
|
38
|
+
else
|
39
|
+
[k, v.dup]
|
40
|
+
end
|
41
|
+
end.to_h
|
42
|
+
end
|
17
43
|
end
|
data/lib/cotcube-helpers/init.rb
CHANGED
@@ -22,9 +22,10 @@ module Cotcube
|
|
22
22
|
def init(config_file_name: nil,
|
23
23
|
gem_name: nil,
|
24
24
|
debug: false)
|
25
|
-
gem_name
|
26
|
-
|
27
|
-
|
25
|
+
gem_name ||= self.ancestors.first.to_s
|
26
|
+
name = gem_name.split('::').last.downcase
|
27
|
+
config_file_name = "#{name}.yml"
|
28
|
+
config_file = config_path + "/#{config_file_name}"
|
28
29
|
|
29
30
|
if File.exist?(config_file)
|
30
31
|
require 'yaml'
|
@@ -34,7 +35,8 @@ module Cotcube
|
|
34
35
|
end
|
35
36
|
|
36
37
|
defaults = {
|
37
|
-
data_path: '/var/cotcube/' + name
|
38
|
+
data_path: '/var/cotcube/' + name,
|
39
|
+
pid_file: "/var/run/cotcube/#{name}.pid"
|
38
40
|
}
|
39
41
|
|
40
42
|
config = defaults.merge(config)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cotcube-helpers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benjamin L. Tischendorf
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-01-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -93,6 +93,8 @@ files:
|
|
93
93
|
- LICENSE.txt
|
94
94
|
- README.md
|
95
95
|
- VERSION
|
96
|
+
- bin/gitlog
|
97
|
+
- bin/uncommitted
|
96
98
|
- cotcube-helpers.gemspec
|
97
99
|
- lib/cotcube-helpers.rb
|
98
100
|
- lib/cotcube-helpers/array_ext.rb
|