glib-web 0.5.71 → 0.5.76

Sign up to get free protection for your applications and to get access to all the features.
Files changed (142) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/glib/analytics/funnel.rb +0 -0
  3. data/app/controllers/concerns/glib/auth/policy.rb +0 -0
  4. data/app/controllers/concerns/glib/json/new_dynamic_text.rb +0 -0
  5. data/app/helpers/glib/app_feature_support_helper.rb +0 -0
  6. data/app/helpers/glib/dynamic_images_helper.rb +0 -0
  7. data/app/helpers/glib/dynamic_texts_helper.rb +0 -0
  8. data/app/helpers/glib/enum_helper.rb +10 -0
  9. data/app/helpers/glib/forms_helper.rb +0 -0
  10. data/app/helpers/glib/json_ui/abstract_builder.rb +1 -1
  11. data/app/helpers/glib/json_ui/action_builder/dialogs.rb +0 -0
  12. data/app/helpers/glib/json_ui/action_builder/http.rb +0 -0
  13. data/app/helpers/glib/json_ui/action_builder/panels.rb +0 -0
  14. data/app/helpers/glib/json_ui/action_builder/sheets.rb +0 -0
  15. data/app/helpers/glib/json_ui/action_builder/snackbars.rb +0 -0
  16. data/app/helpers/glib/json_ui/action_builder/windows.rb +0 -0
  17. data/app/helpers/glib/json_ui/analytics_helper.rb +0 -0
  18. data/app/helpers/glib/json_ui/generic_builders.rb +0 -0
  19. data/app/helpers/glib/json_ui/menu_builder.rb +0 -0
  20. data/app/helpers/glib/json_ui/split_builders.rb +0 -0
  21. data/app/helpers/glib/json_ui/styling_helper.rb +0 -0
  22. data/app/helpers/glib/json_ui/table_builders.rb +0 -0
  23. data/app/helpers/glib/json_ui/view_builder/fields.rb +11 -12
  24. data/app/helpers/glib/urls_helper.rb +0 -0
  25. data/app/models/concerns/glib/soft_deletable.rb +68 -0
  26. data/app/models/glib/active_storage/attachment.rb +0 -0
  27. data/app/models/glib/active_storage/blob.rb +0 -0
  28. data/app/models/glib/application_record.rb +0 -0
  29. data/app/models/glib/dynamic_text_record.rb +0 -0
  30. data/app/models/glib/text.rb +0 -0
  31. data/app/policies/glib/application_policy.rb +0 -0
  32. data/app/validators/email_typo_validator.rb +0 -0
  33. data/app/validators/email_validator.rb +0 -0
  34. data/app/validators/url_validator.rb +0 -0
  35. data/app/views/json_ui/garage/_nav_menu.json.jbuilder +0 -0
  36. data/app/views/json_ui/garage/actions/_dialogs.json.jbuilder +0 -0
  37. data/app/views/json_ui/garage/actions/_http.json.jbuilder +0 -0
  38. data/app/views/json_ui/garage/actions/_panels.json.jbuilder +0 -0
  39. data/app/views/json_ui/garage/actions/_reload.json.jbuilder +0 -0
  40. data/app/views/json_ui/garage/actions/_sheets.json.jbuilder +0 -0
  41. data/app/views/json_ui/garage/actions/_snackbars.json.jbuilder +0 -0
  42. data/app/views/json_ui/garage/actions/_timeouts.json.jbuilder +0 -0
  43. data/app/views/json_ui/garage/actions/dialogs_oauth_post.json.jbuilder +0 -0
  44. data/app/views/json_ui/garage/forms/basic.json.jbuilder +0 -0
  45. data/app/views/json_ui/garage/forms/basic_post.json.jbuilder +0 -0
  46. data/app/views/json_ui/garage/forms/checkboxes.json.jbuilder +0 -0
  47. data/app/views/json_ui/garage/forms/dynamic_group.json.jbuilder +0 -0
  48. data/app/views/json_ui/garage/forms/dynamic_select.json.jbuilder +2 -0
  49. data/app/views/json_ui/garage/forms/dynamic_select_data.json.jbuilder +0 -0
  50. data/app/views/json_ui/garage/forms/file_upload.json.jbuilder +0 -5
  51. data/app/views/json_ui/garage/forms/floating_submit.json.jbuilder +0 -0
  52. data/app/views/json_ui/garage/forms/generic_post.json.jbuilder +0 -0
  53. data/app/views/json_ui/garage/forms/get_request.json.jbuilder +0 -0
  54. data/app/views/json_ui/garage/forms/selects.json.jbuilder +7 -0
  55. data/app/views/json_ui/garage/forms/submission_flow.json.jbuilder +0 -0
  56. data/app/views/json_ui/garage/forms/submission_flow_post.json.jbuilder +0 -0
  57. data/app/views/json_ui/garage/forms/submission_indicator.json.jbuilder +0 -0
  58. data/app/views/json_ui/garage/forms/submission_indicator_post.json.jbuilder +0 -0
  59. data/app/views/json_ui/garage/home/blank.json.jbuilder +0 -0
  60. data/app/views/json_ui/garage/home/slow.json.jbuilder +0 -0
  61. data/app/views/json_ui/garage/lists/autoload_all.json.jbuilder +0 -0
  62. data/app/views/json_ui/garage/lists/autoload_as_needed.json.jbuilder +0 -0
  63. data/app/views/json_ui/garage/lists/chat_ui.json.jbuilder +0 -0
  64. data/app/views/json_ui/garage/lists/fab.json.jbuilder +0 -0
  65. data/app/views/json_ui/garage/lists/templating.json.jbuilder +0 -0
  66. data/app/views/json_ui/garage/notifications/web_socket.json.jbuilder +0 -0
  67. data/app/views/json_ui/garage/pages/flat_centered.json.jbuilder +0 -0
  68. data/app/views/json_ui/garage/pages/full_width.json.jbuilder +0 -0
  69. data/app/views/json_ui/garage/pages/full_width_height.json.jbuilder +0 -0
  70. data/app/views/json_ui/garage/pages/index.json.jbuilder +0 -0
  71. data/app/views/json_ui/garage/pages/layout.json.jbuilder +0 -0
  72. data/app/views/json_ui/garage/pages/lifecycle_hooks.json.jbuilder +0 -0
  73. data/app/views/json_ui/garage/pages/loading_indicator.json.jbuilder +0 -0
  74. data/app/views/json_ui/garage/pages/nav_buttons.json.jbuilder +0 -0
  75. data/app/views/json_ui/garage/pages/nested_scroll.json.jbuilder +0 -0
  76. data/app/views/json_ui/garage/pages/tab_bar.json.jbuilder +0 -0
  77. data/app/views/json_ui/garage/panels/_styled.json.jbuilder +0 -0
  78. data/app/views/json_ui/garage/panels/card.json.jbuilder +0 -0
  79. data/app/views/json_ui/garage/panels/carousel.json.jbuilder +0 -0
  80. data/app/views/json_ui/garage/panels/custom.json.jbuilder +0 -0
  81. data/app/views/json_ui/garage/panels/flow.json.jbuilder +0 -0
  82. data/app/views/json_ui/garage/panels/horizontal.json.jbuilder +0 -0
  83. data/app/views/json_ui/garage/panels/index.json.jbuilder +4 -0
  84. data/app/views/json_ui/garage/panels/outlined.json.jbuilder +0 -0
  85. data/app/views/json_ui/garage/panels/responsive.json.jbuilder +0 -0
  86. data/app/views/json_ui/garage/panels/split.json.jbuilder +0 -0
  87. data/app/views/json_ui/garage/panels/ul.json.jbuilder +33 -0
  88. data/app/views/json_ui/garage/panels/vertical.json.jbuilder +0 -0
  89. data/app/views/json_ui/garage/panels/web.json.jbuilder +0 -0
  90. data/app/views/json_ui/garage/services/dynamic_text.json.jbuilder +0 -0
  91. data/app/views/json_ui/garage/services/image.json.jbuilder +0 -0
  92. data/app/views/json_ui/garage/services/index.json.jbuilder +0 -0
  93. data/app/views/json_ui/garage/tables/_autoload_section.json.jbuilder +0 -0
  94. data/app/views/json_ui/garage/tables/autoload_all.json.jbuilder +0 -0
  95. data/app/views/json_ui/garage/tables/autoload_as_needed.json.jbuilder +0 -0
  96. data/app/views/json_ui/garage/tables/export_import.json.jbuilder +0 -0
  97. data/app/views/json_ui/garage/tables/horizontal_scroll.json.jbuilder +0 -0
  98. data/app/views/json_ui/garage/tables/index.json.jbuilder +0 -0
  99. data/app/views/json_ui/garage/tables/layout.json.jbuilder +0 -0
  100. data/app/views/json_ui/garage/views/banners.json.jbuilder +0 -0
  101. data/app/views/json_ui/garage/views/calendar_data.json.jbuilder +0 -0
  102. data/app/views/json_ui/garage/views/charts.json.jbuilder +0 -0
  103. data/app/views/json_ui/garage/views/controls.json.jbuilder +0 -0
  104. data/app/views/json_ui/garage/views/icon_names.json.jbuilder +0 -0
  105. data/app/views/json_ui/garage/views/icons.json.jbuilder +1 -0
  106. data/app/views/json_ui/garage/views/images.json.jbuilder +0 -0
  107. data/app/views/json_ui/garage/views/index.json.jbuilder +0 -0
  108. data/app/views/json_ui/garage/views/links.json.jbuilder +0 -0
  109. data/app/views/json_ui/garage/views/map_cluster_data.json.jbuilder +0 -0
  110. data/app/views/json_ui/garage/views/map_data.json.jbuilder +0 -0
  111. data/app/views/json_ui/garage/views/misc.json.jbuilder +8 -8
  112. data/app/views/json_ui/garage/views/texts.json.jbuilder +0 -0
  113. data/config/routes.rb +0 -0
  114. data/lib/generators/glib/install_generator.rb +0 -0
  115. data/lib/generators/templates/20191017062519_create_texts.rb +0 -0
  116. data/lib/generators/templates/20191024063257_add_scope_to_texts.rb +0 -0
  117. data/lib/generators/templates/20191112095018_add_lang_to_texts.rb +0 -0
  118. data/lib/generators/templates/20191126071051_create_active_storage_tables.active_storage.rb +0 -0
  119. data/lib/generators/templates/database.yml +0 -0
  120. data/lib/generators/templates/dynamic_text.rb +0 -0
  121. data/lib/glib/crypt/utils.rb +0 -0
  122. data/lib/glib/crypt.rb +0 -0
  123. data/lib/glib/dynamic_text/config.rb +0 -0
  124. data/lib/glib/dynamic_text.rb +0 -0
  125. data/lib/glib/engine.rb +0 -0
  126. data/lib/glib/json_crawler/action_crawler.rb +0 -0
  127. data/lib/glib/json_crawler/action_crawlers/action_http.rb +0 -0
  128. data/lib/glib/json_crawler/action_crawlers/forms_submit.rb +0 -0
  129. data/lib/glib/json_crawler/action_crawlers/menu.rb +0 -0
  130. data/lib/glib/json_crawler/action_crawlers/nav_initiate.rb +0 -0
  131. data/lib/glib/json_crawler/action_crawlers/run_multiple.rb +0 -0
  132. data/lib/glib/json_crawler/action_crawlers/windows_open.rb +0 -0
  133. data/lib/glib/json_crawler/coverage.rb +0 -0
  134. data/lib/glib/json_crawler/http.rb +0 -0
  135. data/lib/glib/json_crawler/router.rb +5 -13
  136. data/lib/glib/json_crawler.rb +0 -0
  137. data/lib/glib/mailer_tester.rb +0 -0
  138. data/lib/glib/value.rb +0 -0
  139. data/lib/glib/version.rb +0 -0
  140. data/lib/glib-web.rb +0 -0
  141. data/lib/tasks/db.rake +0 -0
  142. metadata +4 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 63c05f4665c6948216e6fd40af4b8fcc4cfddccec4ab4bda3b8edfd65b3219ce
4
- data.tar.gz: b2efc86bb633920c6430482c743139af1c44efeaef12252237a4be0d75556794
3
+ metadata.gz: e195cf56a4e446bc732f67732bd213af40b14bb6fb5d04eee102d28a2e552de4
4
+ data.tar.gz: fce259c689b6eb4e886f132f396dd2f4b0c93bbf9d5665442dd6950bbcf90a2e
5
5
  SHA512:
6
- metadata.gz: cc286a18d408ed083904a16cd4c41d85237802f52fd6bbf83be58419687787816327fedac8d471212dbc39d94a65d86d118a045f14de84fbe2ea5677514d3320
7
- data.tar.gz: 49c84b472a6c1a2a4d5d87e8a9143b9f873f558de7ee25756ba1ea85e7ea579cda30eaa42b24b3bb7a7867d09e2aee836cdc9e84fef904888b383c7a83d339b2
6
+ metadata.gz: b9f97af017b745de55389d63b6d8bdfef4ab479c1eca98287e00464ef8fad0a617c7ad4121a6da0905f13579ff81662dc056dd53df926010eb0c67b866cfdd5c
7
+ data.tar.gz: 0042d88e51f14d8e52f859f27592aa81b3c594e4463845a067c84541495ff46055df363f0713b97222f01d37f91fbcae478ecddc7aaeeec704c09dd59571c724
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -4,5 +4,15 @@ module Glib
4
4
  keys ||= clazz.send("#{enum_field}s").keys
