Как я могу написать метод для нескольких контроллеров, которые изменили массив текста?

StackOverflow https://stackoverflow.com/questions/3097629

Вопрос

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

@clear_company = clear_company(@company.name)

Что произойдет, есть @ Company.Name = "Company, Inc." @clear_company будет "компанией"

Если @company.name = "Company Corporation" @Clear_company будет "Компания"

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

clean_array = %w[Inc. Incorporated LLC]

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

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

Это было полезно?

Решение

В 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

В конфиге / инициализаторах / 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

Другие советы

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.» станет "x".

Уборка данных не очень беспокойство контроллера, так Лучше всего держать его в модели. Анкет Самый простой способ использует 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top