hanami-assets 1.3.4 → 2.1.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +27 -0
  3. data/LICENSE.md +1 -1
  4. data/README.md +92 -315
  5. data/bin/hanami-assets +7 -6
  6. data/hanami-assets.gemspec +23 -28
  7. data/lib/hanami/assets/asset.rb +83 -0
  8. data/lib/hanami/assets/base_url.rb +64 -0
  9. data/lib/hanami/assets/config.rb +106 -0
  10. data/lib/hanami/assets/errors.rb +46 -0
  11. data/lib/hanami/assets/version.rb +4 -2
  12. data/lib/hanami/assets.rb +63 -143
  13. data/lib/hanami-assets.rb +3 -0
  14. metadata +36 -104
  15. data/lib/hanami/assets/bundler/asset.rb +0 -98
  16. data/lib/hanami/assets/bundler/compressor.rb +0 -61
  17. data/lib/hanami/assets/bundler/manifest_entry.rb +0 -62
  18. data/lib/hanami/assets/bundler.rb +0 -152
  19. data/lib/hanami/assets/cache.rb +0 -100
  20. data/lib/hanami/assets/compiler.rb +0 -285
  21. data/lib/hanami/assets/compilers/less.rb +0 -29
  22. data/lib/hanami/assets/compilers/sass.rb +0 -59
  23. data/lib/hanami/assets/compressors/abstract.rb +0 -119
  24. data/lib/hanami/assets/compressors/builtin_javascript.rb +0 -36
  25. data/lib/hanami/assets/compressors/builtin_stylesheet.rb +0 -57
  26. data/lib/hanami/assets/compressors/closure_javascript.rb +0 -25
  27. data/lib/hanami/assets/compressors/javascript.rb +0 -77
  28. data/lib/hanami/assets/compressors/jsmin.rb +0 -284
  29. data/lib/hanami/assets/compressors/null_compressor.rb +0 -19
  30. data/lib/hanami/assets/compressors/sass_stylesheet.rb +0 -36
  31. data/lib/hanami/assets/compressors/stylesheet.rb +0 -77
  32. data/lib/hanami/assets/compressors/uglifier_javascript.rb +0 -25
  33. data/lib/hanami/assets/compressors/yui_javascript.rb +0 -25
  34. data/lib/hanami/assets/compressors/yui_stylesheet.rb +0 -25
  35. data/lib/hanami/assets/config/global_sources.rb +0 -50
  36. data/lib/hanami/assets/config/manifest.rb +0 -140
  37. data/lib/hanami/assets/config/sources.rb +0 -78
  38. data/lib/hanami/assets/configuration.rb +0 -652
  39. data/lib/hanami/assets/helpers.rb +0 -935
  40. data/lib/hanami/assets/precompiler.rb +0 -95
