jobshop 0.0.163 → 0.0.167

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +3 -3
  3. data/Rakefile +8 -17
  4. data/app/controllers/jobshop/application_controller.rb +5 -4
  5. data/app/controllers/jobshop/places_controller.rb +0 -4
  6. data/app/controllers/jobshop/users_controller.rb +0 -3
  7. data/app/mailers/jobshop/application_mailer.rb +0 -2
  8. data/app/mailers/jobshop/rfq_responder_mailer.rb +18 -0
  9. data/app/models/jobshop/ability.rb +1 -1
  10. data/app/models/jobshop/customer.rb +30 -0
  11. data/app/models/jobshop/customer/category.rb +19 -0
  12. data/app/models/jobshop/customer/contact.rb +28 -0
  13. data/app/models/jobshop/employee.rb +46 -0
  14. data/app/models/jobshop/employment.rb +25 -0
  15. data/app/models/jobshop/employment_version.rb +10 -0
  16. data/app/models/jobshop/inspection/boolean_criterion.rb +2 -2
  17. data/app/models/jobshop/inspection/deviation_criterion.rb +4 -4
  18. data/app/models/jobshop/inspection/limit_criterion.rb +6 -4
  19. data/app/models/jobshop/inspection/report.rb +2 -0
  20. data/app/models/jobshop/inspection/result.rb +2 -2
  21. data/app/models/jobshop/mailman.rb +22 -0
  22. data/app/models/jobshop/order.rb +2 -6
  23. data/app/models/jobshop/order_line.rb +2 -3
  24. data/app/models/jobshop/organization.rb +15 -6
  25. data/app/models/jobshop/place.rb +2 -0
  26. data/app/models/jobshop/product.rb +0 -3
  27. data/app/models/jobshop/rfq.rb +12 -6
  28. data/app/models/jobshop/user.rb +2 -17
  29. data/app/views/jobshop/rfq_responder_mailer/verified_contact.html.erb +5 -0
  30. data/app/views/jobshop/rfq_responder_mailer/verified_contact.text.erb +3 -0
  31. data/app/views/layouts/jobshop/application.html.haml +15 -0
  32. data/app/views/layouts/jobshop/mailer.html.erb +13 -0
  33. data/config/initializers/devise.rb +290 -0
  34. data/config/locales/devise.en.yml +64 -0
  35. data/config/routes.rb +1 -2
  36. data/db/migrate/20170311194758_initialize_jobshop.rb +42 -2
  37. data/db/migrate/20171216021339_create_organizations.rb +1 -4
  38. data/db/migrate/20171216021400_create_employees.rb +47 -0
  39. data/db/migrate/20171216021554_create_people.rb +13 -18
  40. data/db/migrate/20171216021853_create_customers.rb +57 -0
  41. data/db/migrate/20171216022020_create_places.rb +8 -9
  42. data/db/migrate/20171216022135_create_products.rb +6 -13
  43. data/db/migrate/20171216022605_create_orders.rb +19 -36
  44. data/db/migrate/20171216023018_create_roles.rb +5 -3
  45. data/db/migrate/20171216035357_create_things.rb +4 -4
  46. data/db/migrate/20171219022118_create_routing_processes.rb +15 -15
  47. data/db/migrate/20180107203241_create_inspections.rb +15 -14
  48. data/db/migrate/20181117023949_create_rfqs.rb +27 -19
  49. data/db/migrate/20181118014603_create_mailmen.rb +6 -4
  50. data/db/seeds.rb +126 -0
  51. data/lib/generators/jobshop/app/app_generator.rb +1 -1
  52. data/lib/generators/jobshop/app/templates/Procfile.tt +1 -0
  53. data/lib/generators/jobshop/app/templates/config/database.yml.tt +5 -5
  54. data/lib/generators/jobshop/{dummy/dummy_generator.rb → canary/canary_generator.rb} +13 -14
  55. data/lib/generators/jobshop/{dummy → canary}/templates/config/boot.rb.tt +0 -0
  56. data/lib/jobshop.rb +41 -12
  57. data/lib/jobshop/cli.rb +16 -82
  58. data/lib/jobshop/cli/app_generator.rb +38 -0
  59. data/lib/jobshop/cli/application.rb +14 -0
  60. data/lib/jobshop/cli/canary.rb +52 -0
  61. data/lib/jobshop/configuration.rb +16 -11
  62. data/lib/jobshop/engine.rb +39 -28
  63. data/lib/jobshop/helpers/migration.rb +78 -2
  64. data/lib/jobshop/mailroom/base_handler.rb +33 -0
  65. data/lib/jobshop/mailroom/null_handler.rb +10 -0
  66. data/lib/jobshop/mailroom/postmaster.rb +77 -0
  67. data/lib/jobshop/mailroom/rfq_handler.rb +39 -0
  68. data/lib/jobshop/version.rb +3 -1
  69. data/lib/tasks/jobshop_tasks.rake +7 -6
  70. metadata +98 -69
  71. data/app/controllers/concerns/email_token_validation.rb +0 -59
  72. data/app/controllers/concerns/jobshop/authentication_handler.rb +0 -15
  73. data/app/controllers/concerns/jobshop/authorization_handler.rb +0 -29
  74. data/app/controllers/jobshop/session_activations_controller.rb +0 -13
  75. data/app/controllers/jobshop/sessions_controller.rb +0 -20
  76. data/app/email_handlers/jobshop/rfq_handler.rb +0 -43
  77. data/app/models/jobshop/company.rb +0 -35
  78. data/app/models/jobshop/company/type.rb +0 -17
  79. data/app/models/jobshop/company_person.rb +0 -15
  80. data/app/models/jobshop/person.rb +0 -30
  81. data/app/models/jobshop/session_activation.rb +0 -30
  82. data/app/serializers/jobshop/test_user_serializer.rb +0 -10
  83. data/app/services/jobshop/authentication_service.rb +0 -20
  84. data/app/services/jobshop/authorization_service.rb +0 -30
  85. data/app/services/jobshop/jwt_service.rb +0 -17
  86. data/db/migrate/20171216021853_create_companies.rb +0 -64
  87. data/db/migrate/20171216023022_create_sessions.rb +0 -23
  88. data/lib/jobshop/cli/spinner.rb +0 -21
  89. data/lib/jobshop/dummy_app.rb +0 -190
  90. data/lib/jobshop/postmaster.rb +0 -89
