mobile_workflow_cli 0.1.4 → 0.1.6

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