Class: CodeSunset::FeatureQuery

Inherits:
Object
  • Object
show all
Defined in:
lib/code_sunset/feature_query.rb

Instance Method Summary collapse

Constructor Details

#initialize(filters = {}, scope: CodeSunset::Feature.ordered) ⇒ FeatureQuery

Returns a new instance of FeatureQuery.



3
4
5
6
# File 'lib/code_sunset/feature_query.rb', line 3

def initialize(filters = {}, scope: CodeSunset::Feature.ordered)
  @filters = filters.to_h.symbolize_keys
  @scope = scope
end

Instance Method Details

#call ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/code_sunset/feature_query.rb', line 8

def call
  features = scope.to_a
  return [] if features.empty?

  metrics = metrics_by_feature_key(features.map(&:key))

  features.map do |feature|
    feature_metrics = metrics.fetch(feature.key, {})
    last_seen_at = feature_metrics[:last_seen_at]
    snapshot = CodeSunset::FeatureSnapshot.new(
      feature: feature,
      last_seen_at: last_seen_at,
      hits_7d: feature_metrics[:hits_7d].to_i,
      hits_30d: feature_metrics[:hits_30d].to_i,
      unique_orgs_count: feature_metrics[:unique_orgs_count].to_i,
      unique_users_count: feature_metrics[:unique_users_count].to_i,
      paid_hits_30d: feature_metrics[:paid_hits_30d].to_i,
      status: feature.computed_status(last_seen_at: last_seen_at),
      score: 0.0
    )

    snapshot.score = CodeSunset::ScoreCalculator.new(feature: feature, snapshot: snapshot).score
    snapshot
  end
end