All Projects → zeisler → Active_enumerable

zeisler / Active_enumerable

Licence: mit
ActiveRecord like query methods for Ruby enumerable collections.

Programming Languages

ruby
36898 projects - #4 most used programming language

Projects that are alternatives of or similar to Active enumerable

Notifications Rails
A flexible notification library supporting the delivery to external services, rendering in various environments, and user configuration by category.
Stars: ✭ 130 (+78.08%)
Mutual labels:  rails, rubygem
Pluck to hash
Extend ActiveRecord pluck to return array of hashes
Stars: ✭ 275 (+276.71%)
Mutual labels:  hash, rails
Dry Rails
The official dry-rb railtie
Stars: ✭ 142 (+94.52%)
Mutual labels:  rails, rubygem
Rails server timings
Server Timing headers for Rails apps
Stars: ✭ 112 (+53.42%)
Mutual labels:  rails, rubygem
Matestack Ui Core
Matestack enables you to create sophisticated, reactive UIs in pure Ruby, without touching JavaScript and HTML. You end up writing 50% less code while increasing productivity, maintainability and developer happiness.
Stars: ✭ 469 (+542.47%)
Mutual labels:  rails, rubygem
Apple id
Sign in with Apple backend library in Ruby
Stars: ✭ 115 (+57.53%)
Mutual labels:  rails, rubygem
Active hash relation
ActiveHash Relation: Simple gem that allows you to run multiple ActiveRecord::Relation using hash. Perfect for APIs.
Stars: ✭ 115 (+57.53%)
Mutual labels:  hash, rails
Pluck all
A more efficient way to get data from database. Like #pluck method but return array of hashes instead.
Stars: ✭ 83 (+13.7%)
Mutual labels:  hash, rails
Strip attributes
🔪 An ActiveModel extension that automatically strips all attributes of leading and trailing whitespace before validation. If the attribute is blank, it strips the value to nil.
Stars: ✭ 441 (+504.11%)
Mutual labels:  rails, rubygem
Clearance
Rails authentication with email & password.
Stars: ✭ 3,467 (+4649.32%)
Mutual labels:  rails, rubygem
Graphql devise
GraphQL interface on top devise_token_auth
Stars: ✭ 100 (+36.99%)
Mutual labels:  rails, rubygem
Materialize Sass
Materializecss rubygem for Rails Asset Pipeline / Sprockets
Stars: ✭ 785 (+975.34%)
Mutual labels:  rails, rubygem
Karafka
Framework for Apache Kafka based Ruby and Rails applications development.
Stars: ✭ 1,223 (+1575.34%)
Mutual labels:  rails, rubygem
Activeinteractor
An implementation of the command pattern for Ruby with ActiveModel::Validations inspired by the interactor gem. Rich support for attributes, callbacks, and validations, and thread safe performance methods.
Stars: ✭ 118 (+61.64%)
Mutual labels:  rails, rubygem
Tapping device
TappingDevice makes objects tell you what they do, so you don't need to track them yourself.
Stars: ✭ 296 (+305.48%)
Mutual labels:  rails, rubygem
Maily
📫 Rails Engine to preview emails in the browser
Stars: ✭ 502 (+587.67%)
Mutual labels:  rails, rubygem
Ordinalize full
Turns a number into an ordinal string such as first, second, third or 1st, 2nd, 3rd.
Stars: ✭ 6 (-91.78%)
Mutual labels:  rails, rubygem
Ifme
Free, open source mental health communication web app to share experiences with loved ones
Stars: ✭ 1,147 (+1471.23%)
Mutual labels:  rails
Reportbuilder
Ruby gem to merge Cucumber JSON reports and build mobile-friendly HTML Test Report, JSON report and retry file.
Stars: ✭ 69 (-5.48%)
Mutual labels:  rubygem
Parcel Rails
Integration of Parcel Javascript module bundler with Rails
Stars: ✭ 67 (-8.22%)
Mutual labels:  rails

ActiveEnumerable

Build Status Gem Version

Provides ActiveRecord like query methods for use in Ruby Enumerable collections. Use Hashes or custom Ruby Objects to represent records.

Installation

Add this line to your application's Gemfile:

gem 'active_enumerable'

And then execute:

$ bundle

Or install it yourself as:

$ gem install active_enumerable

Usage

Documentation

ActiveRecord Like Querying

require "active_enumerable"

class Customers
  include ActiveEnumerable

  scope :unpaid, -> { where(paid: false).or(credit: 0) }
end

customers = Customers.new([{paid: true, credit: 1000}, {paid: false, credit: 2000}, {paid: false, credit: 0}])

customers.unpaid
# => <#Customers [{:paid=>false, :credit=>2000}, {:paid=>false, :credit=>0}]]>

customers.scope { select { |y| y[:credit] >= 1000 } }
#=> <#Customers [{paid: true, credit: 1000}, {paid: false, credit: 2000}]>

customers.sum(:credit)
#=> 3000

customers << { paid: true, credit: 1500 } # accepts Hashes

customers.where{ paid && credit == 1000 }
# => <#Customers [{paid: true, credit: 1000}]

class Customer
  attr_reader :paid, :credit
  def initialize(paid:, credit:)
    @paid  = paid
    @credit = credit
  end
end

customers << Customer.new(paid: true, credit: 1500) # Or Objects

English Like DSL

require "active_enumerable"

class People
  include ActiveEnumerable
  
  scope :unpaid, -> { where(paid: false).or(credit: 0) }
end

people = People.new([{ name: "Reuben" }, { name: "Naomi" }])
people.where { has(:name).of("Reuben") }
    #=> <#People [{ name: "Reuben" }]]
    
    
people = People.new( [
        { name: "Reuben", parents: [{ name: "Mom", age: 29 }, { name: "Dad", age: 33 }] },
        { name: "Naomi", parents: [{ name: "Mom", age: 29 }, { name: "Dad", age: 41 }] }
      ] )
      
people.where { has(:parents).of(age: 29, name: "Mom").or(age: 33, name: "Dad") } 
    #=>  <#People [{ name: "Reuben", parents: [...] }, { name: "Naomi", parents: [...] }]

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

This is a community project and commit access will be granted to those who show interest by having a history of acceptable pull-requests.

Bug reports and pull requests are welcome on GitHub at https://github.com/zeisler/active_enumerable. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the Contributor Covenant code of conduct.

License

The gem is available as open source under the terms of the MIT License.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].