5
5
  keys.map { |i| { text: clazz.glib_enum_humanize(enum_field, i), value: i } }
6
6
  end
7
+
8
+ # See https://en.wikipedia.org/wiki/List_of_tz_database_time_zones and description
9
+ def glib_time_zone_options
10
+ ActiveSupport::TimeZone.all.sort { |a, b|
11
+ a.utc_offset <=> b.utc_offset
12
+ }.collect { |tz|
13
+ utc_offset = "#{tz.utc_offset >= 0 ? '+' : ''}#{tz.utc_offset / 60 / 60}h"
14
+ { value: tz.tzinfo.identifier, text: "#{utc_offset} #{tz.name}" }
15
+ }
16
+ end
7
17
  end
8
18
  end
File without changes
@@ -117,7 +117,7 @@ module Glib
117
117
  define_method(propName) do |value|
118
118
  if (value = value&.to_s)
119
119
  if !Rails.env.production?
120
- if !value.match /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/i
120
+ if !value.match /^#([A-Fa-f0-9]{8}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/i
121
121
  raise "Invalid color: #{value}"
122
122
  end
123
123
  end
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -152,6 +152,17 @@ class Glib::JsonUi::ViewBuilder
152
152
  hash :append
153
153
  end
154
154
 
155
+ class TimeZone < AbstractField
156
+ include Glib::EnumHelper
157
+
158
+ # Override
159
+ def created
160
+ super
161
+
162
+ json.options glib_time_zone_options
163
+ end
164
+ end
165
+
155
166
  # TODO: Remove (deprecated)
