web_blocks 2.0.4.dev → 2.0.5.alpha

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3056171fbb818b0465746dd882467671d4c51275
4
- data.tar.gz: 1f6f4f7d02abc207f38217664f1dc093084ccc65
3
+ metadata.gz: 6b45e9ad8b7e3af77d52db79b0685c78ca0dac1f
4
+ data.tar.gz: 92aa552f7c50dd4985a8b0fa6efafc6668c10aaa
5
5
  SHA512:
6
- metadata.gz: b8fc781f422e5239fd2bda350d58075f8777dbb7a13dda7b0930a6f60ee48cd1ee25eb1a52731fe4f1976d939e52f790b3a57750f4dd5d174588e66d4d98422f
7
- data.tar.gz: c228529bd7a500b6f319918d8cc822bd9cb2b518946e882f0744d38385eec195a92c2d8a0c8be8e1e921f9e083a51ef14e496e5c2888d2f816fb39cd28b4a9be
6
+ metadata.gz: aa248d75286aa4001c87cc5c8934063195a780e5caa4e2fd877c4764b73ec9d84eeba1135e8fd1f3edc303e24e5d421179247ab3eb8d3bb7d70f9761e1c73607
7
+ data.tar.gz: f2ff6239be72f149a6271de716aa456b9c4ae9ac529fd5ee8c3ad6b87e8d2050b3dce3c0e5ebee1169a41140106ca121c670d88144be15c8c4184ba9dda49950
data/README.md CHANGED
@@ -302,6 +302,16 @@ Further, in this example, suppose the goal is to use the `WebBlocks-visibility`
302
302
  }
303
303
  ```
304
304
 
305
+ While blocks should carefully define their dependencies to be as accepting as possible, two blocks will sometimes require completely different versions of the same dependency. This can be resolved by manually specifying a resolution in `bower.json`:
306
+
307
+ ```json
308
+ {
309
+ "resolutions": {
310
+ "jquery": "~2.1.0"
311
+ }
312
+ }
313
+ ```
314
+
305
315
  ### Including a Block
306
316
 
307
317
  While packages define blocks to include, generally they will not be included unless specified explicitly.
@@ -441,6 +451,8 @@ blocks watch
441
451
 
442
452
  Any time that a bower component, blockfile or source file changes, it will rebuild the necessary components.
443
453
 
454
+ **NOTE: The `watch` command will not work properly under inotify (Linux) for modifications to `Blockfile.rb`.**
455
+
444
456
  ### Using Depedencies to Control Load Order
445
457
 
446
458
  The WebBlocks-breakpoints module provides a set of variables that it will define unless they're already defined. This enables WebBlocks-visibility's breakpoint-based classes. Suppose, however, that we wish to inject our own variables.
@@ -656,6 +668,67 @@ $ blocks inspect dependency_order
656
668
  /Users/ebollens/Sites/test/bower_components/efx/src/driver/toggle.js
657
669
  ```
658
670
 
