Sha256: 497c5df2072a88812e741af09a880b043b86772cc0402fbbb04c91d9acd4e048

Contents?: true

Size: 1.04 KB

Versions: 2

Compression:

Stored size: 1.04 KB

Contents

require_relative 'spec_helper'
require 'sinatra/base'
require 'json'
require 'benchmark/ips'

Conditionals = lambda do |params = {}|
  @artists = DB[:artists]
  if (genre = params[:genre])
    @artists = @artists.grep(:genre, "%#{genre}%", case_insensitive: true)
  end
  if (name = params[:name])
    @artists = @artists.grep(:name, "%#{name}%", case_insensitive: true)
  end

  @artists.to_json
end

Reduction = lambda do |params = {}|
  @artists = Rack::Reducer.call(params, dataset: DB[:artists], filters: [
    ->(genre:) { grep(:genre, "%#{genre}%", case_insensitive: true) },
    ->(name:) { grep(:name, "%#{name}%", case_insensitive: true) },
  ])

  @artists.to_json
end

Benchmark.ips(3) do |bm|
  bm.report('conditionals, empty params') { Conditionals.call }

  bm.report('reduction, empty params') { Reduction.call }

  bm.report('conditionals, full params') do
    Conditionals.call({ name: 'blake', genre: 'electric' })
  end

  bm.report('reduction, full params') do
    Reduction.call({ name: 'blake', genre: 'electric' })
  end

  bm.compare!
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rack-reducer-1.0.1 spec/benchmarks.rb
rack-reducer-1.0.0 spec/benchmarks.rb