mobile_workflow 0.6.6 → 0.6.11
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 +4 -4
- data/lib/generators/mobile_workflow/controller_generator.rb +19 -2
- data/lib/generators/mobile_workflow/install/install_generator.rb +27 -3
- data/lib/generators/mobile_workflow/install/templates/Gemfile.erb +1 -0
- data/{db/migrate/20200823174210_create_users.rb → lib/generators/mobile_workflow/install/templates/create_users.rb} +0 -0
- data/lib/generators/mobile_workflow/install/templates/spec/factories/users.rb +6 -0
- data/lib/generators/mobile_workflow/templates/controller.rb.erb +13 -4
- data/lib/generators/mobile_workflow/templates/controller_spec.rb.erb +8 -3
- data/lib/mobile_workflow/cli/app_builder.rb +29 -6
- data/lib/mobile_workflow/cli/app_server_generator.rb +4 -30
- data/lib/mobile_workflow/cli/heroku_backend.rb +4 -0
- data/lib/mobile_workflow/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1e3e8921b520d2c949e637961bbeb4d13fa324214a4887efe11e235ab820ae51
|
4
|
+
data.tar.gz: ddc4c8b0334ab28a4f04151a8ede868719eb7ecaab56926ed76cc0e087a132fe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c660ac1590e0d250eeae44209f57c53054411b5d470886cb9317793b059bf5d5d038b3f945e22032e1e3ce83b116885608bf172f7b84ad156795f614e186bd28
|
7
|
+
data.tar.gz: f8a008f70970aa378518f93824c8312780098d7983a8e53203ea17730c4b48c7389f5a5b3b8d3cac8c389d46a0ddf50e6f6dc945fbc1276e42bd03bbd3a7e20d
|
@@ -30,8 +30,25 @@ module MobileWorkflow
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def permitted_params
|
33
|
-
|
34
|
-
|
33
|
+
permitted_attributes = attributes_names.dup
|
34
|
+
permitted_attributes.delete('user')
|
35
|
+
permitted_attributes.map{ |name| ":#{name}" }.join(", ")
|
36
|
+
end
|
37
|
+
|
38
|
+
def index_action?
|
39
|
+
actions.include?("index")
|
40
|
+
end
|
41
|
+
|
42
|
+
def show_action?
|
43
|
+
actions.include?("show")
|
44
|
+
end
|
45
|
+
|
46
|
+
def create_action?
|
47
|
+
actions.include?("create")
|
48
|
+
end
|
49
|
+
|
50
|
+
def actions
|
51
|
+
options[:actions]
|
35
52
|
end
|
36
53
|
end
|
37
54
|
end
|
@@ -1,9 +1,13 @@
|
|
1
1
|
require "rails/generators/base"
|
2
|
+
require "rails/generators/active_model"
|
3
|
+
require "rails/generators/active_record/migration"
|
4
|
+
require "active_record"
|
2
5
|
require "mobile_workflow/open_api_spec/parser"
|
3
6
|
|
4
7
|
module MobileWorkflow
|
5
8
|
module Generators
|
6
9
|
class InstallGenerator < Rails::Generators::Base
|
10
|
+
include ActiveRecord::Generators::Migration
|
7
11
|
|
8
12
|
source_root File.expand_path("../templates", __FILE__)
|
9
13
|
|
@@ -24,6 +28,8 @@ module MobileWorkflow
|
|
24
28
|
return unless options[:doorkeeper_oauth]
|
25
29
|
say "Generating Doorkeeper OAuth"
|
26
30
|
|
31
|
+
migration_template "create_users.rb", "db/migrate/create_users.rb"
|
32
|
+
|
27
33
|
generate 'doorkeeper:install'
|
28
34
|
gsub_file 'config/initializers/doorkeeper.rb', 'raise "Please configure doorkeeper resource_owner_authenticator block located in #{__FILE__}"', 'User.find_by_id(session[:user_id]) || redirect_to(new_session_url(return_to: request.fullpath))'
|
29
35
|
generate 'doorkeeper:migration'
|
@@ -36,18 +42,25 @@ module MobileWorkflow
|
|
36
42
|
copy_file("app/views/layouts/application.html.erb")
|
37
43
|
copy_file("app/views/sessions/new.html.erb")
|
38
44
|
copy_file("app/helpers/application_helper.rb")
|
45
|
+
copy_file("spec/factories/users.rb")
|
39
46
|
end
|
40
47
|
|
41
48
|
def generate_models
|
42
49
|
say "Loading OpenAPI Spec: #{open_api_spec_path}"
|
43
50
|
say "Generating models"
|
44
|
-
model_name_to_properties.each_pair do |model_name, model_properties|
|
51
|
+
model_name_to_properties.each_pair do |model_name, model_properties|
|
52
|
+
|
53
|
+
if doorkeeper_oauth?
|
54
|
+
model_properties = "#{model_properties} user:references"
|
55
|
+
@model_name_to_properties[model_name] = model_properties
|
56
|
+
end
|
57
|
+
|
45
58
|
if interactive? && !yes?("Use generated schema #{model_name}(#{model_properties})[yn]?")
|
46
59
|
model_properties = ask "Specify schema for #{model_name}: (e.g. text:string image:attachment region:reference)"
|
60
|
+
@model_name_to_properties[model_name] = model_properties
|
47
61
|
end
|
48
62
|
|
49
63
|
generate_model(model_name, model_properties)
|
50
|
-
@model_name_to_properties[model_name] = model_properties
|
51
64
|
end
|
52
65
|
end
|
53
66
|
|
@@ -67,7 +80,7 @@ module MobileWorkflow
|
|
67
80
|
generate_model(controller_name, model_properties)
|
68
81
|
end
|
69
82
|
|
70
|
-
generate "mobile_workflow:controller #{controller_name} #{actions.join(" ")} --attributes #{model_properties} #{
|
83
|
+
generate "mobile_workflow:controller #{controller_name} --actions #{actions.join(" ")} --attributes #{model_properties} #{generate_controller_args}".strip
|
71
84
|
route "resources :#{plural_controller_name}, only: [#{actions.map{|a| ":#{a}"}.join(", ")}]"
|
72
85
|
end
|
73
86
|
end
|
@@ -82,6 +95,13 @@ module MobileWorkflow
|
|
82
95
|
generate("mobile_workflow:model #{model_name} #{model_properties}")
|
83
96
|
end
|
84
97
|
|
98
|
+
def generate_controller_args
|
99
|
+
args = ''
|
100
|
+
args += ' --s3-storage' if s3_storage?
|
101
|
+
args += ' --doorkeeper-oauth' if doorkeeper_oauth?
|
102
|
+
args.strip
|
103
|
+
end
|
104
|
+
|
85
105
|
def model_name_to_properties
|
86
106
|
@model_name_to_properties ||= open_api_spec.model_name_to_properties
|
87
107
|
end
|
@@ -89,6 +109,10 @@ module MobileWorkflow
|
|
89
109
|
def open_api_spec
|
90
110
|
@open_api_spec ||= ::MobileWorkflow::OpenApiSpec::Parser.new(File.read(open_api_spec_path))
|
91
111
|
end
|
112
|
+
|
113
|
+
def doorkeeper_oauth?
|
114
|
+
options[:doorkeeper_oauth]
|
115
|
+
end
|
92
116
|
|
93
117
|
def s3_storage?
|
94
118
|
options[:s3_storage]
|
File without changes
|
@@ -4,16 +4,24 @@ class <%= controller_class_name %>Controller < ApiController
|
|
4
4
|
before_action :rewrite_payload, only: :create
|
5
5
|
|
6
6
|
load_and_authorize_resource
|
7
|
-
|
7
|
+
|
8
|
+
<% if index_action? -%>
|
8
9
|
def index
|
9
10
|
render json: @<%= plural_table_name %>.collect(&:list_item_as_json)
|
10
11
|
end
|
11
|
-
|
12
|
+
|
13
|
+
<% end -%>
|
14
|
+
<% if show_action? -%>
|
12
15
|
def show
|
13
16
|
render json: @<%= singular_table_name %>.display_as_json
|
14
17
|
end
|
15
|
-
|
18
|
+
|
19
|
+
<% end -%>
|
20
|
+
<% if create_action? -%>
|
16
21
|
def create
|
22
|
+
<% if doorkeeper_oauth? -%>
|
23
|
+
@<%= singular_table_name %>.user = current_user
|
24
|
+
<% end -%>
|
17
25
|
if @<%= singular_table_name %>.save
|
18
26
|
<% if s3_storage? -%>
|
19
27
|
render json: { binary_urls: binary_urls(@<%= singular_table_name %>), response: @<%= singular_table_name %> }, status: :created
|
@@ -21,7 +29,7 @@ class <%= controller_class_name %>Controller < ApiController
|
|
21
29
|
render json: { response: @<%= singular_table_name %> }, status: :created
|
22
30
|
<% end -%>
|
23
31
|
else
|
24
|
-
|
32
|
+
render json: { message: @<%= singular_table_name %>.errors.full_messages.to_sentence }, status: :unprocessable_entity
|
25
33
|
end
|
26
34
|
end
|
27
35
|
|
@@ -39,5 +47,6 @@ class <%= controller_class_name %>Controller < ApiController
|
|
39
47
|
def <%= singular_table_name.underscore %>_params
|
40
48
|
params.require(:payload).permit(<%= permitted_params %>)
|
41
49
|
end
|
50
|
+
<% end -%>
|
42
51
|
end
|
43
52
|
<% end %>
|
@@ -10,7 +10,8 @@ RSpec.describe <%= controller_class_name %>Controller do
|
|
10
10
|
let(:user) { create(:user) }
|
11
11
|
let(:token) { instance_double('Doorkeeper::AccessToken', :accessible? => true, :acceptable? => true, resource_owner_id: user.id) }
|
12
12
|
<% end -%>
|
13
|
-
|
13
|
+
|
14
|
+
<% if index_action? -%>
|
14
15
|
describe 'GET #index' do
|
15
16
|
let!(:<%= controller_class_name.singularize.underscore %>) { create(:<%= controller_class_name.singularize.underscore %>) }
|
16
17
|
before(:each) do
|
@@ -25,7 +26,8 @@ RSpec.describe <%= controller_class_name %>Controller do
|
|
25
26
|
it { expect(response.status).to eq 200 }
|
26
27
|
end
|
27
28
|
end
|
28
|
-
|
29
|
+
<% end -%>
|
30
|
+
<% if show_action? -%>
|
29
31
|
describe 'GET #show' do
|
30
32
|
let(:<%= controller_class_name.singularize.underscore %>) { create(:<%= controller_class_name.singularize.underscore %>) }
|
31
33
|
let(:params) { { id: <%= controller_class_name.singularize.underscore %>.id } }
|
@@ -40,7 +42,9 @@ RSpec.describe <%= controller_class_name %>Controller do
|
|
40
42
|
it { expect(response.status).to eq 200 }
|
41
43
|
end
|
42
44
|
end
|
43
|
-
|
45
|
+
|
46
|
+
<% end -%>
|
47
|
+
<% if create_action? -%>
|
44
48
|
describe 'POST #create' do
|
45
49
|
let(:payload_params) { {text: 'OK'} }
|
46
50
|
let(:params) { { payload: payload_params, binaries: [{identifier: 'record', mimetype: 'video/mp4'}] } }
|
@@ -59,4 +63,5 @@ RSpec.describe <%= controller_class_name %>Controller do
|
|
59
63
|
<% end %>
|
60
64
|
end
|
61
65
|
end
|
66
|
+
<% end -%>
|
62
67
|
end
|
@@ -18,13 +18,19 @@ module MobileWorkflow::Cli
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def factory_bot
|
21
|
-
inject_into_file 'spec/rails_helper.rb',
|
22
|
-
"
|
21
|
+
inject_into_file 'spec/rails_helper.rb', after: "RSpec.configure do |config|\n" do
|
22
|
+
"\tconfig.include FactoryBot::Syntax::Methods\n"
|
23
23
|
end
|
24
24
|
end
|
25
|
+
|
26
|
+
def migrate_db
|
27
|
+
rails_command("db:drop")
|
28
|
+
rails_command("db:create")
|
29
|
+
rails_command("db:migrate")
|
30
|
+
end
|
25
31
|
|
26
32
|
def administrate_generator
|
27
|
-
|
33
|
+
generate 'administrate:install'
|
28
34
|
|
29
35
|
file 'app/assets/config/manifest.js', <<-CODE
|
30
36
|
//= link administrate/application.css
|
@@ -39,7 +45,7 @@ module Admin
|
|
39
45
|
end
|
40
46
|
CODE
|
41
47
|
|
42
|
-
|
48
|
+
generate 'administrate:routes'
|
43
49
|
end
|
44
50
|
|
45
51
|
def ability_generator
|
@@ -57,9 +63,25 @@ CODE
|
|
57
63
|
gen_opts = ""
|
58
64
|
gen_opts += "--doorkeeper_oauth" if options[:doorkeeper_oauth]
|
59
65
|
generate "mobile_workflow:install #{gen_opts}"
|
66
|
+
end
|
67
|
+
|
68
|
+
def format_source
|
69
|
+
`rufo .`
|
70
|
+
end
|
71
|
+
|
72
|
+
def generate_dot_env
|
73
|
+
admin_user = 'admin'
|
74
|
+
admin_password = SecureRandom.base64(12)
|
60
75
|
|
61
|
-
|
62
|
-
|
76
|
+
file '.env', <<-CODE
|
77
|
+
ADMIN_USER=#{admin_user}
|
78
|
+
ADMIN_PASSWORD=#{admin_password}
|
79
|
+
CODE
|
80
|
+
end
|
81
|
+
|
82
|
+
def git_commit(message = 'Initial commit')
|
83
|
+
git add: "."
|
84
|
+
git commit: %Q{ -m '#{message}'}
|
63
85
|
end
|
64
86
|
|
65
87
|
def s3_backend(region)
|
@@ -82,6 +104,7 @@ CODE
|
|
82
104
|
heroku_backend.create
|
83
105
|
heroku_backend.configure_activestorage if options[:s3_storage]
|
84
106
|
heroku_backend.deploy
|
107
|
+
heroku_backend.seed_db
|
85
108
|
heroku_backend.sync_dotenv
|
86
109
|
end
|
87
110
|
|
@@ -37,12 +37,11 @@ module MobileWorkflow::Cli
|
|
37
37
|
build :ability_generator
|
38
38
|
build :active_storage if options[:s3_storage]
|
39
39
|
build :mobile_workflow_generator, ARGV[1]
|
40
|
-
|
40
|
+
build :migrate_db
|
41
41
|
build :administrate_generator
|
42
|
-
|
43
|
-
generate_dot_env
|
44
|
-
|
45
|
-
|
42
|
+
build :format_source
|
43
|
+
build :generate_dot_env
|
44
|
+
build :git_commit
|
46
45
|
build :heroku if options[:heroku]
|
47
46
|
build :dokku, options[:dokku_host] if options[:dokku]
|
48
47
|
build :s3_backend, options[:aws_region] if options[:s3_storage]
|
@@ -55,30 +54,5 @@ module MobileWorkflow::Cli
|
|
55
54
|
::MobileWorkflow::Cli::AppBuilder
|
56
55
|
end
|
57
56
|
|
58
|
-
# Todo: MBS - move these methods to the builder class
|
59
|
-
# Ideally override RailsBuilder methods
|
60
|
-
private
|
61
|
-
def setup_db
|
62
|
-
Bundler.with_unbundled_env do
|
63
|
-
rails_command("db:drop")
|
64
|
-
rails_command("db:create")
|
65
|
-
rails_command("db:migrate")
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
def initial_git_commit
|
70
|
-
git add: "."
|
71
|
-
git commit: %Q{ -m 'Initial commit' }
|
72
|
-
end
|
73
|
-
|
74
|
-
def generate_dot_env
|
75
|
-
admin_user = 'admin'
|
76
|
-
admin_password = SecureRandom.base64(12)
|
77
|
-
|
78
|
-
file '.env', <<-CODE
|
79
|
-
ADMIN_USER=#{admin_user}
|
80
|
-
ADMIN_PASSWORD=#{admin_password}
|
81
|
-
CODE
|
82
|
-
end
|
83
57
|
end
|
84
58
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mobile_workflow
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.11
|
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: 2021-02-
|
11
|
+
date: 2021-02-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -103,7 +103,6 @@ files:
|
|
103
103
|
- app/views/layouts/mobile_workflow/application.html.erb
|
104
104
|
- bin/mwf
|
105
105
|
- config/routes.rb
|
106
|
-
- db/migrate/20200823174210_create_users.rb
|
107
106
|
- lib/generators/mobile_workflow/controller_generator.rb
|
108
107
|
- lib/generators/mobile_workflow/install/install_generator.rb
|
109
108
|
- lib/generators/mobile_workflow/install/templates/Gemfile.erb
|
@@ -115,8 +114,10 @@ files:
|
|
115
114
|
- lib/generators/mobile_workflow/install/templates/app/helpers/application_helper.rb
|
116
115
|
- lib/generators/mobile_workflow/install/templates/app/views/layouts/application.html.erb
|
117
116
|
- lib/generators/mobile_workflow/install/templates/app/views/sessions/new.html.erb
|
117
|
+
- lib/generators/mobile_workflow/install/templates/create_users.rb
|
118
118
|
- lib/generators/mobile_workflow/install/templates/seeds.rb.erb
|
119
119
|
- lib/generators/mobile_workflow/install/templates/sessions_controller.rb.erb
|
120
|
+
- lib/generators/mobile_workflow/install/templates/spec/factories/users.rb
|
120
121
|
- lib/generators/mobile_workflow/install/templates/storage.s3.yml
|
121
122
|
- lib/generators/mobile_workflow/install/templates/user.rb.erb
|
122
123
|
- lib/generators/mobile_workflow/model_generator.rb
|