handlebarsjs 0.4.0 → 0.5.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.builders/.templates/helper.rb +31 -0
  3. data/.builders/.templates/helper_spec.rb +38 -0
  4. data/.builders/_.rb +3 -1
  5. data/.builders/boot.rb +2 -2
  6. data/.builders/director/handlebars_helper_builder.rb +67 -0
  7. data/.builders/director/handlebars_helper_child.rb +67 -0
  8. data/.builders/director/handlebars_helper_director.rb +24 -0
  9. data/.builders/generators/helpers/comparison_helpers.rb +44 -0
  10. data/CHANGELOG.md +22 -0
  11. data/Gemfile +8 -0
  12. data/docs/domain_model.drawio +32 -32
  13. data/docs/domain_model.json +57 -57
  14. data/docs/project-plan/project.drawio +16 -16
  15. data/lib/_.rb +32 -0
  16. data/lib/handlebarsjs/base_helper.rb +37 -0
  17. data/lib/handlebarsjs/handlebars_snapshot.rb +13 -5
  18. data/lib/handlebarsjs/helpers/array/join.rb +17 -0
  19. data/lib/handlebarsjs/helpers/array/join_post.rb +17 -0
  20. data/lib/handlebarsjs/helpers/array/join_pre.rb +17 -0
  21. data/lib/handlebarsjs/helpers/case/back_slash.rb +17 -0
  22. data/lib/handlebarsjs/helpers/case/camel.rb +17 -0
  23. data/lib/handlebarsjs/helpers/case/constant.rb +17 -0
  24. data/lib/handlebarsjs/helpers/case/dash.rb +17 -0
  25. data/lib/handlebarsjs/helpers/case/dot.rb +17 -0
  26. data/lib/handlebarsjs/helpers/case/double_colon.rb +17 -0
  27. data/lib/handlebarsjs/helpers/case/human.rb +17 -0
  28. data/lib/handlebarsjs/helpers/case/lamel.rb +17 -0
  29. data/lib/handlebarsjs/helpers/case/lower.rb +17 -0
  30. data/lib/handlebarsjs/helpers/case/slash.rb +17 -0
  31. data/lib/handlebarsjs/helpers/case/snake.rb +17 -0
  32. data/lib/handlebarsjs/helpers/case/title.rb +17 -0
  33. data/lib/handlebarsjs/helpers/case/upper.rb +17 -0
  34. data/lib/handlebarsjs/helpers/comparison/and.rb +5 -33
  35. data/lib/handlebarsjs/helpers/comparison/default.rb +17 -0
  36. data/lib/handlebarsjs/helpers/comparison/eq.rb +17 -0
  37. data/lib/handlebarsjs/helpers/comparison/gt.rb +17 -0
  38. data/lib/handlebarsjs/helpers/comparison/gte.rb +17 -0
  39. data/lib/handlebarsjs/helpers/comparison/lt.rb +17 -0
  40. data/lib/handlebarsjs/helpers/comparison/lte.rb +17 -0
  41. data/lib/handlebarsjs/helpers/comparison/ne.rb +17 -0
  42. data/lib/handlebarsjs/helpers/comparison/or.rb +17 -0
  43. data/lib/handlebarsjs/helpers/inflection/ordinal.rb +17 -0
  44. data/lib/handlebarsjs/helpers/inflection/ordinalize.rb +17 -0
  45. data/lib/handlebarsjs/helpers/inflection/pluralize.rb +17 -0
  46. data/lib/handlebarsjs/helpers/inflection/pluralize_by_number.rb +17 -0
  47. data/lib/handlebarsjs/helpers/inflection/singularize.rb +17 -0
  48. data/lib/handlebarsjs/version.rb +1 -1
  49. data/lib/handlebarsjs.rb +3 -0
  50. data/package-lock.json +2 -2
  51. data/package.json +1 -1
  52. metadata +56 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dc03074aedaca262df64a9aeb596c892c7e77f48ead79724cda8bb85d4d0aeb9