@@ -1,140 +0,0 @@
1
- module Hanami
2
- module Assets
3
- # This error is raised when the application starts but can't be load the
4
- # manifest file.
5
- #
6
- # @since 0.1.0
7
- # @api private
8
- class MissingManifestFileError < Error
9
- def initialize(path)
10
- super("Can't read manifest: #{path}")
11
- end
12
- end
13
-
14
- # This error is raised when an asset is referenced from the DOM, but it's
15
- # not present in the manifest
16
- #
17
- # @since 0.1.0
18
- # @api private
19
- class MissingManifestAssetError < Error
20
- def initialize(asset, manifest_path)
21
- super("Can't find asset `#{asset}' in manifest (#{manifest_path})")
22
- end
23
- end
24
-
25
- # Configuration settings
26
- #
27
- # @since 0.1.0
28
- # @api private
29
- module Config
30
- # Default value for configuration's manifest.
31
- #
32
- # It indicates that the manifest wasn't loaded yet.
33
- #
34
- # At the load time, this should be replaced by an instance of
35
- # <tt>Hanami::Assets::Config::Manifest</tt>.
36
- #
37
- # If for some reason that won't happen, the instance of this class is
38
- # still referenced by the configuration and all the method invocations
39
- # will raise a <tt>Hanami::Assets::MissingManifestFileError</tt>.
40
- #
41
- # @since 0.1.0
42
- # @api private
43
- #
44
- # @see Hanami::Assets::Configuration#manifest
45
- # @see Hanami::Assets::Configuration#manifest_path
46
- # @see Hanami::Assets::Configuration#fingerprint
47
- class NullManifest < Utils::BasicObject
48
- # Return a new instance
49
- #
50
- # @param configuration [Hanami::Assets::Configuration]
51
- #
52
- # @return [Hanami::Assets::Config::NullManifest] a new instance
53
- #
54
- # @since 0.1.0
55
- # @api private
56
- def initialize(configuration)
57
- @configuration = configuration
58
- end
59
-
60
- # @raise [Hanami::Assets::MissingManifestFileError]
61
- #
62
- # @since 0.1.0
63
- # @api private
64
- def method_missing(*) # rubocop:disable Style/MethodMissingSuper
65
- ::Kernel.raise(
66
- ::Hanami::Assets::MissingManifestFileError.new(@configuration.manifest_path)
67
- )
68
- end
69
-
70
- # @return [FalseClass] returns false
71
- #
72
- # @since 1.1.0
73
- # @api private
74
- def respond_to_missing?(*)
75
- false
76
- end
77
- end
78
-
79
- # Manifest file
80
- #
81
- # @since 0.1.0
82
- # @api private
83
- class Manifest
84
- # @since 0.4.0
85
- # @api private
86
- TARGET = 'target'.freeze
87
-
88
- # @since 0.3.0
89
- # @api private
90
- SUBRESOURCE_INTEGRITY = 'sri'.freeze
91
-
92
- # Return a new instance
93
- #
94
- # @param assets [Hash] the content of the manifest
95
- # @param manifest_path [Pathname] the path to the manifest
96
- #
97
- # @return [Hanami::Assets::Config::Manifest] a new instance
98
- #
99
- # @since 0.1.0
100
- # @api private
101
- #
102
- # @see Hanami::Assets::Configuration#manifest
103
- # @see Hanami::Assets::Configuration#manifest_path
104
- def initialize(assets, manifest_path)
105
- @assets = assets
106
- @manifest_path = manifest_path
107
- end
108
-
109
- # Resolve the given asset into a fingerprinted path
110
- #
111
- # For a given path <tt>/assets/application.js</tt> it will return
112
- # <tt>/assets/application-28a6b886de2372ee3922fcaf3f78f2d8.js</tt>
113
- #
114
- # @param asset [#to_s] the relative asset path
115
- #
116
- # @return [String] the fingerprinted path
117
- #
118
- # @raise [Hanami::Assets::MissingManifestAssetError] when the asset can't be
119
- # found in manifest
120
- def resolve(asset)
121
- @assets.fetch(asset.to_s) do
122
- raise Hanami::Assets::MissingManifestAssetError.new(asset, @manifest_path)
123
- end
124
- end
125
-
126
- # @since 0.3.0
127
- # @api private
128
- def target(path)
129
- resolve(path).fetch(TARGET)
130
- end
131
-
132
- # @since 0.3.0
133
- # @api private
134
- def subresource_integrity_values(path)
135
- resolve(path).fetch(SUBRESOURCE_INTEGRITY)
136
- end
137
- end
138
- end
139
- end
140
- end
@@ -1,78 +0,0 @@
1
- require 'hanami/utils/load_paths'
2
- require 'hanami/utils/file_list'
3
-
4
- module Hanami
5
- module Assets
6
- # Configuration settings
7
- #
8
- # @since 0.1.0
9
- # @api private
10
- module Config
11
- # Source directories for a specific application
12
- #
13
- # @since 0.1.0
14
- # @api private
15
- #
16
- # @see Hanami::Assets.duplicate
17
- # @see http://www.rubydoc.info/gems/hanami-utils/Hanami/Utils/LoadPaths
18
- #
19
- # TODO The perf of this class is poor, consider to improve it.
20
- class Sources < Utils::LoadPaths
21
- # @since 0.3.0
22
- # @api private
23
- SKIPPED_FILE_PREFIX = '_'.freeze
24
-
25
- # @since 0.1.0
26
- # @api private
27
- attr_writer :root
28
-
29
- # @since 0.1.0
30
- # @api private
31
- def initialize(root)
32
- super()
33
- @root = root
34
- end
35
-
36
- # @since 0.1.0
37
- # @api private
38
- def map
39
- [].tap do |result|
40
- each do |source|
41
- result << yield(source)
42
- end
43
- end
44
- end
45
-
46
- # @since 0.1.0
47
- # @api private
48
- def find(filename)
49
- result = files(filename).first
50
- result = Pathname.new(result) unless result.nil?
51
- result
52
- end
53
-
54
- # @since 0.1.0
55
- # @api private
56
- def files(name = nil)
57
- result = []
58
-
59
- Utils::FileList[map { |source| "#{source}#{::File::SEPARATOR}**#{::File::SEPARATOR}#{name}*" }].each do |file|
60
- next if ::File.directory?(file) || ::File.basename(file).start_with?(SKIPPED_FILE_PREFIX)
61
-
62
- result << file
63
- end
64
-
65
- result
66
- end
67
-
68
- private
69
-
70
- # @since 0.1.0
71
- # @api private
72
- def realpath(path)
73
- @root.join(path).realpath
74
- end
75
- end
76
- end
77
- end
78
- end