glib-web 4.1.0 → 4.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/concerns/glib/json/new_dynamic_text.rb +0 -0
  3. data/app/helpers/glib/app_feature_support_helper.rb +0 -0
  4. data/app/helpers/glib/dynamic_texts_helper.rb +0 -0
  5. data/app/helpers/glib/json_ui/action_builder/sheets.rb +0 -0
  6. data/app/helpers/glib/json_ui/analytics_helper.rb +0 -0
  7. data/app/helpers/glib/json_ui/generic_builders.rb +0 -0
  8. data/app/helpers/glib/json_ui/view_builder/fields.rb +7 -2
  9. data/app/helpers/glib/json_ui/view_builder/panels.rb +32 -2
  10. data/app/models/glib/active_storage/attachment.rb +0 -0
  11. data/app/models/glib/active_storage/blob.rb +0 -0
  12. data/app/models/glib/dynamic_text_record.rb +0 -0
  13. data/app/models/glib/text.rb +0 -0
  14. data/app/validators/email_typo_validator.rb +0 -0
  15. data/app/validators/email_validator.rb +0 -0
  16. data/app/validators/url_validator.rb +0 -0
  17. data/app/views/json_ui/garage/actions/dialogs_oauth_post.json.jbuilder +0 -0
  18. data/app/views/json_ui/garage/forms/checkboxes.json.jbuilder +5 -0
  19. data/app/views/json_ui/garage/forms/dynamic_select_data.json.jbuilder +0 -0
  20. data/app/views/json_ui/garage/forms/file_upload.json.jbuilder +1 -0
  21. data/app/views/json_ui/garage/forms/generic_post.json.jbuilder +0 -0
  22. data/app/views/json_ui/garage/forms/submission_flow.json.jbuilder +0 -0
  23. data/app/views/json_ui/garage/forms/submission_flow_post.json.jbuilder +0 -0
  24. data/app/views/json_ui/garage/forms/submission_indicator.json.jbuilder +0 -0
  25. data/app/views/json_ui/garage/forms/submission_indicator_post.json.jbuilder +0 -0
  26. data/app/views/json_ui/garage/forms/text_validation.json.jbuilder +1 -0
  27. data/app/views/json_ui/garage/home/blank.json.jbuilder +0 -0
  28. data/app/views/json_ui/garage/home/slow.json.jbuilder +0 -0
  29. data/app/views/json_ui/garage/lists/_autoload_section.json.jbuilder +1 -1
  30. data/app/views/json_ui/garage/lists/autoload_all.json.jbuilder +0 -0
  31. data/app/views/json_ui/garage/lists/autoload_as_needed.json.jbuilder +0 -0
  32. data/app/views/json_ui/garage/lists/chat_ui.json.jbuilder +0 -0
  33. data/app/views/json_ui/garage/lists/fab.json.jbuilder +0 -0
  34. data/app/views/json_ui/garage/notifications/web_socket.json.jbuilder +0 -0
  35. data/app/views/json_ui/garage/pages/custom_style_class.json.jbuilder +0 -0
  36. data/app/views/json_ui/garage/pages/full_width.json.jbuilder +0 -0
  37. data/app/views/json_ui/garage/pages/full_width_height.json.jbuilder +0 -0
  38. data/app/views/json_ui/garage/pages/layout.json.jbuilder +0 -0
  39. data/app/views/json_ui/garage/pages/loading_indicator.json.jbuilder +0 -0
  40. data/app/views/json_ui/garage/pages/nested_scroll.json.jbuilder +0 -0
  41. data/app/views/json_ui/garage/pages/redirect_onload.json.jbuilder +0 -0
  42. data/app/views/json_ui/garage/panels/_styled.json.jbuilder +0 -0
  43. data/app/views/json_ui/garage/panels/card.json.jbuilder +0 -0
  44. data/app/views/json_ui/garage/panels/custom.json.jbuilder +0 -0
  45. data/app/views/json_ui/garage/panels/outlined.json.jbuilder +0 -0
  46. data/app/views/json_ui/garage/panels/ul.json.jbuilder +19 -4
  47. data/app/views/json_ui/garage/services/dynamic_text.json.jbuilder +0 -0
  48. data/app/views/json_ui/garage/services/image.json.jbuilder +0 -0
  49. data/app/views/json_ui/garage/services/index.json.jbuilder +0 -0
  50. data/app/views/json_ui/garage/tables/_autoload_section.json.jbuilder +0 -0
  51. data/app/views/json_ui/garage/tables/autoload_all.json.jbuilder +0 -0
  52. data/app/views/json_ui/garage/tables/autoload_as_needed.json.jbuilder +0 -0
  53. data/app/views/json_ui/garage/tables/export_import.json.jbuilder +0 -0
  54. data/app/views/json_ui/garage/tables/index.json.jbuilder +0 -0
  55. data/app/views/json_ui/garage/views/calendar_data.json.jbuilder +0 -0
  56. data/app/views/json_ui/garage/views/links.json.jbuilder +1 -1
  57. data/app/views/json_ui/garage/views/map_data.json.jbuilder +0 -0
  58. data/app/views/json_ui/garage/views/multimedia.json.jbuilder +0 -0
  59. data/app/views/layouts/json_ui/no_custom.html.erb +0 -0
  60. data/lib/generators/glib/install_generator.rb +0 -0
  61. data/lib/generators/templates/20191017062519_create_texts.rb +0 -0
  62. data/lib/generators/templates/20191024063257_add_scope_to_texts.rb +0 -0
  63. data/lib/generators/templates/20191112095018_add_lang_to_texts.rb +0 -0
  64. data/lib/generators/templates/20191126071051_create_active_storage_tables.active_storage.rb +0 -0
  65. data/lib/generators/templates/database.yml +0 -0
  66. data/lib/generators/templates/dynamic_text.rb +0 -0
  67. data/lib/glib/blob.rb +11 -3
  68. data/lib/glib/direct_uploads_controller.rb +1 -1
  69. data/lib/glib/dynamic_text/config.rb +0 -0
  70. data/lib/glib/dynamic_text.rb +0 -0
  71. data/lib/glib/engine.rb +2 -1
  72. data/lib/glib/json_crawler/action_crawler.rb +0 -0
  73. data/lib/glib/json_crawler/action_crawlers/action_http.rb +0 -0
  74. data/lib/glib/json_crawler/action_crawlers/dialogs_alert.rb +0 -0
  75. data/lib/glib/json_crawler/action_crawlers/menu.rb +0 -0
  76. data/lib/glib/json_crawler/action_crawlers/run_multiple.rb +0 -0
  77. data/lib/glib/json_crawler/action_crawlers/windows_open.rb +0 -0
  78. data/lib/glib/json_crawler/coverage.rb +0 -0
  79. data/lib/glib/s3_service.rb +30 -0
  80. data/lib/glib/value.rb +0 -0
  81. data/lib/glib/version.rb +0 -0
  82. metadata +3 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 075c1d55a3db9efb8b8fd9302c410203f54f3feaf13e9debb3273fab7facf009
