cotcube-helpers 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 819dae89b6428b3cec4226d40f4afa3b790108b2e7a0f8ff9784b49532a894e9
4
- data.tar.gz: 2e4823aa3a4f86efa8d94ff07be306cb991a7bd08504cae0209025127e67d472
3
+ metadata.gz: 01aae33281c410de2818d90ab99e2125c5841ad2f6148a71c7950eb84bb07c33
4
+ data.tar.gz: 1e4e1fbeaa9d7a3b71bff8fd0325f77ab390620ddd933992b6a138db48fbd77d
5
5
  SHA512:
6
- metadata.gz: 46647ed87173997191a22b05072e0ce4b53bba9be4a222d86a92605bf35d9c3d4d33ed0381c6ab3e46106e21851d10f4b9b3b178136bf780bdcf89ce055cc469
7
- data.tar.gz: 7acdf173d676c7db61e6e2a1aa3111b22ae00c55768611d7355b4f13216c225f9e5ef9204a23796694b95d21d955e7a53e72d3b62b390e3735786aceb0b67801
6
+ metadata.gz: 2e15e9005df3ed00b77b90f12d99b67b92838034a2339ff9255b7c4986cbcd7764ed7fc01bf4de5edcd1032bd885d39de4d045529bc34a6826a6e97c9b954cdf
7
+ data.tar.gz: edf104056c0a4ea83bf3384a4f5c10ed240f6638e04da12053a84322853d036b1f38bb75ddf96146a195bf2861be9f999bf743a80ff2a14968f5dbdc36b7d2a9
@@ -1,3 +1,8 @@
1
+ ## 0.1.2 (December 21, 2020)
2
+ - minor changes
3
+ - minor fix to parallelize and application of positional arguments
4
+ - added license and README
5
+
1
6
  ## 0.1.1 (December 21, 2020)
2
7
 
3
8
 
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2020 Benjamin L. Tischendorf
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,101 @@
1
+ ## Cotcube::Helpers
2
+
3
+ Just a collection of helpers not fitting into other repositories of the Cotcube suite. Also usable aside of Cotcube. Where appropriate, these are provided as core\_extensions, otherwise within the model Cotcube::Helpers
4
+
5
+ #### Extending Array
6
+
7
+ ##### compact\_or\_nil
8
+
9
+ Returns the array compacted--or just nil, when the result is empty?
10
+
11
+ ##### split\_by(attr)
12
+
13
+ This is a rather old implementation. Most probably something I developed before I met Array#group\_by.
14
+
15
+ ##### pairwise(&block) / triplewise(&block)
16
+
17
+ Yields block on each consecutive pair of the array, hence returning array.size-1 results.
18
+
19
+ ##### triplewise(&block)
20
+
21
+ Yields block on each consecutive triple of the array, hence returning array.size-2 results.
22
+
23
+ #### Extending Enumerator
24
+
25
+ ##### shy\_peek
26
+
27
+ Peeks into the successor without raising if there is none available--returning nil instead.
28
+
29
+ #### Extending Hash
30
+
31
+ ##### keys\_to\_sym
32
+
33
+ Transforms the keys of a Hash (recursivly for subsequent Arrays and Hashes) into symbols.
34
+
35
+ #### Extending Range
36
+
37
+ ##### to\_time\_intervals(timezone: Time.find\_zone('America/Chicago'), step:, ranges: nil)
38
+
39
+ Uses the range of *date alikes* delivered to create an Array of time periods of length :step
40
+ (which is a ActiveSupport::Duration, e.g. 5.minutes or 1.hour).
41
+
42
+ When the step is sub-day, the periods are cleared for DST-changes.
43
+
44
+ When ranges are nil, only periods are returned that are within the full trading hours. This is
45
+ accomplished by the fact, that Sunday is wday==0. If you want to use ranges, just send a an array
46
+ of ranges, providing seconds starting at Sunday morning midnight. Here is the default as example:
47
+
48
+ ```
49
+ ranges ||= [
50
+ 61200..143999, # Sun 5pm .. Mon 4pm
51
+ 147600..230399, # Mon 5pm .. Tue 4pm
52
+ 234000..316799, # ...
53
+ 320400..403199,
54
+ 406800..489599
55
+ ]
56
+ ```
57
+
58
+ #### Extending String
59
+
60
+ ##### is\_valid\_json?
61
+
62
+ #### Subpattern
63
+
64
+ ##### sub(minimum: 1) { [:hyper, :mega] }
65
+
66
+ sub (should be 'subpattern', but too long) is for use in case / when statements
67
+ it returns a lambda, that checks the case'd expression for matching subpattern
68
+ based on the the giving minimum. E.g. 'a', 'ab' .. 'abcd' will match sub(1){'abcd'}
69
+ but only 'abc' and 'abcd' will match sub(3){'abcd'}
70
+
71
+ The recommended use within evaluating user input, where abbreviation of incoming commands
72
+ is desirable (h for hoover and hyper, what will translate to sub(2){'hoover'} and sub(2){hyper})
73
+
74
+ To extend functionality even more, it is possible to send a group of patterns to, like
75
+ sub(2){[:hyper,:mega]}, what will respond truthy to "hy" and "meg" but not to "m" or "hypo"
76
+
77
+ *paired with keystroke() it allows an easy build of an inputhandler*
78
+
79
+ #### SimpleOutput
80
+
81
+ This is a very simple class, that mocks a more complex output handler. It provides puts, print,
82
+ puts! and print!. The actual OutputHandler is another project that needs to be rewritten. Once
83
+ that is done, SimpleOutput will be replaced. The new OutputHandler is a tool to handle information
84
+ flow like logs, to pause and continue output.
85
+
86
+ #### Input
87
+
88
+ ##### keystroke(quit: false)
89
+
90
+ A version of STDIN.gets, that does not wait for pressing 'enter' but instantly returns the content
91
+ of the keystroke.
92
+
93
+ *paired with subpattern it allows an easy build of an inputhandler*
94
+
95
+ #### Parallelize
96
+
97
+ ##### parallelize(ary, processes: 1, threads: 1, progress: "", &block)
98
+
99
+ Based on https://github.com/grosser/parallel, it is a quite convenient way to parallelize tasks.
100
+
101
+
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.1.2
@@ -1,32 +1,29 @@
1
1
  module Cotcube