4
- data.tar.gz: 5674236c6816c6f6ce4e51c1d13f5ad5ebb097f627cb1e7c5ea6ecf1b423b780
3
+ metadata.gz: ed3a46f299a312f82f09cc61535618d462b10b526b211043e095ab316fae0e6e
4
+ data.tar.gz: da1d45766828ac721f92f958843f09daa7bacb7d810b5b93b8867ddb8788f1c8
5
5
  SHA512:
6
- metadata.gz: 0eceb601e4df54be59f5736b2f16098b9ad7b61ddc918b6f0a07593ba1373d490f312e8be92d5aa85deeac751e66ad0704edce890813506eae0bb30933a5d80f
7
- data.tar.gz: e3fba2540c9dd5cabcf17b8b525e2cddd8d360a003ade9e2a578950cae139488df41fb350c771491c55f6365339de6ab26db81660ad2d137e2625745c348113a
6
+ metadata.gz: f361afb3804d173ea65b4ea912d4c571f5d56a7554479509c1250518f94907f642b4f210e7b3dd916300c99ee68765e4d0028c4fdb9c6ee5c4600757711d2735
7
+ data.tar.gz: a4cc51a731376834aa9db7ce77207ca65c6124e35b74b4c219f35814ebc54673d4b3e80b28f24bf962bbb851e1c81141728620e1ddb86c6ec6c2fe7b0bbc7020
@@ -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
@@ -1 +1,3 @@
1
- # require_relative './path/here'
1
+ require_relative './director/handlebars_helper_builder'
2
+ require_relative './director/handlebars_helper_director'
3
+ require_relative './director/handlebars_helper_child'
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', 'drawio_dsl')
53
- config.target_folders.add(:spec , :app, 'spec', 'drawio_dsl')
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.1](https://github.com/klueless-io/handlebarsjs/compare/v0.5.0...v0.5.1) (2022-07-06)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * add tests for base_helper ([2734326](https://github.com/klueless-io/handlebarsjs/commit/27343261d0189440a3f10f98a0a29b12f05c56e7))
7
+ * add tests for base_helper ([0c8355e](https://github.com/klueless-io/handlebarsjs/commit/0c8355e056b6d447aaffa87718240a8542958e5d))
8
+
9
+ # [0.5.0](https://github.com/klueless-io/handlebarsjs/compare/v0.4.0...v0.5.0) (2022-07-06)
10
+
11
+
12
+ ### Features
13
+
14
+ * add base_helper ([d2900ae](https://github.com/klueless-io/handlebarsjs/commit/d2900ae6c2ce27a7a8ac4c92d219f0e9150354f5))
15
+
16
+ # [0.4.0](https://github.com/klueless-io/handlebarsjs/compare/v0.3.0...v0.4.0) (2022-07-06)
17
+
18
+
19
+ ### Features
20
+
21
+ * add handlebars add_helper support ([19a5636](https://github.com/klueless-io/handlebarsjs/commit/19a5636698515c6c3128040d708d54527ba62dec))
22
+
1
23
  # [0.3.0](https://github.com/klueless-io/handlebarsjs/compare/v0.2.0...v0.3.0) (2022-07-06)
2
24
 
3
25
 
data/Gemfile CHANGED
@@ -19,3 +19,11 @@ end
19
19
  group :test do
20
20
  gem 'simplecov', require: false
21
21
  end
22
+
23
+ # If local dependency
24
+ if ENV['KLUE_LOCAL_GEMS']&.to_s&.downcase == 'true'
25
+ group :development, :test do
26
+ puts 'Using Local GEMs'
27
+ gem 'cmdlet' , path: '../cmdlet'
28
+ end
29
+ end
@@ -1,91 +1,91 @@
1
- <mxfile host="BiS">
2
- <diagram id="j0L" name="Domain Modal">
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="page_root_j0L" parent="j0L"/>
6
- <mxCell id="node_root_j0L" parent="page_root_j0L"/>
7
- <mxCell id="j0L-2" value="&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px;text-align:center&quot;&gt;&lt;b&gt;Flow&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;attach handlebars-4.7.7.js&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;attach handlebars-custom.js&lt;/p&gt;" 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_j0L">
5
+ <mxCell id="page_root_rZL" parent="rZL"/>
6
+ <mxCell id="node_root_rZL" parent="page_root_rZL"/>
7
+ <mxCell id="rZL-2" value="&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px;text-align:center&quot;&gt;&lt;b&gt;Flow&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;attach handlebars-4.7.7.js&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;attach handlebars-custom.js&lt;/p&gt;" 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="j0L-3" value="&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px;text-align:center&quot;&gt;&lt;b&gt;Configuration&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;javascript&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;javascript_file&lt;/p&gt;" 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_j0L">
10
+ <mxCell id="rZL-3" value="&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px;text-align:center&quot;&gt;&lt;b&gt;Configuration&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;javascript&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;javascript_file&lt;/p&gt;" 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="j0L-4" value="&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px;text-align:center&quot;&gt;&lt;b&gt;Manager&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;snapshot: MR::Snapshot&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;load_javascript()&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;register_helper()&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;register_partial()&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;compile_template()&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;execute_template()&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;execute_javascript()&lt;/p&gt;" 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_j0L">
13
+ <mxCell id="rZL-4" value="&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px;text-align:center&quot;&gt;&lt;b&gt;Manager&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;snapshot: MR::Snapshot&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;load_javascript()&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;register_helper()&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;register_partial()&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;compile_template()&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;execute_template()&lt;/p&gt;&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px&quot;&gt;execute_javascript()&lt;/p&gt;" 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="j0L-5" value="&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px;text-align:center&quot;&gt;&lt;b&gt;Context&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" 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_j0L">
16
+ <mxCell id="rZL-5" value="&lt;p style=&quot;margin:0px;margin-left:4px;margin-bottom:4px;text-align:center&quot;&gt;&lt;b&gt;Context&lt;/b&gt;&lt;/p&gt;&lt;hr size=&quot;1&quot;/&gt;" 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="j0L-6" value="" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#fafafa;strokeColor=#fafafa;fontColor=#fafafa" vertex="1" parent="node_root_j0L">
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="j0L-7" value="" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#fafafa;strokeColor=#fafafa;fontColor=#fafafa" vertex="1" parent="node_root_j0L">
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 -&gt; KBuilder" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#ffe6cc;strokeColor=#d79b00;fontColor=#333333" vertex="1" parent="node_root_j0L">
25
+ <mxCell id="a1" value="KManager -&gt; 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="node_root_j0L">
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="node_root_j0L">
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="node_root_j0L">
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="node_root_j0L">
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="node_root_j0L">
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="node_root_j0L">
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="node_root_j0L">
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="j0L-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_j0L" source="a1" target="a2" edge="1">
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="j0L-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_j0L" source="a2" target="a3" edge="1">
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="j0L-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_j0L" source="a3" target="a4" edge="1">
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="j0L-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_j0L" source="a2" target="a5" edge="1">
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="j0L-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_j0L" source="a5" target="a6" edge="1">
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="j0L-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_j0L" source="a4" target="a7" edge="1">
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="j0L-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_j0L" source="a6" target="a7" edge="1">
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="j0L-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_j0L" source="a7" target="a8" edge="1">
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="j0L-25" value="" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#fafafa;strokeColor=#fafafa;fontColor=#fafafa" vertex="1" parent="node_root_j0L">
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="j0L-26" value="" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#fafafa;strokeColor=#fafafa;fontColor=#fafafa" vertex="1" parent="node_root_j0L">
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="j0L-27" value="" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#fafafa;strokeColor=#fafafa;fontColor=#fafafa" vertex="1" parent="node_root_j0L">
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="j0L-28" value="" style="whiteSpace=wrap;html=1;rounded=0;fillColor=#fafafa;strokeColor=#fafafa;fontColor=#fafafa" vertex="1" parent="node_root_j0L">
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="j0L-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_j0L">
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="j0L-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_j0L">
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>