glimmer-cs-gladiator 0.3.1 → 0.4.0

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: 650c712355cabdc815732a44b445b14ba7940daf39905019f10b7cdf1c62a935
4
- data.tar.gz: 02377cc0cc8891d0ff3128877ee521c0ae6674c86304b0663ce3956e603e3cd1
3
+ metadata.gz: 1b17d21c81f04c1f1fc1ad516013d9e62a6abeb0900096b1bd13c95c6cf10ccd
4
+ data.tar.gz: 78d41ab949f3f40c71f2abfa26310a32f3720eecb64dcf5b90d2f155c2b35345
5
5
  SHA512:
6
- metadata.gz: fcefebd0897944ec7e6634027c9e44cce3f705001a452d21ad68647b6e5aec70652c0d6cc7d8dfdd4870ddda6995902625eebc91bf085e7b5fbfe5db35c1b479
7
- data.tar.gz: 4604954cce35346ddb5203f76e45efc492b37421b3f4748be5bbd7b7c34208efb4bb5de92445391f7a537b25aaa74747ffca9fa698139eb11f0a3549e37ede6b
6
+ metadata.gz: bff6362c1eb4cc711c507ac90aa34e5a5b11653fe7b48f475bd829b37fdb1a87ca6b2317b35ff11f14f287aebfe2e35dee5e47ea2e9575f74c7b9971a1231b77
7
+ data.tar.gz: dc19f782cfb448e32f8054fee66797001af383cdcbedf26aeed3a3beaddef4309edefa4ca59c9be4192cd534d8a670bed35bd691ee458e3c5d22a43938e9d5e2
data/README.md CHANGED
@@ -1,10 +1,12 @@
1
- # <img src='https://raw.githubusercontent.com/AndyObtiva/glimmer-cs-gladiator/master/images/glimmer-cs-gladiator-logo.svg' height=85 /> Gladiator 0.3.1 - [Ugliest Text Editor Ever](https://www.reddit.com/r/ruby/comments/hgve8k/gladiator_glimmer_editor_ugliest_text_editor_ever/)
1
+ # <img src='https://raw.githubusercontent.com/AndyObtiva/glimmer-cs-gladiator/master/images/glimmer-cs-gladiator-logo.svg' height=85 /> Gladiator 0.4.0 - [Ugliest Text Editor Ever](https://www.reddit.com/r/ruby/comments/hgve8k/gladiator_glimmer_editor_ugliest_text_editor_ever/)
2
2
  ## [<img src="https://raw.githubusercontent.com/AndyObtiva/glimmer/master/images/glimmer-logo-hi-res.png" height=40 /> Glimmer Custom Shell](https://github.com/AndyObtiva/glimmer-dsl-swt#custom-shell-gem)
