mobile_workflow_cli 0.1.4 → 0.1.6

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fe2845048e277dc7fb21d3c93e50fd8dadbe7bbde5461a832217dfb704df5a34
4
- data.tar.gz: 626ada7f57b9ba66807908c9374c4ce123cf311f0abd389a7211e6d0c6174849
3
+ metadata.gz: 4981fe507e2bcc740e26bfc7667f0c2a308605f20ea39113fcc7694716049258
4
+ data.tar.gz: 73166990d43c3245b37f006b444df724f53f6348ae1b4912a64f39f0126bd663
5
5
  SHA512:
6
- metadata.gz: 9610ea1cc8e3d868912b3a53632900b8588d7008534255679d0e8821f82672a6eb8287cfa06a7a1cc66d8d5d42b0714b5475e7dc38c4a697e3cd1420c1fdd127
7
- data.tar.gz: 78cb840acb378734538c2aac586bdd219d3487c37a9a9a4ae977469139d0852a5295423117335be2030b262adf4e592004719406e3e4df4e99efaf4d179b4755
6
+ metadata.gz: 25cc9ff4a539f6a4b15ca285c989265c433bb8ea31485c7f34d29eaae1aaf6ba0eb3a6025ee3483d0b4cda377a7c99b42289bc984aef0f8c96b22f8ecaf5234f
7
+ data.tar.gz: 02512a878c496d452fcc922aae23c0db0466619a2eaafe1b620073bf1f52c4e538f6b50971088a7f24122fbb79bc54ca5d48e7e4c54307e49bce091a25a12f41
@@ -1,63 +1,63 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mobile_workflow_cli (0.1.4)
4
+ mobile_workflow_cli (0.1.6)
5
5
  administrate
6
6
  rails (>= 6.0.0)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- actioncable (6.0.3.1)
12
- actionpack (= 6.0.3.1)
11
+ actioncable (6.0.3.2)
12
+ actionpack (= 6.0.3.2)
13
13
  nio4r (~> 2.0)
14
14
  websocket-driver (>= 0.6.1)
15
- actionmailbox (6.0.3.1)
16
- actionpack (= 6.0.3.1)
17
- activejob (= 6.0.3.1)
18
- activerecord (= 6.0.3.1)
19
- activestorage (= 6.0.3.1)
20
- activesupport (= 6.0.3.1)
15
+ actionmailbox (6.0.3.2)
16
+ actionpack (= 6.0.3.2)
17
+ activejob (= 6.0.3.2)
18
+ activerecord (= 6.0.3.2)
19
+ activestorage (= 6.0.3.2)
20
+ activesupport (= 6.0.3.2)
21
21
  mail (>= 2.7.1)
22
- actionmailer (6.0.3.1)
23
- actionpack (= 6.0.3.1)
24
- actionview (= 6.0.3.1)
25
- activejob (= 6.0.3.1)
22
+ actionmailer (6.0.3.2)
23
+ actionpack (= 6.0.3.2)
24
+ actionview (= 6.0.3.2)
25
+ activejob (= 6.0.3.2)
26
26
  mail (~> 2.5, >= 2.5.4)
27
27
  rails-dom-testing (~> 2.0)
28
- actionpack (6.0.3.1)
29
- actionview (= 6.0.3.1)
30
- activesupport (= 6.0.3.1)
28
+ actionpack (6.0.3.2)
29
+ actionview (= 6.0.3.2)
30
+ activesupport (= 6.0.3.2)
31
31
  rack (~> 2.0, >= 2.0.8)
32
32
  rack-test (>= 0.6.3)
33
33
  rails-dom-testing (~> 2.0)
34
34
  rails-html-sanitizer (~> 1.0, >= 1.2.0)
35
- actiontext (6.0.3.1)
36
- actionpack (= 6.0.3.1)
37
- activerecord (= 6.0.3.1)
38
- activestorage (= 6.0.3.1)
39
- activesupport (= 6.0.3.1)
35
+ actiontext (6.0.3.2)
36
+ actionpack (= 6.0.3.2)
37
+ activerecord (= 6.0.3.2)
38
+ activestorage (= 6.0.3.2)
39
+ activesupport (= 6.0.3.2)
40
40
  nokogiri (>= 1.8.5)
