opulent 1.6.5 → 1.6.6

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: 757e6f7f89de04fb7289c260d40433dea0285b77
4
- data.tar.gz: ebea7a80a01aa78fe4c677b1f7a8f91df824c2b6
3
+ metadata.gz: 2cc679a1295d1bf93f8b99c868fce7dedc384b22
4
+ data.tar.gz: e611419e1736b5e2b648c0d4bfef2214cddaf1c1
5
5
  SHA512:
6
- metadata.gz: 2995a418ea66cbf6246045085df69983dbe0402f48613c4426acae9b4f3f5c28da3f62b09bf37ea24ed8d5c3673e90b4d441387afe9a7df2785d4e17d6f03b23
7
- data.tar.gz: 5e6f0f2e9ad09e052ed93ecec48882b7595751b5002647fc86fb790323479dac92da435beee7daf5d9141835e91896a0308d3e7bf1e3ccd48483d6b6b555ebc8
6
+ metadata.gz: 6b019b7a8acc18c742719c1c1804b45a5f207a939d33f7d94616f5d9aafdd30bf5a2a9d3987746a91373432fb5edbf944b3e7775c8250d6647ffe05456463494
7
+ data.tar.gz: 8d4281c2386d63aecc1857bf71c94826814ee9b3e9ca882d372d4ba157517f446add48f19177c0f2169aecf4c640988ed62ccb05be65fd7e8734a2f539fc7547
@@ -40,24 +40,24 @@ module Opulent
40
40
  # method name
41
41
  key = "_opulent_definition_#{node[@value].to_s.tr '-', '_'}"
42
42
 
43
- # Set call variable
44
- call_node = node[@options][:call]
45
43
 
46
44
  # If we have attributes set for our defined node, we will need to create
47
45
  # an extension parameter which will be o
48
- if call_node[@options][:attributes].empty?
46
+ if node[@options][:attributes].empty?
49
47
  # Call method without any extension
50
48
  method_call = "#{key}"
51
49
 
52
50
  # Call arguments set to true, in correct order
53
51
  arguments = []
54
- @definitions[call_node[@value]][@options][:parameters].keys.each do |k|
55
- arguments << 'true'
52
+ @definitions[node[@value]][@options][:parameters].keys.each do |k|
53
+ arguments << @definitions[
54
+ node[@value]
55
+ ][@options][:parameters][k][@value]
56
56
  end
57
57
  arguments << '{}'
58
58
 
59
59
  method_call += '(' + arguments.join(', ') + ')'
60
- method_call += ' do' unless call_node[@children].empty?
60
+ method_call += ' do' unless node[@children].empty?
61
61
 
62
62
  buffer_eval method_call
63
63
  else
@@ -66,27 +66,27 @@ module Opulent
66
66
  # Extract node definition arguments in the correct order. If the given
67
67
  # key does not exist, set the value to default or true
68
68
  @definitions[
69
- call_node[@value]
69
+ node[@value]
70
70
  ][@options][:parameters].keys.each do |k|
71
- if call_node[@options][:attributes].keys.include? k
72
- arguments << call_node[@options][:attributes].delete(k)[@value]
71
+ if node[@options][:attributes].key? k
72
+ arguments << node[@options][:attributes].delete(k)[@value]
73
73
  else
74
74
  arguments << @definitions[
75
- call_node[@value]
75
+ node[@value]
76
76
  ][@options][:parameters][k][@value]
77
77
  end
78
78
  end
79
79
 
80
80
  call_attributes = buffer_attributes_to_hash(
81
- call_node[@options][:attributes]
81
+ node[@options][:attributes]
82
82
  )
83
83
 
84
84
  # If the call node is extended as well, merge the call attributes hash
85
85
  # with the extension hash
86
- if call_node[@options][:extension]
86
+ if node[@options][:extension]
87
87
  # .merge!(var_name)
88
88
  call_attributes += '.merge!(' \
