glib-web 4.1.0 → 4.1.2

Sign up to get free protection for your applications and to get access to all the features.
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: ''