Class: Plugin::Metadata

Inherits:
Object
  • Object
show all
Defined in:
lib/plugin/metadata.rb

Constant Summary collapse

OFFICIAL_PLUGINS =
Set.new(
  %w[
    discourse-adplugin
    discourse-affiliate
    discourse-ai
    discourse-akismet
    discourse-algolia
    discourse-apple-auth
    discourse-assign
    discourse-auto-deactivate
    discourse-bbcode
    discourse-bbcode-color
    discourse-cakeday
    discourse-calendar
    discourse-categories-suppressed
    discourse-category-experts
    discourse-characters-required
    discourse-chat-integration
    discourse-code-review
    discourse-crowd
    discourse-data-explorer
    discourse-details
    discourse-docs
    discourse-follow
    discourse-fontawesome-pro
    discourse-gamification
    discourse-geoblocking
    discourse-github
    discourse-gradle-issue
    discourse-graphviz
    discourse-group-tracker
    discourse-hcaptcha
    discourse-invite-tokens
    discourse-jira
    discourse-lazy-videos
    discourse-local-dates
    discourse-login-with-amazon
    discourse-logster-rate-limit-checker
    discourse-logster-transporter
    discourse-lti
    discourse-math
    discourse-microsoft-auth
    discourse-narrative-bot
    discourse-newsletter-integration
    discourse-no-bump
    discourse-oauth2-basic
    discourse-openid-connect
    discourse-patreon
    discourse-perspective-api
    discourse-policy
    discourse-post-voting
    discourse-presence
    discourse-prometheus
    discourse-prometheus-alert-receiver
    discourse-push-notifications
    discourse-reactions
    discourse-restricted-replies
    discourse-rss-polling
    discourse-salesforce
    discourse-saml
    discourse-saved-searches
    discourse-signatures
    discourse-solved
    discourse-staff-alias
    discourse-steam-login
    discourse-subscriptions
    discourse-tag-by-group
    discourse-teambuild
    discourse-templates
    discourse-tooltips
    discourse-topic-voting
    discourse-translator
    discourse-user-card-badges
    discourse-user-notes
    discourse-vk-auth
    discourse-whos-online
    discourse-yearly-review
    discourse-zendesk-plugin
    discourse-zoom
    automation
    chat
    checklist
    docker_manager
    footnote
    poll
    spoiler-alert
    styleguide
  ],
)
FIELDS =
%i[name about version authors contact_emails url required_version meta_topic_id label]
MAX_FIELD_LENGTHS =
{
  name: 75,
  about: 350,
  authors: 200,
  contact_emails: 200,
  url: 500,
  label: 20,
}

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.parse(text) ⇒ Object



120
121
122
123
124
# File 'lib/plugin/metadata.rb', line 120

def self.parse(text)
   = self.new
  text.each_line { |line| break unless .parse_line(line) }
  
end

Instance Method Details

#meta_topic_id=(value) ⇒ Object



111
112
113
114
115
116
117
118
# File 'lib/plugin/metadata.rb', line 111

def meta_topic_id=(value)
  @meta_topic_id =
    begin
      Integer(value)
    rescue StandardError
      nil
    end
end

#official?Boolean

Returns:

  • (Boolean)


126
127
128
# File 'lib/plugin/metadata.rb', line 126

def official?
  OFFICIAL_PLUGINS.include?(name)
end

#parse_line(line) ⇒ Object



130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# File 'lib/plugin/metadata.rb', line 130

def parse_line(line)
  line = line.strip

  unless line.empty?
    return false unless line[0] == "#"
    attribute, *value = line[1..-1].split(":")

    value = value.join(":")
    attribute = attribute.strip.gsub(/ /, "_").to_sym

    if FIELDS.include?(attribute)
      self.public_send(
        "#{attribute}=",
        value.strip.truncate(MAX_FIELD_LENGTHS[attribute] || 1000),
      )
    end
  end

  true
end