41
- actionview (6.0.3.1)
42
- activesupport (= 6.0.3.1)
41
+ actionview (6.0.3.2)
42
+ activesupport (= 6.0.3.2)
43
43
  builder (~> 3.1)
44
44
  erubi (~> 1.4)
45
45
  rails-dom-testing (~> 2.0)
46
46
  rails-html-sanitizer (~> 1.1, >= 1.2.0)
47
- activejob (6.0.3.1)
48
- activesupport (= 6.0.3.1)
47
+ activejob (6.0.3.2)
48
+ activesupport (= 6.0.3.2)
49
49
  globalid (>= 0.3.6)
50
- activemodel (6.0.3.1)
51
- activesupport (= 6.0.3.1)
52
- activerecord (6.0.3.1)
53
- activemodel (= 6.0.3.1)
54
- activesupport (= 6.0.3.1)
55
- activestorage (6.0.3.1)
56
- actionpack (= 6.0.3.1)
57
- activejob (= 6.0.3.1)
58
- activerecord (= 6.0.3.1)
50
+ activemodel (6.0.3.2)
51
+ activesupport (= 6.0.3.2)
52
+ activerecord (6.0.3.2)
53
+ activemodel (= 6.0.3.2)
54
+ activesupport (= 6.0.3.2)
55
+ activestorage (6.0.3.2)
56
+ actionpack (= 6.0.3.2)
57
+ activejob (= 6.0.3.2)
58
+ activerecord (= 6.0.3.2)
59
59
  marcel (~> 0.3.1)
60
- activesupport (6.0.3.1)
60
+ activesupport (6.0.3.2)
61
61
  concurrent-ruby (~> 1.0, >= 1.0.2)
62
62
  i18n (>= 0.7, < 2)
63
63
  minitest (~> 5.1)
@@ -74,7 +74,7 @@ GEM
74
74
  momentjs-rails (~> 2.8)
75
75
  sassc-rails (~> 2.1)
76
76
  selectize-rails (~> 0.6)
77
- autoprefixer-rails (9.7.6)
77
+ autoprefixer-rails (9.8.4)
78
78
  execjs
79
79
  builder (3.2.4)
80
80
  byebug (11.1.3)
@@ -106,7 +106,7 @@ GEM
106
106
  activerecord
107
107
  kaminari-core (= 1.2.1)
108
108
  kaminari-core (1.2.1)
109
- loofah (2.5.0)
109
+ loofah (2.6.0)
110
110
  crass (~> 1.0.2)
111
111
  nokogiri (>= 1.5.9)
112
112
  mail (2.7.1)
@@ -123,32 +123,32 @@ GEM
123
123
  nio4r (2.5.2)
124
124
  nokogiri (1.10.9)
125
125
  mini_portile2 (~> 2.4.0)
126
- rack (2.2.2)
126
+ rack (2.2.3)
127
127
  rack-test (1.1.0)
128
128
  rack (>= 1.0, < 3)
129
- rails (6.0.3.1)
130
- actioncable (= 6.0.3.1)
131
- actionmailbox (= 6.0.3.1)
132
- actionmailer (= 6.0.3.1)
133
- actionpack (= 6.0.3.1)
134
- actiontext (= 6.0.3.1)
135
- actionview (= 6.0.3.1)
136
- activejob (= 6.0.3.1)
137
- activemodel (= 6.0.3.1)
138
- activerecord (= 6.0.3.1)
139
- activestorage (= 6.0.3.1)
140
- activesupport (= 6.0.3.1)
129
+ rails (6.0.3.2)
130
+ actioncable (= 6.0.3.2)
131
+ actionmailbox (= 6.0.3.2)
132
+ actionmailer (= 6.0.3.2)
133
+ actionpack (= 6.0.3.2)
134
+ actiontext (= 6.0.3.2)
135
+ actionview (= 6.0.3.2)
136
+ activejob (= 6.0.3.2)
137
+ activemodel (= 6.0.3.2)
138
+ activerecord (= 6.0.3.2)
139
+ activestorage (= 6.0.3.2)
140
+ activesupport (= 6.0.3.2)
141
141
  bundler (>= 1.3.0)
