Socket
Book a DemoInstallSign in
Socket

lookaround-enumerable

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

lookaround-enumerable

bundlerRubygems
Version
1.0.0
Version published
Maintainers
1
Created
Source

Lookaround Enumerable

When working with time series, it is common to perform operations that depend on a sliding window of values. Lookaround Enumerable adds two main methods, and several sub-helpers to assist with running map/collect, reduce/inject, and find_all/select queries that depend on the previous values (Enumerable#each_with_prev), or a whole window of values (Enumerable#each_with_window). This gem contains these methods as refinements.

Installation

Add this line to your application's Gemfile:

gem 'lookaround-enumerable'

And then execute:

$ bundle

Or install it yourself as:

$ gem install lookaround-enumerable

Usage

require 'lookaround-enumerable'
using LookaroundEnum

The LookaroundEnum contains the refinements, so they can be targeted to selected areas of code.

# Maps characters after a capital letter to "x"
"AbCdefgHiJKl".each_char.map_with_prev(1, filler: "a") {|x, previous| previous.upcase == previous ? "x" : x}.join
# => "AxCxefgHxJxx"

# select characters surrounded by > <, ignoring the bounds (crop)
"Ab>c<defg>h<i>j<kLm>n<op".each_char.select_with_window(-1..1, crop: true) { |left, item, right| left + right == "><" }.join
# => "cjhn"
  • Set what beyond the Enumerable is with filler:
  • Ignore all iterations that look beyond the Enumerable with crop: true
  • Remove extra details from chains with trim: true

See the documentation spec tests under spec/ for more examples.

Wait, what are the proc's args?

That's a tricky question. By default, single left/right views should just work, but you might have to play with the expand parameter or do a p *args to figure out more advanced usage, like chaining with memos or objects. The each_with_prev family does |(*this), ((*previous1), ..., (*previous_n))| with older/lower indexes to the right. The each_with_window family does |((*previous_n), ..., (*previous1)), (*this), ((*next1), ..., (*next_n))| with older/lower indexes on the left.

Development

After checking out the repo, run bundle install to install dependencies. Then, run rake spec or rspec to run the tests.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/byteit101/lookaround-enumerable.

FAQs

Package last updated on 20 Oct 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts