mobile_workflow 0.7.7 → 0.9.0
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/app/models/concerns/mobile_workflow/displayable/steps/form.rb +52 -42
- data/app/models/concerns/mobile_workflow/displayable/steps/stack.rb +9 -1
- data/app/models/concerns/mobile_workflow/displayable/steps/styled_content/stack.rb +4 -3
- data/config/initializers/add_frozen_string_literal.rb +19 -0
- data/lib/generators/mobile_workflow/install/install_generator.rb +5 -1
- data/lib/generators/mobile_workflow/install/templates/Gemfile.erb +24 -7
- data/lib/generators/mobile_workflow/install/templates/api_controller.rb.erb +1 -1
- data/lib/generators/mobile_workflow/install/templates/app/helpers/application_helper.rb +1 -2
- data/lib/generators/mobile_workflow/install/templates/{ability.rb → app/models/ability.rb} +1 -1
- data/lib/generators/mobile_workflow/install/templates/app/models/application_record.rb +2 -2
- data/lib/generators/mobile_workflow/install/templates/config/initializers/mobile_workflow_rollbar.rb +7 -0
- data/lib/generators/mobile_workflow/install/templates/deserializer_spec.rb.erb +0 -2
- data/lib/generators/mobile_workflow/install/templates/seeds.rb.erb +1 -1
- data/lib/generators/mobile_workflow/install/templates/sessions_controller.rb.erb +3 -4
- data/lib/generators/mobile_workflow/install/templates/user.rb.erb +2 -2
- data/lib/generators/mobile_workflow/templates/controller.rb.erb +3 -3
- data/lib/generators/mobile_workflow/templates/controller_spec.rb.erb +17 -9
- data/lib/generators/mobile_workflow/templates/model.rb.erb +2 -2
- data/lib/mobile_workflow/cli/app_builder.rb +21 -4
- data/lib/mobile_workflow/cli/app_server_generator.rb +3 -1
- data/lib/mobile_workflow/version.rb +1 -1
- metadata +10 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 948c45e0602fe9441f2cd0c79e4b4141c9ed357b9489ca7f3f1af599ea370c66
|
|
4
|
+
data.tar.gz: c84792530d7b0c02a05cc6e6d253e1464e7edea71b4f00e66d290d3a45221ccd
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1ffd490ac6e267a073cf45c54eeb9226dbf9b2ddc0402a00c923f6e25b38cfdd8345805ed429a8aa1e5c09ee7c368869146387e45c7f3da336931d6f38db06ed
|
|
7
|
+
data.tar.gz: 58fafb2c69f7562fe3ea2d09226e6459b0eaac2d3056a8f0590aa69b29a7078c22b6287266b283869b00adebbec790149d62f681a9ed64e26553ca0adbd53132
|
|
@@ -1,70 +1,80 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
|
|
1
4
|
module MobileWorkflow
|
|
2
5
|
module Displayable
|
|
3
6
|
module Steps
|
|
4
7
|
module Form
|
|
5
|
-
def mw_form_section(label:,
|
|
8
|
+
def mw_form_section(label:, id:)
|
|
6
9
|
raise 'Missing label' if label.nil?
|
|
7
|
-
raise 'Missing
|
|
8
|
-
|
|
9
|
-
{ item_type: :section,
|
|
10
|
+
raise 'Missing id' if id.nil?
|
|
11
|
+
|
|
12
|
+
{ item_type: :section, id: id, label: label }
|
|
10
13
|
end
|
|
11
|
-
|
|
12
|
-
def mw_form_multiple_selection(label:,
|
|
14
|
+
|
|
15
|
+
def mw_form_multiple_selection(label:, multiple_selection_options:, id:, selection_type: :single, optional: false, show_other_option: false)
|
|
13
16
|
raise 'Missing label' if label.nil?
|
|
14
|
-
raise 'Missing
|
|
17
|
+
raise 'Missing id' if id.nil?
|
|
15
18
|
raise 'Missing multiple selection options' if multiple_selection_options.nil?
|
|
16
|
-
|
|
17
|
-
{ item_type: :multiple_selection,
|
|
19
|
+
|
|
20
|
+
{ item_type: :multiple_selection, id: id, label: label,
|
|
21
|
+
multiple_selection_options: multiple_selection_options, selection_type: selection_type, optional: optional, show_other_option: show_other_option }
|
|
18
22
|
end
|
|
19
|
-
|
|
23
|
+
|
|
20
24
|
def mw_form_multiple_selection_options(text:, hint: nil, is_pre_selected: false)
|
|
21
25
|
raise 'Missing text' if text.nil?
|
|
22
|
-
|
|
26
|
+
|
|
23
27
|
{ text: text, hint: hint, isPreSelected: is_pre_selected }
|
|
24
28
|
end
|
|
25
|
-
|
|
26
|
-
def mw_form_number(label:,
|
|
29
|
+
|
|
30
|
+
def mw_form_number(label:, id:, placeholder: nil, optional: false, symbol_position: :leading, default_text_answer: nil, hint: nil)
|
|
27
31
|
raise 'Missing label' if label.nil?
|
|
28
|
-
raise 'Missing
|
|
29
|
-
|
|
30
|
-
{ item_type: :number, number_type: :number,
|
|
32
|
+
raise 'Missing id' if id.nil?
|
|
33
|
+
|
|
34
|
+
{ item_type: :number, number_type: :number, id: id, label: label,
|
|
35
|
+
placeholder: placeholder, optional: optional, symbol_position: symbol_position, default_text_answer: default_text_answer, hint: hint }
|
|
31
36
|
end
|
|
32
|
-
|
|
33
|
-
def mw_form_text(label:,
|
|
37
|
+
|
|
38
|
+
def mw_form_text(label:, id:, placeholder: nil, optional: false, multiline: false, default_text_answer: nil)
|
|
34
39
|
raise 'Missing label' if label.nil?
|
|
35
|
-
raise 'Missing
|
|
36
|
-
|
|
37
|
-
{ item_type: :text,
|
|
40
|
+
raise 'Missing id' if id.nil?
|
|
41
|
+
|
|
42
|
+
{ item_type: :text, id: id, label: label, placeholder: placeholder,
|
|
43
|
+
optional: optional, multiline: multiline, default_text_answer: default_text_answer }
|
|
38
44
|
end
|
|
39
|
-
|
|
40
|
-
def mw_form_date(label:,
|
|
45
|
+
|
|
46
|
+
def mw_form_date(label:, id:, optional: false, default_text_answer: nil)
|
|
41
47
|
raise 'Missing label' if label.nil?
|
|
42
|
-
raise 'Missing
|
|
43
|
-
|
|
44
|
-
{ item_type: :date, date_type: :calendar,
|
|
48
|
+
raise 'Missing id' if id.nil?
|
|
49
|
+
|
|
50
|
+
{ item_type: :date, date_type: :calendar, id: id, label: label, optional: optional,
|
|
51
|
+
default_text_answer: default_text_answer }
|
|
45
52
|
end
|
|
46
|
-
|
|
47
|
-
def mw_form_time(label:,
|
|
53
|
+
|
|
54
|
+
def mw_form_time(label:, id:, optional: false, default_text_answer: nil)
|
|
48
55
|
raise 'Missing label' if label.nil?
|
|
49
|
-
raise 'Missing
|
|
50
|
-
|
|
51
|
-
{ item_type: :time,
|
|
56
|
+
raise 'Missing id' if id.nil?
|
|
57
|
+
|
|
58
|
+
{ item_type: :time, id: id, label: label, optional: optional,
|
|
59
|
+
default_text_answer: default_text_answer }
|
|
52
60
|
end
|
|
53
|
-
|
|
54
|
-
def mw_form_email(label:,
|
|
61
|
+
|
|
62
|
+
def mw_form_email(label:, id:, placeholder: nil, optional: false, default_text_answer: nil)
|
|
55
63
|
raise 'Missing label' if label.nil?
|
|
56
|
-
raise 'Missing
|
|
57
|
-
|
|
58
|
-
{ item_type: :email,
|
|
64
|
+
raise 'Missing id' if id.nil?
|
|
65
|
+
|
|
66
|
+
{ item_type: :email, id: id, label: label, placeholder: placeholder,
|
|
67
|
+
optional: optional, default_text_answer: default_text_answer }
|
|
59
68
|
end
|
|
60
|
-
|
|
61
|
-
def mw_form_password(label:,
|
|
69
|
+
|
|
70
|
+
def mw_form_password(label:, id:, placeholder: nil, optional: false, default_text_answer: nil, hint: nil)
|
|
62
71
|
raise 'Missing label' if label.nil?
|
|
63
|
-
raise 'Missing
|
|
64
|
-
|
|
65
|
-
{ item_type: :secure,
|
|
72
|
+
raise 'Missing id' if id.nil?
|
|
73
|
+
|
|
74
|
+
{ item_type: :secure, id: id, label: label, placeholder: placeholder,
|
|
75
|
+
optional: optional, default_text_answer: default_text_answer, hint: hint }
|
|
66
76
|
end
|
|
67
77
|
end
|
|
68
78
|
end
|
|
69
79
|
end
|
|
70
|
-
end
|
|
80
|
+
end
|
|
@@ -56,7 +56,15 @@ module MobileWorkflow
|
|
|
56
56
|
{type: :button, label: label, appleSystemURL: apple_system_url, androidDeepLink: android_deep_link, style: style, sfSymbolName: sf_symbol_name, materialIconName: material_icon_name}.compact
|
|
57
57
|
end
|
|
58
58
|
alias_method :mw_display_button_for_system_url, :mw_display_system_url_button
|
|
59
|
-
|
|
59
|
+
|
|
60
|
+
def mw_display_link_button(label:, link_id:, style: :primary, on_success: :none, sf_symbol_name: nil, material_icon_name: nil)
|
|
61
|
+
validate_on_success!(on_success)
|
|
62
|
+
validate_button_style!(style)
|
|
63
|
+
|
|
64
|
+
{type: :button, label: label, linkId: link_id, style: style, onSuccess: on_success, sfSymbolName: sf_symbol_name, materialIconName: material_icon_name}.compact
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Remove this method once V1 is no longer being used
|
|
60
68
|
def mw_display_modal_workflow_button(label:, modal_workflow_name:, style: :primary, on_success: :none, sf_symbol_name: nil, material_icon_name: nil)
|
|
61
69
|
validate_on_success!(on_success)
|
|
62
70
|
validate_button_style!(style)
|
|
@@ -23,15 +23,16 @@ module MobileWorkflow
|
|
|
23
23
|
|
|
24
24
|
{ id: id.to_s, text: text, detailText: detail_text, type: :listItem, imageURL: preview_url }.compact
|
|
25
25
|
end
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
|
|
27
|
+
# Remove `modal_workflow_name` argument once V1 is no longer being used
|
|
28
|
+
def mw_stack_button(id:, label:, url: nil, method: :nil, on_success: :none, style: :primary, modal_workflow_name: nil, link_id: nil, link_url: nil, sf_symbol_name: nil, apple_system_url: nil, android_deep_link: nil, confirm_title: nil, confirm_text: nil, share_text: nil, share_image_url: nil)
|
|
28
29
|
raise 'Missing id' if id.nil?
|
|
29
30
|
raise 'Missing label' if label.nil?
|
|
30
31
|
|
|
31
32
|
validate_on_success!(on_success)
|
|
32
33
|
validate_button_style!(style)
|
|
33
34
|
|
|
34
|
-
{ id: id, type: :button, label: label, url: url, method: method, onSuccess: on_success, style: style, modalWorkflow: modal_workflow_name, linkURL: link_url, sfSymbolName: sf_symbol_name, appleSystemURL: apple_system_url, androidDeepLink: android_deep_link, confirmTitle: confirm_title, confirmText: confirm_text }.compact
|
|
35
|
+
{ id: id, type: :button, label: label, url: url, method: method, onSuccess: on_success, style: style, modalWorkflow: modal_workflow_name, linkId: link_id, linkURL: link_url, sfSymbolName: sf_symbol_name, appleSystemURL: apple_system_url, androidDeepLink: android_deep_link, confirmTitle: confirm_title, confirmText: confirm_text, shareText: share_text, shareImageURL: share_image_url }.compact
|
|
35
36
|
end
|
|
36
37
|
end
|
|
37
38
|
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Adds a `frozen_string_literal` comment to the top of files created by Rails generators.
|
|
4
|
+
# Taken from https://gist.github.com/thornomad/4e2f0905e2a4a6eefbc4be5772dfd4f7#gistcomment-3533276
|
|
5
|
+
#
|
|
6
|
+
# Warning! Doorkeeper auto generated files already include `frozen_string_literal`, so it will be duplicated.
|
|
7
|
+
|
|
8
|
+
return unless defined?(::Rails::Generators)
|
|
9
|
+
|
|
10
|
+
module RailsGeneratorFrozenStringLiteralPrepend
|
|
11
|
+
RUBY_EXTENSIONS = %w[.rb .rake]
|
|
12
|
+
|
|
13
|
+
def render
|
|
14
|
+
return super unless RUBY_EXTENSIONS.include? File.extname(self.destination)
|
|
15
|
+
"# frozen_string_literal: true\n\n" + super
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
Thor::Actions::CreateFile.prepend RailsGeneratorFrozenStringLiteralPrepend
|
|
@@ -67,6 +67,10 @@ module MobileWorkflow
|
|
|
67
67
|
end
|
|
68
68
|
end
|
|
69
69
|
|
|
70
|
+
def ability_generator
|
|
71
|
+
copy_file("app/models/ability.rb")
|
|
72
|
+
end
|
|
73
|
+
|
|
70
74
|
def generate_deserializers
|
|
71
75
|
say "Generating deserializers"
|
|
72
76
|
|
|
@@ -99,7 +103,7 @@ module MobileWorkflow
|
|
|
99
103
|
route "resources :#{plural_controller_name}, only: [#{actions.map{|a| ":#{a}"}.join(", ")}]"
|
|
100
104
|
end
|
|
101
105
|
end
|
|
102
|
-
|
|
106
|
+
|
|
103
107
|
def generate_seeds
|
|
104
108
|
template("seeds.rb.erb", "db/seeds.rb", force: true)
|
|
105
109
|
end
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
source 'https://rubygems.org'
|
|
2
4
|
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
|
|
3
5
|
|
|
4
6
|
ruby '<%= MobileWorkflow::RUBY_VERSION %>'
|
|
5
7
|
|
|
6
8
|
# Core Gems
|
|
7
|
-
gem 'rails', '<%= MobileWorkflow::RAILS_VERSION %>'
|
|
8
9
|
gem 'puma', '~> 5.0'
|
|
10
|
+
gem 'rails', '<%= MobileWorkflow::RAILS_VERSION %>'
|
|
9
11
|
gem 'sass-rails', '>= 6'
|
|
10
12
|
gem 'turbolinks', '~> 5'
|
|
11
13
|
|
|
@@ -14,10 +16,12 @@ gem 'mobile_workflow', '<%= MobileWorkflow::VERSION %>'
|
|
|
14
16
|
|
|
15
17
|
# Authorisation / Authentication
|
|
16
18
|
<%- if options[:doorkeeper_oauth] %>
|
|
17
|
-
gem 'doorkeeper'
|
|
18
19
|
gem 'bcrypt'
|
|
19
20
|
<%- end %>
|
|
20
21
|
gem 'cancancan', '~> 3.1'
|
|
22
|
+
<%- if options[:doorkeeper_oauth] %>
|
|
23
|
+
gem 'doorkeeper'
|
|
24
|
+
<%- end %>
|
|
21
25
|
|
|
22
26
|
# Admin console
|
|
23
27
|
gem 'administrate', '~> 0.13.0'
|
|
@@ -26,26 +30,39 @@ gem 'administrate-field-enum'
|
|
|
26
30
|
|
|
27
31
|
<%- if options[:s3_storage] %>
|
|
28
32
|
# Backend storage for S3
|
|
29
|
-
gem "image_processing"
|
|
30
33
|
gem 'aws-sdk-s3', '~> 1.60', '>= 1.60.1'
|
|
31
34
|
gem 'aws-sdk-sns', '~> 1.23'
|
|
35
|
+
gem "image_processing"
|
|
32
36
|
<%- end %>
|
|
33
37
|
|
|
34
38
|
# FFI for Mac M1
|
|
35
39
|
gem 'ffi', '~> 1.15.1'
|
|
36
40
|
|
|
41
|
+
# Error tracking
|
|
42
|
+
gem 'rollbar'
|
|
43
|
+
|
|
44
|
+
# Data migrations
|
|
45
|
+
gem 'data_migrate', '~> 7.0.0'
|
|
46
|
+
|
|
37
47
|
group :development do
|
|
38
|
-
gem 'web-console', '>= 3.3.0'
|
|
39
48
|
gem 'listen', '>= 3.0.5', '< 3.2'
|
|
49
|
+
gem 'web-console', '>= 3.3.0'
|
|
40
50
|
end
|
|
41
51
|
|
|
42
52
|
group :development, :test do
|
|
43
|
-
gem '
|
|
44
|
-
gem 'rspec-rails', '~> 4.0.0'
|
|
45
|
-
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
|
|
53
|
+
gem 'byebug', platforms: %i[mri mingw x64_mingw]
|
|
46
54
|
gem 'dotenv-rails'
|
|
47
55
|
gem 'factory_bot_rails'
|
|
56
|
+
gem 'rspec-rails', '~> 4.0.0'
|
|
57
|
+
gem 'rubocop', '~> 1.16', require: false
|
|
58
|
+
gem 'rubocop-rails', '~> 2.10.0', require: false
|
|
59
|
+
gem 'rubocop-rspec', '~> 2.3.0', require: false
|
|
48
60
|
gem "rufo"
|
|
61
|
+
gem 'sqlite3'
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
group :test do
|
|
65
|
+
gem 'simplecov', '~> 0.21.2', require: false
|
|
49
66
|
end
|
|
50
67
|
|
|
51
68
|
group :production do
|
|
@@ -10,7 +10,7 @@ class ApiController < ActionController::API
|
|
|
10
10
|
def current_resource_owner
|
|
11
11
|
@current_resource_owner ||= User.find(doorkeeper_token.resource_owner_id) if doorkeeper_token&.accessible?
|
|
12
12
|
end
|
|
13
|
-
|
|
13
|
+
alias current_user current_resource_owner
|
|
14
14
|
|
|
15
15
|
protected
|
|
16
16
|
def anonymous_action?
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
module ApplicationHelper
|
|
2
|
-
|
|
3
2
|
def bootstrap_class_for(flash_type)
|
|
4
3
|
{ success: "alert-success", error: "alert-danger", alert: "alert-warning", notice: "alert-info" }.stringify_keys[flash_type.to_s] || flash_type.to_s
|
|
5
4
|
end
|
|
6
|
-
|
|
5
|
+
|
|
7
6
|
def flash_messages
|
|
8
7
|
flash.each do |flash_type, message|
|
|
9
8
|
concat(content_tag(:div, message, class: "alert #{bootstrap_class_for(flash_type)}", role: 'alert'))
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
<%- if options[:doorkeeper_oauth] %>
|
|
2
2
|
# You can set the OAuth client ID and client secret in your ENV in order to avoid them being reset each time you reset the database.
|
|
3
3
|
Doorkeeper::Application.create! name: 'Main App', redirect_uri: 'mww://callback', scopes: 'public', uid: ENV['OAUTH_CLIENT_ID'], secret: ENV['OAUTH_CLIENT_SECRET']
|
|
4
|
-
<%- end %>
|
|
4
|
+
<%- end %>
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
class SessionsController < ApplicationController
|
|
2
|
-
def new
|
|
3
|
-
end
|
|
2
|
+
def new; end
|
|
4
3
|
|
|
5
4
|
def create
|
|
6
5
|
@user = User.find_by("LOWER(email)= ?", params[:email].downcase)
|
|
7
|
-
if @user
|
|
6
|
+
if @user&.authenticate(params[:password])
|
|
8
7
|
session[:user_id] = @user.id
|
|
9
8
|
redirect_to params[:return_to] || root_url
|
|
10
9
|
else
|
|
@@ -12,4 +11,4 @@ class SessionsController < ApplicationController
|
|
|
12
11
|
render :new
|
|
13
12
|
end
|
|
14
13
|
end
|
|
15
|
-
end
|
|
14
|
+
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
class User < ApplicationRecord
|
|
2
2
|
has_secure_password
|
|
3
3
|
|
|
4
|
-
has_many :access_grants, class_name: 'Doorkeeper::AccessGrant', foreign_key: :resource_owner_id, dependent: :destroy
|
|
5
|
-
has_many :access_tokens, class_name: 'Doorkeeper::AccessToken', foreign_key: :resource_owner_id, dependent: :destroy
|
|
4
|
+
has_many :access_grants, class_name: 'Doorkeeper::AccessGrant', foreign_key: :resource_owner_id, inverse_of: :resource_owner, dependent: :destroy
|
|
5
|
+
has_many :access_tokens, class_name: 'Doorkeeper::AccessToken', foreign_key: :resource_owner_id, inverse_of: :resource_owner, dependent: :destroy
|
|
6
6
|
|
|
7
7
|
validates :email, presence: true, uniqueness: true
|
|
8
8
|
end
|
|
@@ -4,19 +4,19 @@ 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
8
|
<% if index_action? -%>
|
|
9
9
|
def index
|
|
10
10
|
render json: @<%= plural_table_name %>.collect(&:list_item_as_json)
|
|
11
11
|
end
|
|
12
|
-
|
|
13
12
|
<% end -%>
|
|
13
|
+
|
|
14
14
|
<% if show_action? -%>
|
|
15
15
|
def show
|
|
16
16
|
render json: @<%= singular_table_name %>.display_as_json
|
|
17
17
|
end
|
|
18
|
-
|
|
19
18
|
<% end -%>
|
|
19
|
+
|
|
20
20
|
<% if create_action? -%>
|
|
21
21
|
def create
|
|
22
22
|
<% if doorkeeper_oauth? -%>
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
1
|
require 'rails_helper'
|
|
4
2
|
require 'json'
|
|
5
3
|
|
|
@@ -11,50 +9,60 @@ RSpec.describe <%= controller_class_name %>Controller do
|
|
|
11
9
|
let(:token) { instance_double(Doorkeeper::AccessToken, accessible?: true, acceptable?: true, resource_owner_id: user.id) }
|
|
12
10
|
<% end -%>
|
|
13
11
|
|
|
14
|
-
<% if index_action? -%>
|
|
12
|
+
<% if index_action? -%>
|
|
15
13
|
describe 'GET #index' do
|
|
16
14
|
let!(:<%= controller_class_name.singularize.underscore %>) { create(:<%= controller_class_name.singularize.underscore %>) }
|
|
15
|
+
|
|
17
16
|
before(:each) do
|
|
18
17
|
<% if doorkeeper_oauth? -%>
|
|
19
18
|
allow(subject).to receive(:doorkeeper_token) { token }
|
|
20
19
|
<% end -%>
|
|
21
20
|
get :index, params: params
|
|
22
21
|
end
|
|
23
|
-
|
|
22
|
+
|
|
24
23
|
context 'ok' do
|
|
25
24
|
it { expect(json_response[0][:id]).to eq <%= controller_class_name.singularize.underscore %>.id }
|
|
26
25
|
it { expect(response.status).to eq 200 }
|
|
27
26
|
end
|
|
28
27
|
end
|
|
29
28
|
<% end -%>
|
|
29
|
+
|
|
30
30
|
<% if show_action? -%>
|
|
31
31
|
describe 'GET #show' do
|
|
32
32
|
let(:<%= controller_class_name.singularize.underscore %>) { create(:<%= controller_class_name.singularize.underscore %>) }
|
|
33
33
|
let(:params) { { id: <%= controller_class_name.singularize.underscore %>.id } }
|
|
34
|
+
|
|
34
35
|
before(:each) do
|
|
35
36
|
<% if doorkeeper_oauth? -%>
|
|
36
37
|
allow(subject).to receive(:doorkeeper_token) { token }
|
|
37
38
|
<% end -%>
|
|
38
39
|
get :show, params: params
|
|
39
40
|
end
|
|
40
|
-
|
|
41
|
-
context 'ok' do
|
|
41
|
+
|
|
42
|
+
context 'ok' do
|
|
42
43
|
it { expect(response.status).to eq 200 }
|
|
43
44
|
end
|
|
44
45
|
end
|
|
45
|
-
|
|
46
46
|
<% end -%>
|
|
47
|
+
|
|
47
48
|
<% if create_action? -%>
|
|
48
49
|
describe 'POST #create' do
|
|
49
|
-
let(:payload_params) {
|
|
50
|
+
let(:payload_params) {
|
|
51
|
+
{
|
|
52
|
+
<% attributes_names.each do |attribute| -%>
|
|
53
|
+
<%= attribute %>: 'string',
|
|
54
|
+
<% end -%>
|
|
55
|
+
}
|
|
56
|
+
}
|
|
50
57
|
let(:params) { { payload: payload_params, binaries: [{identifier: 'record', mimetype: 'video/mp4'}] } }
|
|
58
|
+
|
|
51
59
|
before(:each) do
|
|
52
60
|
<% if doorkeeper_oauth? -%>
|
|
53
61
|
allow(subject).to receive(:doorkeeper_token) { token }
|
|
54
62
|
<% end -%>
|
|
55
63
|
post :create, params: params
|
|
56
64
|
end
|
|
57
|
-
|
|
65
|
+
|
|
58
66
|
context 'ok' do
|
|
59
67
|
it { expect(<%= controller_class_name.singularize %>.count).to eq 1 }
|
|
60
68
|
it { expect(response.status).to eq 201 }
|
|
@@ -11,8 +11,8 @@ class <%= class_name %> < <%= parent_class_name.classify %>
|
|
|
11
11
|
<% end -%>
|
|
12
12
|
<% if class_name == 'User' -%>
|
|
13
13
|
<% if doorkeeper_oauth? -%>
|
|
14
|
-
has_many :access_grants, class_name: 'Doorkeeper::AccessGrant', foreign_key: :resource_owner_id, dependent: :destroy
|
|
15
|
-
has_many :access_tokens, class_name: 'Doorkeeper::AccessToken', foreign_key: :resource_owner_id, dependent: :destroy
|
|
14
|
+
has_many :access_grants, class_name: 'Doorkeeper::AccessGrant', foreign_key: :resource_owner_id, inverse_of: :resource_owner, dependent: :destroy
|
|
15
|
+
has_many :access_tokens, class_name: 'Doorkeeper::AccessToken', foreign_key: :resource_owner_id, inverse_of: :resource_owner, dependent: :destroy
|
|
16
16
|
<% end -%>
|
|
17
17
|
<% attributes.each do |attribute| -%>
|
|
18
18
|
<% if attribute.name == 'email' -%>
|
|
@@ -48,10 +48,6 @@ CODE
|
|
|
48
48
|
generate 'administrate:routes'
|
|
49
49
|
end
|
|
50
50
|
|
|
51
|
-
def ability_generator
|
|
52
|
-
copy_file 'ability.rb', 'app/models/ability.rb'
|
|
53
|
-
end
|
|
54
|
-
|
|
55
51
|
def active_storage
|
|
56
52
|
rails_command 'active_storage:install'
|
|
57
53
|
copy_file 'storage.s3.yml', 'config/storage.yml'
|
|
@@ -78,6 +74,27 @@ ADMIN_USER=#{admin_user}
|
|
|
78
74
|
ADMIN_PASSWORD=#{admin_password}
|
|
79
75
|
CODE
|
|
80
76
|
end
|
|
77
|
+
|
|
78
|
+
def rubocop
|
|
79
|
+
copy_file '.rubocop.yml'
|
|
80
|
+
command = 'rubocop --auto-gen-config'
|
|
81
|
+
|
|
82
|
+
puts "Running: #{command}"
|
|
83
|
+
output = `#{command}`
|
|
84
|
+
puts "Output: #{output}"
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def simplecov
|
|
88
|
+
append_to_file 'spec/rails_helper.rb', "\n# Config for Test Coverage\nrequire 'simplecov'\nSimpleCov.start\nSimpleCov.minimum_coverage 80\n"
|
|
89
|
+
append_to_file '.gitignore', "\n# Ignore test coverage reports\n/coverage\n"
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def rollbar
|
|
93
|
+
generate 'rollbar'
|
|
94
|
+
gsub_file 'config/initializers/rollbar.rb', 'if Rails.env.test?', 'if Rails.env.test? || Rails.env.development?'
|
|
95
|
+
copy_file 'config/initializers/mobile_workflow_rollbar.rb'
|
|
96
|
+
gsub_file 'app/jobs/application_job.rb', 'class ApplicationJob < ActiveJob::Base', "class ApplicationJob < ActiveJob::Base\n include Rollbar::ActiveJob\n"
|
|
97
|
+
end
|
|
81
98
|
|
|
82
99
|
def git_commit(message = 'Initial commit')
|
|
83
100
|
git add: "."
|
|
@@ -34,13 +34,15 @@ module MobileWorkflow::Cli
|
|
|
34
34
|
build :procfiles
|
|
35
35
|
build :rspec_generator
|
|
36
36
|
build :factory_bot
|
|
37
|
-
build :
|
|
37
|
+
build :simplecov
|
|
38
|
+
build :rollbar
|
|
38
39
|
build :active_storage if options[:s3_storage]
|
|
39
40
|
build :mobile_workflow_generator, ARGV[1]
|
|
40
41
|
build :migrate_db
|
|
41
42
|
build :administrate_generator
|
|
42
43
|
build :format_source
|
|
43
44
|
build :generate_dot_env
|
|
45
|
+
build :rubocop
|
|
44
46
|
build :git_commit
|
|
45
47
|
build :heroku if options[:heroku]
|
|
46
48
|
build :dokku, options[:dokku_host] if options[:dokku]
|
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.
|
|
4
|
+
version: 0.9.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Matt Brooke-Smith
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2022-02-03 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: aws-sdk-s3
|
|
@@ -114,7 +114,7 @@ dependencies:
|
|
|
114
114
|
- - ">="
|
|
115
115
|
- !ruby/object:Gem::Version
|
|
116
116
|
version: '0'
|
|
117
|
-
description:
|
|
117
|
+
description:
|
|
118
118
|
email:
|
|
119
119
|
- matt@futureworkshops.com
|
|
120
120
|
executables:
|
|
@@ -146,6 +146,7 @@ files:
|
|
|
146
146
|
- app/models/concerns/mobile_workflow/displayable/steps/styled_content/stack.rb
|
|
147
147
|
- app/views/layouts/mobile_workflow/application.html.erb
|
|
148
148
|
- bin/mwf
|
|
149
|
+
- config/initializers/add_frozen_string_literal.rb
|
|
149
150
|
- config/routes.rb
|
|
150
151
|
- lib/generators/mobile_workflow/controller_generator.rb
|
|
151
152
|
- lib/generators/mobile_workflow/install/install_generator.rb
|
|
@@ -153,12 +154,13 @@ files:
|
|
|
153
154
|
- lib/generators/mobile_workflow/install/templates/Procfile
|
|
154
155
|
- lib/generators/mobile_workflow/install/templates/Procfile.dev
|
|
155
156
|
- lib/generators/mobile_workflow/install/templates/README.md.erb
|
|
156
|
-
- lib/generators/mobile_workflow/install/templates/ability.rb
|
|
157
157
|
- lib/generators/mobile_workflow/install/templates/api_controller.rb.erb
|
|
158
158
|
- lib/generators/mobile_workflow/install/templates/app/helpers/application_helper.rb
|
|
159
|
+
- lib/generators/mobile_workflow/install/templates/app/models/ability.rb
|
|
159
160
|
- lib/generators/mobile_workflow/install/templates/app/models/application_record.rb
|
|
160
161
|
- lib/generators/mobile_workflow/install/templates/app/views/layouts/application.html.erb
|
|
161
162
|
- lib/generators/mobile_workflow/install/templates/app/views/sessions/new.html.erb
|
|
163
|
+
- lib/generators/mobile_workflow/install/templates/config/initializers/mobile_workflow_rollbar.rb
|
|
162
164
|
- lib/generators/mobile_workflow/install/templates/create_users.rb
|
|
163
165
|
- lib/generators/mobile_workflow/install/templates/deserializer.rb.erb
|
|
164
166
|
- lib/generators/mobile_workflow/install/templates/deserializer_spec.rb.erb
|
|
@@ -190,7 +192,7 @@ homepage: https://github.com/futureworkshops/mobile_workflow
|
|
|
190
192
|
licenses:
|
|
191
193
|
- MIT
|
|
192
194
|
metadata: {}
|
|
193
|
-
post_install_message:
|
|
195
|
+
post_install_message:
|
|
194
196
|
rdoc_options: []
|
|
195
197
|
require_paths:
|
|
196
198
|
- lib
|
|
@@ -205,8 +207,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
205
207
|
- !ruby/object:Gem::Version
|
|
206
208
|
version: '0'
|
|
207
209
|
requirements: []
|
|
208
|
-
rubygems_version: 3.
|
|
209
|
-
signing_key:
|
|
210
|
+
rubygems_version: 3.3.6
|
|
211
|
+
signing_key:
|
|
210
212
|
specification_version: 4
|
|
211
213
|
summary: A Rails engine to provide API support for Mobile Workflow Apps.
|
|
212
214
|
test_files: []
|