671
+ ### Modifying the WebBlocks DSL
672
+
673
+ At any block level, you can register a new facade into the DSL:
674
+
675
+ ```ruby
676
+ block 'efx' do
677
+
678
+ register_facade :file_name_block, ::WebBlocks::Facade::FileNameBlock
679
+
680
+ file_name_block 'engine', :required => true do
681
+ loose_dependency framework.route 'jquery'
682
+ end
683
+
684
+ end
685
+ ```
686
+
687
+ This registration is available to child nodes as well:
688
+
689
+ ```ruby
690
+ block 'efx' do
691
+
692
+ register_facade :file_name_block, ::WebBlocks::Facade::FileNameBlock
693
+
694
+ # ..
695
+
696
+ block 'driver', :path => 'driver' do
697
+
698
+ dependency efx.route 'engine'
699
+
700
+ file_name_block 'accordion'
701
+ file_name_block 'tabs'
702
+ file_name_block 'toggle'
703
+
704
+ end
705
+
706
+ end
707
+ ```
708
+
709
+ Resolution of the facade occurs by way of closest parent. For example, Ex2 wins over Ex1 for the sub-block:
710
+
711
+ ```ruby
712
+ block 'top-level' do
713
+
714
+ register_facade :ex, Ex1
715
+
716
+ block 'driver', :path => 'driver' do
717
+
718
+ register_facade :ex, Ex2
719
+
720
+ ex 'Ex2_is_used_as_handler_here'
721
+
722
+ end
723
+
724
+ end
725
+ ```
726
+
727
+ ### Available Facades
728
+
729
+ * **WebBlocks::Facade::FileNameBlock** takes the name passed to it and finds CSS, JS and SCSS files by the same name and loading them into a block by that name.
730
+ * **WebBlocks::Facade::RecursiveFileNamesBlock** takes the name passed to it and finds all directories, making sub-blocks of them and calling this recursively, while also finding all CSS, JS and SCSS files by the same name and loading them into a block by that name.
731
+
659
732
  ### Learn More
660
733
 
661
734
  See the `demo` folder for a example setup.
@@ -0,0 +1,16 @@
1
+ require 'web_blocks/facade/base'
2
+
3
+ module WebBlocks
4
+ module Facade
5
+ class Base
6
+
7
+ attr_reader :context
8
+
9
+ def initialize context
10
+ @context = context
11
+ end
12
+
13
+ end
14
+ end
15
+ end
16
+
@@ -0,0 +1,15 @@
1
+ require 'web_blocks/facade/base'
2
+ require 'web_blocks/structure/block'
3
+
4
+ module WebBlocks
5
+ module Facade
6
+ class Block < Base
7
+
8
+ def handle name, attributes = {}, &block
9
+ context.child_eval ::WebBlocks::Structure::Block, name, attributes, block
10
+ end
11
+
12
+ end
13
+ end
14
+ end
15
+
@@ -0,0 +1,20 @@
1
+ require 'web_blocks/facade/base'
2
+ require 'web_blocks/structure/block'
3
+
4
+ module WebBlocks
5
+ module Facade
6
+ class ExternalComponentBlock < Base
7
+
8
+ def handle name, attributes = {}, &block
9
+ if attributes.has_key?(:path)
10
+ attributes[:path] = "bower_components/#{name}/#{attributes[:path]}"
11
+ else
12
+ attributes[:path] = "bower_components/#{name}"
13
+ end
14
+ context.block name, attributes, &block
15
+ end
16
+
17
+ end
18
+ end
19
+ end
20
+
@@ -0,0 +1,35 @@
1
+ require 'web_blocks/facade/base'
2
+
3
+ module WebBlocks
4
+ module Facade
5
+ class FileNameBlock < Base
6
+
7
+ attr_reader :types
8
+
9
+ def initialize context
10
+ super context
11
+ @types = {
12
+ 'css' => :scss_file,
13
+ 'js' => :js_file,
14
+ 'scss' => :scss_file
15
+ }
16
+ end
17
+
18
+ def handle name, attributes = {}, &block
19
+
20
+ this = self
21
+
22
+ block_was_given = block_given?
23
+
24
+ this.context.block name, attributes do |block_entity|
25
+ this.types.each do |extension, method_name|
26
+ block_entity.send(method_name, "#{name}.#{extension}") if File.exists?("#{block_entity.resolved_path}/#{name}.#{extension}")
27
+ end
28
+ block_entity.instance_eval &block if block_was_given
29
+ end
30
+
31
+ end
32
+
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,15 @@
1
+ require 'web_blocks/facade/base'
2
+ require 'web_blocks/structure/js_file'
3
+
4
+ module WebBlocks
5
+ module Facade
6
+ class JsFile < Base
7
+
8
+ def handle name, attributes = {}, &block
9
+ context.child_eval ::WebBlocks::Structure::JsFile, name, attributes, block
10
+ end
11
+
12
+ end
13
+ end
14
+ end
15
+
@@ -0,0 +1,47 @@
1
+ require 'set'
2
+ require 'web_blocks/facade/base'
3
+ require 'web_blocks/facade/file_name_block'
4
+
5
+ module WebBlocks
6
+ module Facade
7
+ class RecursiveFileNamesBlock < Base
8
+
9
+ def handle name, attributes = {}, &block
10
+
11
+ this = self
12
+
13
+ attributes[:path] = name unless attributes.has_key? :path
14
+
15
+ block_was_given = block_given?
16
+
17
+ this.context.block name, attributes do |directory_block|
18
+
19
+ directory_path = directory_block.resolved_path
20
+ directory_facade = ::WebBlocks::Facade::RecursiveFileNamesBlock.new(directory_block)
21
+ file_facade = ::WebBlocks::Facade::FileNameBlock.new(directory_block)
22
+ file_names = Set.new
23
+
24
+ Dir.entries(directory_path).each do |name|
25
+ next if name == '.' or name == '..'
26
+ path = "#{directory_path}/#{name}"
27
+ if File.directory? path
28
+ directory_facade.handle name, path: name
29
+ else
30
+ segs = name.split('.')
31
+ ext = segs.pop
32
+ if file_facade.types.keys.include? ext
33
+ file_names << segs.join('.')
34
+ end
35
+ end
36
+ end
37
+
38
+ file_names.each { |name| file_facade.handle name }
39
+
40
+ directory_block.instance_eval &block if block_was_given
41
+
42
+ end
43
+ end
44
+
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,15 @@
1
+ require 'web_blocks/facade/base'
2
+ require 'web_blocks/structure/scss_file'
3
+
4
+ module WebBlocks
5
+ module Facade
6
+ class ScssFile < Base
7
+
8
+ def handle name, attributes = {}, &block
9
+ context.child_eval ::WebBlocks::Structure::ScssFile, name, attributes, block
10
+ end
11
+
12
+ end
13
+ end
14
+ end
15
+
@@ -38,6 +38,10 @@ module WebBlocks
38
38
  ::Bower.context.call "bower.commands.prune"
