Sha256: c1e1cd84509ddf6c024b1b8c415c9b4dc5eee4a3974f2369381f93c09b9d90df

Contents?: true

Size: 1.37 KB

Versions: 2

Compression:

Stored size: 1.37 KB

Contents

# frozen_string_literal: true

require "excon"

module DiscoursePluginStatistics
  class Statistics
    def self.update!
      new.update
    end

    def update
      ::Excon.post(
        DiscoursePluginStatistics.server_url,
        headers: { "Content-Type" => "application/json" },
        body: {
          discourse: discourse,
          plugins: plugins
        }.to_json
      )
    end

    protected

    def discourse
      @discourse ||= DiscoursePluginStatistics::Discourse.new.json
    end

    def plugins
      @plugins ||= Dir["#{DiscoursePluginStatistics.root}/plugins/*/plugin.rb"].sort.each_with_object([]) do |path, result|
        source = File.read(path)
        metadata = ::Plugin::Metadata.parse(source)

        next unless collect_plugin_statistics?(metadata)

        plugin_dir = File.dirname(path)
        plugin = DiscoursePluginStatistics::Plugin.new(metadata.name, plugin_dir)
        result << plugin.json
      end
    end

    def collect_plugin_statistics?(metadata)
      github_org = github_org_from_github_url(metadata.url)
      github_org && github_org === "paviliondev"
    end

    def github_org_from_github_url(url)
      path = path_from_url(url)
      path && path.split("/").reject(&:empty?).first
    end

    def path_from_url(url)
      url && Addressable::URI.parse(url).path
    rescue Addressable::URI::InvalidURIError
      nil
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
discourse_plugin_statistics-0.1.0.pre2 lib/discourse_plugin_statistics/statistics.rb
discourse_plugin_statistics-0.1.0.pre1 lib/discourse_plugin_statistics/statistics.rb