4
- data.tar.gz: c9f19882259bb4e898578994734ece1c472a63b0dfffd7b41cb9fa8a3f89d1bb
3
+ metadata.gz: bbf47486dbe68678b731438238a642383682ac7fa2b5fd85c40784a46dd8b05e
4
+ data.tar.gz: 48745d3666ada734c838020fc10828187d22c0d06b8f95ad8d45b942ad922518
5
5
  SHA512:
6
- metadata.gz: 7c07ee59726cdf85c3cedf5970097fff38916c1e56d062332f61d7fd2692ebf316d9eacb32c9d6e4a65bedec4af28f66ceddf86fe95c84d0fba87ec215250ca6
7
- data.tar.gz: 70d5e728d9730c9b0f2d63d9d34bea15654d8d8048eba682f114ec29c937020c1e058d205d523837a63ea54fa3ef878de498cd310cf1d96e52b435d7ded18109
6
+ metadata.gz: 8bb4e390bb6058cfa4e262ca6da33770fe934508865790a08cfb42425603e3480ccc928f92ed81493fae82a953a15946f68231310a9983cfa42446361f8d56a7
7
+ data.tar.gz: c62be0278b0a8f13005d250ffe06beb52cae2fc500eee818995209c8acde78174fc00b449a126ef37eae5f0336be611dbbbcbd4cdf7a0aa7359b7afdcd419bcb
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -53,6 +53,10 @@ class Glib::JsonUi::ViewBuilder
53
53
  @prop = prop
