class Esapad
Constants
- DEFAULT_PER_PAGE
- VERSION
Public Class Methods
new()
click to toggle source
# File lib/esapad.rb, line 13 def initialize @client = Esa::Client.new(access_token: ENV["ESA_ACCESS_TOKEN"], current_team: ENV["ESA_TEAM"]) end
Public Instance Methods
blog_query()
click to toggle source
# File lib/esapad.rb, line 38 def blog_query ENV["BLOG_CATEGORY"] || "category:日報/" end
fetch_updated_pages(kind)
click to toggle source
# File lib/esapad.rb, line 42 def fetch_updated_pages(kind) query = case kind when "flow" "wip:false #{blog_query} -body:RECENTLY-UPDATED-POSTS" when "stock" "wip:false -#{blog_query} -body:RECENTLY-UPDATED-POSTS" end @client.posts(q: query, per_page: per_page).body["posts"] end
generate_recently_liked_md()
click to toggle source
# File lib/esapad.rb, line 68 def generate_recently_liked_md posts = (1..3). map {|page| @client.posts(q: "wip:false created:>#{Date.today - 60} stars:>3", page: page).body["posts"] }. flatten. sort_by {|post| -post["stargazers_count"] }. slice(0, 20). sort_by {|post| -Time.parse(post["updated_at"]).to_i }. map {|post| <<-MARKDOWN <li> <a href="#{ post["url"] }">#{ post["full_name"] }</a> <span class="recently-liked-posts-metadata" style="font-size: 90%;"> :star: #{ post["stargazers_count"] } </span> </li> MARKDOWN }.join end
generate_updated_md(kind)
click to toggle source
# File lib/esapad.rb, line 52 def generate_updated_md(kind) posts = fetch_updated_pages(kind) posts.map {|post| <<-MARKDOWN <li> <a href="#{ post["url"] }">#{ post["full_name"] }</a> <div class="recently-updated-posts-metadata" style="font-size: 90%;"> <span class="post-list__date">#{ Time.parse(post["updated_at"]).strftime("%Y-%m-%d %H:%M") }</span> by <img src="#{ post["updated_by"]["icon"] }" width="20px" height="20px" /> <a href="/users/#{ post["updated_by"]["screen_name"] }">#{ post["updated_by"]["screen_name"] }</a> </div> </li> MARKDOWN }.join end
update_pages_list(target_page_id)
click to toggle source
# File lib/esapad.rb, line 17 def update_pages_list(target_page_id) flow_updated_md = generate_updated_md("flow") stock_updated_md = generate_updated_md("stock") recently_liked_md = generate_recently_liked_md target_page = @client.post(ENV["ESA_TARGET_PAGE_ID"]) target_page_md = target_page.body["body_md"] target_page_md = replace_pages_list_md(target_page_md, "flow", flow_updated_md) target_page_md = replace_pages_list_md(target_page_md, "stock", stock_updated_md) target_page_md = replace_liked_posts_md(target_page_md, recently_liked_md) if target_page_md != target_page.body["body_md"] target_page_md = replace_updated_time(target_page_md) message = skip_notice? ? "[skip notice]" : "" @client.update_post(target_page_id, body_md: target_page_md, updated_by: "esa_bot", message: message) puts "Updated: #{ target_page.body["url"] }" end end
Private Instance Methods
per_page()
click to toggle source
# File lib/esapad.rb, line 112 def per_page @per_page ||= ENV["PER_PAGE"] || DEFAULT_PER_PAGE end
replace_liked_posts_md(original_md, updated_md)
click to toggle source
# File lib/esapad.rb, line 101 def replace_liked_posts_md(original_md, updated_md) original_md.gsub( /<!-- RECENTLY-LIKED-POSTS-START -->(.+)<!-- RECENTLY-LIKED-POSTS-END -->/m, "<!-- RECENTLY-LIKED-POSTS-START -->#{updated_md}<!-- RECENTLY-LIKED-POSTS-END -->" ) end
replace_pages_list_md(original_md, kind, updated_md)
click to toggle source
# File lib/esapad.rb, line 87 def replace_pages_list_md(original_md, kind, updated_md) original_md.gsub( /<!-- RECENTLY-UPDATED-#{kind.upcase}-POSTS-START -->(.+)<!-- RECENTLY-UPDATED-#{kind.upcase}-POSTS-END -->/m, "<!-- RECENTLY-UPDATED-#{kind.upcase}-POSTS-START -->#{updated_md}<!-- RECENTLY-UPDATED-#{kind.upcase}-POSTS-END -->" ) end
replace_updated_time(original_md)
click to toggle source
# File lib/esapad.rb, line 94 def replace_updated_time(original_md) original_md.gsub( /<!-- RECENTLY-UPDATED-POSTS-UPDATED-START -->(.+)<!-- RECENTLY-UPDATED-POSTS-UPDATED-END -->/m, "<!-- RECENTLY-UPDATED-POSTS-UPDATED-START -->\n更新日時: #{ Time.now.strftime("%Y-%m-%d %H:%M") }\n<!-- RECENTLY-UPDATED-POSTS-UPDATED-END -->", ) end
skip_notice?()
click to toggle source
# File lib/esapad.rb, line 108 def skip_notice? @skip_notice ||= !!ENV["SKIP_NOTICE"] end