Class: Fronton::Config

Inherits:
Object
  • Object
show all
Defined in:
lib/fronton/config.rb

Defined Under Namespace

Classes: YAMLNotFound

Constant Summary collapse

PRECOMPILE_CRITERIA =
lambda do |logical_path, filename|
  filename.start_with?(Dir.pwd) && !['.js', '.css', ''].include?(File.extname(logical_path))
end

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.assets_pathObject



45
46
47
# File 'lib/fronton/config.rb', line 45

def assets_path
  @assets_path.nil? ? 'assets' : @assets_path
end

.loggerObject (readonly)

Returns the value of attribute logger.



18
19
20
# File 'lib/fronton/config.rb', line 18

def logger
  @logger
end

.use_baseObject

ACCESSORS



37
38
39
# File 'lib/fronton/config.rb', line 37

def use_base
  @use_base.nil? ? false : @use_base
end

.use_digestObject



41
42
43
# File 'lib/fronton/config.rb', line 41

def use_digest
  @use_digest.nil? ? false : @use_digest
end

Class Method Details

.assetsObject

YAML CONFIG



57
58
59
60
61
62
# File 'lib/fronton/config.rb', line 57

def assets
  @assets ||= begin
    assets_conf = @config[:assets].is_a?(Array) ? @config[:assets] : []
    [PRECOMPILE_CRITERIA, %r{(?:/|\\|\A)application\.(css|js)$}] + assets_conf
  end
end

.assets_pathsObject



64
65
66
67
68
69
70
71
72
# File 'lib/fronton/config.rb', line 64

def assets_paths
  @assets_paths ||= begin
    if @config[:assets_paths].is_a?(Array)
      @config[:assets_paths].map { |p| working_dir.join(p) }
    else
      []
    end
  end
end

.assets_prefixObject



49
50
51
# File 'lib/fronton/config.rb', line 49

def assets_prefix
  use_base ? "#{base_url}/#{assets_path}" : assets_path
end

.base_urlObject



74
75
76
# File 'lib/fronton/config.rb', line 74

def base_url
  @config[:base_url]
end

.compressor_cssObject



122
123
124
# File 'lib/fronton/config.rb', line 122

def compressor_css
  @config[:compressors] && @config[:compressors][:css]
end

.compressor_jsObject



118
119
120
# File 'lib/fronton/config.rb', line 118

def compressor_js
  @config[:compressors] && @config[:compressors][:js]
end

.dependenciesObject



82
83
84
85
86
87
88
89
90
# File 'lib/fronton/config.rb', line 82

def dependencies
  @dependencies ||= begin
    dep = @config[:dependencies].is_a?(Array) ? @config[:dependencies] : []

    dep.map do |d|
      Dependency.new(d.keys.first, d.values.first)
    end
  end
end

.environmentObject



126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# File 'lib/fronton/config.rb', line 126

def environment
  @environment ||= begin
    env = Sprockets::Environment.new

    # logger
    env.logger = logger

    # fronton.yml assets paths
    assets_paths.each { |path| env.append_path path }

    # rails assets paths
    if defined? RailsAssets
      RailsAssets.load_paths.each { |path| env.append_path path }
    end

    # context helpers
    env.context_class.send :include, ::Fronton::Contexts::Sprockets

    env
  end
end

.fallback_pageObject



92
93
94
95
96
# File 'lib/fronton/config.rb', line 92

def fallback_page
  if @config[:fallback_page]
    Page.new(@config[:fallback_page], '/')
  end
end

.install_dependenciesObject

METHODS



156
157
158
# File 'lib/fronton/config.rb', line 156

def install_dependencies
  dependencies.map(&:install_dependency)
end

.load!Object



21
22
23
24
25
26
27
28
29
30
31
# File 'lib/fronton/config.rb', line 21

def load!
  file = working_dir.join('fronton.yml')

  if file.exist?
    @config       = YAML.load_file(file).with_indifferent_access
    @logger       = Logger.new($stderr)
    @logger.level = Logger::INFO
  else
    raise YAMLNotFound, "File 'fronton.yml' not found in #{Dir.pwd}"
  end
end

.manifestObject



148
149
150
# File 'lib/fronton/config.rb', line 148

def manifest
  @manifest ||= Sprockets::Manifest.new environment, File.join(output, assets_path, 'manifest.json')
end

.outputObject



78
79
80
# File 'lib/fronton/config.rb', line 78

def output
  @output ||= working_dir.join(@config[:output] || 'public')
end

.pagesObject



98
99
100
101
102
103
104
105
106
# File 'lib/fronton/config.rb', line 98

def pages
  @pages ||= begin
    pages = @config[:pages].is_a?(Array) ? @config[:pages] : []

    pages.map do |page|
      Page.new(page.keys.first, page.values.first)
    end
  end
end

.pages_pathsObject



108
109
110
111
112
113
114
115
116
# File 'lib/fronton/config.rb', line 108

def pages_paths
  @pages_paths ||= begin
    if @config[:pages_paths].is_a?(Array)
      @config[:pages_paths].map { |p| working_dir.join(p) }
    else
      []
    end
  end
end

.require_dependenciesObject



160
161
162
# File 'lib/fronton/config.rb', line 160

def require_dependencies
  dependencies.map(&:require_dependency)
end