isomorfeus-preact 22.10.0.rc1 → 22.11.0.rc1

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
  SHA256:
3
- metadata.gz: 52289511155a5b8805b447f322b7bb1c12f32d11a7b622b65ddce9904da6ed32
4
- data.tar.gz: 3d4b57c6a439b9aebca2202ebb839eef61071b84375f41df5d77b23b0044d096
3
+ metadata.gz: 62b4e6bc05265ca02d586b44bcd579ee5a75cb5bd31f54125a897d8e398fa88c
4
+ data.tar.gz: 3929ae5d2004b3ee4988aeb95a8e419fbd812141f32b03fa73204071af044cd0
5
5
  SHA512:
6
- metadata.gz: 978253c3a2ddf848ea644d8e5625ef5f31f6af4358e16245bf83943132e3ae1528624df232bd8b1ad0f49db218da77c3d8145bd2aa6c77ff57efef6cedbbf1c0
7
- data.tar.gz: 7d0a9a76d291c523f87100a47277d1752d4e9ccc9d6c3fcfea4b5a6c2c09fbbb9a2408d2762ea239d937dfb0e3a1167b6750c334c35c11fea33f028bf737acc3
6
+ metadata.gz: fa6aeda0ef1e2392c6259ba8e176205013a832909051ad20f6440c8d4645d3479c547f99baf326ce0608005cbf6c9b86720cc934bca3e2a8a015c23b1b28dee3
7
+ data.tar.gz: 569e16a8edd6e60826f47b7aeaff7afec87548aee6a61382307f3fc81b36223cc5c2953b430e4ce8391c25b154e1a94691f2e49e3dccf15ca6928d56912d44fb
@@ -27,7 +27,7 @@ module Browser
27
27
  end
28
28
 
29
29
  def state
30
- ::Hash.new(`#@native.state`)
30
+ `Opal.hash(#@native.state)`
31
31
  end
32
32
  else
33
33
  def back; end
@@ -1,5 +1,5 @@
1
1
  module Isomorfeus
2
2
  module Preact
3
- VERSION = '22.10.0.rc1'
3
+ VERSION = '22.11.0.rc1'
4
4
  end
5
5
  end
@@ -28,7 +28,7 @@ module Isomorfeus
28
28
  end
29
29
  end
30
30
  if component
31
- props = Hash.new(p.JS[:props])
31
+ props = `Opal.hash(p.props)`
32
32
  if init
33
33
  Isomorfeus::TopLevel.hydrated = p.JS[:hydrated]
34
34
  %x{
@@ -37,7 +37,7 @@ module Isomorfeus
37
37
  var keys = Object.keys(state);
38
38
  for(var i=0; i < keys.length; i++) {
39
39
  if (Object.keys(state[keys[i]]).length > 0) {
40
- #{Isomorfeus.store.dispatch({ type: `keys[i].toUpperCase()`, set_state: Hash.new(`state[keys[i]]`) })}
40
+ #{Isomorfeus.store.dispatch({ type: `keys[i].toUpperCase()`, set_state: Hash.recursive_new(`state[keys[i]]`) })}
41
41
  }
42
42
  }
43
43
  }
data/lib/lucid_app.rb CHANGED
@@ -10,7 +10,7 @@ class LucidApp < LucidComponent
10
10
  block_result = _internal_render(pr, &block)
11
11
  children = pr.pop
12
12
  if Preact.is_renderable?(block_result)
13
- children.push(block_result)
13
+ children << block_result
14
14
  end
15
15
  Preact.create_element(LucidApplicationContext.Provider, state[:_app_ctx], children)
16
16
  end
@@ -78,31 +78,34 @@ class LucidApp < LucidComponent
78
78
  super(props, context)
79
79
 
80
80
  # theme
81
- @class_name_sym = @class_name.to_sym
82
81
  @theme = @self_class.css_theme
83
82
 
84
- store_state = Isomorfeus.store.get_state
85
- unless store_state[:class_state].key?(@class_name_sym)
86
- store_state[:class_state][@class_name_sym] = {}
87
- end
88
- @state.merge!({ _app_ctx: { value: { iso_location: props[:location],
89
- iso_store: store_state,
90
- iso_theme: @theme }}})
83
+ @state.merge!({ _app_ctx: { value: {
84
+ iso_location: props[:location],
85
+ iso_store: Isomorfeus.store.get_state,
86
+ iso_theme: @theme }}})
91
87
 
92
- lai = self
93
88
  if RUBY_ENGINE == 'opal'
89
+ lai = self
94
90
  @unsubscriber = Isomorfeus.store.subscribe do