142
- railties (= 6.0.3.1)
142
+ railties (= 6.0.3.2)
143
143
  sprockets-rails (>= 2.0.0)
144
144
  rails-dom-testing (2.0.3)
145
145
  activesupport (>= 4.2.0)
146
146
  nokogiri (>= 1.6)
147
147
  rails-html-sanitizer (1.3.0)
148
148
  loofah (~> 2.3)
149
- railties (6.0.3.1)
150
- actionpack (= 6.0.3.1)
151
- activesupport (= 6.0.3.1)
149
+ railties (6.0.3.2)
150
+ actionpack (= 6.0.3.2)
151
+ activesupport (= 6.0.3.2)
152
152
  method_source
153
153
  rake (>= 0.8.7)
154
154
  thor (>= 0.20.3, < 2.0)
@@ -190,7 +190,7 @@ GEM
190
190
  websocket-driver (0.7.2)
191
191
  websocket-extensions (>= 0.1.0)
192
192
  websocket-extensions (0.1.5)
193
- zeitwerk (2.3.0)
193
+ zeitwerk (2.3.1)
194
194
 
195
195
  PLATFORMS
196
196
  ruby
data/README.md CHANGED
@@ -6,18 +6,21 @@ The server contains
6
6
  * API
7
7
  * Password protected admin console (for updating the data)
8
8
 
9
+ ## Prereqs
10
+
11
+ Install RubyVersionManager (RVM) with latest stable Ruby and Rails
12
+
13
+ `\curl -sSL https://get.rvm.io | bash -s stable --rails`
14
+
9
15
  ## Installation
10
16
 
11
17
  Install the utility
12
18
 
13
- ```ruby
14
- gem 'mobile_workflow_cli'
15
- ```
19
+ `gem 'mobile_workflow_cli'`
16
20
 
17
21
  ## Usage
18
22
 
19
- ```mwf new <path to open api spec json> [options]```
20
-
23
+ `mwf --help`
21
24
 
22
25
  ## License
23
26
 
data/bin/mwf CHANGED
@@ -1,6 +1,11 @@
1
1
  #!/usr/bin/env ruby
2
2
  require 'pathname'
3
- require 'byebug'
3
+
4
+ # Byebug for dev
5
+ begin
6
+ require 'byebug'
7
+ rescue LoadError
8
+ end
4
9
 
5
10
  source_path = (Pathname.new(__FILE__).dirname + '../lib').expand_path
6
11
  $LOAD_PATH << source_path
@@ -1,6 +1,11 @@
1
1
  #!/usr/bin/env ruby
2
2
  require 'pathname'
3
- require 'byebug'
3
+
4
+ # Byebug for dev
5
+ begin
6
+ require 'byebug'
7
+ rescue LoadError
8
+ end
4
9
 
5
10
  source_path = (Pathname.new(__FILE__).dirname + '../lib').expand_path
6
11
  $LOAD_PATH << source_path
@@ -17,37 +17,19 @@ module MobileWorkflowCli
17
17
  generate 'rspec:install'
18
18
  end
19
19
 
20
- def controller_generator
21
- copy_file 'controller_generator.rb', 'lib/generators/mobile_workflow/controller_generator.rb'
22
- copy_file 'controller.rb', 'lib/generators/mobile_workflow/templates/controller.rb'
23
- copy_file 'controller_spec.rb', 'lib/generators/mobile_workflow/templates/controller_spec.rb'
24
- end
25
-
26
20
  def ability_generator
27
21
  copy_file 'ability.rb', 'app/models/ability.rb'
28
22
  end
29
23
 
30
- def application_controller
31
- copy_file 'application_controller.rb', 'app/controllers/application_controller.rb'
32
- end
33
-
34
- def api_controller
35
- copy_file 'api_controller.rb', 'app/controllers/api_controller.rb'
36
- end
37
-
38
- def model_template
39
- copy_file 'model.rb', 'lib/templates/active_record/model/model.rb'
40
- end
41
-
42
24
  def active_storage
43
25
  rails_command 'active_storage:install'
44
26
  copy_file 'storage.s3.yml', 'config/storage.yml'
45
27
  gsub_file 'config/environments/production.rb', 'config.active_storage.service = :local', 'config.active_storage.service = :amazon'
46
28
  end