89
- "#{call_node[@options][:extension][@value]}" \
89
+ "#{node[@options][:extension][@value]}" \
90
90
  ')'
91
91
 
92
92
  # { |key, value1, value2|
@@ -106,19 +106,19 @@ module Opulent
106
106
  arguments << call_attributes
107
107
 
108
108
  call = "#{key}(#{arguments.join ', '})"
109
- call += ' do' unless call_node[@children].empty?
109
+ call += ' do' unless node[@children].empty?
110
110
 
111
111
  buffer_eval call
112
112
  end
113
113
 
114
114
  # Set call node children as block evaluation. Very useful for
115
115
  # performance and evaluating them in the parent context
116
- call_node[@children].each do |child|
116
+ node[@children].each do |child|
117
117
  root child, indent + @settings[:indent]
118
118
  end
119
119
 
120
120
  # End block
121
- buffer_eval 'end' unless call_node[@children].empty?
121
+ buffer_eval 'end' unless node[@children].empty?
122
122
  end
123
123
  end
124
124
  end
@@ -70,9 +70,56 @@ module Opulent
70
70
  # nodes and definitions
71
71
  root @root
72
72
 
73
+ # Check whether nodes inside definitions have a custom definition
74
+ @definitions.each do |name, node|
75
+ @current_def = name
76
+ apply_definitions node
77
+ end
78
+ @current_def = nil
79
+
80
+ # Check whether nodes have a custom definition
81
+ apply_definitions @root
82
+
83
+ # Return root element
73
84
  [@root, @definitions]
74
85
  end
75
86
 
87
+ # Set each node as a defined node if a definition exists with the given
88
+ # node name, unless we're inside a definition with the same name as the node
89
+ # because we want to avoid recursion.
90
+ #
91
+ # @param node [Node] Input Node to checked for existence of definitions
92
+ #
93
+ def apply_definitions(node)
94
+ # Apply definition check to all of the node's children
95
+ process_definitions = proc do |children|
96
+ children.each do |child|
97
+ # Check if we have a definition
98
+ is_definition = if child[@value] == @current_def
99
+ child[@options][:recursive]
100
+ else
101
+ @definitions.key?(child[@value])
102
+ end
103
+
104
+ # Set child as a defined node
105
+ child[@type] = :def if is_definition
106
+
107
+ # Recursively apply definitions to child nodes
108
+ apply_definitions child if child[@children]
109
+ end
110
+ end
111
+
112
+ # Apply definitions to each case of the control node
113
+ if %i(if unless case each while until).include? node[@type]
114
+ node[@children].each do |array|
115
+ process_definitions[array]
116
+ end
117
+ # Apply definition to all of the node's children
118
+ else
119
+ process_definitions[node[@children]]
120
+ end
121
+ end
122
+
76
123
  # Check and accept or reject a given token as long as we have tokens
77
124
  # remaining. Shift the code with the match length plus any extra character
78
125
  # count around the capture group
@@ -13,6 +13,7 @@ module Opulent
13
13
  return unless (name = lookahead(:node_lookahead) ||
14
14
  lookahead(:shorthand_lookahead))
15
15
 
16
+ # Skip node if it's a reserved keyword
16
17
  return nil if KEYWORDS.include? name[0].to_sym
17
18
 
18
19
  # Accept either explicit node_name or implicit :div node_name
@@ -27,6 +28,9 @@ module Opulent
27
28
  # Node creation options
28
29
  options = {}
29
30
 
31
+ # Get leading whitespace
32
+ options[:recursive] = accept(:recursive)
33
+
30
34
  # Get leading whitespace
31
35
  options[:leading_whitespace] = accept_stripped(:leading_whitespace)
32
36
 
@@ -78,64 +82,57 @@ module Opulent
78
82
  # Add the current node to the root
79
83
  root current_node, indent
80
84
 