54
54
  end
55
55
 
56
+ def autoValidate(autoValidate)
57
+ @autoValidate = autoValidate
58
+ end
59
+
56
60
  # Override
57
61
  def created
58
62
  if @prop && (form = page.current_form)
@@ -79,8 +83,7 @@ class Glib::JsonUi::ViewBuilder
79
83
  # - Placeholder competes with label for space
80
84
  json.placeholder @placeholder if @placeholder
81
85
 
82
- # TODO: Add a flag so the framework's user can turn it on and off.
83
- # json.validation @validation if @validation
86
+ json.validation @validation if @autoValidate
84
87
  end
85
88
 
86
89
  # To be overridden
@@ -139,6 +142,7 @@ class Glib::JsonUi::ViewBuilder
139
142
  string :text
140
143
  color :color
141
144
  icon :icon
145
+ bool :disableIfFormInvalid
142
146
  end
143
147
 
144
148
  class CheckGroup < AbstractField
@@ -317,6 +321,7 @@ class Glib::JsonUi::ViewBuilder
317
321
 
318
322
  string :storagePrefix
319
323
  hash :metadata
324
+ string :tagging
320
325
 
321
326
  required :accepts, :directUploadUrl
322
327
 
@@ -121,10 +121,40 @@ class Glib::JsonUi::ViewBuilder
121
121
  def self.field_validation(model, prop)
122
122
  validations = {}
123
123
  model.class.validators_on(prop).each do |validator|
124
- if validator.kind == :presence
125
- validations[:required] = { message: 'Required' }
124
+ validations[validator.kind] = validator.options.except(:if, :unless)
125
+ validations[validator.kind][:message] = validator.options[:message]
126
+ case validator.kind
127
+ when :presence
128
+ validations[validator.kind][:message] ||= I18n.t('errors.messages.present')
129
+ when :acceptance
130
+ validations[validator.kind][:message] ||= I18n.t('errors.messages.accepted')
131
+ when :confirmation
132
+ # raise NotImplemented
133
+ when :numericality
134
+ # raise NotImplemented
135
+ when :comparison
136
+ comparison = validator.options.first[0]
137
+ validations[validator.kind][:message] ||= I18n.t("errors.messages.#{comparison}")
138
+ when :format
139
+ validations[validator.kind][:message] ||= I18n.t('errors.messages.invalid')
140
+ when :inclusion
141
+ validations[validator.kind][:message] ||= I18n.t('errors.messages.inclusion')
142
+ when :exclusion
143
+ validations[validator.kind][:message] ||= I18n.t('errors.messages.exclusion')
144
+ when :length
145
+ validations[validator.kind][:message] = {
146
+ too_long: I18n.t('errors.messages.too_long'),
147
+ wrong_length: I18n.t('errors.messages.wrong_length'),
148
+ too_short: I18n.t('errors.messages.too_short')
149
+ }
126
150
  end
127
151
  end
152
+
153
+ if validations[:presence].present?
154
+ validations[:required] = validations[:presence]
155
+ validations.delete(:presence)
156
+ end
157
+
128
158
  validations
129
159
  end
130
160
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -32,6 +32,11 @@ page.scroll childViews: ->(scroll) do
32
32
  group.fields_check checkValue: 4, label: 'Photography'
33
33
  end
34
34
 
35
+ form.spacer height: 20
36
+ form.h2 text: 'Check without group'
37
+ form.spacer height: 4
38
+ form.fields_check name: 'user[driver]', label: 'Do you have driver license?'
39
+
35
40
  form.spacer height: 20
36
41
  form.button text: 'Submit', onClick: ->(action) { action.forms_submit }
37
42
  end
@@ -50,6 +50,7 @@ page.form options.merge(childViews: ->(form) do
50
50
  foo: 'bar',
51
51
  zoo: 'baz'
52
52
  },
53
+ tagging: 'key=value&key1=value1',
53
54
  files: [
54
55
  { name: 'File (Example)', signed_id: ActiveStorage::Attachment.last&.signed_id }
55
56
  ]