47
29
 
48
- def notifications_controller
49
- copy_file 'notifications_controller.rb', 'app/controllers/notifications_controller.rb'
50
- route 'resources :notifications, only: :create'
30
+ def mobile_workflow_generator(open_api_spec_path)
31
+ copy_file open_api_spec_path, 'config/open_api_spec.json'
32
+ generate 'mobile_workflow:install'
51
33
  end
52
34
 
53
35
  def s3_backend(region)
@@ -25,30 +25,18 @@ module MobileWorkflowCli
25
25
  end
26
26
 
27
27
  def finish_template
28
- run "spring stop"
29
-
30
28
  super
31
29
  after_bundle do
32
- build :application_controller
33
- build :api_controller
34
- build :notifications_controller if options[:s3_storage]
35
- build :model_template
30
+ run "spring stop"
36
31
  build :procfiles
37
32
  build :rspec_generator
38
- build :controller_generator
39
33
  build :ability_generator
40
34
  build :active_storage if options[:s3_storage]
41
-
42
- open_api_spec = read_openapi_spec
43
- generate_models(open_api_spec)
35
+ build :mobile_workflow_generator, ARGV[1]
44
36
  setup_db
45
-
46
37
  generate_administrate
47
- generate_controllers_and_routes(open_api_spec)
48
38
 
49
- admin_user = 'admin'
50
- admin_password = SecureRandom.base64(12)
51
- generate_dot_env(admin_user, admin_password)
39
+ generate_dot_env
52
40
  initial_git_commit
53
41
 
54
42
  build :heroku if options[:heroku]
@@ -66,12 +54,6 @@ module MobileWorkflowCli
66
54
  # Todo: MBS - move these methods to the builder class
67
55
  # Ideally override RailsBuilder methods
68
56
  private
69
- def read_openapi_spec
70
- openapi_spec_path = ARGV[1]
71
- say "Loading model from OpenAPI Spec: #{openapi_spec_path}"
72
- return JSON.parse(File.read(openapi_spec_path)).with_indifferent_access
73
- end
74
-
75
57
  def generate_administrate
76
58
  generate 'administrate:install'
77
59
  file 'app/assets/config/manifest.js', <<-CODE
@@ -90,29 +72,7 @@ module Admin
90
72
  end
91
73
  end
92
74
  CODE
93
- end
94
-
95
- def generate_models(openapi_spec)
96
- say "Generating models"
97
- openapi_spec[:components][:schemas].each_pair do |name, schema|
98
- next if ["answer", "attachment"].include? name # Don't generate schemas for MW schemas
99
-
100
- generated_properties_args = schema["properties"].keys.collect{|key| "#{key}:string" }.join(" ")
101
- if yes? "Use generated schema #{name}(#{generated_properties_args})[yn]?"
102
- generate(:model, "#{name.underscore} #{generated_properties_args}")
103
- else
104
- properties_args = ask "Specify schema for #{name}: (e.g. text:string image:attachment region:reference)"
105
- generate(:model, "#{name.underscore} #{properties_args}")
106
- end
107
- end
108
- end
109
-
110
- def generate_controllers_and_routes(openapi_spec)
111
- say "Generating controllers"
112
- controller_names = openapi_spec[:paths].keys.collect{|url_path| url_path.split('/').last.pluralize }
113
- controller_names.each {|n| generate "mobile_workflow:controller #{n.singularize}" }
114
- controller_names.each {|n| route "resources :#{n}, only: [:index, :show, :create]" }
115
- route "root to: 'admin/#{controller_names.first}#index'"
75
+ generate 'administrate:routes'
116
76
  end
117
77
 
118
78
  def setup_db
@@ -126,7 +86,10 @@ CODE
126
86
  git commit: %Q{ -m 'Initial commit' }
127
87
  end
128
88
 
129
- def generate_dot_env(admin_user, admin_password)
89
+ def generate_dot_env
90
+ admin_user = 'admin'
91
+ admin_password = SecureRandom.base64(12)
92
+
130
93
  file '.env', <<-CODE
131
94
  ADMIN_USER=#{admin_user}
132
95
  ADMIN_PASSWORD=#{admin_password}
@@ -8,6 +8,8 @@ class DokkuBackend
8
8
  remote_command "dokku apps:create #{@dokku_app_name}"
