Skip to content

Instantly share code, notes, and snippets.

@ipmsteven
Created January 27, 2015 10:04
Show Gist options
  • Select an option

  • Save ipmsteven/8a519507bcf6a4a5e263 to your computer and use it in GitHub Desktop.

Select an option

Save ipmsteven/8a519507bcf6a4a5e263 to your computer and use it in GitHub Desktop.
tenant_name_normalizer
class Person < Struct.new(:name); end
@tenants = ('ah'..'ch').map { |l| Person.new(l) }
@tenant_names = @tenants.map(&:name)
class TenantNamesNormalizer
def initialize(tenant_names, filter_by_letter:nil, sorted_in_reverse: false)
@tenant_names = tenant_names
@filter_by_letter = filter_by_letter
@sorted_in_reverse = sorted_in_reverse
end
def filter_by_letter
new_tenant_names = @filter_by_letter? @tenant_names.select{|n| n.start_with?(@filter_by_letter)} : @tenant_names
new(new_tenant_names, filter_by_letter: @filter_by_letter, sorted_in_reverse: @sorted_in_reverse)
end
def sorted_in_reverse
new_tenant_names = @sorted_in_reverse? @tenant_names.reverse : @tenant_names
new(new_tenant_names, filter_by_letter: @filter_by_letter, sorted_in_reverse: @sorted_in_reverse)
end
def to_a
@tenant_names
end
private
def new(*args)
self.class.new(*args)
end
end
def tenant_names_on_page(tenant_names, page, num_per_page:5, sorted_in_reverse: false, filter_by_letter: nil)
TenantNamesNormalizer.new(tenant_names, sorted_in_reverse:sorted_in_reverse, filter_by_letter: filter_by_letter)
.filter_by_letter
.sorted_in_reverse
.to_a
.each_slice(num_per_page).to_a[page-1]
end
puts tenant_names_on_page(@tenant_names, 1, sorted_in_reverse: false, filter_by_letter: 'c')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment