rails_com 1.2.4 → 1.2.5

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 (66) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/Rakefile +4 -17
  4. data/app/assets/images/image-square.png +0 -0
  5. data/app/assets/javascripts/rails_com/application.js +43 -1
  6. data/{lib/assets/javascripts/input-attachment.js → app/assets/javascripts/rails_com/attachment.js} +24 -150
  7. data/app/assets/javascripts/rails_com/picture.js +17 -0
  8. data/app/controllers/{active_storage → active_storage_ext/admin}/attachments_controller.rb +2 -2
  9. data/app/controllers/active_storage_ext/admin/base_controller.rb +4 -0
  10. data/app/controllers/active_storage_ext/admin/blob_defaults_controller.rb +54 -0
  11. data/app/controllers/active_storage_ext/admin/blobs_controller.rb +48 -0
  12. data/app/controllers/active_storage_ext/audios_controller.rb +24 -0
  13. data/app/controllers/concerns/rails_common_api.rb +50 -0
  14. data/app/controllers/concerns/rails_common_xhr.rb +15 -0
  15. data/app/helpers/rails_com/active_helper.rb +21 -9
  16. data/app/helpers/rails_com/assets_helper.rb +57 -23
  17. data/app/helpers/rails_com/format_helper.rb +2 -2
  18. data/app/helpers/rails_com/time_helper.rb +2 -1
  19. data/app/models/active_storage/blob_default.rb +5 -0
  20. data/app/models/application_record.rb +3 -0
  21. data/app/models/{state_machine.rb → concerns/state_machine.rb} +0 -0
  22. data/app/views/{active_storage → active_storage_ext/admin}/attachments/destroy.js.erb +0 -0
  23. data/app/views/active_storage_ext/admin/blob_defaults/_form.html.erb +7 -0
  24. data/app/views/active_storage_ext/admin/blob_defaults/_search_form.html.erb +7 -0
  25. data/app/views/active_storage_ext/admin/blob_defaults/edit.html.erb +9 -0
  26. data/app/views/active_storage_ext/admin/blob_defaults/index.html.erb +48 -0
  27. data/app/views/active_storage_ext/admin/blob_defaults/new.html.erb +9 -0
  28. data/app/views/active_storage_ext/admin/blob_defaults/show.html.erb +10 -0
  29. data/app/views/active_storage_ext/admin/blobs/_search_form.html.erb +9 -0
  30. data/app/views/active_storage_ext/admin/blobs/destroy.js.erb +1 -0
  31. data/app/views/active_storage_ext/admin/blobs/index.html.erb +51 -0
  32. data/app/views/active_storage_ext/admin/blobs/new.html.erb +13 -0
  33. data/app/views/active_storage_ext/admin/blobs/show.html.erb +10 -0
  34. data/app/views/active_storage_ext/attachments/_default_image_item.html.erb +6 -0
  35. data/app/views/active_storage_ext/attachments/_image_item.html.erb +6 -0
  36. data/app/views/{active_storage → active_storage_ext}/attachments/_list.html.erb +1 -4
  37. data/app/views/{active_storage → active_storage_ext}/attachments/_list_edit.html.erb +1 -1
  38. data/app/views/{active_storage → active_storage_ext}/attachments/_list_form.html.erb +8 -8
  39. data/app/views/{active_storage → active_storage_ext}/attachments/_video_item.html.erb +0 -0
  40. data/app/views/active_storage_ext/audios/show.html.erb +5 -0
  41. data/config/locales/en.yml +2 -1
  42. data/config/locales/zh.yml +2 -1
  43. data/config/routes.rb +13 -6
  44. data/db/migrate/20181012025833_rails_com_init.rb +13 -0
  45. data/lib/mina/sidekiq.rb +3 -1
  46. data/lib/rails_com.rb +3 -1
  47. data/lib/rails_com/config.rb +2 -1
  48. data/lib/rails_com/core_ext/array.rb +2 -2
  49. data/lib/rails_com/core_ext/date.rb +3 -2
  50. data/lib/rails_com/engine.rb +3 -5
  51. data/lib/rails_com/helpers/model_helper.rb +10 -8
  52. data/lib/rails_com/rails_ext/activestorage_attached.rb +1 -1
  53. data/lib/rails_com/rails_ext/attached_macros.rb +21 -0
  54. data/lib/rails_com/rails_ext/attachment_transfer.rb +3 -1
  55. data/lib/rails_com/rails_ext/errors.rb +4 -0
  56. data/lib/rails_com/rails_ext/template_renderer.rb +15 -0
  57. data/lib/rails_com/utils/babel.rb +38 -0
  58. data/lib/rails_com/utils/time_helper.rb +9 -4
  59. data/lib/rails_com/version.rb +2 -2
  60. data/lib/templates/erb/scaffold/edit.html.erb.tt +2 -2
  61. data/lib/templates/erb/scaffold/new.html.erb.tt +2 -2
  62. data/lib/templates/erb/scaffold/show.html.erb.tt +2 -2
  63. metadata +39 -14
  64. data/app/assets/javascripts/rails_com/common.js +0 -38
  65. data/app/controllers/concerns/the_common_api.rb +0 -41
  66. data/app/views/active_storage/attachments/_image_item.html.erb +0 -6
@@ -0,0 +1,13 @@
1
+ <div class="ui segment breadcrumb">
2
+ <%= link_to 'Back', rails_ext_blobs_path, class: 'section' %>
3
+ <div class="divider"> / </div>
4
+ <div class="active section">Add</div>
5
+ </div>
6
+
7
+ <div class="ui segment">
8
+ <%= form_with model: @blob, url: rails_ext_blobs_path, local: true do |f| %>
9
+ <%= render 'shared/error_messages', target: @blob %>
10
+ <%= f.file_field :io %>
11
+ <%= f.submit %>
12
+ <% end %>
13
+ </div>
@@ -0,0 +1,10 @@
1
+ <div class="ui segment breadcrumb">
2
+ <%= link_to 'Back', blobs_path, class: 'section' %>
3
+ <div class="divider"> / </div>
4
+ <div class="active section">Show</div>
5
+ </div>
6
+
7
+ <table class="ui very basic large table">
8
+ <tbody>
9
+ </tbody>
10
+ </table>
@@ -0,0 +1,6 @@
1
+ <div class="ui image">
2
+ <a href="javascript:void(0);" onclick="this.parentNode.remove()" class="ui grey right corner mini label">
3
+ <i class="times icon"></i>
4
+ </a>
5
+ <%= image_tag 'image-square.png', data: { target: 'picture.src' }, style: 'max-width: 100%' %>
6
+ </div>
@@ -0,0 +1,6 @@
1
+ <div class="ui image">
2
+ <%= link_to rails_ext_attachment_path(image.id), method: :delete, data: {confirm: 'Are you sure?'}, remote: true, class: 'ui grey right corner mini label' do %>
3
+ <i class="times icon"></i>
4
+ <% end %>
5
+ <%= image_tag image, id: "attachment_#{image.id}", data: { target: 'picture.src' }, style: 'max-width: 100%' %>
6
+ </div>
@@ -1,4 +1,4 @@
1
- <% if target.is_a?(ActiveStorage::Attached::One) && target.attached? %>
1
+ <% if target.is_a?(ActiveStorage::Attached::One) && target.attachment.present? %>
2
2
  <% if target.content_type.to_s.start_with?('image') %>
3
3
  <%= image_tag target, style: 'max-width: 100%', class: 'ui small image' %>
4
4
  <% elsif target.content_type.to_s.start_with?('video') %>
@@ -23,6 +23,3 @@
23
23
  <% end %>
24
24
  <% end %>
25
25
  <% end %>
26
-
27
-
28
-
@@ -22,4 +22,4 @@
22
22
  </p>
23
23
  <% end %>
24
24
  <% end %>
25
- <% end %>
25
+ <% end %>
@@ -1,28 +1,28 @@
1
1
  <div class="top attached inline fields" id="<%= "#{target.record.class.name.underscore}_attachments_#{target.record.id}" %>">
2
2
  <div class="six wide field"></div>
3
- <div class="field" id="file_preview" data-controller="attachment">
3
+ <div class="field ui tiny images" id="file_preview" data-controller="picture">
4
4
  <% if target.is_a?(ActiveStorage::Attached::One) && target.attached? %>
5
5
  <% if target.content_type.to_s.start_with?('image') %>
6
- <%= render partial: 'active_storage/attachments/image_item', locals: { image: target } %>
6
+ <%= render partial: 'active_storage_ext/attachments/image_item', locals: { image: target } %>
7
7
  <% else %>
8
8
  <p id="attachment_<%= target.id %>">
9
9
  <%= link_to target.filename, rails_blob_path(target) %>
10
- <%= link_to 'x', rails_attachment_path(target.id), method: :delete, data: {confirm: 'Are you sure?'}, remote: true %>
10
+ <%= link_to 'x', rails_ext_attachment_path(target.id), method: :delete, data: { confirm: 'Are you sure?' }, remote: true %>
11
11
  </p>