9
9
  remote_command "dokku postgres:create #{@dokku_app_name}"
10
10
  remote_command "dokku postgres:link #{@dokku_app_name} #{@dokku_app_name}"
11
+ remote_command "dokku domains:enable #{@dokku_app_name}"
12
+ remote_command "dokku letsencrypt #{@dokku_app_name}"
11
13
 
12
14
  local_command "git remote add dokku dokku@#{@dokku_host}:#{@dokku_app_name}"
13
15
  end
@@ -1,5 +1,5 @@
1
1
  module MobileWorkflowCli
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.6"
3
3
  RUBY_VERSION = '2.5.5'
4
4
  RAILS_VERSION = '6.0.0'
5
5
  end
@@ -25,6 +25,9 @@ gem "image_processing"
25
25
  gem 'aws-sdk-s3', '~> 1.60', '>= 1.60.1'
26
26
  gem 'aws-sdk-sns', '~> 1.23'
27
27
 
28
+ # Mobile Workflow
29
+ gem 'mobile_workflow', '~> 0.1.0'
30
+
28
31
  group :development do
29
32
  gem 'web-console', '>= 3.3.0'
30
33
  gem 'listen', '>= 3.0.5', '< 3.2'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mobile_workflow_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Brooke-Smith
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-23 00:00:00.000000000 Z
11
+ date: 2020-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: administrate
@@ -89,13 +89,6 @@ files:
89
89
  - templates/Procfile.dev
90
90
  - templates/README.md.erb
91
91
  - templates/ability.rb
92
- - templates/api_controller.rb
93
- - templates/application_controller.rb
94
- - templates/controller.rb
95
- - templates/controller_generator.rb
96
- - templates/controller_spec.rb
97
- - templates/model.rb
98
- - templates/notifications_controller.rb
99
92
  - templates/storage.s3.yml
100
93
  homepage: https://github.com/FutureWorkshops/MobileWorkflowCli
101
94
  licenses:
