From 8bebd8fd99f7778a6fee0e7c62ef9457a1119956 Mon Sep 17 00:00:00 2001 From: Jarek Radosz <jradosz@gmail.com> Date: Thu, 10 Aug 2023 13:59:13 +0200 Subject: [PATCH] DEV: Format .thor files (#23059) --- .github/workflows/linting.yml | 2 +- lib/tasks/backfill.thor | 6 +- lib/tasks/populate.thor | 186 +++++++++++++++++++++++++++++----- lib/tasks/typepad.thor | 136 +++++++++++++------------ 4 files changed, 237 insertions(+), 93 deletions(-) diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 0ded454e9e6..2140fb1809b 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -73,7 +73,7 @@ jobs: if: ${{ !cancelled() }} run: | set -E - bundle exec stree check Gemfile $(git ls-files '*.rb') $(git ls-files '*.rake') + bundle exec stree check Gemfile $(git ls-files '*.rb') $(git ls-files '*.rake') $(git ls-files '*.thor') - name: ESLint (core) if: ${{ !cancelled() }} diff --git a/lib/tasks/backfill.thor b/lib/tasks/backfill.thor index 6690de54bac..f3026b830bb 100644 --- a/lib/tasks/backfill.thor +++ b/lib/tasks/backfill.thor @@ -4,13 +4,11 @@ class Backfill < Thor desc "link_titles", "Backfills link titles" def link_titles - require './config/environment' + require "./config/environment" topic_links = TopicLink.where(crawled_at: nil, internal: false) puts "Enqueueing Topic Links: #{topic_links.count} links found." - topic_links.pluck(:id).each do |tl| - Jobs.enqueue(:crawl_topic_link, topic_link_id: tl) - end + topic_links.pluck(:id).each { |tl| Jobs.enqueue(:crawl_topic_link, topic_link_id: tl) } end end diff --git a/lib/tasks/populate.thor b/lib/tasks/populate.thor index 52ad939eb47..422de72ba4f 100644 --- a/lib/tasks/populate.thor +++ b/lib/tasks/populate.thor @@ -21,14 +21,28 @@ class Populate < Thor > $ thor populate:posts -p 10 -n 5 MD - method_option :num_posts, aliases: '-n', type: :numeric, required: true, desc: "Number of posts to make" - method_option :users, aliases: '-u', type: :array, desc: "Usernames of users who will make the posts" - method_option :title, aliases: '-t', desc: "The title of the topic, if making a new topic" - method_option :topic_id, aliases: '-i', type: :numeric, desc: "The id of the topic where the posts will be added" - method_option :num_topics, aliases: '-p', type: :numeric, default: 1, desc: "Number of topics to create" + method_option :num_posts, + aliases: "-n", + type: :numeric, + required: true, + desc: "Number of posts to make" + method_option :users, + aliases: "-u", + type: :array, + desc: "Usernames of users who will make the posts" + method_option :title, aliases: "-t", desc: "The title of the topic, if making a new topic" + method_option :topic_id, + aliases: "-i", + type: :numeric, + desc: "The id of the topic where the posts will be added" + method_option :num_topics, + aliases: "-p", + type: :numeric, + default: 1, + desc: "Number of topics to create" def posts - require './config/environment' + require "./config/environment" users = [] if options[:users] options[:users].each do |u| @@ -49,10 +63,8 @@ class Populate < Thor topic = create_topic(users) unless topic puts "Adding posts to '#{topic.title}'" puts "Making #{options[:num_posts]} posts" - (start_post..options[:num_posts]).each do - create_post(users, topic) - end - puts '' + (start_post..options[:num_posts]).each { create_post(users, topic) } + puts "" puts "Done. Topic id = #{topic.id}" end ensure @@ -65,7 +77,12 @@ class Populate < Thor user = User.find_by_email(user_email) unless user puts "Creating new account: #{user_email}" - user = User.create!(email: user_email, password: SecureRandom.hex, username: UserNameSuggester.suggest(user_email)) + user = + User.create!( + email: user_email, + password: SecureRandom.hex, + username: UserNameSuggester.suggest(user_email), + ) end user.active = true user.save! @@ -87,35 +104,158 @@ class Populate < Thor end def create_post(users, topic) - print '.' - raw = rand(4) == 0 ? (rand(2) == 0 ? image_posts.sample : wikipedia_posts.sample) : generate_sentence(7) + print "." + raw = + ( + if rand(4) == 0 + (rand(2) == 0 ? image_posts.sample : wikipedia_posts.sample) + else + generate_sentence(7) + end + ) post_creator = PostCreator.new(users.sample, topic_id: topic.id, raw: raw) post = post_creator.create - unless post - puts post_creator.errors.full_messages, "" - end + puts post_creator.errors.full_messages, "" unless post post end def hipster_words - @hipster_words ||= ['etsy', 'twee', 'hoodie', 'Banksy', 'retro', 'synth', 'single-origin', 'coffee', 'art', 'party', 'cliche', 'artisan', 'Williamsburg', 'squid', 'helvetica', 'keytar', 'American Apparel', 'craft beer', 'food truck', "you probably haven't heard of them", 'cardigan', 'aesthetic', 'raw denim', 'sartorial', 'gentrify', 'lomo', 'Vice', 'Pitchfork', 'Austin', 'sustainable', 'salvia', 'organic', 'thundercats', 'PBR', 'iPhone', 'lo-fi', 'skateboard', 'jean shorts', 'next level', 'beard', 'tattooed', 'trust fund', 'Four Loko', 'master cleanse', 'ethical', 'high life', 'wolf moon', 'fanny pack', 'Terry Richardson', '8-bit', 'Carles', 'Shoreditch', 'seitan', 'freegan', 'keffiyeh', 'biodiesel', 'quinoa', 'farm-to-table', 'fixie', 'viral', 'chambray', 'scenester', 'leggings', 'readymade', 'Brooklyn', 'Wayfarers', 'Marfa', 'put a bird on it', 'dreamcatcher', 'photo booth', 'tofu', 'mlkshk', 'vegan', 'vinyl', 'DIY', 'banh mi', 'bicycle rights', 'before they sold out', 'gluten-free', 'yr butcher blog', 'whatever', '+1', 'Cosby Sweater', 'VHS', 'messenger bag', 'cred', 'locavore', 'mustache', 'tumblr', 'Portland', 'mixtape', 'fap', 'letterpress', "McSweeney's", 'stumptown', 'brunch', 'Wes Anderson', 'irony', 'echo park'] + @hipster_words ||= [ + "etsy", + "twee", + "hoodie", + "Banksy", + "retro", + "synth", + "single-origin", + "coffee", + "art", + "party", + "cliche", + "artisan", + "Williamsburg", + "squid", + "helvetica", + "keytar", + "American Apparel", + "craft beer", + "food truck", + "you probably haven't heard of them", + "cardigan", + "aesthetic", + "raw denim", + "sartorial", + "gentrify", + "lomo", + "Vice", + "Pitchfork", + "Austin", + "sustainable", + "salvia", + "organic", + "thundercats", + "PBR", + "iPhone", + "lo-fi", + "skateboard", + "jean shorts", + "next level", + "beard", + "tattooed", + "trust fund", + "Four Loko", + "master cleanse", + "ethical", + "high life", + "wolf moon", + "fanny pack", + "Terry Richardson", + "8-bit", + "Carles", + "Shoreditch", + "seitan", + "freegan", + "keffiyeh", + "biodiesel", + "quinoa", + "farm-to-table", + "fixie", + "viral", + "chambray", + "scenester", + "leggings", + "readymade", + "Brooklyn", + "Wayfarers", + "Marfa", + "put a bird on it", + "dreamcatcher", + "photo booth", + "tofu", + "mlkshk", + "vegan", + "vinyl", + "DIY", + "banh mi", + "bicycle rights", + "before they sold out", + "gluten-free", + "yr butcher blog", + "whatever", + "+1", + "Cosby Sweater", + "VHS", + "messenger bag", + "cred", + "locavore", + "mustache", + "tumblr", + "Portland", + "mixtape", + "fap", + "letterpress", + "McSweeney's", + "stumptown", + "brunch", + "Wes Anderson", + "irony", + "echo park", + ] end def generate_sentence(num_words) - sentence = hipster_words.sample(num_words).join(' ').capitalize + '.' - sentence.force_encoding('UTF-8') + sentence = hipster_words.sample(num_words).join(" ").capitalize + "." + sentence.force_encoding("UTF-8") end def generate_email - email = hipster_words.sample.delete(' ') + '@' + hipster_words.sample.delete(' ') + '.com' - email.delete("'").force_encoding('UTF-8') + email = hipster_words.sample.delete(" ") + "@" + hipster_words.sample.delete(" ") + ".com" + email.delete("'").force_encoding("UTF-8") end def image_posts - @image_posts ||= ["http://i.imgur.com/CnRF48R.jpg\n\n", "http://i.imgur.com/2iaeK.png\n\n", "http://i.imgur.com/WSD5t61.jpg\n\n", "http://i.imgur.com/GUldmUd.jpg\n\n", "http://i.imgur.com/nJnb6Bj.jpg\n\n", "http://i.imgur.com/eljDYjm.jpg\n\n", "http://i.imgur.com/5yZMWyY.png\n\n", "http://i.imgur.com/2iCPGm2.jpg\n\n"] + @image_posts ||= [ + "http://i.imgur.com/CnRF48R.jpg\n\n", + "http://i.imgur.com/2iaeK.png\n\n", + "http://i.imgur.com/WSD5t61.jpg\n\n", + "http://i.imgur.com/GUldmUd.jpg\n\n", + "http://i.imgur.com/nJnb6Bj.jpg\n\n", + "http://i.imgur.com/eljDYjm.jpg\n\n", + "http://i.imgur.com/5yZMWyY.png\n\n", + "http://i.imgur.com/2iCPGm2.jpg\n\n", + ] end def wikipedia_posts - @wikipedia_posts ||= ["http://en.wikipedia.org/wiki/Dwarf_fortress\n\n", "http://en.wikipedia.org/wiki/Action_plan\n\n", "http://en.wikipedia.org/wiki/Chang%27e_3\n\n", "http://en.wikipedia.org/wiki/Carl_sagan\n\n", "http://en.wikipedia.org/wiki/Chasmosaurus\n\n", "http://en.wikipedia.org/wiki/Indian_Space_Research_Organisation\n\n", "http://en.wikipedia.org/wiki/Rockstar_Consortium\n\n", "http://en.wikipedia.org/wiki/Manitoulin_island\n\n"] + @wikipedia_posts ||= [ + "http://en.wikipedia.org/wiki/Dwarf_fortress\n\n", + "http://en.wikipedia.org/wiki/Action_plan\n\n", + "http://en.wikipedia.org/wiki/Chang%27e_3\n\n", + "http://en.wikipedia.org/wiki/Carl_sagan\n\n", + "http://en.wikipedia.org/wiki/Chasmosaurus\n\n", + "http://en.wikipedia.org/wiki/Indian_Space_Research_Organisation\n\n", + "http://en.wikipedia.org/wiki/Rockstar_Consortium\n\n", + "http://en.wikipedia.org/wiki/Manitoulin_island\n\n", + ] end end diff --git a/lib/tasks/typepad.thor b/lib/tasks/typepad.thor index 4341fb04dc8..87312d47c57 100644 --- a/lib/tasks/typepad.thor +++ b/lib/tasks/typepad.thor @@ -1,21 +1,21 @@ # frozen_string_literal: true -require 'open-uri' +require "open-uri" class Typepad < Thor - desc "import", "Imports posts from a Disqus XML export" - method_option :file, aliases: '-f', required: true, desc: "The typepad file to import" - method_option :post_as, aliases: '-p', required: true, desc: "The Discourse username to post as" - method_option :google_api, aliases: '-g', required: false, desc: "The google plus API key to use to fetch usernames" + method_option :file, aliases: "-f", required: true, desc: "The typepad file to import" + method_option :post_as, aliases: "-p", required: true, desc: "The Discourse username to post as" + method_option :google_api, + aliases: "-g", + required: false, + desc: "The google plus API key to use to fetch usernames" def import - require './config/environment' + require "./config/environment" backup_settings = {} - %w(blocked_email_domains).each do |s| - backup_settings[s] = SiteSetting.get(s) - end + %w[blocked_email_domains].each { |s| backup_settings[s] = SiteSetting.get(s) } user = User.where(username_lower: options[:post_as].downcase).first if user.nil? @@ -31,26 +31,24 @@ class Typepad < Thor input = "" entries = [] - File.open(options[:file]).each_line do |l| - l = l.scrub + File + .open(options[:file]) + .each_line do |l| + l = l.scrub - if l =~ /\A--------\z/ - parsed_entry = process_entry(input) - if parsed_entry - puts "Parsed #{parsed_entry[:title]}" - entries << parsed_entry + if l =~ /\A--------\z/ + parsed_entry = process_entry(input) + if parsed_entry + puts "Parsed #{parsed_entry[:title]}" + entries << parsed_entry + end + input = "" + else + input << l end - input = "" - else - input << l end - end - entries.each_with_index do |e, i| - if e[:title] =~ /Head/ - puts "#{i}: #{e[:title]}" - end - end + entries.each_with_index { |e, i| puts "#{i}: #{e[:title]}" if e[:title] =~ /Head/ } RateLimiter.disable SiteSetting.blocked_email_domains = "" @@ -74,13 +72,23 @@ class Typepad < Thor email = c[:email] post_user = User.where(email: email).first if post_user.blank? - post_user = User.create!(name: c[:name], email: email, username: UserNameSuggester.suggest(username)) + post_user = + User.create!( + name: c[:name], + email: email, + username: UserNameSuggester.suggest(username), + ) end else post_user = User.where(username: username).first if post_user.blank? suggested = UserNameSuggester.suggest(username) - post_user = User.create!(name: c[:name], email: "#{suggested}@no-email-found.com", username: suggested) + post_user = + User.create!( + name: c[:name], + email: "#{suggested}@no-email-found.com", + username: suggested, + ) end end @@ -89,7 +97,7 @@ class Typepad < Thor raw: c[:body], cooked: c[:body], created_at: c[:date], - skip_validations: true + skip_validations: true, } begin post = PostCreator.new(post_user, attrs).create @@ -100,35 +108,34 @@ class Typepad < Thor end end end - ensure RateLimiter.enable - backup_settings.each do |s, v| - SiteSetting.set(s, v) - end + backup_settings.each { |s, v| SiteSetting.set(s, v) } end private def clean_type!(type) type.downcase! - type.gsub!(/ /, '_') + type.gsub!(/ /, "_") type end def parse_meta_data(section) result = {} - section.split(/\n/).each do |l| - if l =~ /\A([A-Z\ ]+)\: (.*)\z/ - key, value = Regexp.last_match[1], Regexp.last_match[2] - clean_type!(key) - value.strip! - result[key.to_sym] = value - else - result[:body] ||= "" - result[:body] << l << "\n" + section + .split(/\n/) + .each do |l| + if l =~ /\A([A-Z\ ]+)\: (.*)\z/ + key, value = Regexp.last_match[1], Regexp.last_match[2] + clean_type!(key) + value.strip! + result[key.to_sym] = value + else + result[:body] ||= "" + result[:body] << l << "\n" + end end - end result end @@ -159,35 +166,36 @@ class Typepad < Thor when :comment comment = parse_comment(value).slice(:author, :email, :url, :body, :date) - if options[:google_api] && comment[:author] =~ /plus.google.com\/(\d+)/ + if options[:google_api] && comment[:author] =~ %r{plus.google.com/(\d+)} gplus_id = Regexp.last_match[1] from_redis = Discourse.redis.get("gplus:#{gplus_id}") if from_redis.blank? - json = ::JSON.parse(open("https://www.googleapis.com/plus/v1/people/#{gplus_id}?key=#{options[:google_api]}").read) - from_redis = json['displayName'] + json = + ::JSON.parse( + open( + "https://www.googleapis.com/plus/v1/people/#{gplus_id}?key=#{options[:google_api]}", + ).read, + ) + from_redis = json["displayName"] Discourse.redis.set("gplus:#{gplus_id}", from_redis) end comment[:author] = from_redis end - if comment[:author] =~ /([^\.]+)\.wordpress\.com/ + comment[:author] = Regexp.last_match[1] if comment[:author] =~ /([^\.]+)\.wordpress\.com/ + + comment[:author] = Regexp.last_match[1] if comment[:author] =~ /([^\.]+)\.blogspot\.com/ + + if comment[:author] =~ %r{twitter.com/([a-zA-Z0-9]+)} comment[:author] = Regexp.last_match[1] end - if comment[:author] =~ /([^\.]+)\.blogspot\.com/ - comment[:author] = Regexp.last_match[1] - end - - if comment[:author] =~ /twitter.com\/([a-zA-Z0-9]+)/ - comment[:author] = Regexp.last_match[1] - end - - if comment[:author] =~ /www.facebook.com\/profile.php\?id=(\d+)/ + if comment[:author] =~ %r{www.facebook.com/profile.php\?id=(\d+)} fb_id = Regexp.last_match[1] from_redis = Discourse.redis.get("fb:#{fb_id}") if from_redis.blank? json = ::JSON.parse(open("http://graph.facebook.com/#{fb_id}").read) - from_redis = json['username'] + from_redis = json["username"] Discourse.redis.set("fb:#{fb_id}", from_redis) end comment[:author] = from_redis @@ -195,11 +203,11 @@ class Typepad < Thor comment[:name] = comment[:author] if comment[:author] - comment[:author].gsub!(/\A[_\.]+/, '') - comment[:author].gsub!(/[_\.]+\z/, '') + comment[:author].gsub!(/\A[_\.]+/, "") + comment[:author].gsub!(/[_\.]+\z/, "") if comment[:author].size < 12 - comment[:author].gsub!(/ /, '_') + comment[:author].gsub!(/ /, "_") else segments = [] current = "" @@ -225,14 +233,13 @@ class Typepad < Thor segments << current comment[:author] = segments[0] - if segments.size > 1 && segments[1][0] =~ /[a-zA-Z]/ - comment[:author] << segments[1][0] - end + comment[:author] << segments[1][0] if segments.size > 1 && segments[1][0] =~ /[a-zA-Z]/ end end comment[:author] = "commenter" if comment[:author].blank? - comment[:author] = "codinghorror" if comment[:author] == "Jeff Atwood" || comment[:author] == "JeffAtwood" || comment[:author] == "Jeff_Atwood" + comment[:author] = "codinghorror" if comment[:author] == "Jeff Atwood" || + comment[:author] == "JeffAtwood" || comment[:author] == "Jeff_Atwood" comment[:date] = comment[:date] ? DateTime.strptime(comment[:date], "%m/%d/%Y") : Time.now entry[:comments] << comment if comment[:body].present? @@ -241,5 +248,4 @@ class Typepad < Thor entry[:title] && entry[:body] ? entry : nil end - end