handlebarsjs 0.5.0 → 0.5.3
Sign up to get free protection for your applications and to get access to all the features.
- 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 +22 -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 +34 -0
- data/lib/handlebarsjs/base_helper.rb +21 -8
- 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_by_number.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 +58 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '09543cdd93c4a2e1b3e5fd6133bebecdbfb4613cf7a9f7690b9d00f47065f6a5'
|
4
|
+
data.tar.gz: 90cf3559a41f21fc2cee943e8de76846fe13044a9bcca9917cbf5286db1a53ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c1ffbb3d4651661bed9271df5cdb879848e1569ab974086ccf802a7b81743128570b976b235d6c597e8b343dfa748e6c22abfcfc54caf87cbd9cf1ca5f3c574
|
7
|
+
data.tar.gz: 41199fb8108776482009c948b9be8dcb834df02affa351cf338b936f9c59b99545c8b326fd87edacc4bc7effa7255eeb42831b258f2c66ab0c81f769f9cfd977
|
@@ -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,25 @@
|
|
1
|
+
## [0.5.2](https://github.com/klueless-io/handlebarsjs/compare/v0.5.1...v0.5.2) (2022-07-12)
|
2
|
+
|
3
|
+
|
4
|
+
### Bug Fixes
|
5
|
+
|
6
|
+
* add helper - case: * ([08dcad2](https://github.com/klueless-io/handlebarsjs/commit/08dcad20601bf578a17ae703d273a7081486df8e))
|
7
|
+
|
8
|
+
## [0.5.1](https://github.com/klueless-io/handlebarsjs/compare/v0.5.0...v0.5.1) (2022-07-06)
|
9
|
+
|
10
|
+
|
11
|
+
### Bug Fixes
|
12
|
+
|
13
|
+
* add tests for base_helper ([2734326](https://github.com/klueless-io/handlebarsjs/commit/27343261d0189440a3f10f98a0a29b12f05c56e7))
|
14
|
+
* add tests for base_helper ([0c8355e](https://github.com/klueless-io/handlebarsjs/commit/0c8355e056b6d447aaffa87718240a8542958e5d))
|
15
|
+
|
16
|
+
# [0.5.0](https://github.com/klueless-io/handlebarsjs/compare/v0.4.0...v0.5.0) (2022-07-06)
|
17
|
+
|
18
|
+
|
19
|
+
### Features
|
20
|
+
|
21
|
+
* add base_helper ([d2900ae](https://github.com/klueless-io/handlebarsjs/commit/d2900ae6c2ce27a7a8ac4c92d219f0e9150354f5))
|
22
|
+
|
1
23
|
# [0.4.0](https://github.com/klueless-io/handlebarsjs/compare/v0.3.0...v0.4.0) (2022-07-06)
|
2
24
|
|
3
25
|
|
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>
|