12
12
  <% end %>
13
- <% elsif target.is_a?(ActiveStorage::Attached::Many) %>
13
+ <% elsif target.is_a?(ActiveStorage::Attached::Many) && target.attached? %>
14
14
  <% target.each do |file| %>
15
15
  <% if file.content_type.to_s.start_with?('image') %>
16
- <%= render partial: 'active_storage/attachments/image_item', locals: { image: file } %>
16
+ <%= render partial: 'active_storage_ext/attachments/image_item', locals: { image: file } %>
17
17
  <% else %>
18
18
  <p id="attachment_<%= file.id %>">
19
19
  <%= link_to file.filename, rails_blob_path(file) %>
20
- <%= link_to 'x', rails_attachment_path(file.id), method: :delete, data: {confirm: 'Are you sure?'}, remote: true %>
20
+ <%= link_to 'x', rails_ext_attachment_path(file.id), method: :delete, data: { confirm: 'Are you sure?' }, remote: true %>
21
21
  </p>
22
22
  <% end %>
23
23
  <% end %>
24
+ <% else %>
25
+ <%= render partial: 'active_storage_ext/attachments/default_image_item' %>
24
26
  <% end %>
25
27
  </div>
26
28
  </div>
27
-
28
-
@@ -0,0 +1,5 @@
1
+ <div class="ui basic center aligned segment">
2
+ <%= audio_tag @audio.service_url(disposition: params[:disposition]),
3
+ controls: true
4
+ %>
5
+ </div>
@@ -1,4 +1,5 @@
1
1
  en:
2
+ site_name: Rails Application
2
3
  controller:
3
4
  show: Show
4
5
  edit: Edit
@@ -33,4 +34,4 @@ en:
33
34
  storage_units:
34
35
  units:
35
36
  h: Hours
36
- m: Min
37
+ m: Min
@@ -1,4 +1,5 @@
1
1
  zh:
2
+ site_name: Rails Application
2
3
  controller:
3
4
  show: 详情
4
5
  edit: 编辑
@@ -28,4 +29,4 @@ zh:
28
29
  one: "Displaying <b>1</b> %{entry_name}"
29
30
  other: "Displaying <b>all %{count}</b> %{entry_name}"
30
31
  more_pages:
31
- display_entries: "Displaying %{entry_name} <b>%{first}&nbsp;-&nbsp;%{last}</b> of <b>%{total}</b> in total"
32
+ display_entries: "Displaying %{entry_name} <b>%{first}&nbsp;-&nbsp;%{last}</b> of <b>%{total}</b> in total"
@@ -1,13 +1,20 @@
1
1
  Rails.application.routes.draw do
2
2
 
3
- scope :rails, as: 'rails', module: 'active_storage' do
4
- resources :attachments, only: [:destroy]
5
- end
6
-
7
- scope :rails, as: 'rails', module: 'active_storage_ext' do
3
+ scope :rails, module: 'active_storage_ext', as: 'rails_ext' do
8
4
  resources :videos, only: [:show] do
9
5
  put :transfer, on: :member
10
6
  end
7
+ resources :audios, only: [:show] do
8
+ put :transfer, on: :member
9
+ end
10
+ end
11
+
12
+ scope :rails, module: 'active_storage_ext/admin', as: 'rails_ext' do
13
+ resources :attachments, only: [:destroy]
14
+ resources :blobs, only: [:index, :new, :create, :destroy] do
15
+ get :unattached, on: :collection
16
+ end
17
+ resources :blob_defaults
11
18
  end
12
19
 
13
- end
20
+ end
@@ -0,0 +1,13 @@
1
+ class RailsComInit < ActiveRecord::Migration[5.2]
2
+ def change
3
+
4
+ create_table :active_storage_blob_defaults do |t|
5
+ t.string :record_class
6
+ t.string :name
7
+ t.timestamps
8
+ end
9
+
10
+ change_column_null :active_storage_blobs, :checksum, true
11
+
12
+ end
13
+ end
@@ -1,3 +1,5 @@
1
+
2
+ #:nodoc:
1
3
  set :sidekiq, -> { "#{fetch :bundle_prefix} sidekiq -d" }
2
4
  set :sidekiqctl, -> { "#{fetch :bundle_prefix} sidekiqctl" }
3
5
  set :sidekiq_config, -> { "#{fetch :current_path}/config/sidekiq.yml" }
@@ -62,4 +64,4 @@ namespace :sidekiq do
62
64
  invoke :'sidekiq:start'
63
65
  end
64
66
 
65
- end
67
+ end
@@ -28,10 +28,12 @@ require 'rails_com/rails_ext/persistence_sneakily'
28
28
  require 'rails_com/rails_ext/translation_helper'
29
29
  require 'rails_com/rails_ext/video_response'
30
30
  require 'rails_com/rails_ext/attachment_transfer'
31
+ require 'rails_com/rails_ext/errors'
31
32
  require 'rails_com/sprockets/non_digest_assets'
32
33
 
33
34
  # Utils
34
35
  require 'rails_com/utils/time_helper'
35
36
  require 'rails_com/utils/num_helper'
36
37
  require 'rails_com/utils/uid_helper'
37
- require 'rails_com/utils/jobber'
38
+ require 'rails_com/utils/jobber'
39
+ require 'rails_com/utils/babel'
@@ -1,6 +1,6 @@
1
1
  require 'active_support/configurable'
2
2
 
3
- module RailsCom
3
+ module RailsCom #:nodoc:
4
4
  include ActiveSupport::Configurable
5
5
 
6
6
  configure do |config|
@@ -8,6 +8,7 @@ module RailsCom
8
8
  'rails/welcome'
9
9
  ]
10
10
  config.app_class = 'ApplicationController'
11
+ config.admin_class = 'AdminController'
11
12
  end
12
13
 
13
14
  end
@@ -49,8 +49,8 @@ class Array
49
49
  # [:b, 2]
50
50
  # ]
51
51
  # raw_data.to_combined_h
52
- # => { a: [1, 2], b: 2 }
53
- # #todo nested array bug
52
+ # #=> { a: [1, 2], b: 2 }
53
+ # todo nested array bug
54
54
  def to_combined_h
55
55
  hash = {}
56
56
  self.each { |x, y| hash[x] = hash[x] ? Array(hash[x]) << y : y }
@@ -1,7 +1,8 @@
1
1
  class Date
2
2
 
3
- # '2018-01-01'.to_date.after(2.month) => '2018-02-31'
4
- # '2018-01-31'.to_date.after(1.month) => '2018-03-02'
3
+ # Chinese custom after date
4
+ # '2018-01-01'.to_date.after(2.month) => '2018-02-31'
5
+ # '2018-01-31'.to_date.after(1.month) => '2018-03-02'
5
6
  def after(other)
6
7
  if ActiveSupport::Duration === other
7
8
  if other.parts.keys == [:months]
@@ -1,4 +1,4 @@
1
- class RailsCom::Engine < ::Rails::Engine
1
+ class RailsCom::Engine < ::Rails::Engine #:nodoc:
2
2
 
3
3
  config.generators do |g|
4
4
  g.stylesheets false
@@ -13,17 +13,15 @@ class RailsCom::Engine < ::Rails::Engine
13
13
  app.config.assets.precompile += ['rails_com_manifest.js']
14
14
  end
15
15
 
16
- initializer 'rails_com.add_generator_templates' do |app|
17
- app.config.paths['lib/templates'].unshift File.expand_path('lib/templates', root)
18
- end
19
-
20
16
  initializer 'rails_com.add_assets_templates' do |app|
21
17
  app.config.assets.paths.push(*Dir[File.expand_path('lib/nondigest_assets/*', root)])
22
18
  end
23
19
 
24
20
  initializer 'rails_com.add_activestorage' do |app|
21
+ require 'rails_com/rails_ext/attached_macros'
25
22
  ActiveStorage::DiskController.include VideoResponse
26
23
  ActiveStorage::Attachment.include AttachmentTransfer
24
+ ActiveStorage::Attached::One.prepend RailsExt::AttachedOne
27
25
  end
28
26
 
29
27
  end
@@ -15,14 +15,16 @@ module RailsCom::ModelHelper
15
15
 
16
16
  def column_attributes
17
17
  columns.map do |column|
18
- [
19
- column.name.to_sym,
20
- column.default,
21
- column.type,
22
- column.sql_type,
23
- column.null,
24
- column.default_function
25
- ]
18
+ {
19
+ name: column.name.to_sym,
20
+ name_i18n: human_attribute_name(column.name),
21
+ type: column.type,
22
+ sql_type: column.sql_type,
23
+ null: column.null,
24
+ default: column.default,
25
+ default_function: column.default_function,
26
+ comment: column.comment
27
+ }
26
28
  end
27
29
  end
28
30
 
@@ -29,4 +29,4 @@ module ActiveStorage
29
29
  end
