Module: Sprockets::Bower

Included in:
Base
Defined in:
lib/sprockets/bower.rb

Constant Summary collapse

POSSIBLE_BOWER_JSONS =

Internal: All supported bower.json files.

github.com/bower/json/blob/0.4.0/lib/json.js#L7

['bower.json', 'component.json', '.bower.json']

Instance Method Summary collapse

Instance Method Details

#read_bower_main(dirname, filename) ⇒ Object

Internal: Read bower.json's main directive.

dirname - String path to component directory. filename - String path to bower.json.

Returns nothing.



48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/sprockets/bower.rb', line 48

def read_bower_main(dirname, filename)
  bower = JSON.parse(File.read(filename), create_additions: false)

  case bower['main']
  when String
    yield File.expand_path(bower['main'], dirname)
  when Array
    bower['main'].each do |name|
      yield File.expand_path(name, dirname)
    end
  end
end

#resolve_alternates(load_path, logical_path) ⇒ Object

Internal: Override resolve_alternates to install bower.json behavior.

load_path - String environment path logical_path - String path relative to base

Returns candiate filenames.



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/sprockets/bower.rb', line 17

def resolve_alternates(load_path, logical_path)
  candidates, deps = super

  # bower.json can only be nested one level deep
  if !logical_path.index('/'.freeze)
    dirname = File.join(load_path, logical_path)

    if directory?(dirname)
      filenames = POSSIBLE_BOWER_JSONS.map { |basename| File.join(dirname, basename) }
      filename  = filenames.detect { |fn| self.file?(fn) }

      if filename
        deps << build_file_digest_uri(filename)
        read_bower_main(dirname, filename) do |path|
          if file?(path)
            candidates << path
          end
        end
      end
    end
  end

  return candidates, deps
end