Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
A simple wrapper for if
conditionals, what each
is for while
loops.
Just like each
, therefore
relies on block semantics, so it's essentially an if
conditional with a scope, a closure, and the ability to be chained with other methods.
Add this line to your application's Gemfile:
gem 'therefore', '~> 1.0'
And then execute:
$ bundle
Or you can install the gem on its own:
gem install therefore
obj.therefore {...}
will invoke the block, yielding obj
to it, unless obj
is either nil
or false
. If the block is invoked its result is returned, otherwise obj
is returned:
def find_user input: {}
input[:id].therefore do |user_id|
User.find user_id
end
end
find_user input: {id: 1} # => #<User id: 1, ...>
find_user input: {id: nil} # => nil
obj.otherwise {...}
behaves symmetrically to therefore
: it only invokes the block, again yielding obj
, if obj
is either false
or nil
. Again, if the block is invoked its result is returned, otherwise obj
is returned. If you chain it with therefore
, it can work as an else
branch:
def find_user input: {}
input[:id].therefore do |user_id|
User.find user_id
end.otherwise do
User.default
end
end
find_user input: {id: 1} # => #<User id: 1, ...>
find_user input: {id: nil} # => #<User default: true, ...>
You can also invoke otherwise
with a parameter, in which case it works as an elsif
branch:
obj.otherwise(other_obj) do |var|
...
end
is equivalent to
obj.otherwise do
other_obj.therefore do |var|
...
end
end
Both therefore
and otherwise
can be called without a block, in which case they return an enumerator. If the block would have been invoked the enumerator contains obj
, otherwise it is empty:
nil.therefore.to_a # => []
nil.otherwise.to_a # => [nil]
'string'.therefore.to_a # => ['string']
'string'.otherwise.to_a # => []
Therefore loosely follows Semantic Versioning, with a hard guarantee that breaking changes to the public API will always coincide with an increase to the MAJOR
number.
Version numbers are in three parts: MAJOR.MINOR.PATCH
.
MAJOR
. There may also be changes that would otherwise increase the MINOR
or the PATCH
.MINOR
. There may also be changes that would otherwise increase the PATCH
.PATCH
.Notice that any feature deprecated by a minor release can be expected to be removed by the next major release.
Full list of changes in CHANGELOG.md
Bug reports and pull requests are welcome on GitHub at https://github.com/moku-io/therefore.
The gem is available as open source under the terms of the MIT License.
FAQs
Unknown package
We found that therefore demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
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.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.