2
2
  module Helpers
3
3
 
4
- def parallelize(ary, opts = {}, &block)
5
- processes = opts[:processes].nil? ? 1 : opts[:processes]
6
- threads_per_process = opts[:threads ].nil? ? 1 : opts[:threads]
7
- progress = opts[:progress ].nil? ? "" : opts[:progress]
4
+ def parallelize(ary, processes: 1, threads: 1, progress: "", &block)
8
5
  chunks = []
9
- if processes == 0 or processes == 1
10
- r = Parallel.map(ary, in_threads: threads_per_process) {|u| v = yield(u); v}
11
- elsif [0,1].include?(threads_per_process)
12
- r = Parallel.map(ary, in_processes: processes) {|u| v = yield(u)}
6
+ if [0,1].include? processes
7
+ result = Parallel.map(ary, in_threads: threads) {|u| v = yield(u); v}
8
+ elsif [0,1].include?(threads)
9
+ result = Parallel.map(ary, in_processes: processes) {|u| v = yield(u)}
13
10
  else
14
- ary.each_slice(threads_per_process) {|chunk| chunks << chunk }
11
+ ary.each_slice(threads) {|chunk| chunks << chunk }
15
12
  if progress == ""
16
- r = Parallel.map(chunks, :in_processes => processes) do |chunk|
17
- Parallel.map(chunk, in_threads: threads_per_process) do |unit|
13
+ result = Parallel.map(chunks, :in_processes => processes) do |chunk|
14
+ Parallel.map(chunk, in_threads: threads) do |unit|
18
15
  yield(unit)
19
16
  end
20
17
  end
21
18
  else
22
- r = Parallel.map(ary, :progress => progress, :in_processes => processes) do |chunk|
23
- Parallel.map(chunk, in_threads: threads_per_process) do |unit|
19
+ result = Parallel.map(chunks, :progress => progress, :in_processes => processes) do |chunk|
20
+ Parallel.map(chunk, in_threads: threads) do |unit|
24
21
  yield(unit)
25
22
  end
26
23
  end
27
24
  end
28
25
  end
29
- return r
26
+ result
30
27
  end
31
28
 
32
29
  end
@@ -29,9 +29,9 @@ class Range
29
29
  starting_with_dst = result.first.dst?
30
30
  seconds_since_sunday_morning = lambda {|x| x.wday * 86400 + x.hour * 3600 + x.min * 60 + x.sec}
31
31
  ranges ||= [
32
- 61200..143999,
33
- 147600..230399,
34
- 234000..316799,
32
+ 61200..143999, # Sun 5pm .. Mon 4pm
33
+ 147600..230399, # Mon 5pm .. Tue 4pm
34
+ 234000..316799, # ...
35
35
  320400..403199,
36
36
  406800..489599
37
37
  ]
@@ -12,7 +12,7 @@ module Cotcube
12
12
  #
13
13
  # To extend functionality even more, it is possible to send a group of patterns to, like
14
14
  # sub(2){[:hyper,:mega]}, what will respond truthy to "hy" and "meg" but not to "m" or "hypo"
15
- def sub(minimum = 1)
15
+ def sub(minimum: 1)
16
16
  pattern = yield
17
17
  case pattern
18
18
  when String, Symbol, NilClass
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cotcube-helpers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benjamin L. Tischendorf
@@ -76,6 +76,8 @@ files:
76
76
  - ".irbrc.rb"
77
77
  - CHANGELOG.md
78
78
  - Gemfile
79
+ - LICENSE.txt
80
+ - README.md
79
81
  - VERSION
80
82
  - cotcube-helpers.gemspec
81
83
  - lib/cotcube-helpers.rb