@@ -1,32 +0,0 @@
1
- class ApiController < ActionController::API
2
- def current_user
3
- nil
4
- end
5
-
6
- def binary_urls(object)
7
- return unless params["binaries"]
8
-
9
- params["binaries"].collect do |binary|
10
- property = binary["identifier"].split('/')[0] # i.e. image/jpg --> image, video/mp4 --> video
11
-
12
- {
13
- "identifier" => binary["identifier"],
14
- "url" => presigned_url("#{object.class.name.underscore}/#{object.id}/#{property}"),
15
- "method" => "PUT"
16
- }
17
- end
18
- end
19
-
20
- private
21
- def presigned_url(key)
22
- presigner.presigned_url(:put_object, bucket: ENV['AWS_BUCKET_NAME'], key: key, metadata: {})
23
- end
24
-
25
- def presigner
26
- Aws::S3::Presigner.new(client: s3_client)
27
- end
28
-
29
- def s3_client
30
- Aws::S3::Client.new(region: ENV['AWS_REGION'], access_key_id: ENV['AWS_ACCESS_ID'], secret_access_key: ENV['AWS_SECRET_KEY'])
31
- end
32
- end
@@ -1,2 +0,0 @@
1
- class ApplicationController < ActionController::Base
2
- end
@@ -1,39 +0,0 @@
1
- class <%= controller_class_name %>Controller < ApiController
2
- before_action :rewrite_payload, only: :create
3
-
4
- load_and_authorize_resource
5
-
6
- def index
7
- render json: @<%= controller_class_name.underscore %>.collect(&:list_item_as_json)
8
- end
9
-
10
- def show
11
- render json: @<%= controller_class_name.singularize.underscore %>.display_as_json
12
- end
13
-
14
- def create
15
- if @<%= controller_class_name.singularize.underscore %>.save
16
- render json: { binary_urls: binary_urls(@<%= controller_class_name.singularize.underscore %>), response: @<%= controller_class_name.singularize.underscore %> }, status: :created
17
- else
18
- head :unprocessable_entity
19
- end
20
- end
21
-
22
- private
23
- def rewrite_payload
24
- Rails.logger.debug "Pre-rewrite params: #{params}"
25
-
26
- # Use this method to make any changes to parameters
27
-
28
- # Example to get properties from question
29
- # params[:payload][:name] = params.dig(:payload, :name, :answer)
30
-
31
- # Example to get properties from previous list
32
- # passport_id = params.dig(:payload, :choose_passport, :selected, :id)
33
- end
34
-
35
- def <%= controller_class_name.singularize.underscore %>_params
36
- # Permit any fields you want to save
37
- params.require(:payload).permit(:name)
38
- end
39
- end
@@ -1,18 +0,0 @@
1
- module MobileWorkflow
2
- module Generators
3
- # Custom scaffolding generator
4
- class ControllerGenerator < Rails::Generators::NamedBase
5
- include Rails::Generators::ResourceHelpers
6
-
7
- def self.source_root
8
- Rails.root
9
- end
10
-
11
- def copy_controller_and_spec_files
12
- template "lib/generators/mobile_workflow/templates/controller.rb", File.join("app/controllers", "#{controller_file_name}_controller.rb")
13
- template "lib/generators/mobile_workflow/templates/controller_spec.rb", File.join("spec/controllers", "#{controller_file_name}_controller_spec.rb")
14
- end
15
- end
16
- end
17
- end
18
-
@@ -1,41 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails_helper'
4
- require 'json'
5
-
6
- RSpec.describe <%= controller_class_name %>Controller do
7
- let(:params) { {} }
8
- let(:json_response) { JSON.parse(response.body, symbolize_names: true) }
9
-
10
- describe 'GET #index' do
11
- let!(:<%= controller_class_name.singularize.underscore %>) { <%= controller_class_name.singularize %>.create }
12
- before(:each) { get :index, params: params }
13
-
14
- context 'ok' do
15
- it { expect(json_response[0][:id]).to eq <%= controller_class_name.singularize.underscore %>.id }
16
- it { expect(response.status).to eq 200 }
17
- end
18
- end
19
-
20
- describe 'GET #show' do
21
- let(:<%= controller_class_name.singularize.underscore %>) { <%= controller_class_name.singularize %>.create }
22
- let(:params) { { id: <%= controller_class_name.singularize.underscore %>.id } }
23
- before(:each) { get :show, params: params }
24
-
25
- context 'ok' do
26
- it { expect(response.status).to eq 200 }
27
- end
28
- end
29
-
30
- describe 'POST #create' do
31
- let(:payload_params) { {text: 'OK'} }
32
- let(:params) { { payload: payload_params, binaries: [{identifier: 'record', mimetype: 'video/mp4'}] } }
33
- before(:each) { post :create, params: params }
34
-
35
- context 'ok' do
36
- it { expect(<%= controller_class_name.singularize %>.count).to eq 1 }
37
- it { expect(response.status).to eq 201 }
38
- it { expect(json_response[:binary_urls]).to_not be_nil }
39
- end
40
- end
41
- end
@@ -1,56 +0,0 @@
1
- <% module_namespacing do -%>
2
- class <%= class_name %> < <%= parent_class_name.classify %>
3
- # Enable if you need to generate attachment URLs
4
- # include Rails.application.routes.url_helpers
5
-
6
- <% attributes.select(&:reference?).each do |attribute| -%>
7
- belongs_to :<%= attribute.name %><%= ', polymorphic: true' if attribute.polymorphic? %>
8
- <% end -%>
9
- <% attributes.select(&:attachment?).each do |attribute| -%>
10
- has_one_attached :<%= attribute.name %>
11
- <% end -%>
12
- <% attributes.select(&:attachments?).each do |attribute| -%>
13
- has_many_attached :<%= attribute.name %>
14
- <% end -%>
15
-
16
- def list_item_as_json
17
- {
18
- id: id,
19
- text: text,
20
- # detailText: nil,
21
- # sfSymbolName: nil,
22
- # imageURL: preview_url(image, height: 100, width: 100)
23
- }
24
- end
25
-
26
- def display_as_json
27
- [
28
- {label: "ID", text: text, mimeType: 'text/plain'},
29
- {label: "Text", text: text, mimeType: 'text/plain'}
30
- ]
31
- end
32
-
33
- # private
34
- # include Rails.application.routes.url_helpers # for attachment URLs
35
- # def preview_url(attachment, height:, width:, options: { resize_to_fill: [height, width]} )
36
- # return nil unless attachment.attached?
37
- #
38
- # if attachment.image?
39
- # Rails.application.routes.url_helpers.rails_representation_url(attachment.variant(combine_options: options), host: attachment_host)
40
- # elsif attachment.previewable?
41
- # Rails.application.routes.url_helpers.rails_representation_url(attachment.preview(options), host: attachment_host)
42
- # else
43
- # return nil
44
- # end
45
- # end
46
- #
47
- # def attachment_url(attachment)
48
- # Rails.application.routes.url_helpers.rails_blob_url(attachment, host: attachment_host)
49
- # end
50
- #
51
- # def attachment_host
52
- # "https://#{ENV['HEROKU_APP_NAME']}.herokuapp.com"
53
- # end
54
-
55
- end
56
- <% end -%>
@@ -1,93 +0,0 @@
1
- class NotificationsController < ApiController
2
- before_action :verify_request_authenticity
3
-
4
- def create
5
- Rails.logger.info("Message body: #{message_body}")
6
-
7
- case message_body['Type']
8
- when 'SubscriptionConfirmation'
9
- confirm_subscription ? (head :ok) : (head :bad_request)
10
- else
11
- @object = find_object
12
- @object.send("#{attribute_name}=",active_record_blob)
13
- if @object.save
14
- head :ok
15
- else
16
- Rails.logger.warn "Error saving object: #{@object} #{object.errors.full_messages}"
17
- end
18
- end
19
- end
20
-
21
- private
22
- def verify_request_authenticity
23
- head :unauthorized if raw_post.blank?
24
-
25
- #head :unauthorized if raw_post.blank? || !message_verifier.authentic?(raw_post) # Not working
26
- end
27
-
28
- def active_record_blob
29
- s3_object = s3_bucket.object(object_key)
30
- checksum_base64 = checksum_base64(object_key, s3_object)
31
- ActiveStorage::Blob.create! key: s3_object.key, filename: s3_object.key, byte_size: s3_object.size, checksum: checksum_base64, content_type: s3_object.content_type
32
- end
33
-
34
- def checksum_base64(object_key, s3_object)
35
- path = Tempfile.new(object_key).path
36
- s3_object.download_file(path)
37
- file = File.new(path)
38
- Digest::MD5.file(file).base64digest
39
- end
40
-
41
- def find_object
42
- object_class_name, object_id = key_identifiers
43
- object_class_name.camelcase.constantize.find(object_id.to_i)
44
- end
45
-
46
- def attribute_name
47
- key_identifiers[2]
48
- end
49
-
50
- def key_identifiers
51
- object_class_name, object_id, attribute_name = object_key.split("/")
52
- return object_class_name, object_id, attribute_name
53
- end
54
-
55
- def object_key
56
- @object_key ||= message['Records'][0]['s3']['object']['key']
57
- end
58
-
59
- def message
60
- message = JSON.parse(message_body['Message'])
61
- end
62
-
63
- def message_body
64
- @message_body ||= JSON.parse(raw_post)
65
- end
66
-
67
- def raw_post
68
- @raw_post ||= request.raw_post
69
- end
70
-
71
- def message_verifier
72
- @message_verifier ||= Aws::SNS::MessageVerifier.new
73
- end
74
-
75
- def confirm_subscription
76
- sns_client.confirm_subscription(
77
- topic_arn: message_body['TopicArn'],
78
- token: message_body['Token']
79
- )
80
- return true
81
- rescue Aws::SNS::Errors::ServiceError => e
82
- Rails.logger.warn(e.message)
83
- return false
84
- end
85
-
86
- def s3_bucket
87
- Aws::S3::Resource.new(region: ENV['AWS_REGION'], access_key_id: ENV['AWS_ACCESS_ID'], secret_access_key: ENV['AWS_SECRET_KEY']).bucket(ENV['AWS_BUCKET_NAME'])
88
- end
89
-
90
- def sns_client
91
- Aws::SNS::Client.new(region: ENV['AWS_REGION'], access_key_id: ENV['AWS_ACCESS_ID'], secret_access_key: ENV['AWS_SECRET_KEY'])
92
- end
93
- end