39
39
  end
40
40
 
41
+ def clean_components!
42
+ FileUtils.rm_rf @components_path
43
+ end
44
+
41
45
  def install!
42
46
  ::Bower.context.call "bower.commands.install"
43
47
  end
@@ -1,94 +1,18 @@
1
- require 'web_blocks/framework'
2
- require 'web_blocks/structure/tree/node'
3
- require 'web_blocks/structure/block'
4
- require 'web_blocks/structure/scss_file'
5
- require 'web_blocks/structure/js_file'
6
- require 'web_blocks/structure/attribute/dependency'
7
- require 'web_blocks/structure/attribute/loose_dependency'
8
- require 'web_blocks/structure/attribute/reverse_dependency'
9
- require 'web_blocks/structure/attribute/reverse_loose_dependency'
1
+ require 'web_blocks/facade/block'
2
+ require 'web_blocks/facade/js_file'
3
+ require 'web_blocks/facade/scss_file'
4
+ require 'web_blocks/structure/block_core'
10
5
 
11
6
  module WebBlocks
12
7
  module Structure
13
- class Block < ::WebBlocks::Structure::Tree::Node
14
-
15
- include WebBlocks::Framework
16
- include WebBlocks::Structure::Attribute::Dependency
17
- include WebBlocks::Structure::Attribute::LooseDependency
18
- include WebBlocks::Structure::Attribute::ReverseDependency
19
- include WebBlocks::Structure::Attribute::ReverseLooseDependency
8
+ class Block < BlockCore
20
9
 
21
10
  set :required, false
22
11
 
