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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bceba9fe508e85d21cd026ac5b26d49f06cec0eb18127a250745d902268b761b
4
- data.tar.gz: 311c915a764228757fe6f16bfbf382fb6710092a77ad075670de8b1a6548bf45
3
+ metadata.gz: 1e3e8921b520d2c949e637961bbeb4d13fa324214a4887efe11e235ab820ae51
4
+ data.tar.gz: ddc4c8b0334ab28a4f04151a8ede868719eb7ecaab56926ed76cc0e087a132fe
5
5
  SHA512:
6
- metadata.gz: 0df8bee9d328897f6b8b92448d0b8df828896b386fd4494453589f21c8321f1db5aef0497396e9f4b0d10430e6f8be57815a16bc84e05a4fef1cdaf2a58d8e54
7
- data.tar.gz: e7e5ce8cb555596c9c6f856ecee3b553dab36159951b3012a4a74646353b3ffbca5d32deb69501599fae14fd1ff0916ac2a71c4a9289185b9c044ab68cf40b05
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
- params = attributes_names.map{ |name| ":#{name}" }
34
- params.join(", ")
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} #{s3_storage? ? '--s3-storage' : ''}".strip
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]
@@ -45,6 +45,7 @@ group :development, :test do
45
45
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
46
46
  gem 'dotenv-rails'
47
47
  gem 'factory_bot_rails'
48
+ gem "rufo"
48
49
  end
49
50
 
50
51
  group :production do
@@ -0,0 +1,6 @@
1
+ FactoryBot.define do
2
+ factory :user do
3
+ email { 'jo@example.com' }
4
+ password { 'Password123' }
5
+ end
6
+ end
@@ -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
- head :unprocessable_entity
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', before: "end\n" do
22
- "config.include FactoryBot::Syntax::Methods"
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
- Bundler.with_unbundled_env { generate 'administrate:install' }
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
- Bundler.with_unbundled_env { generate 'administrate:routes' }
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
- # Copy user migrations if needed
62
- rails_command 'mobile_workflow:install:migrations' if options[:doorkeeper_oauth]
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
- setup_db
40
+ build :migrate_db
41
41
  build :administrate_generator
42
-
43
- generate_dot_env
44
- initial_git_commit
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
@@ -21,6 +21,10 @@ module MobileWorkflow::Cli
21
21
  def deploy
22
22
  heroku_command "git push"
23
23
  end
24
+
25
+ def seed_db
26
+ heroku_command "heroku run rails db:seed"
27
+ end
24
28
 
25
29
  def sync_dotenv
26
30
  env = File.read(".env").split.join(" ")
@@ -1,5 +1,5 @@
1
1
  module MobileWorkflow
2
- VERSION = '0.6.6'
2
+ VERSION = '0.6.11'
3
3
  RUBY_VERSION = '2.7.2'
4
4
  RAILS_VERSION = '6.1.0'
5
5
  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.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-01 00:00:00.000000000 Z
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