jobshop 0.0.163 → 0.0.167
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +3 -3
- data/Rakefile +8 -17
- data/app/controllers/jobshop/application_controller.rb +5 -4
- data/app/controllers/jobshop/places_controller.rb +0 -4
- data/app/controllers/jobshop/users_controller.rb +0 -3
- data/app/mailers/jobshop/application_mailer.rb +0 -2
- data/app/mailers/jobshop/rfq_responder_mailer.rb +18 -0
- data/app/models/jobshop/ability.rb +1 -1
- data/app/models/jobshop/customer.rb +30 -0
- data/app/models/jobshop/customer/category.rb +19 -0
- data/app/models/jobshop/customer/contact.rb +28 -0
- data/app/models/jobshop/employee.rb +46 -0
- data/app/models/jobshop/employment.rb +25 -0
- data/app/models/jobshop/employment_version.rb +10 -0
- data/app/models/jobshop/inspection/boolean_criterion.rb +2 -2
- data/app/models/jobshop/inspection/deviation_criterion.rb +4 -4
- data/app/models/jobshop/inspection/limit_criterion.rb +6 -4
- data/app/models/jobshop/inspection/report.rb +2 -0
- data/app/models/jobshop/inspection/result.rb +2 -2
- data/app/models/jobshop/mailman.rb +22 -0
- data/app/models/jobshop/order.rb +2 -6
- data/app/models/jobshop/order_line.rb +2 -3
- data/app/models/jobshop/organization.rb +15 -6
- data/app/models/jobshop/place.rb +2 -0
- data/app/models/jobshop/product.rb +0 -3
- data/app/models/jobshop/rfq.rb +12 -6
- data/app/models/jobshop/user.rb +2 -17
- data/app/views/jobshop/rfq_responder_mailer/verified_contact.html.erb +5 -0
- data/app/views/jobshop/rfq_responder_mailer/verified_contact.text.erb +3 -0
- data/app/views/layouts/jobshop/application.html.haml +15 -0
- data/app/views/layouts/jobshop/mailer.html.erb +13 -0
- data/config/initializers/devise.rb +290 -0
- data/config/locales/devise.en.yml +64 -0
- data/config/routes.rb +1 -2
- data/db/migrate/20170311194758_initialize_jobshop.rb +42 -2
- data/db/migrate/20171216021339_create_organizations.rb +1 -4
- data/db/migrate/20171216021400_create_employees.rb +47 -0
- data/db/migrate/20171216021554_create_people.rb +13 -18
- data/db/migrate/20171216021853_create_customers.rb +57 -0
- data/db/migrate/20171216022020_create_places.rb +8 -9
- data/db/migrate/20171216022135_create_products.rb +6 -13
- data/db/migrate/20171216022605_create_orders.rb +19 -36
- data/db/migrate/20171216023018_create_roles.rb +5 -3
- data/db/migrate/20171216035357_create_things.rb +4 -4
- data/db/migrate/20171219022118_create_routing_processes.rb +15 -15
- data/db/migrate/20180107203241_create_inspections.rb +15 -14
- data/db/migrate/20181117023949_create_rfqs.rb +27 -19
- data/db/migrate/20181118014603_create_mailmen.rb +6 -4
- data/db/seeds.rb +126 -0
- data/lib/generators/jobshop/app/app_generator.rb +1 -1
- data/lib/generators/jobshop/app/templates/Procfile.tt +1 -0
- data/lib/generators/jobshop/app/templates/config/database.yml.tt +5 -5
- data/lib/generators/jobshop/{dummy/dummy_generator.rb → canary/canary_generator.rb} +13 -14
- data/lib/generators/jobshop/{dummy → canary}/templates/config/boot.rb.tt +0 -0
- data/lib/jobshop.rb +41 -12
- data/lib/jobshop/cli.rb +16 -82
- data/lib/jobshop/cli/app_generator.rb +38 -0
- data/lib/jobshop/cli/application.rb +14 -0
- data/lib/jobshop/cli/canary.rb +52 -0
- data/lib/jobshop/configuration.rb +16 -11
- data/lib/jobshop/engine.rb +39 -28
- data/lib/jobshop/helpers/migration.rb +78 -2
- data/lib/jobshop/mailroom/base_handler.rb +33 -0
- data/lib/jobshop/mailroom/null_handler.rb +10 -0
- data/lib/jobshop/mailroom/postmaster.rb +77 -0
- data/lib/jobshop/mailroom/rfq_handler.rb +39 -0
- data/lib/jobshop/version.rb +3 -1
- data/lib/tasks/jobshop_tasks.rake +7 -6
- metadata +98 -69
- data/app/controllers/concerns/email_token_validation.rb +0 -59
- data/app/controllers/concerns/jobshop/authentication_handler.rb +0 -15
- data/app/controllers/concerns/jobshop/authorization_handler.rb +0 -29
- data/app/controllers/jobshop/session_activations_controller.rb +0 -13
- data/app/controllers/jobshop/sessions_controller.rb +0 -20
- data/app/email_handlers/jobshop/rfq_handler.rb +0 -43
- data/app/models/jobshop/company.rb +0 -35
- data/app/models/jobshop/company/type.rb +0 -17
- data/app/models/jobshop/company_person.rb +0 -15
- data/app/models/jobshop/person.rb +0 -30
- data/app/models/jobshop/session_activation.rb +0 -30
- data/app/serializers/jobshop/test_user_serializer.rb +0 -10
- data/app/services/jobshop/authentication_service.rb +0 -20
- data/app/services/jobshop/authorization_service.rb +0 -30
- data/app/services/jobshop/jwt_service.rb +0 -17
- data/db/migrate/20171216021853_create_companies.rb +0 -64
- data/db/migrate/20171216023022_create_sessions.rb +0 -23
- data/lib/jobshop/cli/spinner.rb +0 -21
- data/lib/jobshop/dummy_app.rb +0 -190
- data/lib/jobshop/postmaster.rb +0 -89
@@ -10,11 +10,11 @@ module Jobshop
|
|
10
10
|
SQL
|
11
11
|
end
|
12
12
|
|
13
|
-
def
|
13
|
+
def fk_organization(table_name)
|
14
14
|
foreign_key table_name, :jobshop_organizations, :organization_id
|
15
15
|
end
|
16
16
|
|
17
|
-
def
|
17
|
+
def fk_created_by(table_name)
|
18
18
|
foreign_key table_name, :jobshop_people, {
|
19
19
|
organization_id: :organization_id,
|
20
20
|
created_by_id: :person_id
|
@@ -54,6 +54,82 @@ module Jobshop
|
|
54
54
|
#{options};
|
55
55
|
SQL
|
56
56
|
end
|
57
|
+
|
58
|
+
def create_table_with_auditing(table_name, *args) # rubocop: disable Metrics/MethodLength
|
59
|
+
options = args.extract_options!
|
60
|
+
primary_key_columns = options.delete(:primary_key)
|
61
|
+
|
62
|
+
if primary_key_columns.is_a?(Hash)
|
63
|
+
primary_key = []
|
64
|
+
types = []
|
65
|
+
|
66
|
+
primary_key_columns.each do |name, type|
|
67
|
+
primary_key.push(name)
|
68
|
+
types.push(type)
|
69
|
+
end
|
70
|
+
else
|
71
|
+
primary_key = Array(primary_key_columns)
|
72
|
+
types = Array.new(primary_key.count, :uuid)
|
73
|
+
end
|
74
|
+
|
75
|
+
primary_key_hash = Hash[primary_key.zip(types)]
|
76
|
+
auditing_table_name = table_name.to_s.singularize.concat("_auditing")
|
77
|
+
args << options
|
78
|
+
|
79
|
+
create_table(table_name, id: false) do |t|
|
80
|
+
# Put version column first because it is an auditing column
|
81
|
+
t.bigint :version
|
82
|
+
|
83
|
+
primary_key_hash.each { |name, type| t.send(type, name, null: false) }
|
84
|
+
t.index primary_key, unique: true, name: :"idx_#{table_name}_pkey"
|
85
|
+
|
86
|
+
# Preserve column order from migration
|
87
|
+
yield t
|
88
|
+
end
|
89
|
+
|
90
|
+
idx_table_name_pkey table_name
|
91
|
+
|
92
|
+
create_table(auditing_table_name, id: false) do |t|
|
93
|
+
# Put auditing columns first for the trigger to work properly
|
94
|
+
# Do not set a default on the primary key because the trigger sets it
|
95
|
+
# If the trigger fails to set the ID then this should probably blow up
|
96
|
+
t.uuid :auditing_id, null: false
|
97
|
+
t.index :auditing_id, unique: true,
|
98
|
+
name: :"idx_#{auditing_table_name}_pkey"
|
99
|
+
|
100
|
+
# Called audited_at so it does not conflict with created_at on the
|
101
|
+
# model being audited
|
102
|
+
t.datetime :audited_at, null: false
|
103
|
+
|
104
|
+
# Version being audited
|
105
|
+
t.bigint :version
|
106
|
+
|
107
|
+
# Put primary keys after auditing columns
|
108
|
+
primary_key_hash.each { |name, type| t.send(type, name, null: false) }
|
109
|
+
|
110
|
+
# Preserve column order and put everything else last
|
111
|
+
yield t
|
112
|
+
end
|
113
|
+
|
114
|
+
idx_table_name_pkey auditing_table_name
|
115
|
+
foreign_key auditing_table_name, table_name, primary_key
|
116
|
+
|
117
|
+
execute <<~SQL
|
118
|
+
CREATE
|
119
|
+
TRIGGER before_audit_#{table_name}
|
120
|
+
BEFORE INSERT OR UPDATE
|
121
|
+
ON #{table_name}
|
122
|
+
FOR EACH ROW EXECUTE PROCEDURE
|
123
|
+
prepare_auditable();
|
124
|
+
|
125
|
+
CREATE
|
126
|
+
TRIGGER #{table_name}_process_audit
|
127
|
+
AFTER INSERT OR UPDATE
|
128
|
+
ON #{table_name}
|
129
|
+
FOR EACH ROW EXECUTE PROCEDURE
|
130
|
+
process_auditable('#{auditing_table_name}');
|
131
|
+
SQL
|
132
|
+
end
|
57
133
|
end
|
58
134
|
end
|
59
135
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literals: true
|
2
|
+
|
3
|
+
module Jobshop
|
4
|
+
module Mailroom
|
5
|
+
class BaseHandler
|
6
|
+
attr_accessor :organization, :to, :from, :customer_contact, :customer,
|
7
|
+
:subject, :content
|
8
|
+
|
9
|
+
# Prefix for archive
|
10
|
+
class_attribute :archive_prefix
|
11
|
+
|
12
|
+
# Default From address when responding to incoming mail
|
13
|
+
class_attribute :reply_as,
|
14
|
+
default: Jobshop.configuration.smtp.default_from
|
15
|
+
|
16
|
+
def initialize(message, mailman)
|
17
|
+
self.organization = mailman.organization
|
18
|
+
|
19
|
+
self.to = Mail::Address.new(message.to.first)
|
20
|
+
self.from = Mail::Address.new(message.from.first)
|
21
|
+
|
22
|
+
self.customer_contact = organization.customer_contacts
|
23
|
+
.find_by(email: from.address)
|
24
|
+
|
25
|
+
self.customer = customer_contact&.customer ||
|
26
|
+
organization.customers.find_by(from_domain)
|
27
|
+
|
28
|
+
self.subject = message.subject
|
29
|
+
self.content = parse_body(message)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# frozen_string_literals: true
|
2
|
+
|
3
|
+
require "aws-sdk-s3"
|
4
|
+
require "mail"
|
5
|
+
require "shoryuken"
|
6
|
+
|
7
|
+
module Jobshop
|
8
|
+
module Mailroom
|
9
|
+
# Jobshop::Mailroom::Postmaster
|
10
|
+
#
|
11
|
+
# Reponsible for processing incoming email and dispatching it to its handler.
|
12
|
+
class Postmaster
|
13
|
+
include Shoryuken::Worker
|
14
|
+
|
15
|
+
shoryuken_options queue: Jobshop.configuration.aws.incoming_email_queue
|
16
|
+
|
17
|
+
def perform(sqs_msg, *)
|
18
|
+
@event = S3EventMessage.new(sqs_msg.body) || return
|
19
|
+
tempfile = Tempfile.new
|
20
|
+
s3.get_object({ bucket: @event.bucket, key: @event.key }, target: tempfile)
|
21
|
+
message = Mail.new(File.read(tempfile))
|
22
|
+
handler = Mailman.handler_for(message)
|
23
|
+
|
24
|
+
if handler.process
|
25
|
+
copy_to(handler.archive_prefix)
|
26
|
+
delete_original
|
27
|
+
sqs_msg.delete
|
28
|
+
end
|
29
|
+
|
30
|
+
ensure
|
31
|
+
@event = nil
|
32
|
+
tempfile.close
|
33
|
+
tempfile.unlink
|
34
|
+
end
|
35
|
+
|
36
|
+
def s3
|
37
|
+
@s3 ||= Aws::S3::Client.new
|
38
|
+
end
|
39
|
+
|
40
|
+
def copy_to(prefix)
|
41
|
+
key = prefix + "/" + @event.key.split("/").last
|
42
|
+
|
43
|
+
s3.copy_object({
|
44
|
+
copy_source: @event.bucket + "/" + @event.key,
|
45
|
+
bucket: Jobshop.configuration.aws.s3_bucket,
|
46
|
+
key: key
|
47
|
+
}) || raise("Could not copy incoming rfq to processed folder")
|
48
|
+
end
|
49
|
+
|
50
|
+
def delete_original
|
51
|
+
s3.delete_object({
|
52
|
+
bucket: @event.bucket, key: @event.key
|
53
|
+
}) || raise("Could not delete original email")
|
54
|
+
end
|
55
|
+
|
56
|
+
class S3EventMessage
|
57
|
+
def initialize(message)
|
58
|
+
@message = JSON.parse(message)
|
59
|
+
|
60
|
+
return false unless records
|
61
|
+
end
|
62
|
+
|
63
|
+
def records
|
64
|
+
@records ||= @message["Records"] || []
|
65
|
+
end
|
66
|
+
|
67
|
+
def bucket
|
68
|
+
records.first.dig "s3", "bucket", "name"
|
69
|
+
end
|
70
|
+
|
71
|
+
def key
|
72
|
+
records.first.dig "s3", "object", "key"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literals: true
|
2
|
+
|
3
|
+
module Jobshop
|
4
|
+
module Mailroom
|
5
|
+
class RFQHandler < BaseHandler
|
6
|
+
self.archive_prefix = "rfqs/processed"
|
7
|
+
|
8
|
+
def process
|
9
|
+
new_rfq = organization.rfqs.create!({
|
10
|
+
requested_by: customer_contact,
|
11
|
+
customer: customer,
|
12
|
+
from: from,
|
13
|
+
subject: subject,
|
14
|
+
content: content
|
15
|
+
})
|
16
|
+
|
17
|
+
if customer_contact
|
18
|
+
RFQResponderMailer.with(customer_contact: customer_contact)
|
19
|
+
.verified_contact.deliver_later
|
20
|
+
end
|
21
|
+
# TODO: Send rfq to quoting queue with low priority if customer.nil?
|
22
|
+
return new_rfq
|
23
|
+
end
|
24
|
+
|
25
|
+
private def from_domain
|
26
|
+
[ "reverse(lower(email_from_domain)) LIKE ?",
|
27
|
+
"#{from.domain.reverse.downcase}%" ]
|
28
|
+
end
|
29
|
+
|
30
|
+
private def parse_body(message)
|
31
|
+
if message.multipart?
|
32
|
+
message.parts[0].decode_body
|
33
|
+
else
|
34
|
+
message.decode_body
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/jobshop/version.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literals: true
|
2
|
+
|
1
3
|
module Jobshop
|
2
4
|
def self.gem_version
|
3
5
|
Gem::Version.new VERSION::STRING
|
@@ -6,7 +8,7 @@ module Jobshop
|
|
6
8
|
module VERSION
|
7
9
|
MAJOR = 0
|
8
10
|
MINOR = 0
|
9
|
-
TINY =
|
11
|
+
TINY = 167
|
10
12
|
PRE = nil
|
11
13
|
|
12
14
|
CODE_NAME = "prime time to bump the version"
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literals: true
|
2
|
+
|
1
3
|
# This effectively hides `rake jobshop:install:migrations` from `$ rake -T`.
|
2
4
|
Rake::Task["jobshop:install:migrations"].instance_variable_set(:@comments, [])
|
3
5
|
|
@@ -14,19 +16,18 @@ namespace :jobshop do
|
|
14
16
|
end
|
15
17
|
end
|
16
18
|
|
17
|
-
desc "Outputs
|
19
|
+
desc "Outputs all organization_ids"
|
18
20
|
task organizations: :environment do
|
19
|
-
Jobshop::Organization
|
20
|
-
|
21
|
-
organization_name = organization.name.ljust(32)
|
22
|
-
puts "#{organization_name} | #{organization.id}"
|
21
|
+
Jobshop::Organization.all.each do |organization|
|
22
|
+
puts organization.organization_id
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
26
|
desc "Start Incoming Email Worker"
|
27
27
|
task postmaster: :environment do
|
28
28
|
queue_name = Jobshop.configuration.aws.incoming_email_queue
|
29
|
-
postmaster_path = File.join(Jobshop::Engine.root, "lib", "jobshop",
|
29
|
+
postmaster_path = File.join(Jobshop::Engine.root, "lib", "jobshop",
|
30
|
+
"mailroom", "postmaster.rb")
|
30
31
|
|
31
32
|
exec <<~SHELL
|
32
33
|
bundle exec \
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jobshop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.167
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Frank J. Mattia
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-01-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord_json_validator
|
@@ -30,28 +30,28 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.
|
33
|
+
version: 1.30.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 1.
|
40
|
+
version: 1.30.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: aws-sdk-sqs
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 1.
|
47
|
+
version: 1.10.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 1.
|
54
|
+
version: 1.10.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: composite_primary_keys
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: 11.1.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: devise
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 4.5.0
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 4.5.0
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: fast_jsonapi
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -81,33 +95,47 @@ dependencies:
|
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '1.4'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
98
|
+
name: haml-rails
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
101
|
- - "~>"
|
88
102
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
103
|
+
version: 1.0.0
|
90
104
|
type: :runtime
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
108
|
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
110
|
+
version: 1.0.0
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
112
|
+
name: liner
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
100
114
|
requirements:
|
101
|
-
- -
|
115
|
+
- - "~>"
|
102
116
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
117
|
+
version: 0.2.4
|
104
118
|
type: :runtime
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
107
121
|
requirements:
|
108
|
-
- -
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 0.2.4
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: pg
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '1.0'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
109
137
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
138
|
+
version: '1.0'
|
111
139
|
- !ruby/object:Gem::Dependency
|
112
140
|
name: rack-cors
|
113
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -136,6 +164,20 @@ dependencies:
|
|
136
164
|
- - "~>"
|
137
165
|
- !ruby/object:Gem::Version
|
138
166
|
version: 5.0.2
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: sass-rails
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: 5.0.0
|
174
|
+
type: :runtime
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: 5.0.0
|
139
181
|
- !ruby/object:Gem::Dependency
|
140
182
|
name: shoryuken
|
141
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -179,19 +221,19 @@ dependencies:
|
|
179
221
|
- !ruby/object:Gem::Version
|
180
222
|
version: 2.2.0
|
181
223
|
- !ruby/object:Gem::Dependency
|
182
|
-
name:
|
224
|
+
name: rails
|
183
225
|
requirement: !ruby/object:Gem::Requirement
|
184
226
|
requirements:
|
185
|
-
- -
|
227
|
+
- - '='
|
186
228
|
- !ruby/object:Gem::Version
|
187
|
-
version:
|
188
|
-
type: :
|
229
|
+
version: 5.2.2
|
230
|
+
type: :runtime
|
189
231
|
prerelease: false
|
190
232
|
version_requirements: !ruby/object:Gem::Requirement
|
191
233
|
requirements:
|
192
|
-
- -
|
234
|
+
- - '='
|
193
235
|
- !ruby/object:Gem::Version
|
194
|
-
version:
|
236
|
+
version: 5.2.2
|
195
237
|
- !ruby/object:Gem::Dependency
|
196
238
|
name: capybara
|
197
239
|
requirement: !ruby/object:Gem::Requirement
|
@@ -206,20 +248,6 @@ dependencies:
|
|
206
248
|
- - "~>"
|
207
249
|
- !ruby/object:Gem::Version
|
208
250
|
version: '3.9'
|
209
|
-
- !ruby/object:Gem::Dependency
|
210
|
-
name: codeclimate-test-reporter
|
211
|
-
requirement: !ruby/object:Gem::Requirement
|
212
|
-
requirements:
|
213
|
-
- - "~>"
|
214
|
-
- !ruby/object:Gem::Version
|
215
|
-
version: '1.0'
|
216
|
-
type: :development
|
217
|
-
prerelease: false
|
218
|
-
version_requirements: !ruby/object:Gem::Requirement
|
219
|
-
requirements:
|
220
|
-
- - "~>"
|
221
|
-
- !ruby/object:Gem::Version
|
222
|
-
version: '1.0'
|
223
251
|
- !ruby/object:Gem::Dependency
|
224
252
|
name: coveralls
|
225
253
|
requirement: !ruby/object:Gem::Requirement
|
@@ -263,47 +291,47 @@ dependencies:
|
|
263
291
|
- !ruby/object:Gem::Version
|
264
292
|
version: '4.6'
|
265
293
|
- !ruby/object:Gem::Dependency
|
266
|
-
name:
|
294
|
+
name: faker
|
267
295
|
requirement: !ruby/object:Gem::Requirement
|
268
296
|
requirements:
|
269
297
|
- - "~>"
|
270
298
|
- !ruby/object:Gem::Version
|
271
|
-
version: '
|
299
|
+
version: '1.9'
|
272
300
|
type: :development
|
273
301
|
prerelease: false
|
274
302
|
version_requirements: !ruby/object:Gem::Requirement
|
275
303
|
requirements:
|
276
304
|
- - "~>"
|
277
305
|
- !ruby/object:Gem::Version
|
278
|
-
version: '
|
306
|
+
version: '1.9'
|
279
307
|
- !ruby/object:Gem::Dependency
|
280
|
-
name:
|
308
|
+
name: generator_spec
|
281
309
|
requirement: !ruby/object:Gem::Requirement
|
282
310
|
requirements:
|
283
311
|
- - "~>"
|
284
312
|
- !ruby/object:Gem::Version
|
285
|
-
version: '
|
313
|
+
version: '0.9'
|
286
314
|
type: :development
|
287
315
|
prerelease: false
|
288
316
|
version_requirements: !ruby/object:Gem::Requirement
|
289
317
|
requirements:
|
290
318
|
- - "~>"
|
291
319
|
- !ruby/object:Gem::Version
|
292
|
-
version: '
|
320
|
+
version: '0.9'
|
293
321
|
- !ruby/object:Gem::Dependency
|
294
|
-
name:
|
322
|
+
name: bcrypt
|
295
323
|
requirement: !ruby/object:Gem::Requirement
|
296
324
|
requirements:
|
297
325
|
- - "~>"
|
298
326
|
- !ruby/object:Gem::Version
|
299
|
-
version: '1
|
327
|
+
version: '3.1'
|
300
328
|
type: :development
|
301
329
|
prerelease: false
|
302
330
|
version_requirements: !ruby/object:Gem::Requirement
|
303
331
|
requirements:
|
304
332
|
- - "~>"
|
305
333
|
- !ruby/object:Gem::Version
|
306
|
-
version: '1
|
334
|
+
version: '3.1'
|
307
335
|
- !ruby/object:Gem::Dependency
|
308
336
|
name: rspec-rails
|
309
337
|
requirement: !ruby/object:Gem::Requirement
|
@@ -360,7 +388,7 @@ dependencies:
|
|
360
388
|
- - "~>"
|
361
389
|
- !ruby/object:Gem::Version
|
362
390
|
version: '0.8'
|
363
|
-
description: An
|
391
|
+
description: An Open Source Manufacturing Execution System
|
364
392
|
email:
|
365
393
|
- frankjmattia@gmail.com
|
366
394
|
executables:
|
@@ -372,27 +400,25 @@ files:
|
|
372
400
|
- LICENSE
|
373
401
|
- README.md
|
374
402
|
- Rakefile
|
375
|
-
- app/controllers/concerns/email_token_validation.rb
|
376
|
-
- app/controllers/concerns/jobshop/authentication_handler.rb
|
377
|
-
- app/controllers/concerns/jobshop/authorization_handler.rb
|
378
403
|
- app/controllers/jobshop/application_controller.rb
|
379
404
|
- app/controllers/jobshop/dashboards_controller.rb
|
380
405
|
- app/controllers/jobshop/organizations/lookups_controller.rb
|
381
406
|
- app/controllers/jobshop/places_controller.rb
|
382
407
|
- app/controllers/jobshop/registrations_controller.rb
|
383
|
-
- app/controllers/jobshop/session_activations_controller.rb
|
384
|
-
- app/controllers/jobshop/sessions_controller.rb
|
385
408
|
- app/controllers/jobshop/users_controller.rb
|
386
|
-
- app/email_handlers/jobshop/rfq_handler.rb
|
387
409
|
- app/jobs/jobshop/application_job.rb
|
388
410
|
- app/mailers/jobshop/application_mailer.rb
|
411
|
+
- app/mailers/jobshop/rfq_responder_mailer.rb
|
389
412
|
- app/models/jobshop/ability.rb
|
390
413
|
- app/models/jobshop/application_record.rb
|
391
414
|
- app/models/jobshop/collection.rb
|
392
|
-
- app/models/jobshop/
|
393
|
-
- app/models/jobshop/
|
394
|
-
- app/models/jobshop/
|
415
|
+
- app/models/jobshop/customer.rb
|
416
|
+
- app/models/jobshop/customer/category.rb
|
417
|
+
- app/models/jobshop/customer/contact.rb
|
395
418
|
- app/models/jobshop/dashboard.rb
|
419
|
+
- app/models/jobshop/employee.rb
|
420
|
+
- app/models/jobshop/employment.rb
|
421
|
+
- app/models/jobshop/employment_version.rb
|
396
422
|
- app/models/jobshop/inspection.rb
|
397
423
|
- app/models/jobshop/inspection/boolean_criterion.rb
|
398
424
|
- app/models/jobshop/inspection/criterion.rb
|
@@ -405,7 +431,6 @@ files:
|
|
405
431
|
- app/models/jobshop/order.rb
|
406
432
|
- app/models/jobshop/order_line.rb
|
407
433
|
- app/models/jobshop/organization.rb
|
408
|
-
- app/models/jobshop/person.rb
|
409
434
|
- app/models/jobshop/place.rb
|
410
435
|
- app/models/jobshop/product.rb
|
411
436
|
- app/models/jobshop/registration.rb
|
@@ -416,25 +441,26 @@ files:
|
|
416
441
|
- app/models/jobshop/role_assignment.rb
|
417
442
|
- app/models/jobshop/routing_process.rb
|
418
443
|
- app/models/jobshop/routing_step.rb
|
419
|
-
- app/models/jobshop/session_activation.rb
|
420
444
|
- app/models/jobshop/thing.rb
|
421
445
|
- app/models/jobshop/user.rb
|
422
446
|
- app/models/jobshop/virtual_record.rb
|
423
|
-
- app/
|
424
|
-
- app/
|
425
|
-
- app/
|
426
|
-
- app/
|
447
|
+
- app/views/jobshop/rfq_responder_mailer/verified_contact.html.erb
|
448
|
+
- app/views/jobshop/rfq_responder_mailer/verified_contact.text.erb
|
449
|
+
- app/views/layouts/jobshop/application.html.haml
|
450
|
+
- app/views/layouts/jobshop/mailer.html.erb
|
427
451
|
- app/views/layouts/jobshop/mailer.text.erb
|
452
|
+
- config/initializers/devise.rb
|
453
|
+
- config/locales/devise.en.yml
|
428
454
|
- config/routes.rb
|
429
455
|
- db/migrate/20170311194758_initialize_jobshop.rb
|
430
456
|
- db/migrate/20171216021339_create_organizations.rb
|
457
|
+
- db/migrate/20171216021400_create_employees.rb
|
431
458
|
- db/migrate/20171216021554_create_people.rb
|
432
|
-
- db/migrate/
|
459
|
+
- db/migrate/20171216021853_create_customers.rb
|
433
460
|
- db/migrate/20171216022020_create_places.rb
|
434
461
|
- db/migrate/20171216022135_create_products.rb
|
435
462
|
- db/migrate/20171216022605_create_orders.rb
|
436
463
|
- db/migrate/20171216023018_create_roles.rb
|
437
|
-
- db/migrate/20171216023022_create_sessions.rb
|
438
464
|
- db/migrate/20171216035357_create_things.rb
|
439
465
|
- db/migrate/20171219022118_create_routing_processes.rb
|
440
466
|
- db/migrate/20180107203241_create_inspections.rb
|
@@ -447,19 +473,23 @@ files:
|
|
447
473
|
- lib/generators/jobshop/app/templates/Procfile.tt
|
448
474
|
- lib/generators/jobshop/app/templates/README.md.tt
|
449
475
|
- lib/generators/jobshop/app/templates/config/database.yml.tt
|
476
|
+
- lib/generators/jobshop/canary/canary_generator.rb
|
477
|
+
- lib/generators/jobshop/canary/templates/config/boot.rb.tt
|
450
478
|
- lib/generators/jobshop/config/config_generator.rb
|
451
479
|
- lib/generators/jobshop/config/templates/config/initializers/jobshop.rb.tt
|
452
|
-
- lib/generators/jobshop/dummy/dummy_generator.rb
|
453
|
-
- lib/generators/jobshop/dummy/templates/config/boot.rb.tt
|
454
480
|
- lib/generators/jobshop/orm_helpers.rb
|
455
481
|
- lib/jobshop.rb
|
456
482
|
- lib/jobshop/cli.rb
|
457
|
-
- lib/jobshop/cli/
|
483
|
+
- lib/jobshop/cli/app_generator.rb
|
484
|
+
- lib/jobshop/cli/application.rb
|
485
|
+
- lib/jobshop/cli/canary.rb
|
458
486
|
- lib/jobshop/configuration.rb
|
459
|
-
- lib/jobshop/dummy_app.rb
|
460
487
|
- lib/jobshop/engine.rb
|
461
488
|
- lib/jobshop/helpers/migration.rb
|
462
|
-
- lib/jobshop/
|
489
|
+
- lib/jobshop/mailroom/base_handler.rb
|
490
|
+
- lib/jobshop/mailroom/null_handler.rb
|
491
|
+
- lib/jobshop/mailroom/postmaster.rb
|
492
|
+
- lib/jobshop/mailroom/rfq_handler.rb
|
463
493
|
- lib/jobshop/support/memo_attr.rb
|
464
494
|
- lib/jobshop/version.rb
|
465
495
|
- lib/tasks/jobshop_tasks.rake
|
@@ -482,9 +512,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
482
512
|
- !ruby/object:Gem::Version
|
483
513
|
version: '0'
|
484
514
|
requirements: []
|
485
|
-
|
486
|
-
rubygems_version: 2.6.14
|
515
|
+
rubygems_version: 3.0.1
|
487
516
|
signing_key:
|
488
517
|
specification_version: 4
|
489
|
-
summary: An
|
518
|
+
summary: An Open Source Manufacturing Execution System
|
490
519
|
test_files: []
|