twitter でシェアする商品属性の長さに基づいてテキストを組み立てるために、このクラスを作成しました。
私の質問:
- これは問題に取り組むための良いアプローチですか?これじゃないなら何?(クラスとメソッドをどこに置くべきか、どのように呼び出すかなど)
- これが良いアプローチである場合、何を変更する必要がありますか? たとえば、 は にある
def twitter_share_text
べきではないと感じていますproduct.rb
。
show.html.erb
<a class="twitter-share" data-behavior="twitter-share"
data-twittertext="<%= @product.twitter_share_text %>"
data-twitterurl="<%= product_url(@product) %>"
data-twitteranchor>
<i class="fa fa-lg fa-twitter"></i>
</a>
product.rb
def twitter_share_text
TwitterProductShare.new(self).return_text
end
アプリ/サービス/twitter_product_share.rb
class TwitterProductShare
URL_LENGTH = 23 #defined by twitter API
SPACE_LENGTH = 1
TWITTER_MAX = 140
attr_reader :name, :oneliner
def initialize(product)
@name = product.name
@oneliner = product.oneliner
end
def return_text
if full_length <= TWITTER_MAX
return basic_text
else
return basic_text[0...-(difference + text_end.length)] + text_end
end
end
private
def basic_text
"#{name}: #{oneliner}"
end
def difference
full_length - TWITTER_MAX
end
def full_length
basic_text.length + SPACE_LENGTH + URL_LENGTH
end
def text_end
"..."
end
end