active_path 0.0.2 → 0.0.3

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: 11521118a9c1286cbef1df712f650ecad8e146c8
4
- data.tar.gz: c669aa1ecef84937035bba5a4a8ed457671ee7a1
3
+ metadata.gz: 212776f05fd76c2a04a29697b2136ac5b07b9ecf
4
+ data.tar.gz: 5638ceb2a84610ad98e0b5ffec0adc53c81a4b9c
5
5
  SHA512:
6
- metadata.gz: 6748d8386d87b2d375110dc783a02dd38904fedfe7d383631a820cbfec33be4faf45f0da1a9d5bcaf72ec7542ccce781eea389d4361e9e8cc7213bf195ed8422
7
- data.tar.gz: '048da2e8401bb24de04b27d6a9f280dd6cbfa33f4780ba7dfbca9da86d4493ae419bd4f05959149c6f1b7ef8f83aad396333c650047873b8c004479ac12ba5f2'
6
+ metadata.gz: 4766f9ad22588546c2f819d0124d609f94c4d22c9bed2570379386ac181f6a503afec8b4126398986e887be3ec2cffd1153af111895fb368997da8180d40a192
7
+ data.tar.gz: ee97a9efdf88b22b8399b6f2b68dcdf9aa06164a7812dbcce1ab977c4e39663b493963a908e9caa84289e927aff5bafc922f81bd3fea5134d326bd9fefe6939e
data/README.md CHANGED
@@ -33,34 +33,68 @@ ActivePath.configure do |config|
33
33
 
34
34
  ...
35
35
 
36
- config.partials.prepend('page_content').with('example/test')
36
+ config.partials.prepend('pages/content').with('example/test')
37
37
 
38
38
  end
39
39
 
40
40
  ```
41
41
 
42
- The above example assumes your application renders a partial called 'page_content' and you want to `prepend` a partial called 'example/test'.
42
+ The above example assumes your application renders a partial called 'pages/content' and you want to `prepend` a partial called 'example/test'.
43
43
 
44
- Your partial will have the same local parameters access as the prepended partial.
44
+ Your partial will have the same local parameters access as the prepended partial. You can also use `append`:
45
45
 
46
+ ```ruby
47
+
48
+ config.partials.append('pages/content').with('example/test')
49
+
50
+ ```
51
+
52
+
53
+ With the above configuration 'example/test' will be rendered after 'pages/content'.
46
54
 
47
55
  --
48
56
 
49
- **Path hints:** (use in development only)
57
+ **Conditions:**
58
+
59
+ The `when` condition gives you the ability to conditionally apply your partial.
50
60
 
51
61
 
52
62
  ```ruby
53
63
 
54
- ActivePath.configure do |config|
64
+ config.partials.append('pages/content').with('example/test').when(title: 'Welcome')
55
65
 
56
- ...
66
+ ```
67
+
68
+ Or pass in a block for more flexibility with your conditions:
57
69
 
58
- config.path_hints = true
70
+ ```ruby
59
71
 
72
+ config.partials.append('pages/content').with('example/test').when do |locals|
73
+ locals[:title] == 'Welcome'
60
74
  end
61
75
 
76
+ ```
77
+
78
+ --
79
+
80
+ **Path hints:** (use in development only)
81
+
82
+
83
+ ```ruby
84
+
85
+ config.path_hints = true
86
+
62
87
  ```
63
88
 
64
- HTML comments are added before and after each partial.
89
+ HTML comments are added before and after each partial. Here is the output from our above examples:
90
+
91
+ ```html
92
+ <!-- start pages/content -->
93
+ <p>page content</p>
94
+ <!-- end pages/content -->
95
+ <!-- start example/test -->
96
+ <p>example test</p>
97
+ <!-- end example/test -->
65
98
 