@@ -106,4 +106,5 @@ page.form \
106
106
 
107
107
  form.spacer height: 30
108
108
  form.fields_submit text: 'Submit'
109
+ form.fields_submit text: 'Submit (disable if form invalid)', disableIfFormInvalid: true
109
110
  end
File without changes
File without changes
@@ -11,7 +11,7 @@ section.rows builder: ->(row) do
11
11
  array.each do |i|
12
12
  index = page_index * batch_count + i
13
13
  if local_assigns[:reorder]
14
- row.thumbnail title: "Item #{index}", id: "item_#{index}"
14
+ row.thumbnail title: "Item #{index}"
15
15
  else
16
16
  row.thumbnail title: "Item #{index}", subtitle: "Sub Item #{index}", subsubtitle: "Sub Sub Item #{index}"
17
17
  end
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -38,10 +38,25 @@ page.scroll padding: glib_json_padding_body, childViews: ->(scroll) do
38
38
  action.windows_open url: json_ui_garage_url(path: 'home/blank')
39
39
  end
40
40
 
41
- ul.button icon: 'keyboard_arrow_down', text: 'Level 2', styleClass: 'link', childButtons: ->(menu) do
42
- menu.button text: 'Dropdown item 1'
43
- menu.button text: 'Dropdown item 2'
44
- menu.button text: 'Dropdown item 3'
41
+ ul.button icon: 'keyboard_arrow_down', text: 'Level 2', styleClass: 'link', onClick: ->(action) do
42
+ action.popovers_show \
43
+ key: 'menu',
44
+ placement: 'bottom-start',
45
+ content: ->(dialog) do
46
+ dialog.body childViews: ->(view) do
47
+ view.panels_responsive styleClass: 'popover-menu', width: 200, childViews: ->(res) do
48
+ res.label text: 'Item 1', styleClass: 'popover-menu-item', onClick: ->(saction) do
49
+ saction.popovers_close key: 'menu'
50
+ end
51
+ res.label text: 'Item 2', styleClass: 'popover-menu-item', onClick: ->(saction) do
52
+ saction.popovers_close key: 'menu'
53
+ end
54
+ res.label text: 'Item 3', styleClass: 'popover-menu-item', onClick: ->(saction) do
55
+ saction.popovers_close key: 'menu'
56
+ end
57
+ end
58
+ end
59
+ end
45
60
  end
46
61
  ul.label text: 'Level 3'
47
62
  end
File without changes
@@ -58,7 +58,7 @@ json_ui_page json do |page|
58
58
  scroll.spacer height: 20
59
59
  scroll.h2 text: 'Icon with onClick'
60
60
  scroll.spacer height: 6
61
- scroll.icon spec: 'info', onClick: ->(action) do
61
+ scroll.icon name: 'info', onClick: ->(action) do
62
62
  action.windows_open url: json_ui_garage_url(path: 'home/blank')
63
63
  end
64
64
 
File without changes
File without changes
File without changes
File without changes
data/lib/glib/blob.rb CHANGED
@@ -1,15 +1,23 @@
1
1
  ::ActiveStorage::Blob.class_eval do
2
+ attr_accessor :tagging
3
+
4
+ # removing custom_metadata and add tagging
2
5
  def service_headers_for_direct_upload
3
- service.headers_for_direct_upload key, filename: filename, content_type: content_type, content_length: byte_size, checksum: checksum
6
+ service.headers_for_direct_upload key, filename: filename, content_type: content_type, content_length: byte_size, checksum: checksum, tagging: tagging
7
+ end
8
+ def service_url_for_direct_upload(expires_in: ActiveStorage.service_urls_expire_in)
9
+ service.url_for_direct_upload key, expires_in: expires_in, content_type: content_type, content_length: byte_size, checksum: checksum, custom_metadata: custom_metadata, tagging: tagging
4
10
  end
5
11
 
6
12
  class << self
7
- def create_before_direct_upload!(key: nil, filename:, byte_size:, checksum:, content_type: nil, metadata: nil, service_name: nil, record: nil, prefix: nil)
13
+ def create_before_direct_upload!(key: nil, filename:, byte_size:, checksum:, content_type: nil, metadata: nil, service_name: nil, record: nil, prefix: nil, tagging: nil)
8
14
  key_name = key || generate_unique_secure_token