23
- def resolved_path
24
- path = attributes.has_key?(:path) ? attributes[:path] : ''
25
- if attributes.has_key? :base_path
26
- Pathname.new(attributes[:base_path]) + path
27
- elsif parent
28
- parent.resolved_path + path
29
- else
30
- Pathname.new(path)
31
- end
32
- end
33
-
34
- def block name, attributes = {}, &block
35
- child_eval ::WebBlocks::Structure::Block, name, attributes, block
36
- end
37
-
38
- def scss_file name, attributes = {}, &block
39
- child_eval ::WebBlocks::Structure::ScssFile, name, attributes, block
40
- end
41
-
42
- def js_file name, attributes = {}, &block
43
- child_eval ::WebBlocks::Structure::JsFile, name, attributes, block
44
- end
45
-
46
- def files
47
- computed = []
48
- children.each do |name,object|
49
- if object.is_a? Block
50
- computed = computed + object.files
51
- elsif object.is_a? RawFile
52
- computed << object
53
- end
54
- end
55
- computed
56
- end
57
-
58
- def select_leaf_nodes branch_select_proc, leaf_select_proc
59
- leaf_nodes = []
60
- nodes = [self]
61
- while nodes.length > 0
62
- node = nodes.pop
63
- if node.respond_to? :children
64
- nodes |= node.children.values.select(&branch_select_proc)
65
- elsif leaf_select_proc.call(node)
66
- leaf_nodes << node
67
- end
68
- end
69
- leaf_nodes
70
- end
71
-
72
- def required_files
73
- select_leaf_nodes Proc.new(){ |node| node.get(:required) }, Proc.new(){ |node| node.is_a? RawFile }
74
- end
75
-
76
- private
77
-
78
- def child_add_or_update klass, name, attributes = {}
79
- unless has_child? name
80
- add_child klass.new(name, attributes)
81
- else
82
- attributes.each { |key, value| children[name].set key, value }
83
- end
84
- children[name]
85
- end
12
+ register_facade :block, WebBlocks::Facade::Block
13
+ register_facade :js_file, WebBlocks::Facade::JsFile
14
+ register_facade :scss_file, WebBlocks::Facade::ScssFile
86
15
 
87
- def child_eval klass, name, attributes = {}, block
88
- child = child_add_or_update klass, name, attributes
89
- child.instance_exec children[name], &block if block
90
- child
91
- end
92
16
 
93
17
  end
94
18
  end
