mbj-assets 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +5 -0
- data/.rspec +1 -0
- data/.travis.yml +10 -0
- data/Gemfile +6 -0
- data/Gemfile.devtools +60 -0
- data/Guardfile +18 -0
- data/Rakefile +2 -0
- data/TODO +2 -0
- data/assets.gemspec +28 -0
- data/config/flay.yml +3 -0
- data/config/flog.yml +2 -0
- data/config/mutant.yml +3 -0
- data/config/reek.yml +93 -0
- data/config/roodi.yml +26 -0
- data/config/yardstick.yml +2 -0
- data/lib/assets/asset.rb +24 -0
- data/lib/assets/builder.rb +88 -0
- data/lib/assets/environment/cache.rb +113 -0
- data/lib/assets/environment/dynamic.rb +56 -0
- data/lib/assets/environment/static.rb +37 -0
- data/lib/assets/environment.rb +34 -0
- data/lib/assets/evaluator.rb +67 -0
- data/lib/assets/handler.rb +39 -0
- data/lib/assets/mime.rb +81 -0
- data/lib/assets/package.rb +124 -0
- data/lib/assets/repository.rb +61 -0
- data/lib/assets/responder.rb +133 -0
- data/lib/assets/rule/compile/css.rb +28 -0
- data/lib/assets/rule/compile/javascript/coffescript.rb +24 -0
- data/lib/assets/rule/compile/javascript.rb +12 -0
- data/lib/assets/rule/compile.rb +99 -0
- data/lib/assets/rule/concat.rb +97 -0
- data/lib/assets/rule/file.rb +67 -0
- data/lib/assets/rule/rename.rb +57 -0
- data/lib/assets/rule.rb +69 -0
- data/lib/assets.rb +37 -0
- data/spec/assets/application.coffee +1 -0
- data/spec/assets/application.sass +3 -0
- data/spec/assets/fonts.css +1 -0
- data/spec/assets/test.jpg +0 -0
- data/spec/integration/assets/spike_spec.rb +156 -0
- data/spec/spec_helper.rb +3 -0
- metadata +247 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 34583cf1a54e359e7db67d15f1191d2d3d00881d
|
4
|
+
data.tar.gz: 46485a80f1b0c267ba683d08735c02ffd574ad96
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c73494fa9667dbe84ea1fd36363ad5bcd3ef7ec83cd702ab72066d43e47323942afab24ee6cb11921a22b2b9f1e54a307ea89f601ee6879ad3eefe2d1bded22a
|
7
|
+
data.tar.gz: c6f44c87c74d794d4115e2096b2246c84fb34fdaca653a9f118e98563015b8fd3cc1cb8b2126116e194d6df3af68198c04abcc5d817fb24d8f11ee6a501bdb31
|
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/Gemfile.devtools
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
group :development do
|
4
|
+
gem 'rake', '~> 10.1.0'
|
5
|
+
gem 'rspec', '~> 2.13.0'
|
6
|
+
gem 'yard', '~> 0.8.6.1'
|
7
|
+
end
|
8
|
+
|
9
|
+
group :yard do
|
10
|
+
gem 'kramdown', '~> 1.0.1'
|
11
|
+
end
|
12
|
+
|
13
|
+
group :guard do
|
14
|
+
gem 'guard', '~> 1.8.1'
|
15
|
+
gem 'guard-bundler', '~> 1.0.0'
|
16
|
+
gem 'guard-rspec', '~> 3.0.2'
|
17
|
+
|
18
|
+
# file system change event handling
|
19
|
+
gem 'listen', '~> 1.2.2'
|
20
|
+
gem 'rb-fchange', '~> 0.0.6', :require => false
|
21
|
+
gem 'rb-fsevent', '~> 0.9.3', :require => false
|
22
|
+
gem 'rb-inotify', '~> 0.9.0', :require => false
|
23
|
+
|
24
|
+
# notification handling
|
25
|
+
gem 'libnotify', '~> 0.8.0', :require => false
|
26
|
+
gem 'rb-notifu', '~> 0.0.4', :require => false
|
27
|
+
gem 'terminal-notifier-guard', '~> 1.5.3', :require => false
|
28
|
+
end
|
29
|
+
|
30
|
+
group :metrics do
|
31
|
+
gem 'backports', '~> 3.3', '>= 3.3.2'
|
32
|
+
gem 'coveralls', '~> 0.6.7'
|
33
|
+
gem 'flay', '~> 2.3.0'
|
34
|
+
gem 'flog', '~> 4.1.0'
|
35
|
+
gem 'reek', '~> 1.3.1', :git => 'https://github.com/troessner/reek.git'
|
36
|
+
gem 'simplecov', '~> 0.7.1'
|
37
|
+
gem 'yardstick', '~> 0.9.6'
|
38
|
+
|
39
|
+
platforms :ruby_19 do
|
40
|
+
gem 'yard-spellcheck', '~> 0.1.5'
|
41
|
+
end
|
42
|
+
|
43
|
+
platforms :ruby_19, :ruby_20 do
|
44
|
+
gem 'mutant', '~> 0.3.0.beta4'
|
45
|
+
end
|
46
|
+
|
47
|
+
platforms :rbx do
|
48
|
+
gem 'pelusa', '~> 0.2.2'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
group :benchmarks do
|
53
|
+
gem 'rbench', '~> 0.2.3'
|
54
|
+
end
|
55
|
+
|
56
|
+
platform :jruby do
|
57
|
+
group :jruby do
|
58
|
+
gem 'jruby-openssl', '~> 0.8.5'
|
59
|
+
end
|
60
|
+
end
|
data/Guardfile
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
guard :bundler do
|
4
|
+
watch('Gemfile')
|
5
|
+
end
|
6
|
+
|
7
|
+
guard :rspec, :version => 2 do
|
8
|
+
# run all specs if the spec_helper or supporting files files are modified
|
9
|
+
watch('spec/spec_helper.rb') { 'spec/unit' }
|
10
|
+
watch(%r{\Aspec/(?:lib|support|shared)/.+\.rb\z}) { 'spec/unit' }
|
11
|
+
|
12
|
+
# run unit specs if associated lib code is modified
|
13
|
+
watch(%r{\Alib/(.+)\.rb\z}) { |m| Dir["spec/unit/#{m[1]}"] }
|
14
|
+
watch("lib/#{File.basename(File.expand_path('../', __FILE__))}.rb") { 'spec/unit' }
|
15
|
+
|
16
|
+
# run a spec if it is modified
|
17
|
+
watch(%r{\Aspec/(?:unit|integration)/.+_spec\.rb\z})
|
18
|
+
end
|
data/Rakefile
ADDED
data/assets.gemspec
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |gem|
|
4
|
+
gem.name = 'mbj-assets'
|
5
|
+
gem.version = '0.0.3'
|
6
|
+
gem.authors = [ 'Markus Schirp' ]
|
7
|
+
gem.email = [ 'mbj@schirp-dso.com' ]
|
8
|
+
gem.description = 'Playground for a small assets system'
|
9
|
+
gem.summary = gem.description
|
10
|
+
gem.homepage = 'https://github.com/mbj/assets'
|
11
|
+
|
12
|
+
gem.require_paths = [ 'lib' ]
|
13
|
+
gem.files = `git ls-files`.split("\n")
|
14
|
+
gem.test_files = `git ls-files -- spec`.split("\n")
|
15
|
+
gem.extra_rdoc_files = %w[TODO]
|
16
|
+
|
17
|
+
gem.add_runtime_dependency('adamantium', '~> 0.0.8')
|
18
|
+
gem.add_runtime_dependency('ice_nine', '~> 0.8.0')
|
19
|
+
gem.add_runtime_dependency('descendants_tracker', '~> 0.0.1')
|
20
|
+
gem.add_runtime_dependency('concord', '~> 0.1.1')
|
21
|
+
gem.add_runtime_dependency('equalizer', '~> 0.0.5')
|
22
|
+
gem.add_runtime_dependency('response', '~> 0.0.2')
|
23
|
+
gem.add_runtime_dependency('request', '~> 0.0.2')
|
24
|
+
gem.add_runtime_dependency('abstract_type', '~> 0.0.5')
|
25
|
+
gem.add_runtime_dependency('anima', '~> 0.0.5')
|
26
|
+
gem.add_runtime_dependency('sass', '~> 3.2.4')
|
27
|
+
gem.add_runtime_dependency('coffee-script', '~> 2.2.0')
|
28
|
+
end
|
data/config/flay.yml
ADDED
data/config/flog.yml
ADDED
data/config/mutant.yml
ADDED
data/config/reek.yml
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
---
|
2
|
+
UncommunicativeParameterName:
|
3
|
+
accept: []
|
4
|
+
exclude: []
|
5
|
+
enabled: false # Todo enable
|
6
|
+
reject:
|
7
|
+
- !ruby/regexp /^.$/
|
8
|
+
- !ruby/regexp /[0-9]$/
|
9
|
+
- !ruby/regexp /[A-Z]/
|
10
|
+
TooManyMethods:
|
11
|
+
max_methods: 10
|
12
|
+
exclude: []
|
13
|
+
enabled: true
|
14
|
+
max_instance_variables: 3
|
15
|
+
UncommunicativeMethodName:
|
16
|
+
accept:
|
17
|
+
- sha1
|
18
|
+
exclude: []
|
19
|
+
enabled: true
|
20
|
+
reject:
|
21
|
+
- !ruby/regexp /^[a-z]$/
|
22
|
+
- !ruby/regexp /[0-9]$/
|
23
|
+
- !ruby/regexp /[A-Z]/
|
24
|
+
LongParameterList:
|
25
|
+
max_params: 2
|
26
|
+
exclude: []
|
27
|
+
enabled: true
|
28
|
+
overrides: {}
|
29
|
+
FeatureEnvy:
|
30
|
+
exclude:
|
31
|
+
- Assets::Environment::Cache#miss # False positive
|
32
|
+
enabled: true
|
33
|
+
ClassVariable:
|
34
|
+
exclude: []
|
35
|
+
enabled: true
|
36
|
+
BooleanParameter:
|
37
|
+
exclude: []
|
38
|
+
enabled: true
|
39
|
+
IrresponsibleModule:
|
40
|
+
exclude: []
|
41
|
+
enabled: false # Fix false positives and reenable
|
42
|
+
UncommunicativeModuleName:
|
43
|
+
accept: []
|
44
|
+
exclude: []
|
45
|
+
enabled: true
|
46
|
+
reject:
|
47
|
+
- !ruby/regexp /^.$/
|
48
|
+
- !ruby/regexp /[0-9]$/
|
49
|
+
NestedIterators:
|
50
|
+
ignore_iterators: []
|
51
|
+
exclude: []
|
52
|
+
enabled: true
|
53
|
+
max_allowed_nesting: 1
|
54
|
+
TooManyStatements:
|
55
|
+
max_statements: 8
|
56
|
+
exclude: []
|
57
|
+
enabled: true
|
58
|
+
DuplicateMethodCall:
|
59
|
+
allow_calls: []
|
60
|
+
exclude: []
|
61
|
+
enabled: true
|
62
|
+
max_calls: 1
|
63
|
+
UtilityFunction:
|
64
|
+
max_helper_calls: 0
|
65
|
+
exclude: []
|
66
|
+
enabled: true
|
67
|
+
Attribute:
|
68
|
+
exclude: []
|
69
|
+
enabled: false
|
70
|
+
UncommunicativeVariableName:
|
71
|
+
accept: []
|
72
|
+
exclude: []
|
73
|
+
enabled: false
|
74
|
+
reject:
|
75
|
+
- !ruby/regexp /^.$/
|
76
|
+
- !ruby/regexp /[0-9]$/
|
77
|
+
- !ruby/regexp /[A-Z]/
|
78
|
+
RepeatedConditional:
|
79
|
+
exclude: []
|
80
|
+
enabled: true
|
81
|
+
max_ifs: 1
|
82
|
+
DataClump:
|
83
|
+
exclude: []
|
84
|
+
enabled: true
|
85
|
+
max_copies: 2
|
86
|
+
min_clump_size: 2
|
87
|
+
ControlParameter:
|
88
|
+
exclude: []
|
89
|
+
enabled: true
|
90
|
+
LongYieldList:
|
91
|
+
max_params: 1
|
92
|
+
exclude: []
|
93
|
+
enabled: true
|
data/config/roodi.yml
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
---
|
2
|
+
AbcMetricMethodCheck:
|
3
|
+
score: 12.2
|
4
|
+
AssignmentInConditionalCheck: {}
|
5
|
+
CaseMissingElseCheck: {}
|
6
|
+
ClassLineCountCheck:
|
7
|
+
line_count: 324
|
8
|
+
ClassNameCheck:
|
9
|
+
pattern: !ruby/regexp /\A(?:[A-Z]+|[A-Z][a-z](?:[A-Z]?[a-z])+)\z/
|
10
|
+
ClassVariableCheck: {}
|
11
|
+
CyclomaticComplexityBlockCheck:
|
12
|
+
complexity: 2
|
13
|
+
CyclomaticComplexityMethodCheck:
|
14
|
+
complexity: 4
|
15
|
+
EmptyRescueBodyCheck: {}
|
16
|
+
ForLoopCheck: {}
|
17
|
+
MethodLineCountCheck:
|
18
|
+
line_count: 8 # TODO decrease to 9
|
19
|
+
MethodNameCheck:
|
20
|
+
pattern: !ruby/regexp /\A(?:[a-z\d](?:_?[a-z\d])+[?!=]?|\[\]=?|==|<=>|<<|[+*&|-])\z/
|
21
|
+
ModuleLineCountCheck:
|
22
|
+
line_count: 376
|
23
|
+
ModuleNameCheck:
|
24
|
+
pattern: !ruby/regexp /\A(?:[A-Z]+|[A-Z][a-z](?:[A-Z]?[a-z])+)\z/
|
25
|
+
ParameterNumberCheck:
|
26
|
+
parameter_count: 4 # TODO decrease to 2
|
data/lib/assets/asset.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
module Assets
|
2
|
+
|
3
|
+
# Abstract base class for asset
|
4
|
+
class Asset
|
5
|
+
include Adamantium, Anima.new(:name, :mime, :created_at, :size, :sha1, :body)
|
6
|
+
|
7
|
+
# Test if asset was fresh at specific point of time
|
8
|
+
#
|
9
|
+
# @param [Time] time
|
10
|
+
#
|
11
|
+
# @return [true]
|
12
|
+
# if asset is fresh at time
|
13
|
+
#
|
14
|
+
# @return [false]
|
15
|
+
# otherwise
|
16
|
+
#
|
17
|
+
# @api private
|
18
|
+
#
|
19
|
+
def fresh_at?(time)
|
20
|
+
time >= created_at
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
module Assets
|
2
|
+
# Asset builder
|
3
|
+
class Builder
|
4
|
+
|
5
|
+
# Run builder
|
6
|
+
#
|
7
|
+
# @param [String] name
|
8
|
+
#
|
9
|
+
# @return [Rule]
|
10
|
+
#
|
11
|
+
# @api private
|
12
|
+
#
|
13
|
+
def self.run(name)
|
14
|
+
builder = new(name, Mime.from_name(name))
|
15
|
+
yield builder
|
16
|
+
Assets::Rule::Concat.new(name, builder.rules)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Return rules
|
20
|
+
#
|
21
|
+
# @return [Enumerable<Rule>]
|
22
|
+
#
|
23
|
+
# @api private
|
24
|
+
#
|
25
|
+
attr_reader :rules
|
26
|
+
|
27
|
+
# Initialize object
|
28
|
+
#
|
29
|
+
# @param [String] name
|
30
|
+
# @param [Mime] mime
|
31
|
+
#
|
32
|
+
# @api private
|
33
|
+
#
|
34
|
+
# @return [undefined]
|
35
|
+
#
|
36
|
+
def initialize(name, mime)
|
37
|
+
@name, @mime, @rules = name, mime, []
|
38
|
+
end
|
39
|
+
|
40
|
+
# Use pacakges
|
41
|
+
#
|
42
|
+
# @param [Enumerable<Package>] packages
|
43
|
+
#
|
44
|
+
# @return [self]
|
45
|
+
#
|
46
|
+
# @api private
|
47
|
+
#
|
48
|
+
def packages(packages)
|
49
|
+
packages.each do |package|
|
50
|
+
package(package)
|
51
|
+
end
|
52
|
+
self
|
53
|
+
end
|
54
|
+
|
55
|
+
# Use package
|
56
|
+
#
|
57
|
+
# @param [Assets::Package]
|
58
|
+
#
|
59
|
+
# @return [self]
|
60
|
+
#
|
61
|
+
# @api private
|
62
|
+
#
|
63
|
+
def package(package)
|
64
|
+
package.mime(@mime).each do |rule|
|
65
|
+
append(rule)
|
66
|
+
end
|
67
|
+
self
|
68
|
+
end
|
69
|
+
|
70
|
+
# Add rule
|
71
|
+
#
|
72
|
+
# @param [Rule]
|
73
|
+
#
|
74
|
+
# @return [self]
|
75
|
+
#
|
76
|
+
# @api private
|
77
|
+
#
|
78
|
+
def append(rule)
|
79
|
+
unless rule.mime == @mime
|
80
|
+
raise
|
81
|
+
end
|
82
|
+
|
83
|
+
@rules << rule
|
84
|
+
|
85
|
+
self
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
module Assets
|
2
|
+
class Environment
|
3
|
+
# Environment that caches assets
|
4
|
+
class Cache < self
|
5
|
+
include Adamantium::Flat, Equalizer.new(:environment)
|
6
|
+
|
7
|
+
# Return inner environment
|
8
|
+
#
|
9
|
+
# @return [Environment]
|
10
|
+
#
|
11
|
+
# @api private
|
12
|
+
#
|
13
|
+
attr_reader :environment
|
14
|
+
|
15
|
+
# Build cache environemnt
|
16
|
+
#
|
17
|
+
# @param [Enumerable<Rules>] rules
|
18
|
+
#
|
19
|
+
# @return [Cache]
|
20
|
+
#
|
21
|
+
# @api private
|
22
|
+
#
|
23
|
+
def self.build(rules)
|
24
|
+
new(Dynamic.new(rules))
|
25
|
+
end
|
26
|
+
|
27
|
+
# Initialize object
|
28
|
+
#
|
29
|
+
# @param [Environment] environment
|
30
|
+
#
|
31
|
+
# @return [undefined]
|
32
|
+
#
|
33
|
+
# @api private
|
34
|
+
#
|
35
|
+
def initialize(environment)
|
36
|
+
@environment, @cache = environment, {}
|
37
|
+
end
|
38
|
+
|
39
|
+
# Return rule
|
40
|
+
#
|
41
|
+
# @param [String] name
|
42
|
+
#
|
43
|
+
# @return [Rule]
|
44
|
+
# if found
|
45
|
+
#
|
46
|
+
# @return [nil]
|
47
|
+
# otherwise
|
48
|
+
#
|
49
|
+
# @api private
|
50
|
+
#
|
51
|
+
def rule(name)
|
52
|
+
environment.rule(name)
|
53
|
+
end
|
54
|
+
|
55
|
+
# Return asset
|
56
|
+
#
|
57
|
+
# @param [String] name
|
58
|
+
#
|
59
|
+
# @return [Asset]
|
60
|
+
# if found
|
61
|
+
#
|
62
|
+
# @return [nil]
|
63
|
+
# otherwise
|
64
|
+
#
|
65
|
+
def get(name)
|
66
|
+
rule = rule(name)
|
67
|
+
return unless rule
|
68
|
+
|
69
|
+
asset = @cache.fetch(name) do
|
70
|
+
return miss(rule)
|
71
|
+
end
|
72
|
+
|
73
|
+
hit(rule, asset)
|
74
|
+
end
|
75
|
+
|
76
|
+
private
|
77
|
+
|
78
|
+
# Process cache hit
|
79
|
+
#
|
80
|
+
# @param [Rule] rule
|
81
|
+
# @param [Asset] asset
|
82
|
+
#
|
83
|
+
# @return [Asset]
|
84
|
+
#
|
85
|
+
# @api private
|
86
|
+
#
|
87
|
+
def hit(rule, asset)
|
88
|
+
if rule.fresh_at?(asset.created_at)
|
89
|
+
return asset
|
90
|
+
end
|
91
|
+
|
92
|
+
miss(rule)
|
93
|
+
end
|
94
|
+
|
95
|
+
# Process cache miss
|
96
|
+
#
|
97
|
+
# @param [Rule] rule
|
98
|
+
#
|
99
|
+
# @return [Asset]
|
100
|
+
# if found
|
101
|
+
#
|
102
|
+
# @return [nil]
|
103
|
+
# otherwise
|
104
|
+
#
|
105
|
+
# @api private
|
106
|
+
#
|
107
|
+
def miss(rule)
|
108
|
+
@cache[rule.name] = rule.asset
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Assets
|
2
|
+
class Environment
|
3
|
+
|
4
|
+
# Environment with dynamic asset compilation
|
5
|
+
class Dynamic < self
|
6
|
+
include Adamantium, Concord.new(:rules)
|
7
|
+
|
8
|
+
# Return index
|
9
|
+
#
|
10
|
+
# @return [Hash]
|
11
|
+
#
|
12
|
+
# @api private
|
13
|
+
#
|
14
|
+
def index
|
15
|
+
rules.each_with_object({}) do |rule, index|
|
16
|
+
index[rule.name] = rule
|
17
|
+
end
|
18
|
+
end
|
19
|
+
memoize :index
|
20
|
+
|
21
|
+
# Return rule for name
|
22
|
+
#
|
23
|
+
# @param [String] name
|
24
|
+
#
|
25
|
+
# @return [Rule]
|
26
|
+
# if found
|
27
|
+
#
|
28
|
+
# @return [nil]
|
29
|
+
# otherwise
|
30
|
+
#
|
31
|
+
# @api private
|
32
|
+
#
|
33
|
+
def rule(name)
|
34
|
+
index[name]
|
35
|
+
end
|
36
|
+
|
37
|
+
# Return asset for name
|
38
|
+
#
|
39
|
+
# @param [String] name
|
40
|
+
#
|
41
|
+
# @return [Asset]
|
42
|
+
# if found
|
43
|
+
#
|
44
|
+
# @return [nil]
|
45
|
+
# otherwise
|
46
|
+
#
|
47
|
+
# @api private
|
48
|
+
#
|
49
|
+
def get(name)
|
50
|
+
rule = rule(name)
|
51
|
+
rule && rule.asset
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Assets
|
2
|
+
class Environment
|
3
|
+
# Static enviornment with precompiled assets
|
4
|
+
class Static < self
|
5
|
+
include Concord.new(:assets)
|
6
|
+
|
7
|
+
# Return index
|
8
|
+
#
|
9
|
+
# @return [Hash]
|
10
|
+
#
|
11
|
+
# @api private
|
12
|
+
#
|
13
|
+
def index
|
14
|
+
assets.each_with_object({}) do |asset, index|
|
15
|
+
index[asset.name]=asset
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# Return asset
|
20
|
+
#
|
21
|
+
# @param [String] name
|
22
|
+
# name of asset
|
23
|
+
#
|
24
|
+
# @return [Asset]
|
25
|
+
# if found
|
26
|
+
#
|
27
|
+
# @return [nil]
|
28
|
+
# otherwise
|
29
|
+
#
|
30
|
+
# @api private
|
31
|
+
#
|
32
|
+
def get(name)
|
33
|
+
index[name]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Assets
|
2
|
+
|
3
|
+
# Abstract base class for asset environments
|
4
|
+
class Environment
|
5
|
+
include AbstractType
|
6
|
+
|
7
|
+
# Return rule
|
8
|
+
#
|
9
|
+
# @param [String] name
|
10
|
+
#
|
11
|
+
# @return [Rule]
|
12
|
+
# if found
|
13
|
+
#
|
14
|
+
# @return [nil]
|
15
|
+
# otherwise
|
16
|
+
#
|
17
|
+
# @api private
|
18
|
+
#
|
19
|
+
abstract_method :rule
|
20
|
+
|
21
|
+
# Return asset
|
22
|
+
#
|
23
|
+
# @return [Asset]
|
24
|
+
# if found
|
25
|
+
#
|
26
|
+
# @return [nil]
|
27
|
+
# otherwise
|
28
|
+
#
|
29
|
+
# @api private
|
30
|
+
#
|
31
|
+
abstract_method :get
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|