Class: Abtest::ManifestManager

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/abtest.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeManifestManager

Returns a new instance of ManifestManager.



13
14
15
# File 'lib/abtest.rb', line 13

def initialize
  @manifests = {'default' => default_manifest }
end

Instance Attribute Details

#manifestsObject

Returns the value of attribute manifests.



11
12
13
# File 'lib/abtest.rb', line 11

def manifests
  @manifests
end

Instance Method Details

#create_manifest(name) ⇒ Object



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/abtest.rb', line 63

def create_manifest name
  app                   = Rails.application
  experiment_path       = File.join(app.root, 'abtest', 'experiments', name)
  application_css_path  = File.join(experiment_path, app.config.assets.prefix, 'stylesheets')
  images_path           = File.join(experiment_path, app.config.assets.prefix, 'images')
  javascript_path       = File.join(experiment_path, app.config.assets.prefix, 'javascripts')

  # Create a custom sprockets environment
  experiment_environment = Sprockets::Environment.new(Rails.root.to_s) do |env|
    env.context_class.class_eval do
      include ::Sprockets::Rails::Helper
    end
  end

  # Monkey patch class in-place with sass_config accessor
  experiment_environment.context_class.extend(::Sass::Rails::Railtie::SassContext)

  # Always calculate digests and compile files
  app.config.assets.digest      = true
  app.config.assets.compile     = true
  experiment_environment.cache  = :null_store  # Disables the Asset cache

  experiment_environment.prepend_path("#{application_css_path}")
  experiment_environment.prepend_path("#{images_path}")
  experiment_environment.prepend_path("#{javascript_path}")

  # Copy config.assets.paths to Sprockets
  app.config.assets.paths.each do |path|
    experiment_environment.append_path path
  end

  experiment_environment.js_compressor  = app.config.assets.js_compressor
  experiment_environment.css_compressor = app.config.assets.css_compressor

  if app.config.logger
    experiment_environment.logger = app.config.logger
  else
    experiment_environment.logger       = Logger.new($stdout)
    experiment_environment.logger.level = Logger::INFO
  end

  output_file                                         = File.join(app.root, 'public', app.config.assets.prefix, 'experiments', name)
  experiment_environment.context_class.assets_prefix  = "#{app.config.assets.prefix}/experiments/#{name}"
  experiment_environment.context_class.digest_assets  = app.config.assets.digest
  experiment_environment.context_class.config         = app.config.action_controller
  experiment_environment.context_class.sass_config    = app.config.sass

  manifests[name] = Sprockets::Manifest.new(experiment_environment, output_file)
end

#default_manifestObject



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/abtest.rb', line 21

def default_manifest
  app = Rails.application

  # Create a custom sprockets environment
  default_environment = Sprockets::Environment.new(Rails.root.to_s) do |env|
    env.context_class.class_eval do
      include ::Sprockets::Rails::Helper
    end
  end

  # Monkey patch class in-place with sass_config accessor
  default_environment.context_class.extend(::Sass::Rails::Railtie::SassContext)

  # Always calculate digests and compile files
  app.config.assets.digest      = true
  app.config.assets.compile     = true
  default_environment.cache     = :null_store  # Disables the Asset cache

  # Copy config.assets.paths to Sprockets
  app.config.assets.paths.each do |path|
    default_environment.append_path path
  end

  default_environment.js_compressor  = app.config.assets.js_compressor
  default_environment.css_compressor = app.config.assets.css_compressor

  if app.config.logger
    default_environment.logger = app.config.logger
  else
    default_environment.logger       = Logger.new($stdout)
    default_environment.logger.level = Logger::INFO
  end

  output_file                                      = File.join(app.root, 'public', app.config.assets.prefix)
  default_environment.context_class.assets_prefix  = "#{app.config.assets.prefix}"
  default_environment.context_class.digest_assets  = app.config.assets.digest
  default_environment.context_class.config         = app.config.action_controller
  default_environment.context_class.sass_config    = app.config.sass

  Sprockets::Manifest.new(default_environment, output_file)
end

#retrieve_manifest(name) ⇒ Object



17
18
19
# File 'lib/abtest.rb', line 17

def retrieve_manifest name
  manifests[name] ||= create_manifest(name)
end