handlebarsjs 0.5.1 → 0.5.4
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 +4 -4
- data/.builders/.templates/helper.rb +31 -0
- data/.builders/.templates/helper_spec.rb +38 -0
- data/.builders/_.rb +3 -1
- data/.builders/boot.rb +2 -2
- data/.builders/director/handlebars_helper_builder.rb +67 -0
- data/.builders/director/handlebars_helper_child.rb +67 -0
- data/.builders/director/handlebars_helper_director.rb +24 -0
- data/.builders/generators/helpers/comparison_helpers.rb +44 -0
- data/CHANGELOG.md +23 -0
- data/Gemfile +8 -0
- data/docs/domain_model.drawio +32 -32
- data/docs/domain_model.json +57 -57
- data/docs/project-plan/project.drawio +16 -16
- data/lib/_.rb +33 -0
- data/lib/handlebarsjs/base_helper.rb +18 -5
- data/lib/handlebarsjs/handlebars_snapshot.rb +4 -6
- data/lib/handlebarsjs/helpers/array/join.rb +17 -0
- data/lib/handlebarsjs/helpers/array/join_post.rb +17 -0
- data/lib/handlebarsjs/helpers/array/join_pre.rb +17 -0
- data/lib/handlebarsjs/helpers/case/back_slash.rb +17 -0
- data/lib/handlebarsjs/helpers/case/camel.rb +17 -0
- data/lib/handlebarsjs/helpers/case/constant.rb +17 -0
- data/lib/handlebarsjs/helpers/case/dash.rb +17 -0
- data/lib/handlebarsjs/helpers/case/dot.rb +17 -0
- data/lib/handlebarsjs/helpers/case/double_colon.rb +17 -0
- data/lib/handlebarsjs/helpers/case/human.rb +17 -0
- data/lib/handlebarsjs/helpers/case/lamel.rb +17 -0
- data/lib/handlebarsjs/helpers/case/lower.rb +17 -0
- data/lib/handlebarsjs/helpers/case/slash.rb +17 -0
- data/lib/handlebarsjs/helpers/case/snake.rb +17 -0
- data/lib/handlebarsjs/helpers/case/title.rb +17 -0
- data/lib/handlebarsjs/helpers/case/upper.rb +17 -0
- data/lib/handlebarsjs/helpers/comparison/and.rb +17 -0
- data/lib/handlebarsjs/helpers/comparison/default.rb +17 -0
- data/lib/handlebarsjs/helpers/comparison/eq.rb +17 -0
- data/lib/handlebarsjs/helpers/comparison/gt.rb +17 -0
- data/lib/handlebarsjs/helpers/comparison/gte.rb +17 -0
- data/lib/handlebarsjs/helpers/comparison/lt.rb +17 -0
- data/lib/handlebarsjs/helpers/comparison/lte.rb +17 -0
- data/lib/handlebarsjs/helpers/comparison/ne.rb +17 -0
- data/lib/handlebarsjs/helpers/comparison/or.rb +17 -0
- data/lib/handlebarsjs/helpers/inflection/ordinal.rb +17 -0
- data/lib/handlebarsjs/helpers/inflection/ordinalize.rb +17 -0
- data/lib/handlebarsjs/helpers/inflection/pluralize.rb +17 -0
- data/lib/handlebarsjs/helpers/inflection/pluralize_number.rb +17 -0
- data/lib/handlebarsjs/helpers/inflection/pluralize_number_word.rb +17 -0
- data/lib/handlebarsjs/helpers/inflection/singularize.rb +17 -0
- data/lib/handlebarsjs/version.rb +1 -1
- data/lib/handlebarsjs.rb +2 -0
- data/package-lock.json +2 -2
- data/package.json +1 -1
- metadata +57 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1ae80a08fb0257c2b9f0ad6f48cd7c907bc15388b8a68d02ddd1b05ac69bff96
|
4
|
+
data.tar.gz: 84a1eb1d565250f52346f7454e3122759e795d7801a0c1d4cd106af71b7dae8b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f308dce020f6a57b9d6c2b21997abb5add4b9ad040b8217ab033b7f1ac990a94ca2c74e2ad1ebde394a16ffce031dc40341333d50705d83b91fc62ac570cdf47
|
7
|
+
data.tar.gz: 2a6253654fcbd9c3ca30a2b4c071667bfe16814d72fa1a465edc2845fc658b88d23482b3521e9520d0585301d6a757ee4c69a8088deb49454cb869e12ef3c8e9
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Handlebarsjs
|
4
|
+
module Helpers
|
5
|
+
# {{helper.category_description}}
|
6
|
+
module {{camel helper.category}}
|
7
|
+
# {{helper.description}}
|
8
|
+
class And < Handlebarsjs::BaseHelper
|
9
|
+
# Parse
|
10
|
+
#
|
11
|
+
{{#each helper.examples}}
|
12
|
+
# @example
|
13
|
+
#
|
14
|
+
{{.}}
|
15
|
+
{{/each}}
|
16
|
+
#
|
17
|
+
{{#each helper.parameters}}
|
18
|
+
# @param {{./name}} {{./description}}
|
19
|
+
{{/each}}
|
20
|
+
# @return [String] {{helper.result}}
|
21
|
+
def parse({{#each helper.parameters}}{{#if @first }}{{^}}, {{/if}}{{#if splat}}*{{/if}}{{./name}}{{/each}})
|
22
|
+
values.all? { |value| value }
|
23
|
+
end
|
24
|
+
|
25
|
+
def to_proc
|
26
|
+
->(*values, _opts) { wrapper(parse(values[0..-2])) }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# xxxxxxx spec
|
3
|
+
module Handlebarsjs
|
4
|
+
module Helpers
|
5
|
+
# Comparison helpers, eg. or, and, equal, not equal, less than, greater than etc.
|
6
|
+
module Comparison
|
7
|
+
# And: Block helper that renders a block if **all of** the given values are truthy. If an inverse block is specified it will be rendered when falsy.
|
8
|
+
class And < Handlebarsjs::BaseHelper
|
9
|
+
# Parse will And: Block helper that renders a block if **all of** the given values are truthy. If an inverse block is specified it will be rendered when falsy.
|
10
|
+
#
|
11
|
+
# @example
|
12
|
+
#
|
13
|
+
# {{#if (and p1 p2 p3 p4 p5)}}
|
14
|
+
# found
|
15
|
+
# {{/if}}
|
16
|
+
#
|
17
|
+
# @example
|
18
|
+
#
|
19
|
+
# @example
|
20
|
+
# {{#if (and name age)}}
|
21
|
+
# {{name}}-{{age}}
|
22
|
+
# {{else}}
|
23
|
+
# no name or age
|
24
|
+
# {{/if}}
|
25
|
+
#
|
26
|
+
# @param values list of values (via *splat) to be checked via AND condition
|
27
|
+
# @return [String] return block when every value is truthy
|
28
|
+
def parse(values)
|
29
|
+
values.all? { |value| value }
|
30
|
+
end
|
31
|
+
|
32
|
+
def to_proc
|
33
|
+
->(*values, _opts) { wrapper(parse(values[0..-2])) }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/.builders/_.rb
CHANGED
data/.builders/boot.rb
CHANGED
@@ -49,8 +49,8 @@ KConfig.configure(CONFIG_KEY) do |config|
|
|
49
49
|
config.template_folders.add(:template , File.expand_path('.templates', Dir.pwd))
|
50
50
|
|
51
51
|
config.target_folders.add(:app , base_folder)
|
52
|
-
config.target_folders.add(:lib , :app, 'lib', '
|
53
|
-
config.target_folders.add(:spec , :app, 'spec', '
|
52
|
+
config.target_folders.add(:lib , :app, 'lib', 'handlebarsjs')
|
53
|
+
config.target_folders.add(:spec , :app, 'spec', 'handlebarsjs')
|
54
54
|
config.target_folders.add(:docs , :app, 'docs')
|
55
55
|
config.target_folders.add(:builder , builder_folder)
|
56
56
|
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
puts 'xxxxxxx'
|
4
|
+
class HandlebarsHelperBuilder < KDirector::Builders::ActionsBuilder
|
5
|
+
attr_reader :current_helper
|
6
|
+
# attr_accessor :actions
|
7
|
+
# attr_accessor :last_action
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
super
|
11
|
+
|
12
|
+
dom[:helpers] = []
|
13
|
+
# @actions = []
|
14
|
+
# @last_action = {}
|
15
|
+
end
|
16
|
+
|
17
|
+
def helpers
|
18
|
+
dom[:helpers]
|
19
|
+
end
|
20
|
+
|
21
|
+
def add_helper
|
22
|
+
@current_helper = new_helper
|
23
|
+
dom[:helpers] << current_helper
|
24
|
+
end
|
25
|
+
|
26
|
+
def helper_setting(name, value)
|
27
|
+
@current_helper[name] = value
|
28
|
+
end
|
29
|
+
|
30
|
+
def add_helper_parameter(name, description, splat: false)
|
31
|
+
parameter = {
|
32
|
+
name: name,
|
33
|
+
description: description,
|
34
|
+
splat: splat
|
35
|
+
}
|
36
|
+
|
37
|
+
@current_helper[:parameters] << parameter
|
38
|
+
end
|
39
|
+
|
40
|
+
def add_helper_example(value)
|
41
|
+
lines = value.split("\n")
|
42
|
+
value = lines.map { |line| " # #{line.strip}" }.join("\n")
|
43
|
+
|
44
|
+
@current_helper[:examples] << value
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def new_helper
|
51
|
+
{
|
52
|
+
name: nil,
|
53
|
+
description: nil,
|
54
|
+
result: nil,
|
55
|
+
category: nil,
|
56
|
+
category_description: nil,
|
57
|
+
base_class_require: nil,
|
58
|
+
base_class: nil,
|
59
|
+
example_input_value: nil,
|
60
|
+
example_output_value: nil,
|
61
|
+
test_input_value: nil,
|
62
|
+
test_output_value: nil,
|
63
|
+
parameters: [],
|
64
|
+
examples: []
|
65
|
+
}
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class HandlebarsHelperChild < KDirector::Directors::ChildDirector
|
4
|
+
def initialize(parent, **opts)
|
5
|
+
super(parent, **opts)
|
6
|
+
|
7
|
+
builder.add_helper
|
8
|
+
|
9
|
+
# defaults = {
|
10
|
+
# repo_name: opts[:repo_name], # || parent.builder.dom&[:github]&[:repo_name]
|
11
|
+
# username: opts[:username] || default_github_username, # || parent.builder.dom&[:github]&[:username]
|
12
|
+
# organization: opts[:organization] # || parent.builder.dom&[:github]&[:organization]
|
13
|
+
# }
|
14
|
+
end
|
15
|
+
|
16
|
+
def name(value)
|
17
|
+
builder.helper_setting(:name, value)
|
18
|
+
end
|
19
|
+
|
20
|
+
def description(value)
|
21
|
+
builder.helper_setting(:description, value)
|
22
|
+
end
|
23
|
+
|
24
|
+
def result(value)
|
25
|
+
builder.helper_setting(:result, value)
|
26
|
+
end
|
27
|
+
|
28
|
+
def category(value)
|
29
|
+
builder.helper_setting(:category, value)
|
30
|
+
end
|
31
|
+
|
32
|
+
def category_description(value)
|
33
|
+
builder.helper_setting(:category_description, value)
|
34
|
+
end
|
35
|
+
|
36
|
+
# def base_class_require(value)
|
37
|
+
# builder.helper_setting(:base_class_require, value)
|
38
|
+
# end
|
39
|
+
|
40
|
+
# def base_class(value)
|
41
|
+
# builder.helper_setting(:base_class, value)
|
42
|
+
# end
|
43
|
+
|
44
|
+
# def example_input_value(value)
|
45
|
+
# builder.helper_setting(:example_input_value, value)
|
46
|
+
# end
|
47
|
+
|
48
|
+
# def example_output_value(value)
|
49
|
+
# builder.helper_setting(:example_output_value, value)
|
50
|
+
# end
|
51
|
+
|
52
|
+
# def test_input_value(value)
|
53
|
+
# builder.helper_setting(:test_input_value, value)
|
54
|
+
# end
|
55
|
+
|
56
|
+
# def test_output_value(value)
|
57
|
+
# builder.helper_setting(:test_output_value, value)
|
58
|
+
# end
|
59
|
+
|
60
|
+
def parameter(name, description, splat: false)
|
61
|
+
builder.add_helper_parameter(name, description, splat: splat)
|
62
|
+
end
|
63
|
+
|
64
|
+
def example(value)
|
65
|
+
builder.add_helper_example(value)
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class HandlebarsHelperDirector < KDirector::Directors::BaseDirector
|
4
|
+
default_builder_type(HandlebarsHelperBuilder)
|
5
|
+
|
6
|
+
def helper(**opts, &block)
|
7
|
+
helper = HandlebarsHelperChild.new(self, **opts)
|
8
|
+
helper.instance_eval(&block) if block_given?
|
9
|
+
|
10
|
+
self
|
11
|
+
end
|
12
|
+
|
13
|
+
def build_helpers
|
14
|
+
builder.helpers.each do |helper|
|
15
|
+
cd(:lib)
|
16
|
+
add("helpers/#{helper[:category]}/#{helper[:name]}.rb", template_file: 'helper.rb', helper: helper)
|
17
|
+
|
18
|
+
cd(:spec)
|
19
|
+
add("helpers/#{helper[:category]}/#{helper[:name]}_spec.rb", template_file: 'helper_spec.rb', helper: helper)
|
20
|
+
end
|
21
|
+
|
22
|
+
self
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# base_class_require 'handlebars/helpers/comparison/base_helper'
|
4
|
+
# base_class 'Handlebars::Helpers::Comparison::BaseHelper'
|
5
|
+
# example_input_value 'var1 and var2'
|
6
|
+
# example_output_value 'truthy block'
|
7
|
+
# test_input_value 'var1 and var2'
|
8
|
+
# test_output_value 'truthy block'
|
9
|
+
|
10
|
+
KManager.action :comparison_helpers do
|
11
|
+
action do
|
12
|
+
common = OpenStruct.new(
|
13
|
+
category_name: 'comparison',
|
14
|
+
category_description: 'Comparison helpers, eg. or, and, equal, not equal, less than, greater than etc.'
|
15
|
+
)
|
16
|
+
|
17
|
+
HandlebarsHelperDirector
|
18
|
+
.init(k_builder, on_exist: :write, on_action: :execute)
|
19
|
+
.helper do
|
20
|
+
category common.category_name
|
21
|
+
category_description common.category_description
|
22
|
+
name 'and'
|
23
|
+
description 'And: Block helper that renders a block if **all of** the given values are truthy. If an inverse block is specified it will be rendered when falsy.'
|
24
|
+
result "return block when every value is truthy"
|
25
|
+
parameter('values', 'list of values (via *splat) to be checked via AND condition', splat: true)
|
26
|
+
|
27
|
+
example <<-TEXT
|
28
|
+
{{#if (and p1 p2 p3 p4 p5)}}
|
29
|
+
found
|
30
|
+
{{/if}}
|
31
|
+
TEXT
|
32
|
+
|
33
|
+
example <<-TEXT
|
34
|
+
{{#if (and name age)}}
|
35
|
+
{{name}}-{{age}}
|
36
|
+
{{else}}
|
37
|
+
no name or age
|
38
|
+
{{/if}}
|
39
|
+
TEXT
|
40
|
+
end
|
41
|
+
.build_helpers
|
42
|
+
.debug
|
43
|
+
end
|
44
|
+
end
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,26 @@
|
|
1
|
+
## [0.5.3](https://github.com/klueless-io/handlebarsjs/compare/v0.5.2...v0.5.3) (2022-07-12)
|
2
|
+
|
3
|
+
|
4
|
+
### Bug Fixes
|
5
|
+
|
6
|
+
* add inflection: pluralize_number and pluralize_number_word ([2f5d6e1](https://github.com/klueless-io/handlebarsjs/commit/2f5d6e11b8cc6cd052496ec3f648423fbacececf))
|
7
|
+
* add inflection: pluralize_number and pluralize_number_word ([6590859](https://github.com/klueless-io/handlebarsjs/commit/6590859ddfb3d3402677939d887e70e611d18a97))
|
8
|
+
|
9
|
+
## [0.5.2](https://github.com/klueless-io/handlebarsjs/compare/v0.5.1...v0.5.2) (2022-07-12)
|
10
|
+
|
11
|
+
|
12
|
+
### Bug Fixes
|
13
|
+
|
14
|
+
* add helper - case: * ([08dcad2](https://github.com/klueless-io/handlebarsjs/commit/08dcad20601bf578a17ae703d273a7081486df8e))
|
15
|
+
|
16
|
+
## [0.5.1](https://github.com/klueless-io/handlebarsjs/compare/v0.5.0...v0.5.1) (2022-07-06)
|
17
|
+
|
18
|
+
|
19
|
+
### Bug Fixes
|
20
|
+
|
21
|
+
* add tests for base_helper ([2734326](https://github.com/klueless-io/handlebarsjs/commit/27343261d0189440a3f10f98a0a29b12f05c56e7))
|
22
|
+
* add tests for base_helper ([0c8355e](https://github.com/klueless-io/handlebarsjs/commit/0c8355e056b6d447aaffa87718240a8542958e5d))
|
23
|
+
|
1
24
|
# [0.5.0](https://github.com/klueless-io/handlebarsjs/compare/v0.4.0...v0.5.0) (2022-07-06)
|
2
25
|
|
3
26
|
|
data/Gemfile
CHANGED
data/docs/domain_model.drawio
CHANGED
@@ -1,91 +1,91 @@
|
|
1
|
-
<mxfile host="
|
2
|
-
<diagram id="
|
1
|
+
<mxfile host="jWj">
|
2
|
+
<diagram id="rZL" name="Domain Modal">
|
3
3
|
<mxGraphModel dx="0" dy="0" background="#fafafa" grid="0" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
|
4
4
|
<root>
|
5
|
-
<mxCell id="
|
6
|
-
<mxCell id="
|
7
|
-
<mxCell id="
|
5
|
+
<mxCell id="page_root_rZL" parent="rZL"/>
|
6
|
+
<mxCell id="node_root_rZL" parent="page_root_rZL"/>
|
7
|
+
<mxCell id="rZL-2" value="<p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>Flow</b></p><hr size="1"/><p style="margin:0px;margin-left:4px;margin-bottom:4px">attach handlebars-4.7.7.js</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">attach handlebars-custom.js</p>" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#333333;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica" vertex="1" parent="node_root_rZL">
|
8
8
|
<mxGeometry x="10" y="10" width="160" height="160" as="geometry"/>
|
9
9
|
</mxCell>
|
10
|
-
<mxCell id="
|
10
|
+
<mxCell id="rZL-3" value="<p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>Configuration</b></p><hr size="1"/><p style="margin:0px;margin-left:4px;margin-bottom:4px">javascript</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">javascript_file</p>" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica" vertex="1" parent="node_root_rZL">
|
11
11
|
<mxGeometry x="190" y="10" width="160" height="160" as="geometry"/>
|
12
12
|
</mxCell>
|
13
|
-
<mxCell id="
|
13
|
+
<mxCell id="rZL-4" value="<p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>Manager</b></p><hr size="1"/><p style="margin:0px;margin-left:4px;margin-bottom:4px">snapshot: MR::Snapshot</p><hr size="1"/><p style="margin:0px;margin-left:4px;margin-bottom:4px">load_javascript()</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">register_helper()</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">register_partial()</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">compile_template()</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">execute_template()</p><p style="margin:0px;margin-left:4px;margin-bottom:4px">execute_javascript()</p>" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica" vertex="1" parent="node_root_rZL">
|
14
14
|
<mxGeometry x="370" y="10" width="160" height="160" as="geometry"/>
|
15
15
|
</mxCell>
|
16
|
-
<mxCell id="
|
16
|
+
<mxCell id="rZL-5" value="<p style="margin:0px;margin-left:4px;margin-bottom:4px;text-align:center"><b>Context</b></p><hr size="1"/>" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333;align=left;overflow=fill;fontSize=12;fontFamily=Helvetica" vertex="1" parent="node_root_rZL">
|
17
17
|
<mxGeometry x="550" y="10" width="160" height="160" as="geometry"/>
|
18
18
|
</mxCell>
|
19
|
-
<mxCell id="
|
19
|
+
<mxCell id="rZL-6" value="" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#fafafa;strokeColor=#fafafa;fontColor=#fafafa" vertex="1" parent="node_root_rZL">
|
20
20
|
<mxGeometry x="805" y="85" width="10" height="10" as="geometry"/>
|
21
21
|
</mxCell>
|
22
|
-
<mxCell id="
|
22
|
+
<mxCell id="rZL-7" value="" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#fafafa;strokeColor=#fafafa;fontColor=#fafafa" vertex="1" parent="node_root_rZL">
|
23
23
|
<mxGeometry x="985" y="85" width="10" height="10" as="geometry"/>
|
24
24
|
</mxCell>
|
25
|
-
<mxCell id="a1" value="KManager -> KBuilder" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333" vertex="1" parent="
|
25
|
+
<mxCell id="a1" value="KManager -> KBuilder" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333" vertex="1" parent="node_root_rZL">
|
26
26
|
<mxGeometry x="10" y="190" width="80" height="80" as="geometry"/>
|
27
27
|
</mxCell>
|
28
|
-
<mxCell id="a2" value="Handlebars-Helpers (ruby)" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333" vertex="1" parent="
|
28
|
+
<mxCell id="a2" value="Handlebars-Helpers (ruby)" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333" vertex="1" parent="node_root_rZL">
|
29
29
|
<mxGeometry x="110" y="190" width="80" height="80" as="geometry"/>
|
30
30
|
</mxCell>
|
31
|
-
<mxCell id="a3" value="HandlebarsJS (ruby)" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333" vertex="1" parent="
|
31
|
+
<mxCell id="a3" value="HandlebarsJS (ruby)" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333" vertex="1" parent="node_root_rZL">
|
32
32
|
<mxGeometry x="210" y="190" width="80" height="80" as="geometry"/>
|
33
33
|
</mxCell>
|
34
|
-
<mxCell id="a4" value="Mini Racer" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333" vertex="1" parent="
|
34
|
+
<mxCell id="a4" value="Mini Racer" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#d5e8d4;strokeColor=#82b366;fontColor=#333333" vertex="1" parent="node_root_rZL">
|
35
35
|
<mxGeometry x="310" y="190" width="80" height="80" as="geometry"/>
|
36
36
|
</mxCell>
|
37
|
-
<mxCell id="a5" value="Handlebars (ruby)" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="
|
37
|
+
<mxCell id="a5" value="Handlebars (ruby)" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_rZL">
|
38
38
|
<mxGeometry x="410" y="190" width="80" height="80" as="geometry"/>
|
39
39
|
</mxCell>
|
40
|
-
<mxCell id="a6" value="The Ruby Racer" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="
|
40
|
+
<mxCell id="a6" value="The Ruby Racer" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f8cecc;strokeColor=#b85450;fontColor=#333333" vertex="1" parent="node_root_rZL">
|
41
41
|
<mxGeometry x="510" y="190" width="80" height="80" as="geometry"/>
|
42
42
|
</mxCell>
|
43
|
-
<mxCell id="a7" value="Node V8 engine" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#1ba1e2;strokeColor=#006EAF;fontColor=#ffffff" vertex="1" parent="
|
43
|
+
<mxCell id="a7" value="Node V8 engine" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#1ba1e2;strokeColor=#006EAF;fontColor=#ffffff" vertex="1" parent="node_root_rZL">
|
44
44
|
<mxGeometry x="10" y="290" width="80" height="80" as="geometry"/>
|
45
45
|
</mxCell>
|
46
|
-
<mxCell id="a8" value="Handlebars.js (javascript)" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333" vertex="1" parent="
|
46
|
+
<mxCell id="a8" value="Handlebars.js (javascript)" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333" vertex="1" parent="node_root_rZL">
|
47
47
|
<mxGeometry x="110" y="290" width="80" height="80" as="geometry"/>
|
48
48
|
</mxCell>
|
49
|
-
<mxCell id="
|
49
|
+
<mxCell id="rZL-17" value="" style="edgeStyle=orthogonalEdgeStyle;curved=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=none;startFill=1;endArrow=open;endFill=1;whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00" parent="node_root_rZL" source="a1" target="a2" edge="1">
|
50
50
|
<mxGeometry relative="1" as="geometry"/>
|
51
51
|
</mxCell>
|
52
|
-
<mxCell id="
|
52
|
+
<mxCell id="rZL-18" value="" style="edgeStyle=orthogonalEdgeStyle;curved=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=none;startFill=1;endArrow=open;endFill=1;whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00" parent="node_root_rZL" source="a2" target="a3" edge="1">
|
53
53
|
<mxGeometry relative="1" as="geometry"/>
|
54
54
|
</mxCell>
|
55
|
-
<mxCell id="
|
55
|
+
<mxCell id="rZL-19" value="" style="edgeStyle=orthogonalEdgeStyle;curved=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=none;startFill=1;endArrow=open;endFill=1;whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00" parent="node_root_rZL" source="a3" target="a4" edge="1">
|
56
56
|
<mxGeometry relative="1" as="geometry"/>
|
57
57
|
</mxCell>
|
58
|
-
<mxCell id="
|
58
|
+
<mxCell id="rZL-20" value="" style="edgeStyle=orthogonalEdgeStyle;curved=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=none;startFill=1;endArrow=open;endFill=1;whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00" parent="node_root_rZL" source="a2" target="a5" edge="1">
|
59
59
|
<mxGeometry relative="1" as="geometry"/>
|
60
60
|
</mxCell>
|
61
|
-
<mxCell id="
|
61
|
+
<mxCell id="rZL-21" value="" style="edgeStyle=orthogonalEdgeStyle;curved=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=none;startFill=1;endArrow=open;endFill=1;whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00" parent="node_root_rZL" source="a5" target="a6" edge="1">
|
62
62
|
<mxGeometry relative="1" as="geometry"/>
|
63
63
|
</mxCell>
|
64
|
-
<mxCell id="
|
64
|
+
<mxCell id="rZL-22" value="" style="edgeStyle=orthogonalEdgeStyle;curved=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=none;startFill=1;endArrow=open;endFill=1;whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00" parent="node_root_rZL" source="a4" target="a7" edge="1">
|
65
65
|
<mxGeometry relative="1" as="geometry"/>
|
66
66
|
</mxCell>
|
67
|
-
<mxCell id="
|
67
|
+
<mxCell id="rZL-23" value="" style="edgeStyle=orthogonalEdgeStyle;curved=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=none;startFill=1;endArrow=open;endFill=1;whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00" parent="node_root_rZL" source="a6" target="a7" edge="1">
|
68
68
|
<mxGeometry relative="1" as="geometry"/>
|
69
69
|
</mxCell>
|
70
|
-
<mxCell id="
|
70
|
+
<mxCell id="rZL-24" value="" style="edgeStyle=orthogonalEdgeStyle;curved=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=none;startFill=1;endArrow=open;endFill=1;whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00" parent="node_root_rZL" source="a7" target="a8" edge="1">
|
71
71
|
<mxGeometry relative="1" as="geometry"/>
|
72
72
|
</mxCell>
|
73
|
-
<mxCell id="
|
73
|
+
<mxCell id="rZL-25" value="" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#fafafa;strokeColor=#fafafa;fontColor=#fafafa" vertex="1" parent="node_root_rZL">
|
74
74
|
<mxGeometry x="245" y="325" width="10" height="10" as="geometry"/>
|
75
75
|
</mxCell>
|
76
|
-
<mxCell id="
|
76
|
+
<mxCell id="rZL-26" value="" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#fafafa;strokeColor=#fafafa;fontColor=#fafafa" vertex="1" parent="node_root_rZL">
|
77
77
|
<mxGeometry x="345" y="325" width="10" height="10" as="geometry"/>
|
78
78
|
</mxCell>
|
79
|
-
<mxCell id="
|
79
|
+
<mxCell id="rZL-27" value="" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#fafafa;strokeColor=#fafafa;fontColor=#fafafa" vertex="1" parent="node_root_rZL">
|
80
80
|
<mxGeometry x="445" y="325" width="10" height="10" as="geometry"/>
|
81
81
|
</mxCell>
|
82
|
-
<mxCell id="
|
82
|
+
<mxCell id="rZL-28" value="" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#fafafa;strokeColor=#fafafa;fontColor=#fafafa" vertex="1" parent="node_root_rZL">
|
83
83
|
<mxGeometry x="545" y="325" width="10" height="10" as="geometry"/>
|
84
84
|
</mxCell>
|
85
|
-
<mxCell id="
|
85
|
+
<mxCell id="rZL-30" value="Domain Model" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;fontSize=20;verticalAlign=top" vertex="1" parent="node_root_rZL">
|
86
86
|
<mxGeometry x="25" y="405" width="50" height="50" as="geometry"/>
|
87
87
|
</mxCell>
|
88
|
-
<mxCell id="
|
88
|
+
<mxCell id="rZL-31" value="GEM Architecture Flow" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;fontSize=20;verticalAlign=top" vertex="1" parent="node_root_rZL">
|
89
89
|
<mxGeometry x="25" y="505" width="50" height="50" as="geometry"/>
|
90
90
|
</mxCell>
|
91
91
|
</root>
|