156
167
  class Autocomplete < AbstractField
157
168
  array :options
@@ -214,18 +225,6 @@ class Glib::JsonUi::ViewBuilder
214
225
  hash :placeholderView
215
226
  end
216
227
 
217
- class MultiImage < Text
218
- # file_rules = { fileType: 'image/*', maxFileSize: 5000 }
219
- # file_rules = { fileType: 'video/*', maxFileSize: 50000 }
220
- # file_rules = { fileType: 'application/pdf', maxFileSize: 5000 }
221
- # hash :accepts
222
-
223
- string :directUploadUrl
224
- # string :fileUrl
225
- # string :fileTitle
226
- hash :placeholderView
227
- end
228
-
229
228
  class Date < AbstractField
230
229
  date :min
231
230
  date :max
File without changes
@@ -0,0 +1,68 @@
1
+ module Glib
2
+ module SoftDeletable
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ default_scope { where(deleted_at: nil) }
7
+ scope :with_deleted, -> { unscope(where: :deleted_at) }
8
+
9
+ # "Soft delete" - set deleted_at if it is nil, actually destroy the record
10
+ # if forced.
11
+ #
12
+ # @param force [Boolean]
13
+ def destroy(force = nil)
14
+ return force_destroy_record if force == :force
15
+ return self if deleted?
16
+
17
+ soft_destroy_record
18
+ end
19
+
20
+ # Revive a soft-deleted record and associated records if soft-deleted,
21
+ # otherwise return self
22
+ def revive
23
+ return self unless deleted?
24
+
25
+ ActiveRecord::Base.transaction do
26
+ update(deleted_at: nil)
27
+ revive_associated_records
28
+ end
29
+ end
30
+
31
+ # Whether or not a record is deleted
32
+ def deleted?
33
+ deleted_at.present?
34
+ end
35
+
36
+ private
37
+ def force_destroy_record
38
+ ActiveRecord::Base.transaction do
39
+ destroy_associated_records(:force)
40
+ method(:destroy).super_method.call
41
+ end
42
+ end
43
+
44
+ def soft_destroy_record
45
+ ActiveRecord::Base.transaction do
46
+ destroy_associated_records
47
+ update(deleted_at: Time.zone.now)
48
+ end
49
+ end
50
+
51
+ def destroy_associated_records(force = nil)
52
+ associated_records.each { |r| r.destroy(force) }
53
+ end
54
+
55
+ def revive_associated_records
56
+ associated_records.each(&:revive)
57
+ end
58
+
59
+ # This should return an array of all associated records of an object that
60
+ # should be soft deleted with it (i.e. those that have dependent: :destroy
61
+ # set). In principle we could figure this out automatically but in the
62
+ # interest of simplicity we'll just define it manually for each class.
63
+ def associated_records
64
+ []
65
+ end
66
+ end
67
+ end
68
+ end
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -6,6 +6,8 @@ render "#{@path_prefix}/nav_menu", json: json, page: page
6
6
  page.form url: json_ui_garage_url(path: 'forms/generic_post'), method: 'post', padding: glib_json_padding_body, childViews: ->(form) do