99
+ ```
66
100
  Feel free to [submit issues](https://github.com/ryaan-anthony/active-path/issues) or [help make it better](https://github.com/ryaan-anthony/active-path/pulls).
@@ -0,0 +1,17 @@
1
+ module ActivePath
2
+ module Configuration
3
+ class Attachment
4
+ attr_reader :partial, :conditions
5
+
6
+ def initialize(partial)
7
+ @partial = partial
8
+ @conditions = []
9
+ end
10
+
11
+ def when(condition = nil, &block)
12
+ @conditions << (condition || block)
13
+ self
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,15 +1,16 @@
1
+ require 'active_path/configuration/attachment'
1
2
  module ActivePath
2
3
  module Configuration
3
4
  class Partial
4
5
  attr_reader :attachments
5
6
 
6
- def initialize(key)
7
- @key = key
7
+ def initialize
8
8
  @attachments = []
9
9
  end
10
10
 
11
- def with(args)
12
- @attachments << args
11
+ def with(partial_name)
12
+ @attachments << Attachment.new(partial_name)
13
+ @attachments.last
13
14
  end
14
15
  end
15
16
  end
@@ -19,7 +19,7 @@ module ActivePath
19
19
  private
20
20
 
21
21
  def partial(key, prepend = true)
22
- @partials["#{key}/#{prepend}"] ||= Partial.new(key)
22
+ @partials["#{key}/#{prepend}"] ||= Partial.new
23
23
  end
24
24
  end
25
25
  end
@@ -0,0 +1,29 @@
1
+ module ActivePath
2
+ module Renderer
3
+ module Conditional
4
+ def conditions_match?(conditions)
5
+ conditions.all? do |condition|
6
+ condition_match?(condition)
7
+ end
8
+ end
9
+
10
+ def condition_match?(condition)
11
+ if condition.is_a?(Hash)
12
+ hash_match?(condition)
13
+ elsif condition.is_a?(Proc)
14
+ proc_match?(condition)
15
+ end
16
+ end
17
+
18
+ def hash_match?(condition)
19
+ condition.all? do |k,v|
20
+ options[:locals][k] == v
21
+ end
22
+ end
23
+
24
+ def proc_match?(condition)
25
+ condition.call(options[:locals])
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,7 +1,11 @@
1
+ require 'active_path/renderer/conditional'
2
+ require 'active_path/renderer/path_hints'
1
3
  module ActivePath
2
4
  module Renderer
3
5
  class PartialRenderer
4
6
  attr_reader :context, :options
7
+ include Conditional
8
+ include PathHints
5
9
 
6
10
  def initialize(context, options = {})
7
11
  @context = context
@@ -10,16 +14,42 @@ module ActivePath
10
14
 
11
15
  def render
12
16
  output_buffer = yield
13
- partials.prepend(partial_name).attachments.each do |attachment|
17
+ prepend_to(output_buffer)
18
+ append_to(output_buffer)
19
+ output_buffer
20
+ end
21
+
22
+ private
23
+
24
+ def prepend_to(output_buffer)
25
+ start_path_hints(output_buffer) if ActivePath.config.path_hints
26
+
27
+ prepend_attachments.each do |attachment|
14
28
  output_buffer.prepend(render_attachment(attachment))
15
29
  end
16
- partials.append(partial_name).attachments.each do |attachment|
30
+ end
31
+
32
+ def append_to(output_buffer)
33
+ end_path_hints(output_buffer) if ActivePath.config.path_hints
34
+
35
+ append_attachments.each do |attachment|
17
36
  output_buffer.concat(render_attachment(attachment))
18
37
  end
19
- output_buffer
20
38
  end
21
39
 
22
- private
40
+ def append_attachments
41
+ attachments(partials.append(partial_name))
42
+ end
43
+
44
+ def prepend_attachments
45
+ attachments(partials.prepend(partial_name))
46
+ end
47
+
48
+ def attachments(partial)
49
+ partial.attachments.select do |attachment|
50
+ conditions_match?(attachment.conditions)
51
+ end
52
+ end
23
53
 
24
54
  def partials
25
55
  ActivePath.config.partials
@@ -30,12 +60,12 @@ module ActivePath
30
60
  end
31
61
 
32
62
  def render_attachment(attachment)
33
- options_hash = attachment_options(attachment)
63
+ options_hash = attachment_options(attachment.partial)
34
64
  context.render(options_hash)
35
65
  end
36
66
 
37
- def attachment_options(attachment)
38
- hash = { partial: attachment }
67
+ def attachment_options(partial_name)
68
+ hash = { partial: partial_name }
39
69
  options.is_a?(Hash) ? options.merge(hash) : hash
40
70
  end
41
71
  end
@@ -0,0 +1,25 @@
1
+ module ActivePath
2
+ module Renderer
3
+ module PathHints
4
+ def start_path_hints(output_buffer)
5
+ output_buffer.prepend("<!-- start #{partial_name}#{with_local_variables.to_s} --!>".html_safe)
6
+ end
7
+
8
+ def end_path_hints(output_buffer)
9
+ output_buffer.concat("<!-- end #{partial_name} --!>".html_safe)
10
+ end
11
+
12
+ private
13
+
14
+ def with_local_variables
15
+ if options.is_a?(Hash)
16
+ variables = options[:locals].map do |k,v|
17
+ count = (" (#{v.count})" if v.is_a?(Array)).to_s
18
+ "#{k} => #{v.class}#{count}"
19
+ end
20
+ "\nwith local variables: #{JSON.pretty_generate(variables)}"
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,3 +1,3 @@
1
1
  module ActivePath
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_path
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Tulino
@@ -36,12 +36,14 @@ files:
36
36
  - active_path.gemspec
37
37
  - lib/active_path.rb
38
38
  - lib/active_path/configuration.rb
39
+ - lib/active_path/configuration/attachment.rb
39
40
  - lib/active_path/configuration/partial.rb
40
41
  - lib/active_path/configuration/partials.rb
41
42
  - lib/active_path/engine.rb
42
43
  - lib/active_path/helpers/rendering_helper.rb
43
- - lib/active_path/path_hints.rb
44
+ - lib/active_path/renderer/conditional.rb
44
45
  - lib/active_path/renderer/partial_renderer.rb
46
+ - lib/active_path/renderer/path_hints.rb
45
47
  - lib/active_path/version.rb
46
48
  homepage: http://rubygems.org/gems/active_path
47
49
  licenses: []
@@ -1,7 +0,0 @@
1
- module ActivePath
2
- module PathHints
3
-
4
- #TODO
5
-
6
- end
7
- end