@@ -0,0 +1,126 @@
1
+ require 'web_blocks/framework'
2
+ require 'web_blocks/structure/tree/node'
3
+ require 'web_blocks/structure/attribute/dependency'
4
+ require 'web_blocks/structure/attribute/loose_dependency'
5
+ require 'web_blocks/structure/attribute/reverse_dependency'
6
+ require 'web_blocks/structure/attribute/reverse_loose_dependency'
7
+
8
+ module WebBlocks
9
+ module Structure
10
+ class BlockCore < ::WebBlocks::Structure::Tree::Node
11
+
12
+ include WebBlocks::Framework
13
+
14
+ include WebBlocks::Structure::Attribute::Dependency
15
+ include WebBlocks::Structure::Attribute::LooseDependency
16
+ include WebBlocks::Structure::Attribute::ReverseDependency
17
+ include WebBlocks::Structure::Attribute::ReverseLooseDependency
18
+
19
+ def register_facade name, handler
20
+ @facade_map = {} unless defined? @facade_map
21
+ @facade_map[name.to_sym] = handler
22
+ end
23
+
24
+ def self.register_facade name, handler
25
+ @@class_facade_map = {} unless defined? @@class_facade_map
26
+ @@class_facade_map[name.to_sym] = handler
27
+ end
28
+
29
+ def resolve_facade name
30
+ if @facade_map and @facade_map.has_key?(name)
31
+ @facade_map[name]
32
+ elsif parent
33
+ parent.resolve_facade name
34
+ else
35
+ nil
36
+ end
37
+ end
38
+
39
+ def resolve_class_facade name
40
+ if @@class_facade_map and @@class_facade_map[name]
41
+ @@class_facade_map[name]
42
+ elsif parent
43
+ parent.resolve_class_facade name
44
+ else
45
+ nil
46
+ end
47
+ end
48
+
49
+ def isolated_facade_registration_scope &block
50
+ facade_map = @facade_map
51
+ begin
52
+ instance_eval &block
53
+ @facade_map = facade_map
54
+ rescue => e
55
+ @facade_map = facade_map
56
+ raise e
57
+ end
58
+ end
59
+
60
+ def method_missing name, *arguments, &block
61
+ handler_class = resolve_facade(name)
62
+ handler_class = resolve_class_facade(name) unless handler_class
63
+ raise NoMethodError, "undefined facade `#{name}' for #{self}" unless handler_class
64
+ handler = handler_class.new(self)
65
+ handler.handle *arguments, &block
66
+ end
67
+
68
+ def resolved_path
69
+ path = attributes.has_key?(:path) ? attributes[:path] : ''
70
+ if attributes.has_key? :base_path
71
+ Pathname.new(attributes[:base_path]) + path
72
+ elsif parent
73
+ parent.resolved_path + path
74
+ else
75
+ Pathname.new(path)
76
+ end
77
+ end
78
+
79
+ def files
80
+ computed = []
81
+ children.each do |name,object|
82
+ if object.is_a? Block
83
+ computed = computed + object.files
84
+ elsif object.is_a? RawFile
85
+ computed << object
86
+ end
87
+ end
88
+ computed
89
+ end
90
+
91
+ def select_leaf_nodes branch_select_proc, leaf_select_proc
92
+ leaf_nodes = []
93
+ nodes = [self]
94
+ while nodes.length > 0
95
+ node = nodes.pop
96
+ if node.respond_to? :children
97
+ nodes |= node.children.values.select(&branch_select_proc)
98
+ elsif leaf_select_proc.call(node)
99
+ leaf_nodes << node
100
+ end
101
+ end
102
+ leaf_nodes
103
+ end
104
+
105
+ def required_files
106
+ select_leaf_nodes Proc.new(){ |node| node.get(:required) }, Proc.new(){ |node| node.is_a? RawFile }
107
+ end
108
+
109
+ def child_add_or_update klass, name, attributes = {}
110
+ unless has_child? name
111
+ add_child klass.new(name, attributes)
112
+ else
113
+ attributes.each { |key, value| children[name].set key, value }
114
+ end
115
+ children[name]
116
+ end
117
+
118
+ def child_eval klass, name, attributes = {}, block
119
+ child = child_add_or_update klass, name, attributes
120
+ child.instance_exec children[name], &block if block
121
+ child
122
+ end
123
+
124
+ end
125
+ end
126
+ end
@@ -1,3 +1,4 @@
1
+ require 'web_blocks/facade/external_component_block'
1
2
  require 'web_blocks/structure/block'
2
3
  require 'web_blocks/structure/raw_file'
3
4
  require 'web_blocks/support/tsort/hash'
@@ -6,6 +7,8 @@ module WebBlocks
6
7
  module Structure
7
8
  class Framework < Block
8
9
 
10
+ register_facade :external_component_block, WebBlocks::Facade::ExternalComponentBlock
11
+
9
12
  set :required, true
10
13
 
11
14
  def register hash
@@ -14,9 +17,11 @@ module WebBlocks
14
17
  resolved_block_path = resolved_path + path
15
18
  blockfile_path = resolved_block_path + "Blockfile.rb"
16
19
  raise "Undefined blockfile for #{path}" unless File.exists?(blockfile_path)
17
- instance_eval File.read(blockfile_path)
18
- block name do
19
- set :base_path, resolved_block_path
20
+ isolated_facade_registration_scope do
21
+ block name do
22
+ set :base_path, resolved_block_path
23
+ end
24
+ instance_eval File.read(blockfile_path)
20
25
  end