7
7
  form.h2 text: 'Dynamic Select'
8
8
  form.spacer height: 6
9
+ form.label text: 'Dynamically loads options from the server. Useful for a huge list (e.g. 1000+ items)'
10
+ form.spacer height: 14
9
11
 
10
12
  form.fields_dynamicSelect name: 'user[primary_language]', width: 'matchParent', label: 'Primary Language',
11
13
  selectedOptions: [ { value: 'id3', text: 'Item 3' } ],
@@ -28,10 +28,5 @@ page.form options.merge(childViews: ->(form) do
28
28
  rules = { fileType: 'pdf', maxFileSize: 5000 }
29
29
  form.fields_file name: 'user[pdf2][]', width: 'matchParent', label: 'PDF Document', accepts: rules, directUploadUrl: rails_direct_uploads_url
30
30
 
31
- # TODO
32
- # rules = { fileType: 'image/*', maxFileSize: 1, fileTypeErrorText: 'Invalid!', maxFileSizeErrorText: 'Too big!' }
33
- # form.fields_multiImage name: 'user[photos][]', width: 'matchParent', label: 'Avatar', accepts: rules, directUploadUrl: rails_direct_uploads_url,
34
- # placeholderView: { type: 'avatar', width: 100, height: 100, url: 'data:image/jpeg;base64,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' }
35
-
36
31
  form.fields_submit text: 'Submit'
37
32
  end)