95
- store_state = Isomorfeus.store.get_state
96
- unless store_state[:class_state].key?(@class_name_sym)
97
- store_state[:class_state][@class_name_sym] = {}
98
- end
99
- lai.set_state({ _app_ctx: { value: { iso_location: lai.props[:location],
100
- iso_store: store_state,
91
+ lai.set_state({ _app_ctx: { value: {
92
+ iso_location: lai.props[:location],
93
+ iso_store: Isomorfeus.store.get_state,
101
94
  iso_theme: lai.theme }}})
102
95
  end
103
96
  end
104
97
  end
105
98
 
99
+ def app_state
100
+ @state.dig(:_app_ctx, :value, :iso_store, :application_state)
101
+ end
102
+
103
+ def class_state
104
+ res = @state.dig(:_app_ctx, :value, :iso_store, :class_state, @class_name)
105
+ return res if res
106
+ {}
107
+ end
108
+
106
109
  def should_component_update?(next_props, next_state, _next_context)
107
110
  return true if @props != next_props || @state != next_state
108
111
  false
@@ -11,7 +11,7 @@ class LucidComponent < Preact::Component
11
11
  pr = Preact.render_buffer
12
12
  block_result = _internal_render(pr, &block)
13
13
  if Preact.is_renderable?(block_result)
14
- pr.pop.push(block_result)
14
+ pr.pop << block_result
15
15
  else
16
16
  pr.pop
17
17
  end
@@ -81,7 +81,7 @@ class LucidComponent < Preact::Component
81
81
  end
82
82
 
83
83
  def _internal_render(pr, &block)
84
- pr.push([])
84
+ pr << []
85
85
  outer_loading = Isomorfeus.something_loading?
86
86
  ex = nil
87
87
  begin
data/lib/nano_css.rb CHANGED
@@ -120,7 +120,7 @@ class NanoCSS
120
120
 
121
121
  decls.each do |prop, value|
122
122
  if value.is_a?(Hash) && !value.is_a?(Array)
123
- postponed.push(prop)
123
+ postponed << prop
124
124
  else
125
125
  str += decl(prop, value)
126
126
  end
@@ -237,19 +237,19 @@ class NanoCSS
237
237
  if pos
238
238
  if parents.empty?
239
239
  replaced_selector = sel.gsub(/&/, parent)
240
- result.push(replaced_selector)
240
+ result << replaced_selector
241
241
  else
242
242
  parents.each do |parent|
243
243
  replaced_selector = sel.gsub(/&/, parent)
244
- result.push(replaced_selector)
244
+ result << replaced_selector
245
245
  end
246
246
  end
247
247
  else
248
248
  if parents.empty?
249
- result.push(sel)
249
+ result << sel
250
250
  else
251
251
  parents.each do |parent|
252
- result.push("#{parent} #{sel}")
252
+ result << "#{parent} #{sel}"
253
253
  end
254
254
  end
255
255
  end
@@ -75,10 +75,10 @@ module Preact
75
75
  def render(&block)
76
76
  define_method(:render) do
77
77
  pr = Preact.render_buffer
78
- pr.push([])
78
+ pr << []
79
79
  block_result = instance_exec(&block)
80
80
  if Preact.is_renderable?(block_result)
81
- pr.pop.push(block_result)
81
+ pr.pop << block_result
82
82
  else
83
83
  pr.pop
84
84
  end
@@ -168,7 +168,7 @@ module Preact
168
168
  # is coming from. We need this because forceUpdate should never call
169
169
  # should_component_update
170
170
  @_force = true
171
- @_renderCallbacks.push(block.to_n) if block_given?
171
+ @_renderCallbacks << block.to_n if block_given?
172
172
  Preact._enqueue_render(self)
173
173
  end
174
174
  end
@@ -190,7 +190,7 @@ module Preact
190
190
  end
191
191
 
192
192
  if @_vnode
193
- @_renderCallbacks.push(block.to_n) if block_given?
193
+ @_renderCallbacks << block.to_n if block_given?
194
194
  Preact._enqueue_render(self)
195
195
  end
196
196
  end
@@ -11,10 +11,22 @@ module Preact::ComponentResolution
11
11
  %x{
12
12
  let constant;
13
13
  let sc = self.$class();
14
+ // disable stack traces here for improved performance
15
+ // if const cannot be found, the orignal method_mising will throw with stacktrace
16
+ let orig_est = Opal.config.enable_stack_trace;
17
+ Opal.config.enable_stack_trace = false;
14
18
  try {
15
- constant = sc.$const_get(component_name);
19
+ // disable the const cache for development, so that always the latest constant
20
+ // version is used to make hot reloading reliable
21
+ if (!Opal.Isomorfeus.development) {
22
+ if (!self.$$iso_preact_const_cache) { self.$$iso_preact_const_cache = {}; }
23
+ constant = self.$$iso_preact_const_cache[component_name];
24
+ }
25
+ if (!constant) { constant = sc.$const_get(component_name); }
16
26
  } catch(err) {
17
- let module_names = sc.$to_s().split("::");
27
+ let module_names;
28
+ if (sc.$$full_name) { module_names = sc.$$full_name.split("::"); }
29
+ else { module_names = sc.$to_s().split("::"); }
18
30
  let module_name;
19
31
  for (let i = module_names.length - 1; i > 0; i--) {
20
32
  module_name = module_names.slice(0, i).join('::');
@@ -23,8 +35,13 @@ module Preact::ComponentResolution
23
35
  break;
24
36
  } catch(err) { }
25
37
  }
38
+ } finally {
39
+ Opal.config.enable_stack_trace = orig_est;
26
40
  }
27
41
  if (constant) {
42
+ if (!Opal.Isomorfeus.development && !self.$$iso_preact_const_cache[component_name]) {
43
+ self.$$iso_preact_const_cache[component_name] = constant;
44
+ }
28
45
  let last = args[args.length-1];
29
46
  #{`Opal.Preact`._render_element(`constant`, `(last === undefined || last === null) ? nil : last`, &block)};
30
47
  return nil;
@@ -41,21 +58,25 @@ module Preact::ComponentResolution
41
58
  # Further on it must check for modules, because const_get does not take
42
59
  # the full nesting into account
43
60
  constant = nil
44
- if self.is_a?(Module)
45
- constant = const_get(component_name) rescue nil
46
- else
47
- begin
48
- constant = self.class.const_get(component_name)
49
- rescue
50
- module_names = self.class.to_s.split('::')
51
- module_names.each_index do |i|
52
- module_name = module_names[0..i].join('::')
53
- constant = self.class.const_get(module_name).const_get(component_name, false) rescue nil
54
- break if constant
55
- end
61
+ begin
62
+ if !Isomorfeus.development?
63
+ @iso_preact_const_cache = {} unless @iso_preact_const_cache
64
+ constant = @iso_preact_const_cache[component_name]
65
+ end
66
+ constant = self.class.const_get(component_name) unless constant
67
+ rescue
68
+ module_names = self.class.to_s.split('::')
69
+ module_names.each_index do |i|
70
+ module_name = module_names[0..i].join('::')
71
+ constant = self.class.const_get(module_name).const_get(component_name, false) rescue nil
72
+ break if constant
56
73
  end
57
74
  end
75
+
58
76
  if constant
77
+ if !Isomorfeus.development? && @iso_preact_const_cache.key?(component_name)
78
+ @iso_preact_const_cache[component_name] = constant
79
+ end
59
80
  Preact._render_element(constant, args.last, &block)
60
81
  nil
61
82
  else
@@ -43,7 +43,7 @@ module Preact
43
43
  end
44
44
 
45
45
  def sub(component)
46
- @subs.push(component)
46
+ @subs << component
47
47
  component.provider_subs = @subs
48
48
  end
49
49
  end
@@ -52,7 +52,7 @@ module Preact::HtmlElements
52
52
  end
53
53
 
54
54
  def RPE(el)
55
- Preact.render_buffer.last.push(el)
55
+ Preact.render_buffer.last << el
56
56
  nil
57
57
  end
58
58
  end
@@ -13,10 +13,26 @@ class Module
13
13
  let constant = null;
14
14
  let c = component_name[0];
15
15
  if (c == c.toUpperCase()) {
16
+ // disable stack traces here for improved performance
17
+ // if const cannot be found, the orignal method_mising will throw with stacktrace
18
+ Opal.config.enable_stack_trace = false;
16
19
  try {
20
+ // disable the const cache for development, so that always the latest constant
21
+ // version is used to make hot reloading reliable
22
+ if (!Opal.Isomorfeus.development) {
23
+ if (!self.$$iso_preact_const_cache) { self.$$iso_preact_const_cache = {}; }
24
+ constant = self.$$iso_preact_const_cache[component_name];
25
+ }
17
26
  constant = self.$const_get(component_name);
18
- } catch(err) { }
27
+ } catch(err) {
28
+ // nothing
29
+ } finally {
30
+ Opal.config.enable_stack_trace = true;
31
+ }
19
32
  if (constant) {
33
+ if (!Opal.Isomorfeus.development && !self.$$iso_preact_const_cache[component_name]) {
34
+ self.$$iso_preact_const_cache[component_name] = constant;
35
+ }
20
36
  let last = args[args.length-1];
21
37
  #{`Opal.Preact`._render_element(`constant`, `(last === undefined || last === null) ? nil : last`, &block)};
22
38
  return nil;
@@ -35,11 +51,19 @@ class Module
35
51
  def method_missing(component_name, *args, &block)
36
52
  # check for ruby component and render it
37
53
  # otherwise pass on method missing
38
- component_name_s = component_name.to_s
39
- c = component_name_s[0]
54
+ c = component_name.to_s[0]
40
55
  if c == c.upcase
41
- constant = const_get(component_name) rescue nil
56
+ if !Isomorfeus.development?
57
+ @iso_preact_const_cache = {} unless @iso_preact_const_cache
58
+ constant = @iso_preact_const_cache[component_name]
59
+ end
60
+ unless constant
61
+ constant = const_get(component_name) rescue nil
62
+ end
42
63
  if constant && constant.ancestors.include?(Preact::Component)
64
+ if !Isomorfeus.development? && @iso_preact_const_cache.key?(component_name)
65
+ @iso_preact_const_cache[component_name] = constant
66
+ end
43
67
  Preact._render_element(constant, args.last, &block)
44
68
  return nil
45
69
  end
data/lib/preact.rb CHANGED
@@ -650,7 +650,7 @@ module Preact
650
650
  // If excessDomChildren was not null, repopulate it with the current element's children:
651
651
  excessDomChildren = excessDomChildren && slice.call(dom.childNodes);
652
652
 
653
- oldProps = oldVNode.props || Opal.Hash.$new();
653
+ oldProps = oldVNode.props || Opal.hash();
654
654
 
655
655
  let oldHtml = oldProps["$[]"]("dangerouslySetInnerHTML");
656
656
  let newHtml = newProps["$[]"]("dangerouslySetInnerHTML");
@@ -661,7 +661,7 @@ module Preact
661
661
  // But, if we are in a situation where we are using existing DOM (e.g. replaceNode)
662
662
  // we should read the existing DOM attributes to diff them
663
663
  if (excessDomChildren != null) {
664
- oldProps = Opal.Hash.$new();
664
+ oldProps = Opal.hash();
665
665
  for (i = 0; i < dom.attributes.length; i++) {
666
666
  oldProps["$[]="](dom.attributes[i].name, dom.attributes[i].value);
667
667
  }
@@ -797,13 +797,14 @@ module Preact
797
797
  // Instantiate the new component
798
798
  // validate props
799
799
  validate_props(newType, newProps);
800
- // The check above verifies that newType is suppose to be constructed
800
+ newProps.$freeze();
801
+ // The check above verifies that newType is supposed to be constructed
801
802
  newVNode._component = c = newType.$new(newProps, componentContext);
802
803
 
803
804
  if (provider && provider !== nil) provider.$sub(c);
804
805
 
805
806
  c.props = newProps;
806
- if (c.state === nil || !c.state) c.state = Opal.Hash.$new();
807
+ if (c.state === nil || !c.state) c.state = Opal.hash();
807
808
  c.context = componentContext;
808
809
  c._globalContext = globalContext;
809
810
  isNew = c._dirty = true;
@@ -811,11 +812,12 @@ module Preact
811
812
  }
812
813
 
813
814
  // Invoke get_derived_state_from_props
814
- if (c._nextState === nil) {
815
+ if (!c._nextState || c._nextState === nil) {
815
816
  c._nextState = c.state;
816
817
  }
817
818
 
818
819
  if (!isNew) { validate_props(newType, newProps); }
820
+ newProps.$freeze();
819
821
  if (c["$respond_to?"]("get_derived_state_from_props")) {
820
822
  if (c._nextState == c.state) {
821
823
  c._nextState = c._nextState.$dup();
@@ -825,6 +827,7 @@ module Preact
825
827
 
826
828
  oldProps = c.props;
827
829
  oldState = c.state;
830
+ c._nextState.$freeze();
828
831
 
829
832
  // Invoke pre-render lifecycle methods
830
833
  if (isNew) {
@@ -971,6 +974,13 @@ module Preact
971
974
 
972
975
  function is_a_vnode(type) { return type === vnode_class; }
973
976
  function is_nil() { return false; }
977
+ function vnode_eql(me, other) {
978
+ for(let prop in me) {
979
+ if (prop === 'props') { continue; }
980
+ else if (me[prop] != other[prop]) { return false; }
981
+ }
982
+ return me.props["$=="](other.props);
983
+ }
974
984
 
975
985
  self.createVNode = function(type, props, key, ref, original) {
976
986
  // V8 seems to be better at detecting type shapes if the object is allocated from the same call site
@@ -993,24 +1003,13 @@ module Preact
993
1003
  _component: null,
994
1004
  _hydrating: null,
995
1005
  constructor: undefined,
996
- _original: original == null ? ++vnodeId : original,
1006
+ _original: (original == null) ? ++vnodeId : original,
997
1007
  "$is_a?": is_a_vnode,
998
- "$==": eql = function(other) {
999
- for(let prop in vnode) {
1000
- if (prop === 'props') {
1001
- let res = vnode[prop]["$=="](other[prop]);
1002
- if (!res) return false;
1003
- } else if (vnode[prop] != other[prop]) {
1004
- return false;
1005
- }
1006
- }
1007
- return true;
1008
- },
1008
+ "$==": eql = function(other) { return vnode_eql(vnode, other); },
1009
1009
  "$eql?": eql,
1010
1010
  "$nil?": is_nil,
1011
1011
  "$$is_vnode": true
1012
1012
  };
1013
-
1014
1013
  return vnode;
1015
1014
  }
1016
1015
 
@@ -1046,7 +1045,7 @@ module Preact
1046
1045
  // our custom `_children` property.
1047
1046
  vnode,
1048
1047
  ov ? oldVNode : EMPTY_OBJ,
1049
- Opal.Hash.$new(),
1048
+ Opal.hash(),
1050
1049
  parentDom.ownerSVGElement !== undefined,
1051
1050
  nohy_reno ? [replaceNode] : ov ? null : parentDom.firstChild ? slice.call(parentDom.childNodes) : null,
1052
1051
  commitQueue,
@@ -1219,7 +1218,7 @@ module Preact
1219
1218
  end
1220
1219
 
1221
1220
  def _enqueue_render(c)
1222
- if ((`!c._dirty` && (`c._dirty = true`) && rerender_queue.push(c) && `!self.process._rerenderCount++`))
1221
+ if ((`!c._dirty` && (`c._dirty = true`) && (rerender_queue << c) && `!self.process._rerenderCount++`))
1223
1222
  `setTimeout(self.process)`
1224
1223
  end
1225
1224
  end
@@ -1323,7 +1322,7 @@ module Preact
1323
1322
 
1324
1323
  def _render_element(element, props, &block)
1325
1324
  pr = Preact.render_buffer
1326
- pr[pr.length-1].push(create_element(element, props, nil, &block))
1325
+ pr[pr.length-1] << create_element(element, props, nil, &block)
1327
1326
  nil
1328
1327
  end
1329
1328
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: isomorfeus-preact
3
3
  version: !ruby/object:Gem::Version
4
- version: 22.10.0.rc1
4
+ version: 22.11.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Biedermann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-10-06 00:00:00.000000000 Z
11
+ date: 2022-11-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oj
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 3.13.21
19
+ version: 3.13.23
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 3.13.21
26
+ version: 3.13.23
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: opal
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.5.1
33
+ version: 1.6.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.5.1
40
+ version: 1.6.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: opal-activesupport
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -52,48 +52,62 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.3.3
55
+ - !ruby/object:Gem::Dependency
56
+ name: isomorfeus-asset-manager
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.15.10
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.15.10
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: isomorfeus-i18n
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - '='
60
74
  - !ruby/object:Gem::Version
61
- version: 22.10.0.rc1
75
+ version: 22.11.0.rc1
62
76
  type: :runtime
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - '='
67
81
  - !ruby/object:Gem::Version
68
- version: 22.10.0.rc1
82
+ version: 22.11.0.rc1
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: isomorfeus-redux
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - '='
74
88
  - !ruby/object:Gem::Version
75
- version: 22.10.0.rc1
89
+ version: 22.11.0.rc1
76
90
  type: :runtime
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
94
  - - '='
81
95
  - !ruby/object:Gem::Version
82
- version: 22.10.0.rc1
96
+ version: 22.11.0.rc1
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: isomorfeus-puppetmaster
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - "~>"
88
102
  - !ruby/object:Gem::Version
89
- version: 0.8.1
103
+ version: 0.8.2
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
108
  - - "~>"
95
109
  - !ruby/object:Gem::Version
96
- version: 0.8.1
110
+ version: 0.8.2
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: rake
99
113
  requirement: !ruby/object:Gem::Requirement