Как мне написать метод для нескольких контроллеров, который вырезает массив текста? - PullRequest
2 голосов
/ 23 июня 2010

Я хочу написать метод, который упрощает названия корпораций. Я бы хотел, чтобы это работало следующим образом:

@clear_company = clear_company(@company.name)

Что бы произошло, @ company.name = "Company, Inc." @clear_company будет "Компания"

Если @ company.name = "Корпорация компании", @clear_company будет "Компания"

Не было бы лишних пробелов. Я посмотрел на разные полосы и gsub, но мне нужно поддерживать массив:

clean_array = %w[Inc. Incorporated LLC]

Я мог бы обновить это, чтобы сделать его более эффективным.

Как бы я это сделал?

Ответы [ 3 ]

2 голосов
/ 23 июня 2010

в lib / clear_company.rb:

 module ClearCompany
  BUSINESS_ENTITY = %w[Corporation Inc. Incorporated LLC]

  def clear_company
    strip_business_entity.remove_trailing_punctuation
  end

  def strip_business_entity
    BUSINESS_ENTITY.inject(self) do |company, clean_word|
      company.sub(clean_word, '')
    end
  end

  def remove_trailing_punctuation
    strip.sub(/,$/, '')
  end
end

в config / initializers / string.rb:

class String
  include ClearCompany
end

если вам нравится RSpec:

describe String, :clear_company do
  it "removes ', Inc.' from the end" do
    "Company, Inc.".clear_company.should == "Company"
  end

  it "removes ' Corporation' from the end" do
    "Company Corporation".clear_company.should == "Company"
  end
end
0 голосов
/ 23 июня 2010

Данные очистки на самом деле не относятся к контроллеру , поэтому лучше хранить в модели .Самый простой способ - использовать фильтр before_save:

class Company < ActiveRecord::Base
  before_save :clean_name

private
  def clean_name
    self.name = name.gsub(/Corporation|LLC|Incorporated|Inc.?/i, "").strip
  end 
end
0 голосов
/ 23 июня 2010
def clear_company(name)
  clean_array = %w[Inc. Incorporated LLC]
  name = name.strip
  word_to_remove = clean_array.find {|x| name[/#{x}$/] }
  name.sub(/#{word_to_remove}$/, '').strip
end

Значение .strip в конце важно, потому что без него "X Inc."станет "Х".

...