3
3
  [![Gem Version](https://badge.fury.io/rb/glimmer-cs-gladiator.svg)](http://badge.fury.io/rb/glimmer-cs-gladiator)
4
4
 
5
5
  ![Gladiator](images/glimmer-gladiator.png)
6
6
 
7
- Gladiator (short for Glimmer Editor) is a [Glimmer DSL for SWT](https://github.com/AndyObtiva/glimmer-dsl-swt) sample project under on-going development that demonstrates how to build a text editor in [Glimmer DSL for SWT](https://github.com/AndyObtiva/glimmer-dsl-swt) (JRuby Desktop Development GUI Library).
7
+ (Now, slightly less ugly with Ruby syntax highlighting colors)
8
+
9
+ Gladiator (short for Glimmer Editor) is a [Glimmer DSL for SWT](https://github.com/AndyObtiva/glimmer-dsl-swt) sample project under on-going development that demonstrates how to build a text editor in Ruby using [Glimmer DSL for SWT](https://github.com/AndyObtiva/glimmer-dsl-swt) (JRuby Desktop Development GUI Library).
8
10
  It is not intended to be a full-fledged editor by any means, yet mostly a fun educational exercise in using [Glimmer](https://github.com/AndyObtiva/glimmer).
9
11
  Gladiator is also a personal tool for shaping an editor exactly the way I like, with all the keyboard shortcuts I prefer.
10
12
  I leave building truly professional text editors to software tooling experts who would hopefully use [Glimmer](https://github.com/AndyObtiva/glimmer) one day. Otherwise, I have been happily using Gladiator to develop all my [open-source projects](https://github.com/AndyObtiva) since May of 2020.
@@ -12,6 +14,7 @@ I leave building truly professional text editors to software tooling experts who
12
14
  ## Features
13
15
 
14
16
  Gladiator currently supports the following text editing features (including keyboard shortcuts with Mac CMD=CTRL on Windows/Linux):
17
+ - Ruby Syntax Highlighting with colors
15
18
  - File explorer navigation with context menu to open file, rename, delete, add new file, add new directory, or refresh tree (CMD+T)
16
19
  - File lookup by name ignoring slashes, underscores, and dots to ease lookup (CMD+R)
17
20
  - Watch open file for external changes to automatically refresh in editor
@@ -30,6 +33,8 @@ Gladiator currently supports the following text editing features (including keyb
30
33
  - Indent/Unindent line/selection (CMD+] & CMD+[)
31
34
  - Insert/Prefix New Line (CMD+ENTER & CMD+SHIFT+ENTER)
32
35
  - Drag and Drop Text Editor Split Screen (drag a file from File Tree or File Lookup List, and it splits the screen)
36
+ - Run current Ruby file via Run Menu (CMD+SHIFT+R)
37
+ - Change Split Orientation to Horizontal/Vertical via View Menu (CMD+SHIFT+O)
33
38
 
34
39
  ## Platforms
35
40
 
@@ -99,7 +104,7 @@ To reuse Gladiator as a Glimmer Custom Shell inside another Glimmer application,
99
104
  following to the application's `Gemfile`:
100
105
 
101
106
  ```
102
- gem 'glimmer-cs-gladiator', '~> 0.3.1'
107
+ gem 'glimmer-cs-gladiator', '~> 0.4.0'
103
108
  ```
104
109
 
105
110
  Run:
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.1
1
+ 0.4.0
@@ -1,7 +1,9 @@
1
1
  module Glimmer
2
2
  class Gladiator
3
- class Command
3
+ class Command
4
4
  class << self
5
+ include Glimmer
6
+
5
7
  def command_history
6
8
  @command_history ||= {}
7
9
  end
@@ -11,7 +13,7 @@ module Glimmer
11
13
  command_history[file] ||= [Command.new(file)]
12
14
  end
13
15
 
14
- def do(file, method = nil, command: nil)
16
+ def do(file, method = nil, command: nil)
15
17
  command ||= Command.new(file, method)
16
18
  command_history_for(file)&.last&.next_command = command
17
19
  command.do
@@ -20,11 +22,13 @@ module Glimmer
20
22
 
21
23
  def undo(file)
22
24
  return if command_history_for(file).size <= 1
23
- command_history_for(file).pop.undo
25
+ command = command_history_for(file).pop
26
+ command&.undo
24
27
  end
25
28
 
26
29
  def redo(file)
27
- command_history_for(file).last&.redo
30
+ command = command_history_for(file).last
31
+ command&.redo
28
32
  end
29
33
  end
30
34
 
@@ -5,15 +5,15 @@ module Glimmer
5
5
  class File
6
6
  include Glimmer
7
7
 
8
- attr_accessor :dirty_content, :line_numbers_content, :selection, :selection_count, :line_number, :find_text, :replace_text, :top_index, :display_path, :case_sensitive
8
+ attr_accessor :dirty_content, :line_numbers_content, :selection, :line_number, :find_text, :replace_text, :top_pixel, :display_path, :case_sensitive
9
9
  attr_reader :name, :path
10
-
10
+
11
11
  def initialize(path)
12
12
  raise "Not a file path: #{path}" unless ::File.file?(path)
13
13
  @command_history = []
14
14
  @name = ::File.basename(path)
15
15
  self.path = ::File.expand_path(path)
16
- @top_index = 0
16
+ @top_pixel = 0
17
17
  @selection_count = 0
18
18
  @selection = Point.new(0, 0 + @selection_count)
19
19
  read_dirty_content = ::File.read(path)
@@ -52,8 +52,11 @@ module Glimmer
52
52
 
53
53
  # to use for widget data-binding
54
54
  def content=(value)
55
- Command.do(self) # record a native (OS-widget) operation
56
- self.dirty_content = value
55
+ value = value.gsub("\t", ' ')
56
+ if dirty_content != value
57
+ Command.do(self) # record a native (OS-widget) operation
58
+ self.dirty_content = value
59
+ end
57
60
  end
58
61
 
59
62
  def content
@@ -61,18 +64,23 @@ module Glimmer
61
64
  end
62
65
 
63
66
  def caret_position=(value)
67
+ old_top_pixel = top_pixel
64
68
  self.selection = Point.new(value, value + selection_count.to_i)
65
- if OS.linux?
66
- async_exec do
67
- self.top_index = line_index_for_caret_position(value)
68
- end
69
- end
69
+ self.top_pixel = old_top_pixel
70
70
  end
71
71
 
72
72
  def caret_position
73
73
  selection.x
74
74
  end
75
+
76
+ def selection_count
77
+ selection.y - selection.x
78
+ end
75
79
 
80
+ def selection_count=(value)
81
+ self.selection = Point.new(caret_position, caret_position + value.to_i)
82
+ end
83
+
76
84
  def name=(the_name)
77
85
  new_path = path.sub(/#{Regexp.escape(@name)}$/, the_name)
78
86
  @name = the_name
@@ -135,10 +143,10 @@ module Glimmer
135
143
  current_line.to_s.match(/^(\s+)/).to_a[1].to_s
136
144
  end
137
145
 
138
- def current_line
146
+ def current_line
139
147
  lines[line_number - 1]
140
148
  end
141
-
149
+
142
150
  def delete!
143
151
  FileUtils.rm(path)
144
152
  end
@@ -210,8 +218,9 @@ module Glimmer
210
218
  old_caret_position = self.caret_position
211
219
  self.dirty_content = new_lines.join("\n")
212
220
  if old_selection_count.to_i > 0
213
- self.caret_position = caret_position_for_line_index(old_caret_position_line_index)
214
- self.selection_count = (caret_position_for_line_index(old_end_caret_line_index + 1) - self.caret_position)
221
+ caret_position_value = caret_position_for_line_index(old_caret_position_line_index)
222
+ selection_count_value = (caret_position_for_line_index(old_end_caret_line_index + 1) - caret_position_value)
223
+ self.selection = Point.new(caret_position_value, caret_position_value + selection_count_value)
215
224
  else
216
225
  self.caret_position = old_caret_position + delta
217
226
  end
@@ -239,8 +248,9 @@ module Glimmer
239
248
  end
240
249
  self.dirty_content = new_lines.join("\n")
241
250
  if old_selection_count.to_i > 0
242
- self.caret_position = caret_position_for_line_index(old_caret_position_line_index)
243
- self.selection_count = (caret_position_for_line_index(old_end_caret_line_index + 1) - self.caret_position)
251
+ caret_position_value = caret_position_for_line_index(old_caret_position_line_index)
252
+ selection_count_value = (caret_position_for_line_index(old_end_caret_line_index + 1) - caret_position_value)
253
+ self.selection = Point.new(caret_position_value, caret_position_value + selection_count_value)
244
254
  else
245
255
  new_caret_position = old_caret_position + delta
246
256
  new_caret_position = [new_caret_position, old_caret_position_line_caret_position].max
@@ -290,7 +300,7 @@ module Glimmer
290
300
  all_lines = lines
291
301
  the_line_index = line_index_for_caret_position(caret_position)
292
302
  line_position = line_position_for_caret_position(caret_position)
293
- found =
303
+ found = found_text?(caret_position)
294
304
  2.times do |i|
295
305
  rotation = the_line_index
296
306
  all_lines.rotate(rotation).each_with_index do |the_line, the_index|
@@ -302,6 +312,7 @@ module Glimmer
302
312
  if occurrence_index
303
313
  self.caret_position = caret_position_for_line_index(the_index) + start_position + occurrence_index
304
314
  self.selection_count = find_text.to_s.size
315
+ self.selection = Point.new(self.caret_position, self.caret_position + self.selection_count)
305
316
  return
306
317
  end
307
318
  end
@@ -15,6 +15,7 @@ module Glimmer
15
15
  class Gladiator
16
16
  include Glimmer::UI::CustomShell
17
17
 
18
+ APP_ROOT = ::File.expand_path('../../../..', __FILE__)
18
19
  COMMAND_KEY = OS.mac? ? :command : :ctrl
19
20
 
20
21
  class << self
@@ -28,6 +29,8 @@ module Glimmer
28
29
  # option :width, 320
29
30
  # option :height, 240
30
31
 
32
+ attr_accessor :split_orientation
33
+
31
34
  ## Uncomment before_body block to pre-initialize variables to use in body
32
35
  #
33
36
  #
@@ -72,6 +75,8 @@ module Glimmer
72
75
  @text_editor&.text_widget&.setFocus
73
76
  end
74
77
  end
78
+ elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == 'o'
79
+ self.split_orientation = split_orientation == swt(:horizontal) ? swt(:vertical) : swt(:horizontal)
75
80
  elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == ']'
76
81
  @tab_folder.swt_widget.setSelection((@tab_folder.swt_widget.getSelectionIndex() + 1) % @tab_folder.swt_widget.getItemCount) if @tab_folder.swt_widget.getItemCount > 0
77
82
  @text_editor&.text_widget&.setFocus
@@ -132,10 +137,10 @@ module Glimmer
132
137
  elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == 'l'
133
138
  @line_number_text.swt_widget.selectAll
134
139
  @line_number_text.swt_widget.setFocus
135
- elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == 'r'
140
+ elsif key_event.stateMask == swt(COMMAND_KEY) && extract_char(key_event) == 'r'
136
141
  @filter_text.swt_widget.selectAll
137
142
  @filter_text.swt_widget.setFocus
138
- elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY) && extract_char(key_event) == 't'
143
+ elsif key_event.stateMask == swt(COMMAND_KEY) && extract_char(key_event) == 't'
139
144
  select_tree_item unless @rename_in_progress
140
145
  @tree.swt_widget.setFocus
141
146
  elsif key_event.keyCode == swt(:esc)
@@ -147,6 +152,7 @@ module Glimmer
147
152
  }
148
153
  }
149
154
 
155
+ @split_orientation = swt(:horizontal)
150
156
  local_dir = ENV['LOCAL_DIR'] || '.'
151
157
  @config_file_path = ::File.join(local_dir, '.gladiator')
152
158
  @config = {}
@@ -223,7 +229,7 @@ module Glimmer
223
229
  observe(Dir.local_dir, 'selected_child.caret_position') do
224
230
  save_config
225
231
  end
226
- observe(Dir.local_dir, 'selected_child.top_index') do
232
+ observe(Dir.local_dir, 'selected_child.top_pixel') do
227
233
  save_config
228
234
  end
229
235
  load_config
@@ -258,6 +264,46 @@ module Glimmer
258
264
  on_shell_deactivated {
259
265
  @text_editor&.file&.write_dirty_content
260
266
  }
267
+
268
+ menu_bar {
269
+ menu {
270
+ text '&View'
271
+ menu {
272
+ text '&Split'
273
+ menu_item(:radio) {
274
+ text '&Horizontal'
275
+ selection bind(self, :split_orientation, on_read: ->(o) { o == swt(:horizontal)}, on_write: ->(b) { b ? swt(:horizontal) : swt(:vertical)})
276
+ }
277
+ menu_item(:radio) {
278
+ text '&Vertical'
279
+ selection bind(self, :split_orientation, on_read: ->(o) { o == swt(:vertical)}, on_write: ->(b) { b ? swt(:vertical) : swt(:horizontal)})
280
+ }
281
+ }
282
+ }
283
+ menu {
284
+ text '&Run'
285
+ # menu_item {
286
+ # text 'Launch Glimmer &App'
287
+ # on_widget_selected {
288
+ # parent_path = Dir.local_dir.path
289
+ ## current_directory_name = ::File.basename(parent_path)
290
+ ## assumed_shell_script = ::File.join(parent_path, 'bin', current_directory_name)
291
+ ## assumed_shell_script = ::Dir.glob(::File.join(parent_path, 'bin', '*')).detect {|f| ::File.file?(f) && !::File.read(f).include?('#!/usr/bin/env')} if !::File.exist?(assumed_shell_script)
292
+ ## load assumed_shell_script
293
+ # FileUtils.cd(parent_path) do
294
+ # system 'glimmer run'
295
+ # end
296
+ # }
297
+ # }
298
+ menu_item {
299
+ text '&Current File'
300
+ on_widget_selected {
301
+ load Dir.local_dir.selected_child.path
302
+ }
303
+ }
304
+ }
305
+ }
306
+
261
307
  composite {
262
308
  grid_layout 1, false
263
309
  layout_data(:fill, :fill, false, true) {
@@ -395,9 +441,13 @@ module Glimmer
395
441
 
396
442
  # row 1
397
443
 
444
+ label {
445
+ text 'File:'
446
+ }
447
+
398
448
  @file_path_label = styled_text(:none) {
399
449
  layout_data(:fill, :fill, true, false) {
400
- horizontal_span 3
450
+ horizontal_span 2
401
451
  }
402
452
  background color(:widget_background)
403
453
  editable false
@@ -496,6 +546,7 @@ module Glimmer
496
546
  height_hint 480
497
547
  }
498
548
  sash_width 10
549
+ orientation bind(self, :split_orientation)
499
550
  @tab_folder = tab_folder {
500
551
  drag_source(DND::DROP_COPY) {
501
552
  transfer [TextTransfer.getInstance].to_java(Transfer)
@@ -549,7 +600,7 @@ module Glimmer
549
600
  Gladiator.drag = false
550
601
  Dir.local_dir.selected_child_path = @config[:selected_child_path] if @config[:selected_child_path]
551
602
  Dir.local_dir.selected_child&.caret_position = Dir.local_dir.selected_child&.caret_position_for_caret_position_start_of_line(@config[:caret_position].to_i) if @config[:caret_position]
552
- Dir.local_dir.selected_child&.top_index = @config[:top_index].to_i if @config[:top_index]
603
+ Dir.local_dir.selected_child&.top_pixel = @config[:top_pixel].to_i if @config[:top_pixel]
553
604
  else
554
605
  @loaded_config = true
555
606
  end
@@ -561,12 +612,12 @@ module Glimmer
561
612
  return if child.nil?
562
613
  tab_folder1 = @tab_folder1 || @tab_folder
563
614
  tab_folder2 = @tab_folder2
564
- open_file_paths1 = tab_folder1&.swt_widget&.items&.to_a.map {|i| i.get_data('file_path')}
565
- open_file_paths2 = tab_folder2&.swt_widget&.items&.to_a.map {|i| i.get_data('file_path')}
615
+ open_file_paths1 = tab_folder1&.swt_widget&.items.to_a.map {|i| i.get_data('file_path')}
616
+ open_file_paths2 = tab_folder2&.swt_widget&.items.to_a.map {|i| i.get_data('file_path')}
566
617
  @config = {
567
618
  selected_child_path: child.path,
568
619
  caret_position: child.caret_position,
569
- top_index: child.top_index,
620
+ top_pixel: child.top_pixel,
570
621
  shell_width: swt_widget&.getBounds&.width,
571
622
  shell_height: swt_widget&.getBounds&.height,
572
623
  shell_x: swt_widget&.getBounds&.x,
@@ -16,13 +16,13 @@ module Glimmer
16
16
  composite {
17
17
  layout_data :fill, :fill, true, true
18
18
  grid_layout 2, false
19
- @line_numbers_text = text(:multi) {
19
+ @line_numbers_text = code_text(:border, :multi) {
20
20
  layout_data(:right, :fill, false, true)
21
21
  font name: 'Consolas', height: OS.mac? ? 15 : 12
22
22
  background color(:widget_background)
23
23
  foreground rgb(75, 75, 75)
24
24
  text bind(file, 'line_numbers_content')
25
- top_index bind(file, 'top_index', read_only: true)
25
+ top_pixel bind(file, 'top_pixel', read_only: true)
26
26
  on_focus_gained {
27
27
  @text&.swt_widget.setFocus
28
28
  }
@@ -33,15 +33,15 @@ module Glimmer
33
33
  @text&.swt_widget.setFocus
34
34
  }
35
35
  }
36
- @text = text(:multi, :border, :h_scroll, :v_scroll) {
36
+
37
+ @text = code_text {
37
38
  layout_data :fill, :fill, true, true
38
39
  font name: 'Consolas', height: OS.mac? ? 15 : 12
39
40
  foreground rgb(75, 75, 75)
40
41
  text bind(file, :content)
41
42
  focus true
42
- selection bind(file, 'selection')
43
- selection_count bind(file, 'selection_count')
44
- top_index bind(file, 'top_index')
43
+ selection bind(file, :selection)
44
+ top_pixel bind(file, :top_pixel)
45
45
  drop_target(DND::DROP_COPY) {
46
46
  transfer [TextTransfer.getInstance].to_java(Transfer)
47
47
  on_drag_enter { |event|
@@ -57,12 +57,21 @@ module Glimmer
57
57
 
58
58
  on_focus_lost {
59
59
  file&.write_dirty_content
60
- }
61
- on_key_pressed { |key_event|
60
+ }
61
+ on_verify_key { |key_event|
62
62
  if (Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == 'z') || (key_event.stateMask == swt(COMMAND_KEY) && extract_char(key_event) == 'y')
63
63
  key_event.doit = !Command.redo(file)
64
+ elsif Glimmer::SWT::SWTProxy.include?(key_event.stateMask, COMMAND_KEY, :shift) && extract_char(key_event) == 'r'
65
+ Dir.local_dir.selected_child.write_dirty_content
66
+ begin
67
+ load Dir.local_dir.selected_child.path
68
+ rescue => e
69
+ puts e.full_message
70
+ end
64
71
  elsif key_event.stateMask == swt(COMMAND_KEY) && extract_char(key_event) == 'z'
65
72
  key_event.doit = !Command.undo(file)
73
+ elsif key_event.stateMask == swt(COMMAND_KEY) && extract_char(key_event) == 'a'
74
+ key_event.widget.selectAll
66
75
  elsif key_event.stateMask == swt(COMMAND_KEY) && extract_char(key_event) == '/'
67
76
  Command.do(file, :comment_line!)
68
77
  key_event.doit = false
@@ -105,13 +114,13 @@ module Glimmer
105
114
  end
106
115
  }
107
116
  on_verify_text { |verify_event|
108
- key_code = verify_event.keyCode
109
- case key_code
110
- when swt(:cr)
117
+ # TODO convert these into File commands to support Undo/Redo
118
+ case verify_event.text
119
+ when "\n"
111
120
  if file.selection_count.to_i == 0
112
121
  verify_event.text += file.current_line_indentation
113
122
  end
114
- when swt(:tab)
123
+ when "\t"
115
124
  if file.selection_count.to_i > 0
116
125
  Command.do(file, :indent!)
117
126
  verify_event.doit = false
metadata CHANGED
@@ -1,21 +1,21 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glimmer-cs-gladiator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Maleh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-11 00:00:00.000000000 Z
11
+ date: 2020-10-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
16
  - - ">="
17
17
  - !ruby/object:Gem::Version
18
- version: 4.17.2.0
18
+ version: 4.17.4.2
19
19
  - - "<"
20
20
  - !ruby/object:Gem::Version
21
21
  version: 5.0.0.0
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: 4.17.2.0
29
+ version: 4.17.4.2
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: 5.0.0.0