30
30
  end
31
31
 
32
- end
32
+ end
@@ -0,0 +1,21 @@
1
+ module RailsExt
2
+ module AttachedOne
3
+
4
+ def attachment
5
+
6
+ if super
7
+ super
8
+ elsif @blob_default ||= ActiveStorage::BlobDefault.find_by(record_class: record.class.name, name: name)
9
+ @attachment ||= build_attachment(blob: @blob_default.file_blob)
10
+ end
11
+
12
+ end
13
+
14
+ def attached?
15
+ attachment&.id?
16
+ end
17
+
18
+ end
19
+ end
20
+
21
+
@@ -28,8 +28,10 @@ module AttachmentTransfer
28
28
 
29
29
  if attach.is_a?(ActiveStorage::Attached::One)
30
30
  r
31
+ elsif attach.ia_a?(ActiveStorage::Attached::Many)
32
+ r[0]
31
33
  else
32
- r.first
34
+ r
33
35
  end
34
36
  end
35
37
 
@@ -0,0 +1,4 @@
1
+ module ActionController
2
+ class UnauthorizedError < StandardError; end
3
+ class ForbiddenError < StandardError; end
4
+ end
@@ -33,7 +33,22 @@ module RailsExt
33
33
  end
34
34
 
35
35
  end
36
+
37
+ module Parameters
38
+
39
+ def require(key)
40
+ begin
41
+ super
42
+ ensure
43
+ @required_params ||= []
44
+ @required_params << key
45
+ end
46
+ end
47
+
48
+ end
49
+
36
50
  end
37
51
 
38
52
  ActionView::TemplateRenderer.prepend RailsExt::TemplateRenderer
39
53
  ActionView::PartialRenderer.prepend RailsExt::PartialRenderer
54
+ ActionController::Parameters.prepend RailsExt::Parameters
@@ -0,0 +1,38 @@
1
+ require 'tempfile'
2
+
3
+ module Babel
4
+ extend self
5
+
6
+ def script_path
7
+ @app_path = File.expand_path('.', Dir.pwd)
8
+ node_modules_bin_path = ENV['WEBPACKER_NODE_MODULES_BIN_PATH'] || `yarn bin`.chomp
9
+ babel_config = File.join(@app_path, '.babelrc')
10
+
11
+ "#{node_modules_bin_path}/babel --config-file #{babel_config}"
12
+ end
13
+
14
+ def context(file)
15
+ `#{script_path} #{file}`
16
+ end
17
+
18
+ def transform(code, options = {})
19
+ tmpfile = write_to_tempfile(code)
20
+
21
+ begin
22
+ r = context(tmpfile)
23
+ ensure
24
+ File.unlink(tmpfile)
25
+ end
26
+
27
+ r
28
+ end
29
+
30
+ def write_to_tempfile(contents)
31
+ tmpfile = Tempfile.open(['babel', 'js'])
32
+ tmpfile.write(contents)
33
+ r = tmpfile.path
34
+ tmpfile.close
35
+ r
36
+ end
37
+
38
+ end
@@ -1,9 +1,14 @@
1
1
  module TimeHelper
2
2
  extend self
3
3
 
4
- def exact_distance_time(from_time, to_time)
5
- from_time = from_time.to_datetime
6
- to_time = to_time.to_datetime
4
+ def exact_distance_time(from_time = 0, to_time)
5
+ if to_time.is_a?(Numeric)
6
+ from_time = Time.at(from_time)
7
+ to_time = Time.at(to_time)
8
+ else
9
+ from_time = from_time.to_datetime
10
+ to_time = to_time.to_datetime
11
+ end
7
12
 
8
13
  return {} if from_time > to_time
9
14
 
@@ -55,4 +60,4 @@ module TimeHelper
55
60
  seconds
56
61
  end
57
62
 
58
- end
63
+ end
@@ -1,3 +1,3 @@
1
- module RailsCom
2
- VERSION = '1.2.4'
1
+ module RailsCom #:nodoc:
2
+ VERSION = '1.2.5'
3
3
  end
@@ -1,9 +1,9 @@
1
1
  <div class="ui segment breadcrumb">
2
2
  <%%= link_to 'Back', <%= index_helper %>_path, class: 'section' %>
3
- <div class="divider"> / </div>
3
+ <div class="divider">/</div>
4
4
  <div class="active section">Edit</div>
5
5
  </div>
6
6
 
7
7
  <div class="ui segment">
8
8
  <%%= render 'form' %>
9
- </div>
9
+ </div>