Class: Jekyll::Shopsavvy::DealsTag

Inherits:
Liquid::Tag
  • Object
show all
Defined in:
lib/jekyll/shopsavvy/tags.rb

Overview

shopsavvy_deals [category=“…”] [limit=10] [sort=“trending”] [grade=“A”] %

Instance Method Summary collapse

Constructor Details

#initialize(tag_name, markup, tokens) ⇒ DealsTag

Returns a new instance of DealsTag.



115
116
117
118
119
120
121
122
# File 'lib/jekyll/shopsavvy/tags.rb', line 115

def initialize(tag_name, markup, tokens)
  super
  _positional, named = ArgsParser.parse(markup)
  @category = named[:category]
  @limit = (named[:limit] || 10).to_i
  @sort = named[:sort] || "trending"
  @grade = named[:grade]
end

Instance Method Details

#render(context) ⇒ Object



124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/jekyll/shopsavvy/tags.rb', line 124

def render(context)
  client = SiteHelpers.client_for(context)
  return "" unless client
  deals = client.deals(category: @category, limit: @limit, sort: @sort, grade: @grade)
  items = deals["data"] || []
  body = items.map do |d|
    %(<a class="shopsavvy-deal" href="#{d["url"] || "https://shopsavvy.com"}" rel="noopener">) +
      (d["image"] ? %(<img src="#{d["image"]}" alt="#{d["name"]}" loading="lazy" />) : "") +
      %(<div class="shopsavvy-deal__body"><p class="shopsavvy-deal__name">#{d["name"]}</p>) +
      %(<p class="shopsavvy-deal__price"><span class="shopsavvy-deal__sale">$#{d["price"]}</span>) +
      (d["strikethrough"] ? %(<span class="shopsavvy-deal__msrp">$#{d["strikethrough"]}</span>) : "") +
      %(</p><p class="shopsavvy-deal__retailer">#{d["retailer"]}</p></div></a>)
  end.join
  %(<div class="shopsavvy-deals-grid">#{body}</div>)
end