21
26
  end
22
27
 
@@ -35,6 +35,10 @@ module WebBlocks
35
35
 
36
36
  begin
37
37
 
38
+ if self.options.reload_bower
39
+ clean_bower_components! log
40
+ end
41
+
38
42
  if !bower_manager.installed? or self.options.reload_bower
39
43
  install_bower_components! log
40
44
  elsif self.options.reload_registry
@@ -75,6 +79,15 @@ module WebBlocks
75
79
 
76
80
  end
77
81
 
82
+ def clean_bower_components! log
83
+
84
+ log.debug do
85
+ bower_manager.clean_components!
86
+ 'Cleaned bower components'
87
+ end
88
+
89
+ end
90
+
78
91
  def clean_bower_registry! log
79
92
 
80
93
  log.debug do
@@ -96,7 +109,7 @@ module WebBlocks
96
109
  register :name => name, :path => path
97
110
  "Loaded"
98
111
  end
99
- rescue
112
+ rescue RuntimeError
100
113
  log.warn("#{name}") { "Skipped -- Blockfile.rb does not exist" }
101
114
  end
102
115
  end
@@ -25,17 +25,45 @@ module WebBlocks
25
25
  triggers << base_path + '.blocks/cache/bower/registry.yaml'
26
26
  triggers << base_path + 'bower_components/*/Blockfile.rb'
27
27
 
28
+ monitor = nil
29
+
28
30
  handler = Proc.new do |base, relative|
29
31
 
32
+ rerun_monitor = false
30
33
  changed_file = Pathname.new(base) + relative
31
34
  relink_needed = changed_file.to_s.match(/Blockfile.rb$/)
32
35
 
33
36
  log.info("Watch"){ "Detected change to #{changed_file}" }
34
37
 
35
38
  if relink_needed
39
+
36
40
  root.remove_all_children
37
41
  initialize_root!
38
42
  prepare_blocks!
43
+
44
+ # This is a super hacky way to detach all handlers for FSSM.monitor and then initialize a new FSSM.monitor
45
+ # with the right triggers based on the latest changes. This does NOT work with inotify.
46
+ if monitor.instance_variable_get("@backend").is_a?(FSSM::Backends::RBFSEvent) or monitor.instance_variable_get("@backend").is_a?(FSSM::Backends::Polling)
47
+
48
+ monitor.instance_variable_get("@backend").instance_variable_set("@handlers", [])
49
+
50
+ triggers = root.adjacency_list.keys.map(){|f| f.resolved_path.to_s }
51
+ triggers << base_path + 'Blockfile.rb'
52
+ triggers << base_path + '.blocks/cache/bower/registry.yaml'
53
+ triggers << base_path + 'bower_components/*/Blockfile.rb'
54
+
55
+ monitor = FSSM::Monitor.new
56
+ monitor.path @base_path do
57
+ glob triggers
58
+ update &handler
59
+ delete &handler
60
+ create &handler
61
+ end
62
+
63
+ rerun_monitor = true
64
+
65
+ end
66
+
39
67
  end
40
68
 
41
69
  begin
@@ -59,6 +87,10 @@ module WebBlocks
59
87
 
60
88
  end
61
89
 
90
+ if rerun_monitor
91
+ monitor.run
92
+ end
93
+
62
94
  end
63
95
 
64
96
  if options.build
@@ -1,3 +1,3 @@
1
1
  module WebBlocks
2
- VERSION = "2.0.4.dev"
2
+ VERSION = "2.0.5.alpha"
3
3
  end
data/web_blocks.gemspec CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.add_dependency 'thor'
23
23
  spec.add_dependency 'ruby-bower'
24
- spec.add_dependency 'execjs'
24
+ spec.add_dependency 'execjs', '~> 2.2', '<= 2.2.2'
25
25
  spec.add_dependency 'extend_method'
