Class: Glslkit::Rails::ManifestBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/glslkit/rails/manifest_builder.rb

Overview

config.glslkit.paths 配下からvertex/fragmentのペアを検出し、その すべてについて reflection-v1.json のマニフェスト(Glslkit::Manifest, M4) を組み立てる。stage.urlは Rails.application.assets.resolver 経由で 解決する。これはasset_path/asset_urlが内部で使っているのとまさに同じ 経路であり、developmentではDynamic、assets:precompile実行後はStatic (Propshaftが直前に書いた.manifest.jsonを読む)になる。

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(app) ⇒ ManifestBuilder

Returns a new instance of ManifestBuilder.



16
17
18
19
# File 'lib/glslkit/rails/manifest_builder.rb', line 16

def initialize(app)
  @app = app
  @diagnostics = []
end

Instance Attribute Details

#diagnosticsObject (readonly)

Returns the value of attribute diagnostics.



14
15
16
# File 'lib/glslkit/rails/manifest_builder.rb', line 14

def diagnostics
  @diagnostics
end

Instance Method Details

#buildObject

Validatorは常に実行し、@diagnosticsに集める(config.glslkit.validateの 値によらない)。config.glslkit.validateは「診断を集めるかどうか」 ではなく「その診断を理由にビルド/リクエストを失敗させるかどうか」を 制御する。呼び出し側(Glslkit::Rails.manifest / rake glslkit:reflect / rake glslkit:check)がそれぞれの文脈でdiagnostics/failing?を見て 反応を決める(SPEC.md §8.6)。



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/glslkit/rails/manifest_builder.rb', line 27

def build
  @diagnostics = []
  manifest = Glslkit::Manifest.new(generated_at: Time.now.utc.iso8601, generator: "glslkit/#{Glslkit::VERSION}")
  programs.each do |name, stages|
    vertex_source = preprocessor.process(stages.fetch(:vertex))
    fragment_source = preprocessor.process(stages.fetch(:fragment))
    validate(name, vertex_source, fragment_source)

    manifest.add_program(
      name,
      vertex: {path: stages.fetch(:vertex), source: vertex_source, url: asset_url(stages.fetch(:vertex))},
      fragment: {path: stages.fetch(:fragment), source: fragment_source, url: asset_url(stages.fetch(:fragment))}
    )
  end
  manifest.to_h
end

#failing?Boolean

エラーが1件でもあれば真。fail_on_warningが有効なら警告のみでも真。 config.glslkit.validateがfalseなら常に偽(検証結果があっても ビルド/リクエストを失敗させない)。

Returns:

  • (Boolean)


47
48
49
50
51
52
53
# File 'lib/glslkit/rails/manifest_builder.rb', line 47

def failing?
  return false unless glslkit_config.validate

  return true if @diagnostics.any?(&:error?)

  glslkit_config.fail_on_warning && @diagnostics.any?(&:warning?)
end