81
- # Create a clone of the definition model. Cloning the options is also
82
- # necessary because it's a shallow copy
83
- if @definitions.keys.include?(node_name)
84
- @definition_stack << node_name
85
- parent[@children] << process_definition(node_name, current_node)
86
- @definition_stack.pop
87
- else
88
- parent[@children] << current_node
89
- end
85
+ # Add the parsed node to the parent
86
+ parent[@children] << current_node
90
87
  end
91
88
 
89
+ # Deprecated @version 1.6.6
90
+ #
92
91
  # When entering a definition model, we replace all the node types with their
93
92
  # know definitions at definition call time.
94
93
  #
95
94
  # @param node_name [Symbol] Node identifier
96
95
  # @param call_context [Node] Initial node call with its attributes
97
96
  #
98
- def process_definition(node_name, call_context)
99
- model = [
100
- :def,
101
- node_name,
102
- {},
103
- [],
104
- call_context[@indent]
105
- ]
106
- model[@options] = {}.merge model[@options]
107
- model[@options][:call] = call_context
108
-
109
- # Deprecated @version 1.6.4
110
- #
111
- # Recursively map each child nodes to their definitions
112
- # for the initial call node children and for the model
113
- # children
114
- # process_definition_child model[@options][:call]
115
- # process_definition_child model
116
-
117
- model
118
- end
119
-
97
+ # def process_definition(node_name, call_context)
98
+ # model = [
99
+ # :def,
100
+ # node_name,
101
+ # {},
102
+ # [],
103
+ # call_context[@indent]
104
+ # ]
105
+ #
106
+ # model[@options] = {}.merge model[@options]
107
+ # model[@options][:call] = call_context
108
+ #
109
+ # Recursively map each child nodes to their definitions
110
+ # for the initial call node children and for the model
111
+ # children
112
+ # process_definition_child model[@options][:call]
113
+ # process_definition_child model
114
+ # model
115
+ # end
116
+ #
120
117
  # Process definition children for the current node.
121
118
  #
122
119
  # @param node [Node] Callee node
123
120
  #
124
- def process_definition_child(node)
125
- node[@children].map! do |child|
126
- if child[@type] == :node
127
- if !@definition_stack.include?(child[@value]) &&
128
- @definitions.key?(child[@value])
129
- process_definition child[@value], child
130
- else
131
- process_definition_child child if child[@children]
132
- child
133
- end
134
- else
135
- child
136
- end
137
- end
138
- end
121
+ # def process_definition_child(node)
122
+ # node[@children].map! do |child|
123
+ # if child[@type] == :node
124
+ # if !@definition_stack.include?(child[@value]) &&
125
+ # @definitions.key?(child[@value])
126
+ # process_definition child[@value], child
127
+ # else
128
+ # process_definition_child child if child[@children]
129
+ # child
130
+ # end
131
+ # else
132
+ # child
133
+ # end
134
+ # end
135
+ # end
139
136
 
140
137
  # Helper method to create an array of values when an attribute is set
141
138
  # multiple times. This happens unless the key is id, which is unique
@@ -127,6 +127,9 @@ module Opulent
127
127
  # Whitespace
128
128
  whitespace: /\A\s+/,
129
129
 
130
+ # Recursive Node Definitions
131
+ recursive: /\A\*/,
132
+
130
133
  # Evaluation
131
134
  eval: /\A\-/,
132
135
 
@@ -1,4 +1,4 @@
1
1
  # @Opulent
2
2
  module Opulent
3
- VERSION = '1.6.5'
3
+ VERSION = '1.6.6'
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opulent
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.5
4
+ version: 1.6.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Grozav
@@ -163,7 +163,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
163
163
  version: '0'
164
164
  requirements: []
165
165
  rubyforge_project:
166
- rubygems_version: 2.4.6
166
+ rubygems_version: 2.4.8
167
167
  signing_key:
168
168
  specification_version: 4
169
169
  summary: Intelligent Templating Engine for Creative Web Developers.