@@ -71,6 +71,13 @@ page.form url: json_ui_garage_url(path: 'forms/generic_post'), method: 'post', p
71
71
  form.fields_select name: 'user[nil_default]', width: 'matchParent', label: 'Nil Default', options: languages.map { |k, v| { value: k, text: v } }
72
72
  form.fields_select name: 'user[mixed_default][]', width: 'matchParent', label: 'Mixed Default', options: languages.map { |k, v| { value: k, text: v } }, value: ['', 'specified', nil], multiple: true
73
73
 
74
+ form.spacer height: 20
75
+ form.h2 text: 'Timezone selection'
76
+ form.spacer height: 6
77
+ form.label text: 'The select field defaults to the device\'s time zone.'
78
+ form.spacer height: 6
79
+ form.fields_timeZone name: 'user[time_zone]', width: 'matchParent', label: 'Time Zone'
80
+
74
81
  # TODO: Remove
75
82
  form.spacer height: 20
76
83
  form.h2 text: 'Autocomplete (select with manual entry) -- DEPRECATED: Confusing UX, promote bad backend design'
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -27,6 +27,10 @@ json_ui_page json do |page|
27
27
  template.thumbnail title: 'Responsive', subtitle: 'Arrange *column panels* horizontally using flex', onClick: ->(action) do
28
28
  action.windows_open url: json_ui_garage_url(path: 'panels/responsive')
29
29
  end
30
+ template.thumbnail title: 'Unordered List', subtitle: 'Bullet points similar to HTML\'s <ul> tag', onClick: ->(action) do
31
+ action.windows_open url: json_ui_garage_url(path: 'panels/ul')
32
+ end
33
+
30
34
 
31
35
  end
32
36
  end, ->(section) do
File without changes
@@ -0,0 +1,33 @@
1
+ json.title 'Unordered List'
2
+
3
+ page = json_ui_page json
4
+ render "#{@path_prefix}/nav_menu", json: json, page: page
5
+
6
+ page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
7
+ scroll.h2 text: 'Standard Usage'
8
+ scroll.spacer height: 6
9
+ scroll.panels_ul childViews: ->(ul) do
10
+ ul.button text: 'Button', styleClass: 'link', onClick: ->(action) do
11
+ action.windows_open url: json_ui_garage_url(path: 'home/blank')
12
+ end
13
+ ul.label text: 'Label'
14
+ end
15
+
16
+ scroll.spacer height: 14
17
+ scroll.h2 text: 'Breadcrumbs'
18
+ scroll.spacer height: 6
19
+ scroll.panels_ul \
20
+ width: 'matchParent',
21
+ backgroundColor: '#eeeeee',
22
+ padding: { top: 10, right: 20, bottom: 10, left: 20 },
23
+ styleClass: 'breadcrumbs',
24
+ childViews: ->(ul) do
25
+ ul.button text: 'Level 1', styleClass: 'link', onClick: ->(action) do
26
+ action.windows_open url: json_ui_garage_url(path: 'home/blank')
27
+ end
28
+ ul.button text: 'Level 2', styleClass: 'link', onClick: ->(action) do
29
+ action.windows_open url: json_ui_garage_url(path: 'home/blank')
30
+ end
31
+ ul.label text: 'Level 3'
32
+ end
33
+ end
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -11,4 +11,5 @@ page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
11
11
  scroll.spacer height: 20
12
12
  scroll.h2 text: 'Icon with color'
13
13
  scroll.icon name: 'home', color: '#9370DB'
14
+ scroll.icon name: 'home', color: '#9370DB80'
14
15
  end
File without changes
File without changes
File without changes
@@ -5,14 +5,14 @@ json_ui_page json do |page|
5
5
 
6
6
  page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
7
7
 