26
26
  spec.add_dependency 'compass'
27
27
  spec.add_dependency 'sass-css-importer'
@@ -33,5 +33,6 @@ Gem::Specification.new do |spec|
33
33
  spec.add_development_dependency 'bundler'
34
34
  spec.add_development_dependency 'rake'
35
35
  spec.add_development_dependency 'coveralls'
36
+ spec.add_development_dependency 'test-unit'
36
37
 
37
38
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: web_blocks
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.4.dev
4
+ version: 2.0.5.alpha
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Bollens
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-16 00:00:00.000000000 Z
11
+ date: 2015-09-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -42,16 +42,22 @@ dependencies:
42
42
  name: execjs
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '2.2'
48
+ - - "<="
49
+ - !ruby/object:Gem::Version
50
+ version: 2.2.2
48
51
  type: :runtime
49
52
  prerelease: false
50
53
  version_requirements: !ruby/object:Gem::Requirement
51
54
  requirements:
52
- - - ">="
55
+ - - "~>"
53
56
  - !ruby/object:Gem::Version
54
- version: '0'
57
+ version: '2.2'
58
+ - - "<="
59
+ - !ruby/object:Gem::Version
60
+ version: 2.2.2
55
61
  - !ruby/object:Gem::Dependency
56
62
  name: extend_method
57
63
  requirement: !ruby/object:Gem::Requirement
@@ -192,6 +198,20 @@ dependencies:
192
198
  - - ">="
193
199
  - !ruby/object:Gem::Version
194
200
  version: '0'
201
+ - !ruby/object:Gem::Dependency
202
+ name: test-unit
203
+ requirement: !ruby/object:Gem::Requirement
204
+ requirements:
205
+ - - ">="
206
+ - !ruby/object:Gem::Version
207
+ version: '0'
208
+ type: :development
209
+ prerelease: false
210
+ version_requirements: !ruby/object:Gem::Requirement
211
+ requirements:
212
+ - - ">="
213
+ - !ruby/object:Gem::Version
214
+ version: '0'
195
215
  description: Package, configuration and dependency manager for web assets (SCSS, JS,
196
216
  images, and fonts)
197
217
  email:
@@ -217,6 +237,13 @@ files:
217
237
  - demo/package.json
218
238
  - demo/src/config/WebBlocks-breakpoints.scss
219
239
  - lib/web_blocks.rb
240
+ - lib/web_blocks/facade/base.rb
241
+ - lib/web_blocks/facade/block.rb
242
+ - lib/web_blocks/facade/external_component_block.rb
243
+ - lib/web_blocks/facade/file_name_block.rb
244
+ - lib/web_blocks/facade/js_file.rb
245
+ - lib/web_blocks/facade/recursive_file_names_block.rb
246
+ - lib/web_blocks/facade/scss_file.rb
220
247
  - lib/web_blocks/framework.rb
221
248
  - lib/web_blocks/manager/bower.rb
222
249
  - lib/web_blocks/manager/builder/base.rb
@@ -239,6 +266,7 @@ files:
239
266
  - lib/web_blocks/structure/attribute/reverse_dependency.rb
240
267
  - lib/web_blocks/structure/attribute/reverse_loose_dependency.rb
241
268
  - lib/web_blocks/structure/block.rb
269
+ - lib/web_blocks/structure/block_core.rb
242
270
  - lib/web_blocks/structure/font_file.rb
243
271
  - lib/web_blocks/structure/framework.rb
244
272
  - lib/web_blocks/structure/img_file.rb
@@ -304,7 +332,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
304
332
  version: 1.3.1
305
333
  requirements: []
306
334
  rubyforge_project:
307
- rubygems_version: 2.2.2
335
+ rubygems_version: 2.4.6
308
336
  signing_key:
309
337
  specification_version: 4
310
338
  summary: package, configuration and dependency manager for web assets (SCSS, JS, images,