9
15
  if prefix.present?
10
16
  key_name = "#{prefix}/#{key_name}"
11
17
  end
12
- create! key: key_name, filename: filename, byte_size: byte_size, checksum: checksum, content_type: content_type, metadata: metadata, service_name: service_name
18
+ blob = create! key: key_name, filename: filename, byte_size: byte_size, checksum: checksum, content_type: content_type, metadata: metadata, service_name: service_name
19
+ blob.tagging = tagging
20
+ blob
13
21
  end
14
22
  end
15
23
  end
@@ -19,7 +19,7 @@
19
19
 
20
20
  private
21
21
  def blob_args
22
- params.require(:blob).permit(:filename, :byte_size, :checksum, :content_type, :prefix, metadata: {}).to_h.symbolize_keys
22
+ params.require(:blob).permit(:filename, :byte_size, :checksum, :content_type, :prefix, :tagging, metadata: {}).to_h.symbolize_keys
23
23
  end
24
24
 
25
25
  def authenticate_user!
File without changes
File without changes
data/lib/glib/engine.rb CHANGED
@@ -5,8 +5,9 @@ module Glib
5
5
 
6
6
  # modify direct upload
7
7
  config.to_prepare do
8
+ require_relative 's3_service'
8
9
  require_relative 'blob'
9
- require_relative 'direct_uploads_controller'
10
+ require_relative 'direct_uploads_controller'
10
11
  end
11
12
  end
12
13
  end
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,30 @@
1
+ require 'active_storage/service/s3_service'
2
+
3
+ ::ActiveStorage::Service::S3Service.class_eval do
4
+ attr_reader :headers_for_request
5
+
6
+ # Change presigned_url to presigned_request
7
+ # appearently presigned_url hoist all header `x-amz-` to query params.
8
+ # This is cause problem because S3 server ignore `x-amz-tagging` query params so it fails to tagging an object
9
+ # API: https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/Presigner.html#presigned_request-instance_method
10
+ # Detail about problem: https://github.com/aws/aws-sdk/issues/782
11
+ def url_for_direct_upload(key, expires_in:, content_type:, content_length:, checksum:, tagging: nil, custom_metadata: {})
12
+ instrument :url, key: key do |payload|
13
+ generated_url, headers = object_for(key).presigned_request :put, expires_in: expires_in.to_i,
14
+ content_type: content_type, content_length: content_length, content_md5: checksum,
15
+ metadata: custom_metadata, whitelist_headers: ['content-length'], tagging: tagging, **upload_options
16
+
17
+ payload[:url] = generated_url
18
+ @headers_for_request = headers
19
+
20
+ generated_url
21
+ end
22
+ end
23
+
24
+ def headers_for_direct_upload(key, content_type:, checksum:, filename: nil, disposition: nil, tagging: nil, custom_metadata: {}, **)
25
+ content_disposition = content_disposition_with(type: disposition, filename: filename) if filename
26
+
27
+ headers = { 'Content-Type' => content_type, 'Content-MD5' => checksum, 'Content-Disposition' => content_disposition, **custom_metadata_headers(custom_metadata) }
28
+ headers.merge(headers_for_request)
29
+ end
30
+ end
data/lib/glib/value.rb CHANGED
File without changes
data/lib/glib/version.rb 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: 4.1.0
4
+ version: 4.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - ''
@@ -328,6 +328,7 @@ files:
328
328
  - lib/glib/json_crawler/http.rb
329
329
  - lib/glib/json_crawler/router.rb
330
330
  - lib/glib/mailer_tester.rb
331
+ - lib/glib/s3_service.rb
331
332
  - lib/glib/test_helpers.rb
332
333
  - lib/glib/time_freezable_mailer.rb
333
334
  - lib/glib/time_returning_mailer.rb
@@ -352,8 +353,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
352
353
  - !ruby/object:Gem::Version
353
354
  version: '0'
354
355
  requirements: []
355
- rubyforge_project:
356
- rubygems_version: 2.7.6
356
+ rubygems_version: 3.4.6
357
357
  signing_key:
358
358
  specification_version: 4
359
359
  summary: ''