8
- scroll.h2 text: 'Unordered List'
9
- scroll.spacer height: 6
10
- scroll.panels_ul childViews: ->(ul) do
11
- ul.button text: 'Button', styleClass: 'link', onClick: ->(action) do
12
- action.windows_open url: json_ui_garage_url(path: 'home/blank')
13
- end
14
- ul.label text: 'Label'
15
- end
8
+ # scroll.h2 text: 'Unordered List'
9
+ # scroll.spacer height: 6
10
+ # scroll.panels_ul childViews: ->(ul) do
11
+ # ul.button text: 'Button', styleClass: 'link', onClick: ->(action) do
12
+ # action.windows_open url: json_ui_garage_url(path: 'home/blank')
13
+ # end
14
+ # ul.label text: 'Label'
15
+ # end
16
16
 
17
17
  scroll.spacer height: 20
18
18
  scroll.h2 text: 'Time'
File without changes
data/config/routes.rb CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
data/lib/glib/crypt.rb CHANGED
File without changes
File without changes
File without changes
data/lib/glib/engine.rb CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1,19 +1,19 @@
1
1
  module Glib
2
2
  module JsonCrawler
3
3
  class Router
4
- attr_reader :read_only_actions
4
+ attr_reader :read_only_actions, :logger
5
5
 
6
6
  def log(action, url, response = nil)
7
- @logger.puts ' ' * @depth + [
7
+ @logger +=' ' * @depth + [
8
8
  action,
9
9
  response.present? ? response.code : nil,
10
10
  url
11
- ].compact.join(' :: ')
11
+ ].compact.join(' :: ') + "\n"
12
12
  end
13
13
 
14
- def initialize(logger)
14
+ def initialize
15
15
  @depth = -1
16
- @logger = logger
16
+ @logger = ''
17
17
  @visitor = Glib::Json::Traversal::Visitor.new
18
18
  @read_only_actions = Set.new
19
19
  end
@@ -82,14 +82,6 @@ module Glib
82
82
  end
83
83
  end
84
84
 
85
- def tear_down
86
- # NOTE: Experimental, to address issue where sometimes changes don't get saved.
87
- # FINDING: Doesn't work
88
- # @logger.flush
89
-
90
- @logger.close
91
- end
92
-
93
85
  def crawl_multiple(views, block)
94
86
  @visitor.traverse_multiple views, block
95
87
  end
File without changes
File without changes
data/lib/glib/value.rb CHANGED
File without changes
data/lib/glib/version.rb CHANGED
File without changes
data/lib/glib-web.rb CHANGED
File without changes
data/lib/tasks/db.rake CHANGED
File without changes
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glib-web
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.71
4
+ version: 0.5.76
5
5
  platform: ruby
6
6
  authors:
7
7
  - ''
@@ -113,6 +113,7 @@ files:
113
113
  - app/helpers/glib/json_ui/view_builder/fields.rb
114
114
  - app/helpers/glib/json_ui/view_builder/panels.rb
115
115
  - app/helpers/glib/urls_helper.rb
116
+ - app/models/concerns/glib/soft_deletable.rb
116
117
  - app/models/glib/active_storage/attachment.rb
117
118
  - app/models/glib/active_storage/blob.rb
118
119
  - app/models/glib/application_record.rb
@@ -197,6 +198,7 @@ files:
197
198
  - app/views/json_ui/garage/panels/outlined.json.jbuilder
198
199
  - app/views/json_ui/garage/panels/responsive.json.jbuilder
199
200
  - app/views/json_ui/garage/panels/split.json.jbuilder
201
+ - app/views/json_ui/garage/panels/ul.json.jbuilder
200
202
  - app/views/json_ui/garage/panels/vertical.json.jbuilder
201
203
  - app/views/json_ui/garage/panels/web.json.jbuilder
202
204
  - app/views/json_ui/garage/services/dynamic_text.json.jbuilder
@@ -274,8 +276,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
274
276
  - !ruby/object:Gem::Version
275
277
  version: '0'
276
278
  requirements: []
277
- rubyforge_project:
278
- rubygems_version: 2.7.6
279
+ rubygems_version: 3.1.4
279
280
  signing_key:
280
281
  specification_version: 4
281
282
  summary: ''