@@ -10,11 +10,11 @@ module Jobshop
10
10
  SQL
11
11
  end
12
12
 
13
- def fk_organization_id(table_name)
13
+ def fk_organization(table_name)
14
14
  foreign_key table_name, :jobshop_organizations, :organization_id
15
15
  end
16
16
 
17
- def fk_created_by_id(table_name)
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,10 @@
1
+ # frozen_string_literals: true
2
+
3
+ module Jobshop
4
+ module Mailroom
5
+ class NullHandler < BaseHandler
6
+ def initialize(*); end
7
+ def process; false; end
8
+ end
9
+ end
10
+ 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
@@ -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 = 163
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 organization[:name] and organization[:id] for all sites within Jobshop."
19
+ desc "Outputs all organization_ids"
18
20
  task organizations: :environment do
19
- Jobshop::Organization
20
- .select([ "jobshop_organizations.id", "name" ]).each do |organization|
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", "postmaster.rb")
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.163
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: 2018-11-28 00:00:00.000000000 Z
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.24.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.24.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.9.0
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.9.0
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: jwt
98
+ name: haml-rails
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - "~>"
88
102
  - !ruby/object:Gem::Version
89
- version: 2.1.0
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: 2.1.0
110
+ version: 1.0.0
97
111
  - !ruby/object:Gem::Dependency
98
- name: rails
112
+ name: liner
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
- - - '='
115
+ - - "~>"
102
116
  - !ruby/object:Gem::Version
103
- version: 5.2.1
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: 5.2.1
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: bootsnap
224
+ name: rails
183
225
  requirement: !ruby/object:Gem::Requirement
184
226
  requirements:
185
- - - "~>"
227
+ - - '='
186
228
  - !ruby/object:Gem::Version
187
- version: 1.3.0
188
- type: :development
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: 1.3.0
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: generator_spec
294
+ name: faker
267
295
  requirement: !ruby/object:Gem::Requirement
268
296
  requirements:
269
297
  - - "~>"
270
298
  - !ruby/object:Gem::Version
271
- version: '0.9'
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: '0.9'
306
+ version: '1.9'
279
307
  - !ruby/object:Gem::Dependency
280
- name: bcrypt
308
+ name: generator_spec
281
309
  requirement: !ruby/object:Gem::Requirement
282
310
  requirements:
283
311
  - - "~>"
284
312
  - !ruby/object:Gem::Version
285
- version: '3.1'
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: '3.1'
320
+ version: '0.9'
293
321
  - !ruby/object:Gem::Dependency
294
- name: pg
322
+ name: bcrypt
295
323
  requirement: !ruby/object:Gem::Requirement
296
324
  requirements:
297
325
  - - "~>"
298
326
  - !ruby/object:Gem::Version
299
- version: '1.0'
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.0'
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 open source Manufacturing Execution System
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/company.rb
393
- - app/models/jobshop/company/type.rb
394
- - app/models/jobshop/company_person.rb
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/serializers/jobshop/test_user_serializer.rb
424
- - app/services/jobshop/authentication_service.rb
425
- - app/services/jobshop/authorization_service.rb
426
- - app/services/jobshop/jwt_service.rb
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/20171216021853_create_companies.rb
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/spinner.rb
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/postmaster.rb
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
- rubyforge_project:
486
- rubygems_version: 2.6.14
515
+ rubygems_version: 3.0.1
487
516
  signing_key:
488
517
  specification_version: 4
489
- summary: An open source Manufacturing Execution System
518
+ summary: An Open Source Manufacturing Execution System
490
519
  test_files: []