Last active
October 17, 2018 18:03
-
-
Save raghuvarmabh/cf290d312f3689c580908a8903e8faa3 to your computer and use it in GitHub Desktop.
joel coding challenge
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From 98e66e960491f10d543686211b30c3c6a8d61192 Mon Sep 17 00:00:00 2001 | |
From: ydarbleoj <[email protected]> | |
Date: Tue, 16 Oct 2018 15:11:17 -0700 | |
Subject: [PATCH 1/4] Added event model and migration | |
--- | |
app/models/event.rb | 3 +++ | |
db/migrate/20181016215050_create_events.rb | 11 +++++++++++ | |
db/schema.rb | 10 +++++++++- | |
test/fixtures/events.yml | 13 +++++++++++++ | |
test/models/event_test.rb | 7 +++++++ | |
5 files changed, 43 insertions(+), 1 deletion(-) | |
create mode 100644 app/models/event.rb | |
create mode 100644 db/migrate/20181016215050_create_events.rb | |
create mode 100644 test/fixtures/events.yml | |
create mode 100644 test/models/event_test.rb | |
diff --git a/app/models/event.rb b/app/models/event.rb | |
new file mode 100644 | |
index 0000000..74c4352 | |
--- /dev/null | |
+++ b/app/models/event.rb | |
@@ -0,0 +1,3 @@ | |
+class Event < ApplicationRecord | |
+ | |
+end | |
diff --git a/db/migrate/20181016215050_create_events.rb b/db/migrate/20181016215050_create_events.rb | |
new file mode 100644 | |
index 0000000..2eae1ca | |
--- /dev/null | |
+++ b/db/migrate/20181016215050_create_events.rb | |
@@ -0,0 +1,11 @@ | |
+class CreateEvents < ActiveRecord::Migration[5.2] | |
+ def change | |
+ create_table :events do |t| | |
+ t.integer :event_id | |
+ t.datetime :event_date | |
+ t.integer :event_type | |
+ | |
+ t.timestamps | |
+ end | |
+ end | |
+end | |
diff --git a/db/schema.rb b/db/schema.rb | |
index 59dacd4..b331d30 100644 | |
--- a/db/schema.rb | |
+++ b/db/schema.rb | |
@@ -10,7 +10,7 @@ | |
# | |
# It's strongly recommended that you check this file into your version control system. | |
-ActiveRecord::Schema.define(version: 2018_10_02_224410) do | |
+ActiveRecord::Schema.define(version: 2018_10_16_215050) do | |
# These are extensions that must be enabled in order to support this database | |
enable_extension "plpgsql" | |
@@ -25,6 +25,14 @@ ActiveRecord::Schema.define(version: 2018_10_02_224410) do | |
t.index ["company_type", "company_id"], name: "index_customers_on_company_type_and_company_id" | |
end | |
+ create_table "events", force: :cascade do |t| | |
+ t.integer "event_id" | |
+ t.datetime "event_date" | |
+ t.integer "event_type" | |
+ t.datetime "created_at", null: false | |
+ t.datetime "updated_at", null: false | |
+ end | |
+ | |
create_table "providers", force: :cascade do |t| | |
t.string "name" | |
t.datetime "created_at", null: false | |
diff --git a/test/fixtures/events.yml b/test/fixtures/events.yml | |
new file mode 100644 | |
index 0000000..c89f5c6 | |
--- /dev/null | |
+++ b/test/fixtures/events.yml | |
@@ -0,0 +1,13 @@ | |
+# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html | |
+ | |
+one: | |
+ event_date: 2018-10-16 14:50:50 | |
+ event_type: status | |
+ | |
+two: | |
+ event_date: 2018-10-16 14:50:50 | |
+ event_type: pickup | |
+ | |
+three: | |
+ event_date: 2018-10-16 14:50:50 | |
+ event_type: exception | |
diff --git a/test/models/event_test.rb b/test/models/event_test.rb | |
new file mode 100644 | |
index 0000000..c6f1566 | |
--- /dev/null | |
+++ b/test/models/event_test.rb | |
@@ -0,0 +1,7 @@ | |
+require 'test_helper' | |
+ | |
+class EventTest < ActiveSupport::TestCase | |
+ # test "the truth" do | |
+ # assert true | |
+ # end | |
+end | |
-- | |
2.17.0 | |
From 62f55aecb68e24ea92e2c254626bd3cd65e260d4 Mon Sep 17 00:00:00 2001 | |
From: ydarbleoj <[email protected]> | |
Date: Tue, 16 Oct 2018 15:32:23 -0700 | |
Subject: [PATCH 2/4] Added join table and updated attr | |
--- | |
app/models/company_event.rb | 2 ++ | |
app/models/customer.rb | 1 + | |
app/models/customer_event.rb | 2 ++ | |
app/models/shipper.rb | 1 + | |
db/migrate/20181016215050_create_events.rb | 1 - | |
.../20181016222600_create_company_events.rb | 10 ++++++++++ | |
.../20181016222655_create_customer_events.rb | 9 +++++++++ | |
db/schema.rb | 17 +++++++++++++++-- | |
test/fixtures/company_events.yml | 11 +++++++++++ | |
test/fixtures/customer_events.yml | 11 +++++++++++ | |
test/models/company_event_test.rb | 7 +++++++ | |
test/models/customer_event_test.rb | 7 +++++++ | |
vue-spa/src/App.vue | 3 ++- | |
vue-spa/src/components/EventsList.vue | 17 +++++++++++++++++ | |
14 files changed, 95 insertions(+), 4 deletions(-) | |
create mode 100644 app/models/company_event.rb | |
create mode 100644 app/models/customer_event.rb | |
create mode 100644 db/migrate/20181016222600_create_company_events.rb | |
create mode 100644 db/migrate/20181016222655_create_customer_events.rb | |
create mode 100644 test/fixtures/company_events.yml | |
create mode 100644 test/fixtures/customer_events.yml | |
create mode 100644 test/models/company_event_test.rb | |
create mode 100644 test/models/customer_event_test.rb | |
create mode 100644 vue-spa/src/components/EventsList.vue | |
diff --git a/app/models/company_event.rb b/app/models/company_event.rb | |
new file mode 100644 | |
index 0000000..969f8b4 | |
--- /dev/null | |
+++ b/app/models/company_event.rb | |
@@ -0,0 +1,2 @@ | |
+class CompanyEvent < ApplicationRecord | |
+end | |
diff --git a/app/models/customer.rb b/app/models/customer.rb | |
index f361510..da9e8bd 100644 | |
--- a/app/models/customer.rb | |
+++ b/app/models/customer.rb | |
@@ -1,3 +1,4 @@ | |
class Customer < ApplicationRecord | |
belongs_to :company, polymorphic: true | |
+ has_many :events, as: :eventable | |
end | |
diff --git a/app/models/customer_event.rb b/app/models/customer_event.rb | |
new file mode 100644 | |
index 0000000..d1ddec6 | |
--- /dev/null | |
+++ b/app/models/customer_event.rb | |
@@ -0,0 +1,2 @@ | |
+class CustomerEvent < ApplicationRecord | |
+end | |
diff --git a/app/models/shipper.rb b/app/models/shipper.rb | |
index b2bb5df..a81dd21 100644 | |
--- a/app/models/shipper.rb | |
+++ b/app/models/shipper.rb | |
@@ -1,3 +1,4 @@ | |
class Shipper < ApplicationRecord | |
has_many :customers, as: :company | |
+ has_many :events, as: :eventable | |
end | |
diff --git a/db/migrate/20181016215050_create_events.rb b/db/migrate/20181016215050_create_events.rb | |
index 2eae1ca..84b364d 100644 | |
--- a/db/migrate/20181016215050_create_events.rb | |
+++ b/db/migrate/20181016215050_create_events.rb | |
@@ -1,7 +1,6 @@ | |
class CreateEvents < ActiveRecord::Migration[5.2] | |
def change | |
create_table :events do |t| | |
- t.integer :event_id | |
t.datetime :event_date | |
t.integer :event_type | |
diff --git a/db/migrate/20181016222600_create_company_events.rb b/db/migrate/20181016222600_create_company_events.rb | |
new file mode 100644 | |
index 0000000..aad39df | |
--- /dev/null | |
+++ b/db/migrate/20181016222600_create_company_events.rb | |
@@ -0,0 +1,10 @@ | |
+class CreateCompanyEvents < ActiveRecord::Migration[5.2] | |
+ def change | |
+ create_table :company_events do |t| | |
+ t.integer :company | |
+ t.integer :events | |
+ | |
+ t.timestamps | |
+ end | |
+ end | |
+end | |
diff --git a/db/migrate/20181016222655_create_customer_events.rb b/db/migrate/20181016222655_create_customer_events.rb | |
new file mode 100644 | |
index 0000000..1b16cfa | |
--- /dev/null | |
+++ b/db/migrate/20181016222655_create_customer_events.rb | |
@@ -0,0 +1,9 @@ | |
+class CreateCustomerEvents < ActiveRecord::Migration[5.2] | |
+ def change | |
+ create_table :customer_events do |t| | |
+ t.integer :customer_id | |
+ t.integer :events | |
+ t.timestamps | |
+ end | |
+ end | |
+end | |
diff --git a/db/schema.rb b/db/schema.rb | |
index b331d30..ea563ac 100644 | |
--- a/db/schema.rb | |
+++ b/db/schema.rb | |
@@ -10,11 +10,25 @@ | |
# | |
# It's strongly recommended that you check this file into your version control system. | |
-ActiveRecord::Schema.define(version: 2018_10_16_215050) do | |
+ActiveRecord::Schema.define(version: 2018_10_16_222655) do | |
# These are extensions that must be enabled in order to support this database | |
enable_extension "plpgsql" | |
+ create_table "company_events", force: :cascade do |t| | |
+ t.integer "company" | |
+ t.integer "events" | |
+ t.datetime "created_at", null: false | |
+ t.datetime "updated_at", null: false | |
+ end | |
+ | |
+ create_table "customer_events", force: :cascade do |t| | |
+ t.integer "customer_id" | |
+ t.integer "events" | |
+ t.datetime "created_at", null: false | |
+ t.datetime "updated_at", null: false | |
+ end | |
+ | |
create_table "customers", force: :cascade do |t| | |
t.string "company_type", null: false | |
t.bigint "company_id", null: false | |
@@ -26,7 +40,6 @@ ActiveRecord::Schema.define(version: 2018_10_16_215050) do | |
end | |
create_table "events", force: :cascade do |t| | |
- t.integer "event_id" | |
t.datetime "event_date" | |
t.integer "event_type" | |
t.datetime "created_at", null: false | |
diff --git a/test/fixtures/company_events.yml b/test/fixtures/company_events.yml | |
new file mode 100644 | |
index 0000000..80aed36 | |
--- /dev/null | |
+++ b/test/fixtures/company_events.yml | |
@@ -0,0 +1,11 @@ | |
+# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html | |
+ | |
+# This model initially had no columns defined. If you add columns to the | |
+# model remove the '{}' from the fixture names and add the columns immediately | |
+# below each fixture, per the syntax in the comments below | |
+# | |
+one: {} | |
+# column: value | |
+# | |
+two: {} | |
+# column: value | |
diff --git a/test/fixtures/customer_events.yml b/test/fixtures/customer_events.yml | |
new file mode 100644 | |
index 0000000..80aed36 | |
--- /dev/null | |
+++ b/test/fixtures/customer_events.yml | |
@@ -0,0 +1,11 @@ | |
+# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html | |
+ | |
+# This model initially had no columns defined. If you add columns to the | |
+# model remove the '{}' from the fixture names and add the columns immediately | |
+# below each fixture, per the syntax in the comments below | |
+# | |
+one: {} | |
+# column: value | |
+# | |
+two: {} | |
+# column: value | |
diff --git a/test/models/company_event_test.rb b/test/models/company_event_test.rb | |
new file mode 100644 | |
index 0000000..bdd0861 | |
--- /dev/null | |
+++ b/test/models/company_event_test.rb | |
@@ -0,0 +1,7 @@ | |
+require 'test_helper' | |
+ | |
+class CompanyEventTest < ActiveSupport::TestCase | |
+ # test "the truth" do | |
+ # assert true | |
+ # end | |
+end | |
diff --git a/test/models/customer_event_test.rb b/test/models/customer_event_test.rb | |
new file mode 100644 | |
index 0000000..4f45fc3 | |
--- /dev/null | |
+++ b/test/models/customer_event_test.rb | |
@@ -0,0 +1,7 @@ | |
+require 'test_helper' | |
+ | |
+class CustomerEventTest < ActiveSupport::TestCase | |
+ # test "the truth" do | |
+ # assert true | |
+ # end | |
+end | |
diff --git a/vue-spa/src/App.vue b/vue-spa/src/App.vue | |
index 37c5e6e..5a6a7c6 100644 | |
--- a/vue-spa/src/App.vue | |
+++ b/vue-spa/src/App.vue | |
@@ -27,7 +27,8 @@ const http = axios.create({ | |
export default { | |
name: 'app', | |
components: { | |
- 'CustomerList': CustomerList | |
+ 'CustomerList': CustomerList, | |
+ 'EventsList': EventsList | |
}, | |
data () { | |
return { | |
diff --git a/vue-spa/src/components/EventsList.vue b/vue-spa/src/components/EventsList.vue | |
new file mode 100644 | |
index 0000000..4bfb1a7 | |
--- /dev/null | |
+++ b/vue-spa/src/components/EventsList.vue | |
@@ -0,0 +1,17 @@ | |
+<template> | |
+ <div> | |
+ </div> | |
+</template> | |
+ | |
+<script> | |
+import moment from 'moment' | |
+ | |
+export default { | |
+ name: 'EventList', | |
+ props: { | |
+ collection: { | |
+ required: true | |
+ } | |
+ }, | |
+} | |
+</script> | |
-- | |
2.17.0 | |
From 17da2a492d9f5d5bddccebe6eede2b81b03c71a6 Mon Sep 17 00:00:00 2001 | |
From: ydarbleoj <[email protected]> | |
Date: Tue, 16 Oct 2018 15:43:00 -0700 | |
Subject: [PATCH 3/4] Updated migrations | |
--- | |
vue-spa/src/components/EventsList.vue | 4 ---- | |
1 file changed, 4 deletions(-) | |
diff --git a/vue-spa/src/components/EventsList.vue b/vue-spa/src/components/EventsList.vue | |
index 4bfb1a7..1f668e7 100644 | |
--- a/vue-spa/src/components/EventsList.vue | |
+++ b/vue-spa/src/components/EventsList.vue | |
@@ -8,10 +8,6 @@ import moment from 'moment' | |
export default { | |
name: 'EventList', | |
- props: { | |
- collection: { | |
- required: true | |
- } | |
}, | |
} | |
</script> | |
-- | |
2.17.0 | |
From 0993142c8bf36167780bff0c164bfa30203e7f95 Mon Sep 17 00:00:00 2001 | |
From: ydarbleoj <[email protected]> | |
Date: Tue, 16 Oct 2018 15:44:59 -0700 | |
Subject: [PATCH 4/4] Udpated migrations | |
--- | |
app/models/customer.rb | 3 ++- | |
app/models/customer_event.rb | 2 ++ | |
app/models/event.rb | 5 ++++- | |
app/models/provider.rb | 2 ++ | |
app/models/shipper.rb | 3 ++- | |
db/migrate/20181016222600_create_company_events.rb | 4 ++-- | |
db/migrate/20181016222655_create_customer_events.rb | 2 +- | |
db/schema.rb | 6 +++--- | |
8 files changed, 18 insertions(+), 9 deletions(-) | |
diff --git a/app/models/customer.rb b/app/models/customer.rb | |
index da9e8bd..aadac45 100644 | |
--- a/app/models/customer.rb | |
+++ b/app/models/customer.rb | |
@@ -1,4 +1,5 @@ | |
class Customer < ApplicationRecord | |
belongs_to :company, polymorphic: true | |
- has_many :events, as: :eventable | |
+ has_many :customer_events | |
+ has_many :events, through: :customer_events | |
end | |
diff --git a/app/models/customer_event.rb b/app/models/customer_event.rb | |
index d1ddec6..f0b98d0 100644 | |
--- a/app/models/customer_event.rb | |
+++ b/app/models/customer_event.rb | |
@@ -1,2 +1,4 @@ | |
class CustomerEvent < ApplicationRecord | |
+ belongs_to :customer | |
+ belongs_to :event | |
end | |
diff --git a/app/models/event.rb b/app/models/event.rb | |
index 74c4352..aebec33 100644 | |
--- a/app/models/event.rb | |
+++ b/app/models/event.rb | |
@@ -1,3 +1,6 @@ | |
class Event < ApplicationRecord | |
- | |
+ has_many :customer_events | |
+ has_many :customers, through: :customer_events | |
+ has_many :company_events | |
+ has_many :company, through: :company_events | |
end | |
diff --git a/app/models/provider.rb b/app/models/provider.rb | |
index c468731..4364a15 100644 | |
--- a/app/models/provider.rb | |
+++ b/app/models/provider.rb | |
@@ -1,3 +1,5 @@ | |
class Provider < ApplicationRecord | |
has_many :customers, as: :company | |
+ has_many :company_events | |
+ has_many :events, through: :company_events | |
end | |
diff --git a/app/models/shipper.rb b/app/models/shipper.rb | |
index a81dd21..ac4aee6 100644 | |
--- a/app/models/shipper.rb | |
+++ b/app/models/shipper.rb | |
@@ -1,4 +1,5 @@ | |
class Shipper < ApplicationRecord | |
has_many :customers, as: :company | |
- has_many :events, as: :eventable | |
+ has_many :company_events | |
+ has_many :events, through: :company_events | |
end | |
diff --git a/db/migrate/20181016222600_create_company_events.rb b/db/migrate/20181016222600_create_company_events.rb | |
index aad39df..fb6daac 100644 | |
--- a/db/migrate/20181016222600_create_company_events.rb | |
+++ b/db/migrate/20181016222600_create_company_events.rb | |
@@ -1,8 +1,8 @@ | |
class CreateCompanyEvents < ActiveRecord::Migration[5.2] | |
def change | |
create_table :company_events do |t| | |
- t.integer :company | |
- t.integer :events | |
+ t.integer :company_id | |
+ t.integer :event_id | |
t.timestamps | |
end | |
diff --git a/db/migrate/20181016222655_create_customer_events.rb b/db/migrate/20181016222655_create_customer_events.rb | |
index 1b16cfa..bea49be 100644 | |
--- a/db/migrate/20181016222655_create_customer_events.rb | |
+++ b/db/migrate/20181016222655_create_customer_events.rb | |
@@ -2,7 +2,7 @@ class CreateCustomerEvents < ActiveRecord::Migration[5.2] | |
def change | |
create_table :customer_events do |t| | |
t.integer :customer_id | |
- t.integer :events | |
+ t.integer :event_id | |
t.timestamps | |
end | |
end | |
diff --git a/db/schema.rb b/db/schema.rb | |
index ea563ac..2073488 100644 | |
--- a/db/schema.rb | |
+++ b/db/schema.rb | |
@@ -16,15 +16,15 @@ ActiveRecord::Schema.define(version: 2018_10_16_222655) do | |
enable_extension "plpgsql" | |
create_table "company_events", force: :cascade do |t| | |
- t.integer "company" | |
- t.integer "events" | |
+ t.integer "company_id" | |
+ t.integer "event_id" | |
t.datetime "created_at", null: false | |
t.datetime "updated_at", null: false | |
end | |
create_table "customer_events", force: :cascade do |t| | |
t.integer "customer_id" | |
- t.integer "events" | |
+ t.integer "event_id" | |
t.datetime "created_at", null: false | |
t.datetime "updated_at", null: false | |
end | |
-- | |
2.17.0 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment