spec/dummy/log/development.log in exposition-0.0.5.5.pre.alpha vs spec/dummy/log/development.log in exposition-0.0.5.6.pre.alpha
- old
+ new
@@ -1,1734 +1,779 @@
+ [1m[35mSQL (3.8ms)[0m [1m[35mCREATE EXTENSION IF NOT EXISTS "plpgsql"[0m
+ [1m[35m (0.9ms)[0m [1m[35mDROP TABLE IF EXISTS "categorical_taggings" CASCADE[0m
+ [1m[35m (10.9ms)[0m [1m[35mCREATE TABLE "categorical_taggings" ("id" bigserial primary key, "taggable_id" integer, "taggable_type" character varying, "tag_id" integer)[0m
+ [1m[35m (2.0ms)[0m [1m[35mCREATE INDEX "index_categorical_taggings_on_taggable_type_and_taggable_id" ON "categorical_taggings" USING btree ("taggable_type", "taggable_id")[0m
+ [1m[35m (0.2ms)[0m [1m[35mDROP TABLE IF EXISTS "categorical_tags" CASCADE[0m
+ [1m[35m (4.3ms)[0m [1m[35mCREATE TABLE "categorical_tags" ("id" bigserial primary key, "label" character varying, "slug" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[35m (1.2ms)[0m [1m[35mCREATE UNIQUE INDEX "index_categorical_tags_on_label" ON "categorical_tags" USING btree ("label")[0m
+ [1m[35m (1.2ms)[0m [1m[35mCREATE UNIQUE INDEX "index_categorical_tags_on_slug" ON "categorical_tags" USING btree ("slug")[0m
+ [1m[35m (0.2ms)[0m [1m[35mDROP TABLE IF EXISTS "exposition_posts" CASCADE[0m
+ [1m[35m (4.1ms)[0m [1m[35mCREATE TABLE "exposition_posts" ("id" bigserial primary key, "title" character varying, "body" text, "published" boolean DEFAULT 'f' NOT NULL, "published_at" timestamp, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL, "author_id" integer, "slug" character varying, "summary" text)[0m
+ [1m[35m (1.1ms)[0m [1m[35mCREATE UNIQUE INDEX "index_exposition_posts_on_slug" ON "exposition_posts" USING btree ("slug")[0m
+ [1m[35m (0.2ms)[0m [1m[35mDROP TABLE IF EXISTS "exposition_users" CASCADE[0m
+ [1m[35m (4.2ms)[0m [1m[35mCREATE TABLE "exposition_users" ("id" bigserial primary key, "name" character varying, "email" character varying, "password_digest" character varying, "remember_digest" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[35m (1.3ms)[0m [1m[35mCREATE UNIQUE INDEX "index_exposition_users_on_email" ON "exposition_users" USING btree ("email")[0m
+ [1m[35m (3.6ms)[0m [1m[35mCREATE TABLE "schema_migrations" ("version" character varying NOT NULL PRIMARY KEY)[0m
+ [1m[35m (0.6ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+ [1m[35m (1.2ms)[0m [1m[32mINSERT INTO "schema_migrations" (version) VALUES (20160226035733)[0m
+ [1m[35m (3.6ms)[0m [1m[35mCREATE TABLE "ar_internal_metadata" ("key" character varying NOT NULL PRIMARY KEY, "value" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[36mActiveRecord::InternalMetadata Load (0.5ms)[0m [1m[34mSELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2[0m [["key", "environment"], ["LIMIT", 1]]
+ [1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
+ [1m[35mSQL (1.4ms)[0m [1m[32mINSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "key"[0m [["key", "environment"], ["value", "development"], ["created_at", "2017-06-30 03:21:59.391515"], ["updated_at", "2017-06-30 03:21:59.391515"]]
+ [1m[35m (0.4ms)[0m [1m[35mCOMMIT[0m
+ [1m[36mActiveRecord::InternalMetadata Load (0.7ms)[0m [1m[34mSELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2[0m [["key", "environment"], ["LIMIT", 1]]
+ [1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
+ [1m[35m (0.1ms)[0m [1m[35mCOMMIT[0m
+ [1m[35mSQL (0.4ms)[0m [1m[35mCREATE EXTENSION IF NOT EXISTS "plpgsql"[0m
+ [1m[35m (0.3ms)[0m [1m[35mDROP TABLE IF EXISTS "categorical_taggings" CASCADE[0m
+ [1m[35m (7.8ms)[0m [1m[35mCREATE TABLE "categorical_taggings" ("id" bigserial primary key, "taggable_id" integer, "taggable_type" character varying, "tag_id" integer)[0m
+ [1m[35m (1.9ms)[0m [1m[35mCREATE INDEX "index_categorical_taggings_on_taggable_type_and_taggable_id" ON "categorical_taggings" USING btree ("taggable_type", "taggable_id")[0m
+ [1m[35m (0.2ms)[0m [1m[35mDROP TABLE IF EXISTS "categorical_tags" CASCADE[0m
+ [1m[35m (4.5ms)[0m [1m[35mCREATE TABLE "categorical_tags" ("id" bigserial primary key, "label" character varying, "slug" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[35m (1.4ms)[0m [1m[35mCREATE UNIQUE INDEX "index_categorical_tags_on_label" ON "categorical_tags" USING btree ("label")[0m
+ [1m[35m (1.3ms)[0m [1m[35mCREATE UNIQUE INDEX "index_categorical_tags_on_slug" ON "categorical_tags" USING btree ("slug")[0m
+ [1m[35m (0.2ms)[0m [1m[35mDROP TABLE IF EXISTS "exposition_posts" CASCADE[0m
+ [1m[35m (4.4ms)[0m [1m[35mCREATE TABLE "exposition_posts" ("id" bigserial primary key, "title" character varying, "body" text, "published" boolean DEFAULT 'f' NOT NULL, "published_at" timestamp, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL, "author_id" integer, "slug" character varying, "summary" text)[0m
+ [1m[35m (1.6ms)[0m [1m[35mCREATE UNIQUE INDEX "index_exposition_posts_on_slug" ON "exposition_posts" USING btree ("slug")[0m
+ [1m[35m (0.4ms)[0m [1m[35mDROP TABLE IF EXISTS "exposition_users" CASCADE[0m
+ [1m[35m (4.9ms)[0m [1m[35mCREATE TABLE "exposition_users" ("id" bigserial primary key, "name" character varying, "email" character varying, "password_digest" character varying, "remember_digest" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[35m (2.7ms)[0m [1m[35mCREATE UNIQUE INDEX "index_exposition_users_on_email" ON "exposition_users" USING btree ("email")[0m
+ [1m[35m (3.5ms)[0m [1m[35mCREATE TABLE "schema_migrations" ("version" character varying NOT NULL PRIMARY KEY)[0m
+ [1m[35m (0.7ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+ [1m[35m (0.8ms)[0m [1m[32mINSERT INTO "schema_migrations" (version) VALUES (20160226035733)[0m
+ [1m[35m (3.8ms)[0m [1m[35mCREATE TABLE "ar_internal_metadata" ("key" character varying NOT NULL PRIMARY KEY, "value" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[36mActiveRecord::InternalMetadata Load (0.4ms)[0m [1m[34mSELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2[0m [["key", "environment"], ["LIMIT", 1]]
+ [1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
+ [1m[35mSQL (0.4ms)[0m [1m[32mINSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "key"[0m [["key", "environment"], ["value", "development"], ["created_at", "2017-06-30 03:21:59.486607"], ["updated_at", "2017-06-30 03:21:59.486607"]]
+ [1m[35m (0.4ms)[0m [1m[35mCOMMIT[0m
+ [1m[36mActiveRecord::InternalMetadata Load (0.3ms)[0m [1m[34mSELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2[0m [["key", "environment"], ["LIMIT", 1]]
+ [1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
+ [1m[35m (0.1ms)[0m [1m[35mCOMMIT[0m
+ [1m[35m (1.0ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+ [1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
+ [1m[36mExposition::User Exists (0.7ms)[0m [1m[34mSELECT 1 AS one FROM "exposition_users" WHERE LOWER("exposition_users"."email") = LOWER($1) LIMIT $2[0m [["email", "admin@admin.admin"], ["LIMIT", 1]]
+ [1m[35mSQL (0.6ms)[0m [1m[32mINSERT INTO "exposition_users" ("name", "email", "password_digest", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id"[0m [["name", "Admin"], ["email", "admin@admin.admin"], ["password_digest", "$2a$10$gxY416RNguW6ccMHth1sKudsr3jYjS9H2GWXA3pwUhnkX0Tbypazm"], ["created_at", "2017-06-30 03:21:59.606743"], ["updated_at", "2017-06-30 03:21:59.606743"]]
+ [1m[35m (5.6ms)[0m [1m[35mCOMMIT[0m
+ [1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
+ [1m[36mExposition::Post Exists (0.7ms)[0m [1m[34mSELECT 1 AS one FROM "exposition_posts" WHERE LOWER("exposition_posts"."slug") = LOWER($1) LIMIT $2[0m [["slug", "test-title"], ["LIMIT", 1]]
+ [1m[35mSQL (0.7ms)[0m [1m[32mINSERT INTO "exposition_posts" ("title", "body", "published", "published_at", "created_at", "updated_at", "author_id", "slug", "summary") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING "id"[0m [["title", "Test Title"], ["body", "Hello\n\nThis is a post.\n"], ["published", "t"], ["published_at", "2017-06-29 00:00:00"], ["created_at", "2017-06-30 03:21:59.706747"], ["updated_at", "2017-06-30 03:21:59.706747"], ["author_id", 1], ["slug", "test-title"], ["summary", "Hello\n\nThis is a post.\n"]]
+ [1m[35m (0.5ms)[0m [1m[35mCOMMIT[0m
+ [1m[35m (1.0ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+ [1m[35m (0.4ms)[0m [1m[34mSELECT "ar_internal_metadata"."value" FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1[0m [["key", "environment"]]
+ [1m[35m (0.3ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+ [1m[35m (0.2ms)[0m [1m[34mSELECT "ar_internal_metadata"."value" FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1[0m [["key", "environment"]]
+ [1m[35m (0.3ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+ [1m[35m (0.2ms)[0m [1m[34mSELECT "ar_internal_metadata"."value" FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1[0m [["key", "environment"]]
+ [1m[35m (138.5ms)[0m [1m[35mDROP DATABASE IF EXISTS "exposition_development"[0m
+ [1m[35m (131.3ms)[0m [1m[35mDROP DATABASE IF EXISTS "exposition_test"[0m
+ [1m[35m (245.4ms)[0m [1m[35mCREATE DATABASE "exposition_development" ENCODING = 'unicode'[0m
+ [1m[35m (245.1ms)[0m [1m[35mCREATE DATABASE "exposition_test" ENCODING = 'unicode'[0m
+ [1m[35mSQL (0.4ms)[0m [1m[35mCREATE EXTENSION IF NOT EXISTS "plpgsql"[0m
+ [1m[35m (0.3ms)[0m [1m[35mDROP TABLE IF EXISTS "ar_internal_metadata" CASCADE[0m
+ [1m[35m (6.5ms)[0m [1m[35mCREATE TABLE "ar_internal_metadata" ("key" bigserial primary key, "value" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[35m (0.5ms)[0m [1m[35mDROP TABLE IF EXISTS "categorical_taggings" CASCADE[0m
+ [1m[35m (4.3ms)[0m [1m[35mCREATE TABLE "categorical_taggings" ("id" bigserial primary key, "taggable_id" integer, "taggable_type" character varying, "tag_id" integer)[0m
+ [1m[35m (1.7ms)[0m [1m[35mCREATE INDEX "index_categorical_taggings_on_taggable_type_and_taggable_id" ON "categorical_taggings" ("taggable_type", "taggable_id")[0m
+ [1m[35m (0.2ms)[0m [1m[35mDROP TABLE IF EXISTS "categorical_tags" CASCADE[0m
+ [1m[35m (4.3ms)[0m [1m[35mCREATE TABLE "categorical_tags" ("id" bigserial primary key, "label" character varying, "slug" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[35m (1.4ms)[0m [1m[35mCREATE UNIQUE INDEX "index_categorical_tags_on_label" ON "categorical_tags" ("label")[0m
+ [1m[35m (1.3ms)[0m [1m[35mCREATE UNIQUE INDEX "index_categorical_tags_on_slug" ON "categorical_tags" ("slug")[0m
+ [1m[35m (0.2ms)[0m [1m[35mDROP TABLE IF EXISTS "exposition_posts" CASCADE[0m
+ [1m[35m (4.2ms)[0m [1m[35mCREATE TABLE "exposition_posts" ("id" bigserial primary key, "title" character varying, "body" text, "published" boolean DEFAULT 'f' NOT NULL, "published_at" timestamp, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL, "author_id" integer, "slug" character varying, "summary" text)[0m
+ [1m[35m (1.1ms)[0m [1m[35mCREATE UNIQUE INDEX "index_exposition_posts_on_slug" ON "exposition_posts" ("slug")[0m
+ [1m[35m (0.2ms)[0m [1m[35mDROP TABLE IF EXISTS "exposition_users" CASCADE[0m
+ [1m[35m (4.4ms)[0m [1m[35mCREATE TABLE "exposition_users" ("id" bigserial primary key, "name" character varying, "email" character varying, "password_digest" character varying, "remember_digest" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[35m (1.3ms)[0m [1m[35mCREATE UNIQUE INDEX "index_exposition_users_on_email" ON "exposition_users" ("email")[0m
+ [1m[35m (3.1ms)[0m [1m[35mCREATE TABLE "schema_migrations" ("version" character varying NOT NULL PRIMARY KEY)[0m
+ [1m[35m (0.8ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+ [1m[35m (0.7ms)[0m [1m[32mINSERT INTO "schema_migrations" (version) VALUES (20160226035733)[0m
+ [1m[36mActiveRecord::InternalMetadata Load (0.4ms)[0m [1m[34mSELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2[0m [["key", "environment"], ["LIMIT", 1]]
+ [1m[35m (0.9ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+ [1m[35m (0.3ms)[0m [1m[34mSELECT "ar_internal_metadata"."value" FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1[0m [["key", nil]]
+ [1m[35m (0.9ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+ [1m[35m (0.3ms)[0m [1m[34mSELECT "ar_internal_metadata"."value" FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1[0m [["key", nil]]
+ [1m[36mActiveRecord::InternalMetadata Load (0.3ms)[0m [1m[34mSELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2[0m [["key", nil], ["LIMIT", 1]]
+ [1m[35m (0.3ms)[0m [1m[35mBEGIN[0m
+ [1m[35mSQL (0.7ms)[0m [1m[32mINSERT INTO "ar_internal_metadata" ("value", "created_at", "updated_at") VALUES ($1, $2, $3) RETURNING "key"[0m [["value", "development"], ["created_at", "2017-06-30 03:28:01.828865"], ["updated_at", "2017-06-30 03:28:01.828865"]]
+ [1m[35m (5.8ms)[0m [1m[35mCOMMIT[0m
+ [1m[35m (0.4ms)[0m [1m[34mSELECT pg_try_advisory_lock(4921617910838480460);[0m
+ [1m[35m (0.9ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+ [1m[36mActiveRecord::InternalMetadata Load (0.3ms)[0m [1m[34mSELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2[0m [["key", nil], ["LIMIT", 1]]
+ [1m[35m (0.4ms)[0m [1m[35mBEGIN[0m
+ [1m[35mSQL (0.8ms)[0m [1m[32mINSERT INTO "ar_internal_metadata" ("value", "created_at", "updated_at") VALUES ($1, $2, $3) RETURNING "key"[0m [["value", "development"], ["created_at", "2017-06-30 03:31:01.706115"], ["updated_at", "2017-06-30 03:31:01.706115"]]
+ [1m[35m (5.8ms)[0m [1m[35mCOMMIT[0m
+ [1m[35m (0.5ms)[0m [1m[34mSELECT pg_advisory_unlock(4921617910838480460)[0m
+ [1m[35m (0.3ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+ [1m[35m (0.9ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+ [1m[35m (0.3ms)[0m [1m[34mSELECT "ar_internal_metadata"."value" FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1[0m [["key", nil]]
+ [1m[36mActiveRecord::InternalMetadata Load (0.3ms)[0m [1m[34mSELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2[0m [["key", nil], ["LIMIT", 1]]
+ [1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
+ [1m[35mSQL (0.5ms)[0m [1m[32mINSERT INTO "ar_internal_metadata" ("value", "created_at", "updated_at") VALUES ($1, $2, $3) RETURNING "key"[0m [["value", "development"], ["created_at", "2017-06-30 03:32:53.142895"], ["updated_at", "2017-06-30 03:32:53.142895"]]
+ [1m[35m (5.8ms)[0m [1m[35mCOMMIT[0m
+ [1m[35m (0.9ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+ [1m[35m (0.3ms)[0m [1m[34mSELECT "ar_internal_metadata"."value" FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1[0m [["key", nil]]
+ [1m[35m (0.9ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+ [1m[35m (0.3ms)[0m [1m[34mSELECT "ar_internal_metadata"."value" FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1[0m [["key", nil]]
+ [1m[35m (0.9ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+ [1m[35m (0.3ms)[0m [1m[34mSELECT "ar_internal_metadata"."value" FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1[0m [["key", nil]]
+ [1m[36mActiveRecord::InternalMetadata Load (0.4ms)[0m [1m[34mSELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2[0m [["key", nil], ["LIMIT", 1]]
+ [1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
+ [1m[35mSQL (0.6ms)[0m [1m[32mINSERT INTO "ar_internal_metadata" ("value", "created_at", "updated_at") VALUES ($1, $2, $3) RETURNING "key"[0m [["value", "development"], ["created_at", "2017-06-30 03:37:31.897533"], ["updated_at", "2017-06-30 03:37:31.897533"]]
+ [1m[35m (5.8ms)[0m [1m[35mCOMMIT[0m
+ [1m[35m (0.8ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+ [1m[35m (0.4ms)[0m [1m[34mSELECT "ar_internal_metadata"."value" FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1[0m [["key", nil]]
+ [1m[35mSQL (0.4ms)[0m [1m[35mCREATE EXTENSION IF NOT EXISTS "plpgsql"[0m
+ [1m[35m (0.3ms)[0m [1m[35mDROP TABLE IF EXISTS "ar_internal_metadata" CASCADE[0m
+ [1m[35m (8.4ms)[0m [1m[35mCREATE TABLE "ar_internal_metadata" ("key" bigserial primary key, "value" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[35m (0.6ms)[0m [1m[35mDROP TABLE IF EXISTS "categorical_taggings" CASCADE[0m
+ [1m[35m (4.4ms)[0m [1m[35mCREATE TABLE "categorical_taggings" ("id" bigserial primary key, "taggable_id" integer, "taggable_type" character varying, "tag_id" integer)[0m
+ [1m[35m (2.0ms)[0m [1m[35mCREATE INDEX "index_categorical_taggings_on_taggable_type_and_taggable_id" ON "categorical_taggings" USING btree ("taggable_type", "taggable_id")[0m
+ [1m[35m (0.4ms)[0m [1m[35mDROP TABLE IF EXISTS "categorical_tags" CASCADE[0m
+ [1m[35m (4.7ms)[0m [1m[35mCREATE TABLE "categorical_tags" ("id" bigserial primary key, "label" character varying, "slug" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[35m (1.4ms)[0m [1m[35mCREATE UNIQUE INDEX "index_categorical_tags_on_label" ON "categorical_tags" USING btree ("label")[0m
+ [1m[35m (1.3ms)[0m [1m[35mCREATE UNIQUE INDEX "index_categorical_tags_on_slug" ON "categorical_tags" USING btree ("slug")[0m
+ [1m[35m (0.3ms)[0m [1m[35mDROP TABLE IF EXISTS "exposition_posts" CASCADE[0m
+ [1m[35m (4.6ms)[0m [1m[35mCREATE TABLE "exposition_posts" ("id" bigserial primary key, "title" character varying, "body" text, "published" boolean DEFAULT 'f' NOT NULL, "published_at" timestamp, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL, "author_id" integer, "slug" character varying, "summary" text)[0m
+ [1m[35m (1.3ms)[0m [1m[35mCREATE UNIQUE INDEX "index_exposition_posts_on_slug" ON "exposition_posts" USING btree ("slug")[0m
+ [1m[35m (0.3ms)[0m [1m[35mDROP TABLE IF EXISTS "exposition_users" CASCADE[0m
+ [1m[35m (4.5ms)[0m [1m[35mCREATE TABLE "exposition_users" ("id" bigserial primary key, "name" character varying, "email" character varying, "password_digest" character varying, "remember_digest" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[35m (1.4ms)[0m [1m[35mCREATE UNIQUE INDEX "index_exposition_users_on_email" ON "exposition_users" USING btree ("email")[0m
+ [1m[35m (3.9ms)[0m [1m[35mCREATE TABLE "schema_migrations" ("version" character varying NOT NULL PRIMARY KEY)[0m
+ [1m[35m (0.6ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+ [1m[35m (0.8ms)[0m [1m[32mINSERT INTO "schema_migrations" (version) VALUES (20160226035733)[0m
+ [1m[36mActiveRecord::InternalMetadata Load (0.4ms)[0m [1m[34mSELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2[0m [["key", nil], ["LIMIT", 1]]
+ [1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
+ [1m[35mSQL (0.6ms)[0m [1m[32mINSERT INTO "ar_internal_metadata" ("value", "created_at", "updated_at") VALUES ($1, $2, $3) RETURNING "key"[0m [["value", "development"], ["created_at", "2017-06-30 03:39:53.786642"], ["updated_at", "2017-06-30 03:39:53.786642"]]
+ [1m[35m (0.5ms)[0m [1m[35mCOMMIT[0m
+ [1m[36mActiveRecord::InternalMetadata Load (0.2ms)[0m [1m[34mSELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2[0m [["key", nil], ["LIMIT", 1]]
+ [1m[35m (0.1ms)[0m [1m[35mBEGIN[0m
+ [1m[35mSQL (0.3ms)[0m [1m[32mINSERT INTO "ar_internal_metadata" ("value", "created_at", "updated_at") VALUES ($1, $2, $3) RETURNING "key"[0m [["value", "development"], ["created_at", "2017-06-30 03:39:53.790803"], ["updated_at", "2017-06-30 03:39:53.790803"]]
+ [1m[35m (0.4ms)[0m [1m[35mCOMMIT[0m
+ [1m[35mSQL (0.4ms)[0m [1m[35mCREATE EXTENSION IF NOT EXISTS "plpgsql"[0m
+ [1m[35m (0.3ms)[0m [1m[35mDROP TABLE IF EXISTS "ar_internal_metadata" CASCADE[0m
+ [1m[35m (8.7ms)[0m [1m[35mCREATE TABLE "ar_internal_metadata" ("key" bigserial primary key, "value" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[35m (0.6ms)[0m [1m[35mDROP TABLE IF EXISTS "categorical_taggings" CASCADE[0m
+ [1m[35m (5.4ms)[0m [1m[35mCREATE TABLE "categorical_taggings" ("id" bigserial primary key, "taggable_id" integer, "taggable_type" character varying, "tag_id" integer)[0m
+ [1m[35m (1.9ms)[0m [1m[35mCREATE INDEX "index_categorical_taggings_on_taggable_type_and_taggable_id" ON "categorical_taggings" USING btree ("taggable_type", "taggable_id")[0m
+ [1m[35m (0.3ms)[0m [1m[35mDROP TABLE IF EXISTS "categorical_tags" CASCADE[0m
+ [1m[35m (4.5ms)[0m [1m[35mCREATE TABLE "categorical_tags" ("id" bigserial primary key, "label" character varying, "slug" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[35m (1.3ms)[0m [1m[35mCREATE UNIQUE INDEX "index_categorical_tags_on_label" ON "categorical_tags" USING btree ("label")[0m
+ [1m[35m (1.4ms)[0m [1m[35mCREATE UNIQUE INDEX "index_categorical_tags_on_slug" ON "categorical_tags" USING btree ("slug")[0m
+ [1m[35m (0.2ms)[0m [1m[35mDROP TABLE IF EXISTS "exposition_posts" CASCADE[0m
+ [1m[35m (4.6ms)[0m [1m[35mCREATE TABLE "exposition_posts" ("id" bigserial primary key, "title" character varying, "body" text, "published" boolean DEFAULT 'f' NOT NULL, "published_at" timestamp, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL, "author_id" integer, "slug" character varying, "summary" text)[0m
+ [1m[35m (1.8ms)[0m [1m[35mCREATE UNIQUE INDEX "index_exposition_posts_on_slug" ON "exposition_posts" USING btree ("slug")[0m
+ [1m[35m (0.3ms)[0m [1m[35mDROP TABLE IF EXISTS "exposition_users" CASCADE[0m
+ [1m[35m (4.5ms)[0m [1m[35mCREATE TABLE "exposition_users" ("id" bigserial primary key, "name" character varying, "email" character varying, "password_digest" character varying, "remember_digest" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[35m (1.7ms)[0m [1m[35mCREATE UNIQUE INDEX "index_exposition_users_on_email" ON "exposition_users" USING btree ("email")[0m
+ [1m[35m (3.7ms)[0m [1m[35mCREATE TABLE "schema_migrations" ("version" character varying NOT NULL PRIMARY KEY)[0m
+ [1m[35m (0.7ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+ [1m[35m (0.7ms)[0m [1m[32mINSERT INTO "schema_migrations" (version) VALUES (20160226035733)[0m
+ [1m[36mActiveRecord::InternalMetadata Load (0.4ms)[0m [1m[34mSELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2[0m [["key", nil], ["LIMIT", 1]]
+ [1m[35m (0.1ms)[0m [1m[35mBEGIN[0m
+ [1m[35mSQL (0.5ms)[0m [1m[32mINSERT INTO "ar_internal_metadata" ("value", "created_at", "updated_at") VALUES ($1, $2, $3) RETURNING "key"[0m [["value", "development"], ["created_at", "2017-06-30 03:39:53.882681"], ["updated_at", "2017-06-30 03:39:53.882681"]]
+ [1m[35m (0.4ms)[0m [1m[35mCOMMIT[0m
+ [1m[36mActiveRecord::InternalMetadata Load (0.2ms)[0m [1m[34mSELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2[0m [["key", nil], ["LIMIT", 1]]
+ [1m[35m (0.1ms)[0m [1m[35mBEGIN[0m
+ [1m[35mSQL (0.3ms)[0m [1m[32mINSERT INTO "ar_internal_metadata" ("value", "created_at", "updated_at") VALUES ($1, $2, $3) RETURNING "key"[0m [["value", "development"], ["created_at", "2017-06-30 03:39:53.886442"], ["updated_at", "2017-06-30 03:39:53.886442"]]
+ [1m[35m (0.4ms)[0m [1m[35mCOMMIT[0m
+ [1m[35m (1.0ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+ [1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
+ [1m[36mExposition::User Exists (0.7ms)[0m [1m[34mSELECT 1 AS one FROM "exposition_users" WHERE LOWER("exposition_users"."email") = LOWER($1) LIMIT $2[0m [["email", "admin@admin.admin"], ["LIMIT", 1]]
+ [1m[35mSQL (0.6ms)[0m [1m[32mINSERT INTO "exposition_users" ("name", "email", "password_digest", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id"[0m [["name", "Admin"], ["email", "admin@admin.admin"], ["password_digest", "$2a$10$KRaRR33vncw1dOuGmE7.kOX4ZMWKWkYUS4RV7qfTgCKUppKn2mD8a"], ["created_at", "2017-06-30 03:39:53.998987"], ["updated_at", "2017-06-30 03:39:53.998987"]]
+ [1m[35m (5.8ms)[0m [1m[35mCOMMIT[0m
+ [1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
+ [1m[36mExposition::Post Exists (0.7ms)[0m [1m[34mSELECT 1 AS one FROM "exposition_posts" WHERE LOWER("exposition_posts"."slug") = LOWER($1) LIMIT $2[0m [["slug", "test-title"], ["LIMIT", 1]]
+ [1m[35mSQL (0.6ms)[0m [1m[32mINSERT INTO "exposition_posts" ("title", "body", "published", "published_at", "created_at", "updated_at", "author_id", "slug", "summary") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING "id"[0m [["title", "Test Title"], ["body", "Hello\n\nThis is a post.\n"], ["published", "t"], ["published_at", "2017-06-29 00:00:00"], ["created_at", "2017-06-30 03:39:54.110474"], ["updated_at", "2017-06-30 03:39:54.110474"], ["author_id", 1], ["slug", "test-title"], ["summary", "Hello\n\nThis is a post.\n"]]
+ [1m[35m (2.2ms)[0m [1m[35mCOMMIT[0m
+ [1m[35m (0.4ms)[0m [1m[34mSELECT pg_try_advisory_lock(4921617910838480460);[0m
+ [1m[35m (0.9ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+Migrating to CreateExpositionPosters (20160106220615)
+ [1m[35m (0.3ms)[0m [1m[34mSELECT pg_advisory_unlock(4921617910838480460)[0m
+ [1m[35m (0.3ms)[0m [1m[34mSELECT pg_try_advisory_lock(4921617910838480460);[0m
+ [1m[35m (0.9ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+Migrating to CreateExpositionPosters (20160106220615)
+ [1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
+ [1m[35m (7.7ms)[0m [1m[35mCREATE TABLE "exposition_posts" ("id" bigserial primary key, "title" character varying, "body" text, "published" boolean DEFAULT 'f' NOT NULL, "published_at" date, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[35m (0.2ms)[0m [1m[31mROLLBACK[0m
+ [1m[35m (0.4ms)[0m [1m[34mSELECT pg_advisory_unlock(4921617910838480460)[0m
+ [1m[35m (0.9ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+ [1m[35m (0.4ms)[0m [1m[34mSELECT "ar_internal_metadata"."value" FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1[0m [["key", nil]]
+ [1m[35m (0.9ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+ [1m[35m (0.4ms)[0m [1m[34mSELECT "ar_internal_metadata"."value" FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1[0m [["key", nil]]
+ [1m[35m (0.9ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+ [1m[35m (0.3ms)[0m [1m[34mSELECT "ar_internal_metadata"."value" FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1[0m [["key", nil]]
+ [1m[35m (5.6ms)[0m [1m[35mCREATE TABLE "schema_migrations" ("version" character varying NOT NULL PRIMARY KEY)[0m
+ [1m[35m (4.0ms)[0m [1m[35mCREATE TABLE "ar_internal_metadata" ("key" character varying NOT NULL PRIMARY KEY, "value" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[35m (0.4ms)[0m [1m[34mSELECT pg_try_advisory_lock(4921617910838480460);[0m
+ [1m[35m (0.6ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+Migrating to CreateExpositionPosters (20160106220615)
+ [1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
+ [1m[35m (4.6ms)[0m [1m[35mCREATE TABLE "exposition_posts" ("id" bigserial primary key, "title" character varying, "body" text, "published" boolean DEFAULT 'f' NOT NULL, "published_at" date, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[35mSQL (0.5ms)[0m [1m[32mINSERT INTO "schema_migrations" ("version") VALUES ($1) RETURNING "version"[0m [["version", "20160106220615"]]
+ [1m[35m (0.7ms)[0m [1m[35mCOMMIT[0m
+Migrating to AddAuthorIdToPosts (20160112194424)
+ [1m[35m (0.4ms)[0m [1m[35mBEGIN[0m
+ [1m[35m (1.2ms)[0m [1m[35mALTER TABLE "exposition_posts" ADD "author_id" integer[0m
+ [1m[35mSQL (0.4ms)[0m [1m[32mINSERT INTO "schema_migrations" ("version") VALUES ($1) RETURNING "version"[0m [["version", "20160112194424"]]
+ [1m[35m (0.5ms)[0m [1m[35mCOMMIT[0m
+Migrating to CreateExpositionUsers (20160112200248)
+ [1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
+ [1m[35m (4.1ms)[0m [1m[35mCREATE TABLE "exposition_users" ("id" bigserial primary key, "name" character varying, "email" character varying, "password_digest" character varying, "remember_digest" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[35m (1.1ms)[0m [1m[35mCREATE UNIQUE INDEX "index_exposition_users_on_email" ON "exposition_users" ("email")[0m
+ [1m[35mSQL (0.4ms)[0m [1m[32mINSERT INTO "schema_migrations" ("version") VALUES ($1) RETURNING "version"[0m [["version", "20160112200248"]]
+ [1m[35m (0.6ms)[0m [1m[35mCOMMIT[0m
+Migrating to AddSlugToExpositonPosts (20160112202302)
+ [1m[35m (0.4ms)[0m [1m[35mBEGIN[0m
+ [1m[35m (0.5ms)[0m [1m[35mALTER TABLE "exposition_posts" ADD "slug" character varying[0m
+ [1m[35m (1.2ms)[0m [1m[35mCREATE UNIQUE INDEX "index_exposition_posts_on_slug" ON "exposition_posts" ("slug")[0m
+ [1m[35mSQL (0.4ms)[0m [1m[32mINSERT INTO "schema_migrations" ("version") VALUES ($1) RETURNING "version"[0m [["version", "20160112202302"]]
+ [1m[35m (0.6ms)[0m [1m[35mCOMMIT[0m
+Migrating to AddCategorialTags (20160112204019)
+ [1m[35m (0.3ms)[0m [1m[35mBEGIN[0m
+ [1m[35m (4.2ms)[0m [1m[35mCREATE TABLE "categorical_tags" ("id" bigserial primary key, "label" character varying, "slug" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[35m (1.0ms)[0m [1m[35mCREATE UNIQUE INDEX "index_categorical_tags_on_label" ON "categorical_tags" ("label")[0m
+ [1m[35m (1.2ms)[0m [1m[35mCREATE UNIQUE INDEX "index_categorical_tags_on_slug" ON "categorical_tags" ("slug")[0m
+ [1m[35m (4.0ms)[0m [1m[35mCREATE TABLE "categorical_taggings" ("id" bigserial primary key, "taggable_type" character varying, "taggable_id" bigint, "tag_id" integer)[0m
+ [1m[35m (1.7ms)[0m [1m[35mCREATE INDEX "index_categorical_taggings_on_taggable_type_and_taggable_id" ON "categorical_taggings" ("taggable_type", "taggable_id")[0m
+ [1m[35mSQL (0.5ms)[0m [1m[32mINSERT INTO "schema_migrations" ("version") VALUES ($1) RETURNING "version"[0m [["version", "20160112204019"]]
+ [1m[35m (0.6ms)[0m [1m[35mCOMMIT[0m
+Migrating to AddSummaryToPosts (20160225203524)
+ [1m[35m (0.4ms)[0m [1m[35mBEGIN[0m
+ [1m[35m (0.4ms)[0m [1m[35mALTER TABLE "exposition_posts" ADD "summary" text[0m
+ [1m[35mSQL (0.3ms)[0m [1m[32mINSERT INTO "schema_migrations" ("version") VALUES ($1) RETURNING "version"[0m [["version", "20160225203524"]]
+ [1m[35m (0.4ms)[0m [1m[35mCOMMIT[0m
+Migrating to ConvertPublishedAtToDatetime (20160226035733)
+ [1m[35m (0.3ms)[0m [1m[35mBEGIN[0m
+ [1m[35m (7.2ms)[0m [1m[35mALTER TABLE "exposition_posts" ALTER COLUMN "published_at" TYPE timestamp[0m
+ [1m[35mSQL (0.4ms)[0m [1m[32mINSERT INTO "schema_migrations" ("version") VALUES ($1) RETURNING "version"[0m [["version", "20160226035733"]]
+ [1m[35m (1.0ms)[0m [1m[35mCOMMIT[0m
+ [1m[36mActiveRecord::InternalMetadata Load (0.5ms)[0m [1m[34mSELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2[0m [["key", "environment"], ["LIMIT", 1]]
+ [1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
+ [1m[35mSQL (0.6ms)[0m [1m[32mINSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "key"[0m [["key", "environment"], ["value", "development"], ["created_at", "2017-06-30 03:44:51.089587"], ["updated_at", "2017-06-30 03:44:51.089587"]]
+ [1m[35m (0.5ms)[0m [1m[35mCOMMIT[0m
+ [1m[35m (0.3ms)[0m [1m[34mSELECT pg_advisory_unlock(4921617910838480460)[0m
+ [1m[35m (0.3ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+ [1m[35m (0.2ms)[0m [1m[35mDROP DATABASE IF EXISTS "exposition_development"[0m
+ [1m[35m (0.2ms)[0m [1m[35mDROP DATABASE IF EXISTS "exposition_test"[0m
+ [1m[35m (258.4ms)[0m [1m[35mCREATE DATABASE "exposition_development" ENCODING = 'unicode'[0m
+ [1m[35m (254.4ms)[0m [1m[35mCREATE DATABASE "exposition_test" ENCODING = 'unicode'[0m
+ [1m[35mSQL (0.5ms)[0m [1m[35mCREATE EXTENSION IF NOT EXISTS "plpgsql"[0m
+ [1m[35m (0.4ms)[0m [1m[35mDROP TABLE IF EXISTS "categorical_taggings" CASCADE[0m
+ [1m[35m (7.6ms)[0m [1m[35mCREATE TABLE "categorical_taggings" ("id" bigserial primary key, "taggable_type" character varying, "taggable_id" bigint, "tag_id" integer)[0m
+ [1m[35m (2.0ms)[0m [1m[35mCREATE INDEX "index_categorical_taggings_on_taggable_type_and_taggable_id" ON "categorical_taggings" ("taggable_type", "taggable_id")[0m
+ [1m[35m (0.3ms)[0m [1m[35mDROP TABLE IF EXISTS "categorical_tags" CASCADE[0m
+ [1m[35m (6.4ms)[0m [1m[35mCREATE TABLE "categorical_tags" ("id" bigserial primary key, "label" character varying, "slug" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[35m (1.5ms)[0m [1m[35mCREATE UNIQUE INDEX "index_categorical_tags_on_label" ON "categorical_tags" ("label")[0m
+ [1m[35m (1.4ms)[0m [1m[35mCREATE UNIQUE INDEX "index_categorical_tags_on_slug" ON "categorical_tags" ("slug")[0m
+ [1m[35m (0.3ms)[0m [1m[35mDROP TABLE IF EXISTS "exposition_posts" CASCADE[0m
+ [1m[35m (4.7ms)[0m [1m[35mCREATE TABLE "exposition_posts" ("id" bigserial primary key, "title" character varying, "body" text, "published" boolean DEFAULT 'f' NOT NULL, "published_at" timestamp, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL, "author_id" integer, "slug" character varying, "summary" text)[0m
+ [1m[35m (1.5ms)[0m [1m[35mCREATE UNIQUE INDEX "index_exposition_posts_on_slug" ON "exposition_posts" ("slug")[0m
+ [1m[35m (0.3ms)[0m [1m[35mDROP TABLE IF EXISTS "exposition_users" CASCADE[0m
+ [1m[35m (4.8ms)[0m [1m[35mCREATE TABLE "exposition_users" ("id" bigserial primary key, "name" character varying, "email" character varying, "password_digest" character varying, "remember_digest" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[35m (1.4ms)[0m [1m[35mCREATE UNIQUE INDEX "index_exposition_users_on_email" ON "exposition_users" ("email")[0m
+ [1m[35m (5.4ms)[0m [1m[35mCREATE TABLE "schema_migrations" ("version" character varying NOT NULL PRIMARY KEY)[0m
+ [1m[35m (0.7ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+ [1m[35m (0.7ms)[0m [1m[32mINSERT INTO "schema_migrations" (version) VALUES (20160226035733)[0m
+ [1m[35m (0.6ms)[0m [1m[32mINSERT INTO "schema_migrations" (version) VALUES
+(20160106220615),
+(20160112194424),
+(20160112200248),
+(20160112202302),
+(20160112204019),
+(20160225203524);
+[0m
+ [1m[35m (3.5ms)[0m [1m[35mCREATE TABLE "ar_internal_metadata" ("key" character varying NOT NULL PRIMARY KEY, "value" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[36mActiveRecord::InternalMetadata Load (0.4ms)[0m [1m[34mSELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2[0m [["key", "environment"], ["LIMIT", 1]]
+ [1m[35m (0.3ms)[0m [1m[35mBEGIN[0m
+ [1m[35mSQL (0.6ms)[0m [1m[32mINSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "key"[0m [["key", "environment"], ["value", "development"], ["created_at", "2017-06-30 03:47:11.404461"], ["updated_at", "2017-06-30 03:47:11.404461"]]
+ [1m[35m (0.5ms)[0m [1m[35mCOMMIT[0m
+ [1m[36mActiveRecord::InternalMetadata Load (0.3ms)[0m [1m[34mSELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2[0m [["key", "environment"], ["LIMIT", 1]]
+ [1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
+ [1m[35m (0.2ms)[0m [1m[35mCOMMIT[0m
+ [1m[35mSQL (0.4ms)[0m [1m[35mCREATE EXTENSION IF NOT EXISTS "plpgsql"[0m
+ [1m[35m (0.3ms)[0m [1m[35mDROP TABLE IF EXISTS "categorical_taggings" CASCADE[0m
+ [1m[35m (6.9ms)[0m [1m[35mCREATE TABLE "categorical_taggings" ("id" bigserial primary key, "taggable_type" character varying, "taggable_id" bigint, "tag_id" integer)[0m
+ [1m[35m (2.2ms)[0m [1m[35mCREATE INDEX "index_categorical_taggings_on_taggable_type_and_taggable_id" ON "categorical_taggings" ("taggable_type", "taggable_id")[0m
+ [1m[35m (0.3ms)[0m [1m[35mDROP TABLE IF EXISTS "categorical_tags" CASCADE[0m
+ [1m[35m (5.0ms)[0m [1m[35mCREATE TABLE "categorical_tags" ("id" bigserial primary key, "label" character varying, "slug" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[35m (1.4ms)[0m [1m[35mCREATE UNIQUE INDEX "index_categorical_tags_on_label" ON "categorical_tags" ("label")[0m
+ [1m[35m (2.8ms)[0m [1m[35mCREATE UNIQUE INDEX "index_categorical_tags_on_slug" ON "categorical_tags" ("slug")[0m
+ [1m[35m (0.3ms)[0m [1m[35mDROP TABLE IF EXISTS "exposition_posts" CASCADE[0m
+ [1m[35m (5.0ms)[0m [1m[35mCREATE TABLE "exposition_posts" ("id" bigserial primary key, "title" character varying, "body" text, "published" boolean DEFAULT 'f' NOT NULL, "published_at" timestamp, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL, "author_id" integer, "slug" character varying, "summary" text)[0m
+ [1m[35m (1.5ms)[0m [1m[35mCREATE UNIQUE INDEX "index_exposition_posts_on_slug" ON "exposition_posts" ("slug")[0m
+ [1m[35m (0.2ms)[0m [1m[35mDROP TABLE IF EXISTS "exposition_users" CASCADE[0m
+ [1m[35m (4.5ms)[0m [1m[35mCREATE TABLE "exposition_users" ("id" bigserial primary key, "name" character varying, "email" character varying, "password_digest" character varying, "remember_digest" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[35m (1.2ms)[0m [1m[35mCREATE UNIQUE INDEX "index_exposition_users_on_email" ON "exposition_users" ("email")[0m
+ [1m[35m (3.2ms)[0m [1m[35mCREATE TABLE "schema_migrations" ("version" character varying NOT NULL PRIMARY KEY)[0m
+ [1m[35m (0.7ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+ [1m[35m (0.6ms)[0m [1m[32mINSERT INTO "schema_migrations" (version) VALUES (20160226035733)[0m
+ [1m[35m (0.6ms)[0m [1m[32mINSERT INTO "schema_migrations" (version) VALUES
+(20160106220615),
+(20160112194424),
+(20160112200248),
+(20160112202302),
+(20160112204019),
+(20160225203524);
-Started GET "/" for ::1 at 2016-03-09 10:34:58 -0500
+[0m
+ [1m[35m (3.0ms)[0m [1m[35mCREATE TABLE "ar_internal_metadata" ("key" character varying NOT NULL PRIMARY KEY, "value" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[36mActiveRecord::InternalMetadata Load (0.4ms)[0m [1m[34mSELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2[0m [["key", "environment"], ["LIMIT", 1]]
+ [1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
+ [1m[35mSQL (0.5ms)[0m [1m[32mINSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "key"[0m [["key", "environment"], ["value", "development"], ["created_at", "2017-06-30 03:47:11.497766"], ["updated_at", "2017-06-30 03:47:11.497766"]]
+ [1m[35m (0.4ms)[0m [1m[35mCOMMIT[0m
+ [1m[36mActiveRecord::InternalMetadata Load (0.3ms)[0m [1m[34mSELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2[0m [["key", "environment"], ["LIMIT", 1]]
+ [1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
+ [1m[35m (0.2ms)[0m [1m[35mCOMMIT[0m
+ [1m[35m (0.9ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+ [1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
+ [1m[36mExposition::User Exists (0.6ms)[0m [1m[34mSELECT 1 AS one FROM "exposition_users" WHERE LOWER("exposition_users"."email") = LOWER($1) LIMIT $2[0m [["email", "admin@admin.admin"], ["LIMIT", 1]]
+ [1m[35mSQL (0.6ms)[0m [1m[32mINSERT INTO "exposition_users" ("name", "email", "password_digest", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id"[0m [["name", "Admin"], ["email", "admin@admin.admin"], ["password_digest", "$2a$10$9qQWy8AH9HZiFWUnxiiDpe2CV1Wy3p44mECs8Rb2fwjrogoMD9kSi"], ["created_at", "2017-06-30 03:47:11.615766"], ["updated_at", "2017-06-30 03:47:11.615766"]]
+ [1m[35m (5.7ms)[0m [1m[35mCOMMIT[0m
+ [1m[35m (0.3ms)[0m [1m[35mBEGIN[0m
+ [1m[36mExposition::Post Exists (0.6ms)[0m [1m[34mSELECT 1 AS one FROM "exposition_posts" WHERE LOWER("exposition_posts"."slug") = LOWER($1) LIMIT $2[0m [["slug", "test-title"], ["LIMIT", 1]]
+ [1m[35mSQL (0.5ms)[0m [1m[32mINSERT INTO "exposition_posts" ("title", "body", "published", "published_at", "created_at", "updated_at", "author_id", "slug", "summary") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING "id"[0m [["title", "Test Title"], ["body", "Hello\n\nThis is a post.\n"], ["published", "t"], ["published_at", "2017-06-29 00:00:00"], ["created_at", "2017-06-30 03:47:12.067510"], ["updated_at", "2017-06-30 03:47:12.067510"], ["author_id", 1], ["slug", "test-title"], ["summary", "Hello\n\nThis is a post.\n"]]
+ [1m[35m (5.7ms)[0m [1m[35mCOMMIT[0m
+Started GET "/" for ::1 at 2017-07-06 21:40:39 -0600
Processing by Exposition::PostsController#index as HTML
- [1m[36m (4.1ms)[0m [1mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT 10 OFFSET 0) subquery_for_count[0m [["published", "t"]]
- [1m[35mExposition::Post Load (3.9ms)[0m SELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT 10 OFFSET 0 [["published", "t"]]
- [1m[36mCategorical::Tag Exists (4.0ms)[0m [1mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT 1[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (19.9ms)
- [1m[35mCategorical::Tag Exists (0.7ms)[0m SELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT 1 [["taggable_id", 2], ["taggable_type", "Exposition::Post"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (1.5ms)
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml (75.2ms)
- [1m[36m (0.3ms)[0m [1mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", "t"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (140.8ms)
-Completed 200 OK in 2053ms (Views: 1943.1ms | ActiveRecord: 50.1ms)
+ Rendering /Users/joshuaklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
+ [1m[36mExposition::Post Exists (3.0ms)[0m [1m[34mSELECT 1 AS one FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3[0m [["published", "t"], ["LIMIT", 1], ["OFFSET", 0]]
+ [1m[36mExposition::Post Load (0.8ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", "t"], ["LIMIT", 10], ["OFFSET", 0]]
+ [1m[36mCategorical::Tag Exists (7.7ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
+ Rendered /Users/joshuaklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (21.4ms)
+ Rendered collection of /Users/joshuaklina/Development/exposition/app/views/exposition/posts/_post.html.haml [1 times] (41.1ms)
+ Rendered /Users/joshuaklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (93.0ms)
+Completed 200 OK in 415ms (Views: 89.8ms | ActiveRecord: 100.7ms)
-Started GET "/assets/exposition/application.self-0da07a5e42f9d943e9f5c2f290c5a50be8a71195748c98dcf85a2a64ec8854e3.css?body=1" for ::1 at 2016-03-09 10:35:00 -0500
-
-
-Started GET "/" for ::1 at 2016-03-09 10:35:31 -0500
-Processing by Exposition::PostsController#index as HTML
- [1m[35m (0.9ms)[0m SELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT 10 OFFSET 0) subquery_for_count [["published", "t"]]
- [1m[36mExposition::Post Load (1.0ms)[0m [1mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT 10 OFFSET 0[0m [["published", "t"]]
- [1m[35mCategorical::Tag Exists (0.7ms)[0m SELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT 1 [["taggable_id", 1], ["taggable_type", "Exposition::Post"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (1.8ms)
- [1m[36mCategorical::Tag Exists (0.8ms)[0m [1mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT 1[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (2.2ms)
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml (13.1ms)
- [1m[35m (0.4ms)[0m SELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 [["published", "t"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (24.8ms)
-Completed 200 OK in 52ms (Views: 47.2ms | ActiveRecord: 3.9ms)
-
-
-Started GET "/assets/exposition/application.self-0da07a5e42f9d943e9f5c2f290c5a50be8a71195748c98dcf85a2a64ec8854e3.css?body=1" for ::1 at 2016-03-09 10:35:31 -0500
-
-
-Started GET "/assets/exposition/twitter-5ed7dd10b95665b5d9056ecdab697788dd8b2ce71cecb98972b70b7b27a93213.svg" for ::1 at 2016-03-09 10:35:31 -0500
-
-
-Started GET "/" for ::1 at 2016-03-09 10:35:40 -0500
-Processing by Exposition::PostsController#index as HTML
- [1m[36m (0.5ms)[0m [1mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT 10 OFFSET 0) subquery_for_count[0m [["published", "t"]]
- [1m[35mExposition::Post Load (0.7ms)[0m SELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT 10 OFFSET 0 [["published", "t"]]
- [1m[36mCategorical::Tag Exists (0.6ms)[0m [1mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT 1[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (1.4ms)
- [1m[35mCategorical::Tag Exists (0.6ms)[0m SELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT 1 [["taggable_id", 2], ["taggable_type", "Exposition::Post"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (1.3ms)
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml (9.2ms)
- [1m[36m (0.4ms)[0m [1mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", "t"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (19.1ms)
-Completed 200 OK in 658ms (Views: 654.4ms | ActiveRecord: 2.8ms)
-
-
-Started GET "/assets/exposition/twitter-5ed7dd10b95665b5d9056ecdab697788dd8b2ce71cecb98972b70b7b27a93213.svg" for ::1 at 2016-03-09 10:35:40 -0500
-
-
-Started GET "/assets/exposition/application.self-8f19aaf36b36ca6b51a36609715d8d3eb66894ef841f3aaffd831fb6f86cbd59.css?body=1" for ::1 at 2016-03-09 10:35:40 -0500
-
-
-Started GET "/" for ::1 at 2016-03-09 10:36:12 -0500
-Processing by Exposition::PostsController#index as HTML
- [1m[35m (1.6ms)[0m SELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT 10 OFFSET 0) subquery_for_count [["published", "t"]]
- [1m[36mExposition::Post Load (1.5ms)[0m [1mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT 10 OFFSET 0[0m [["published", "t"]]
- [1m[35mCategorical::Tag Exists (0.9ms)[0m SELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT 1 [["taggable_id", 1], ["taggable_type", "Exposition::Post"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (5.8ms)
- [1m[36mCategorical::Tag Exists (0.5ms)[0m [1mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT 1[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (1.8ms)
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml (33.6ms)
- [1m[35m (0.6ms)[0m SELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 [["published", "t"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (83.1ms)
-Completed 200 OK in 212ms (Views: 174.1ms | ActiveRecord: 5.0ms)
-
-
-Started GET "/admin/login" for ::1 at 2016-03-09 10:36:13 -0500
+Started GET "/admin/login" for 127.0.0.1 at 2017-07-10 14:19:05 -0600
Processing by Exposition::Admin::SessionsController#new as HTML
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/sessions/new.html.haml within layouts/exposition/admin (35.9ms)
-Completed 200 OK in 230ms (Views: 229.3ms | ActiveRecord: 0.0ms)
+ Rendering /Users/joshuaklina/Development/exposition/app/views/exposition/admin/sessions/new.html.haml within layouts/exposition/admin
+ Rendered /Users/joshuaklina/Development/exposition/app/views/exposition/admin/sessions/new.html.haml within layouts/exposition/admin (29.5ms)
+Completed 200 OK in 933ms (Views: 924.9ms | ActiveRecord: 0.0ms)
-Started POST "/admin/login" for ::1 at 2016-03-09 10:36:20 -0500
-Processing by Exposition::Admin::SessionsController#create as HTML
- Parameters: {"utf8"=>"✓", "authenticity_token"=>"HdPc7HphbJ1ElERBhZYVN5QmruQqafhdlbI7Rt4mQ00gJCLOiIoVzonvYJ+i37D4Ic0TPglSUZx2P2vIINFZHA==", "session"=>{"email"=>"admin@admin.admin", "password"=>"[FILTERED]"}, "commit"=>"Log in"}
- [1m[36mExposition::User Load (3.1ms)[0m [1mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."email" = $1 LIMIT 1[0m [["email", "admin@admin.admin"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/sessions/new.html.haml within layouts/exposition/admin (1.3ms)
-Completed 200 OK in 217ms (Views: 37.1ms | ActiveRecord: 6.4ms)
+Started GET "/assets/exposition/admin/application.self-8a29ef7513dc78c984fa9580c16776b9864df855bd5cc2444eac16585afdd689.css?body=1" for 127.0.0.1 at 2017-07-10 14:19:06 -0600
+ [1m[35m (559.5ms)[0m [1m[35mCREATE DATABASE "exposition_development" ENCODING = 'unicode'[0m
+ [1m[35m (431.7ms)[0m [1m[35mCREATE DATABASE "exposition_test" ENCODING = 'unicode'[0m
+ [1m[35mSQL (43.5ms)[0m [1m[35mCREATE EXTENSION IF NOT EXISTS "plpgsql"[0m
+ [1m[35m (1.7ms)[0m [1m[35mDROP TABLE IF EXISTS "categorical_taggings" CASCADE[0m
+ [1m[35m (25.7ms)[0m [1m[35mCREATE TABLE "categorical_taggings" ("id" bigserial primary key, "taggable_type" character varying, "taggable_id" bigint, "tag_id" integer)[0m
+ [1m[35m (1.7ms)[0m [1m[35mCREATE INDEX "index_categorical_taggings_on_taggable_type_and_taggable_id" ON "categorical_taggings" ("taggable_type", "taggable_id")[0m
+ [1m[35m (0.2ms)[0m [1m[35mDROP TABLE IF EXISTS "categorical_tags" CASCADE[0m
+ [1m[35m (6.4ms)[0m [1m[35mCREATE TABLE "categorical_tags" ("id" bigserial primary key, "label" character varying, "slug" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[35m (1.9ms)[0m [1m[35mCREATE UNIQUE INDEX "index_categorical_tags_on_label" ON "categorical_tags" ("label")[0m
+ [1m[35m (1.4ms)[0m [1m[35mCREATE UNIQUE INDEX "index_categorical_tags_on_slug" ON "categorical_tags" ("slug")[0m
+ [1m[35m (0.2ms)[0m [1m[35mDROP TABLE IF EXISTS "exposition_posts" CASCADE[0m
+ [1m[35m (5.7ms)[0m [1m[35mCREATE TABLE "exposition_posts" ("id" bigserial primary key, "title" character varying, "body" text, "published" boolean DEFAULT FALSE NOT NULL, "published_at" timestamp, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL, "author_id" integer, "slug" character varying, "summary" text)[0m
+ [1m[35m (1.4ms)[0m [1m[35mCREATE UNIQUE INDEX "index_exposition_posts_on_slug" ON "exposition_posts" ("slug")[0m
+ [1m[35m (0.3ms)[0m [1m[35mDROP TABLE IF EXISTS "exposition_users" CASCADE[0m
+ [1m[35m (5.9ms)[0m [1m[35mCREATE TABLE "exposition_users" ("id" bigserial primary key, "name" character varying, "email" character varying, "password_digest" character varying, "remember_digest" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[35m (1.4ms)[0m [1m[35mCREATE UNIQUE INDEX "index_exposition_users_on_email" ON "exposition_users" ("email")[0m
+ [1m[35m (4.4ms)[0m [1m[35mCREATE TABLE "schema_migrations" ("version" character varying NOT NULL PRIMARY KEY)[0m
+ [1m[35m (1.3ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+ [1m[35m (3.4ms)[0m [1m[32mINSERT INTO "schema_migrations" (version) VALUES (20160226035733)[0m
+ [1m[35m (0.7ms)[0m [1m[32mINSERT INTO "schema_migrations" (version) VALUES
+(20160106220615),
+(20160225203524),
+(20160112204019),
+(20160112200248),
+(20160112202302),
+(20160112194424);
+[0m
+ [1m[35m (3.9ms)[0m [1m[35mCREATE TABLE "ar_internal_metadata" ("key" character varying NOT NULL PRIMARY KEY, "value" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[36mActiveRecord::InternalMetadata Load (0.8ms)[0m [1m[34mSELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2[0m [["key", "environment"], ["LIMIT", 1]]
+ [1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
+ [1m[36mActiveRecord::InternalMetadata Create (1.4ms)[0m [1m[32mINSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "key"[0m [["key", "environment"], ["value", "development"], ["created_at", "2018-12-09 18:39:55.987257"], ["updated_at", "2018-12-09 18:39:55.987257"]]
+ [1m[35m (0.4ms)[0m [1m[35mCOMMIT[0m
+ [1m[36mActiveRecord::InternalMetadata Load (1.0ms)[0m [1m[34mSELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2[0m [["key", "environment"], ["LIMIT", 1]]
+ [1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
+ [1m[35m (0.2ms)[0m [1m[35mCOMMIT[0m
+ [1m[35mSQL (1.9ms)[0m [1m[35mCREATE EXTENSION IF NOT EXISTS "plpgsql"[0m
+ [1m[35m (0.4ms)[0m [1m[35mDROP TABLE IF EXISTS "categorical_taggings" CASCADE[0m
+ [1m[35m (64.8ms)[0m [1m[35mCREATE TABLE "categorical_taggings" ("id" bigserial primary key, "taggable_type" character varying, "taggable_id" bigint, "tag_id" integer)[0m
+ [1m[35m (2.7ms)[0m [1m[35mCREATE INDEX "index_categorical_taggings_on_taggable_type_and_taggable_id" ON "categorical_taggings" ("taggable_type", "taggable_id")[0m
+ [1m[35m (0.3ms)[0m [1m[35mDROP TABLE IF EXISTS "categorical_tags" CASCADE[0m
+ [1m[35m (7.6ms)[0m [1m[35mCREATE TABLE "categorical_tags" ("id" bigserial primary key, "label" character varying, "slug" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[35m (40.9ms)[0m [1m[35mCREATE UNIQUE INDEX "index_categorical_tags_on_label" ON "categorical_tags" ("label")[0m
+ [1m[35m (1.7ms)[0m [1m[35mCREATE UNIQUE INDEX "index_categorical_tags_on_slug" ON "categorical_tags" ("slug")[0m
+ [1m[35m (0.3ms)[0m [1m[35mDROP TABLE IF EXISTS "exposition_posts" CASCADE[0m
+ [1m[35m (5.6ms)[0m [1m[35mCREATE TABLE "exposition_posts" ("id" bigserial primary key, "title" character varying, "body" text, "published" boolean DEFAULT FALSE NOT NULL, "published_at" timestamp, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL, "author_id" integer, "slug" character varying, "summary" text)[0m
+ [1m[35m (2.0ms)[0m [1m[35mCREATE UNIQUE INDEX "index_exposition_posts_on_slug" ON "exposition_posts" ("slug")[0m
+ [1m[35m (0.6ms)[0m [1m[35mDROP TABLE IF EXISTS "exposition_users" CASCADE[0m
+ [1m[35m (5.7ms)[0m [1m[35mCREATE TABLE "exposition_users" ("id" bigserial primary key, "name" character varying, "email" character varying, "password_digest" character varying, "remember_digest" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[35m (1.5ms)[0m [1m[35mCREATE UNIQUE INDEX "index_exposition_users_on_email" ON "exposition_users" ("email")[0m
+ [1m[35m (4.7ms)[0m [1m[35mCREATE TABLE "schema_migrations" ("version" character varying NOT NULL PRIMARY KEY)[0m
+ [1m[35m (1.2ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+ [1m[35m (1.8ms)[0m [1m[32mINSERT INTO "schema_migrations" (version) VALUES (20160226035733)[0m
+ [1m[35m (0.7ms)[0m [1m[32mINSERT INTO "schema_migrations" (version) VALUES
+(20160106220615),
+(20160225203524),
+(20160112204019),
+(20160112200248),
+(20160112202302),
+(20160112194424);
-Started POST "/admin/login" for ::1 at 2016-03-09 10:36:27 -0500
-Processing by Exposition::Admin::SessionsController#create as HTML
- Parameters: {"utf8"=>"✓", "authenticity_token"=>"bC5xG33IHurkOflJQz7Mj5m0n3S1G7zlLAqeh5ZOKhZR2Y85jyNnuSlC3Zdkd2lALF8irpYgFSTPh84JaLkwRw==", "session"=>{"email"=>"admin@admin.admin", "password"=>"[FILTERED]"}, "commit"=>"Log in"}
- [1m[35mExposition::User Load (0.6ms)[0m SELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."email" = $1 LIMIT 1 [["email", "admin@admin.admin"]]
- [1m[36m (0.3ms)[0m [1mBEGIN[0m
- [1m[35mSQL (9.1ms)[0m UPDATE "exposition_users" SET "remember_digest" = $1, "updated_at" = $2 WHERE "exposition_users"."id" = $3 [["remember_digest", "$2a$10$eC.gd.JrFwfyGq7LFBxULekxrERLWokhbvgvYdxJvIPMCIIfMchdm"], ["updated_at", "2016-03-09 15:36:28.093736"], ["id", 1]]
- [1m[36m (1.6ms)[0m [1mCOMMIT[0m
-Redirected to http://localhost:3000/admin/posts
-Completed 302 Found in 218ms (ActiveRecord: 11.6ms)
-
-
-Started GET "/admin/posts" for ::1 at 2016-03-09 10:36:28 -0500
-Processing by Exposition::Admin::PostsController#index as HTML
- [1m[35mExposition::User Load (0.4ms)[0m SELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT 1 [["id", 1]]
- [1m[36mExposition::Post Load (0.9ms)[0m [1mSELECT "exposition_posts".* FROM "exposition_posts" ORDER BY "exposition_posts"."published_at" DESC LIMIT 25 OFFSET 0[0m
- [1m[35mCACHE (0.0ms)[0m SELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT 1 [["id", 1]]
- [1m[36mCategorical::Tag Load (0.6ms)[0m [1mSELECT "categorical_tags".* FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"]]
- [1m[35mCACHE (0.0ms)[0m SELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT 1 [["id", 1]]
- [1m[36mCategorical::Tag Load (0.8ms)[0m [1mSELECT "categorical_tags".* FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"]]
- [1m[35m (0.5ms)[0m SELECT COUNT(*) FROM "exposition_posts"
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/posts/index.html.haml within layouts/exposition/admin (42.2ms)
-Completed 200 OK in 109ms (Views: 102.8ms | ActiveRecord: 3.3ms)
-
-
-Started GET "/admin/posts/test-title/edit" for ::1 at 2016-03-09 10:36:31 -0500
-Processing by Exposition::Admin::PostsController#edit as HTML
- Parameters: {"id"=>"test-title"}
- [1m[36mExposition::User Load (0.5ms)[0m [1mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT 1[0m [["id", 1]]
- [1m[35mExposition::Post Load (0.5ms)[0m SELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."slug" = $1 LIMIT 1 [["slug", "test-title"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/shared/_error_handler.html.haml (9.3ms)
- [1m[36mExposition::User Load (0.5ms)[0m [1mSELECT "exposition_users".* FROM "exposition_users"[0m
- [1m[35mCategorical::Tag Load (0.5ms)[0m SELECT "categorical_tags".* FROM "categorical_tags"
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/posts/_form_fields.html.haml (27.2ms)
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/posts/edit.html.haml within layouts/exposition/admin (51.4ms)
-Completed 200 OK in 108ms (Views: 102.9ms | ActiveRecord: 2.1ms)
-
-
-Started PATCH "/admin/posts/test-title" for ::1 at 2016-03-09 10:37:06 -0500
-Processing by Exposition::Admin::PostsController#update as HTML
- Parameters: {"utf8"=>"✓", "authenticity_token"=>"FEQlNZv06UArFhydLCeKoPVTVHnuwI8K0B8NFNl+gk8ps9sXaR+QE+ZtOEMLbi9vQLjpo837Jsszkl2aJ4mYHg==", "post"=>{"title"=>"Test Title", "summary"=>"## H2\r\n###H3\r\n####H4\r\n#####H5\r\n######H6 \r\n\r\n* Blocks\r\n* Modules\r\n* Difference between including and extending Modules\r\n* Difference between instance and class methods\r\n\r\n## Demonstration\r\n\r\nOne of the most common problems that seem to naturally arise in code is handling objects that share a _role_. This tends to be an issue that is not immediately apparent, but as the application grows it begins to present itself. Let's illustrate this with a concrete example taken from the code used in this blog. A lot of this code will be ActiveRecord syntax, but the underlying concepts can be applied to plain old Ruby objects as well.", "body"=>"## Prerequisites \r\n\r\n* Blocks\r\n* Modules\r\n* Difference between including and extending Modules\r\n* Difference between instance and class methods\r\n\r\n## Demonstration\r\n\r\nOne of the most common problems that seem to naturally arise in code is handling objects that share a _role_. This tends to be an issue that is not immediately apparent, but as the application grows it begins to present itself. Let's illustrate this with a concrete example taken from the code used in this blog. A lot of this code will be ActiveRecord syntax, but the underlying concepts can be applied to plain old Ruby objects as well. When laying out out the code for the blog we have objects for `Posts` and `BookReviews` that look like the following:\r\n\r\n\r\n```ruby\r\nclass Post < ActiveRecord::Base\r\n belongs_to :author, class_name: 'User'\r\n\r\n validates_presence_of :title, :body, :author\r\n validates_length_of :title, maximum: 244\r\n validates_presence_of :author\r\n validates_presence_of :slug\r\n validates_uniqueness_of :slug, case_sensitive: false\r\n validates_length_of :slug, maximum: 244\r\n\r\n before_validation :parameterize_slug\r\n before_save :set_published_at_date\r\n\r\n def to_param\r\n slug\r\n end\r\n\r\n def self.published\r\n where(published: true)\r\n end\r\n\r\n def self.sorted_by_published_date\r\n order(published_at: :desc)\r\n end\r\n\r\n private\r\n\r\n def parameterize_slug\r\n self.slug = slug.to_s\r\n self.slug = slug.parameterize\r\n end\r\n\r\n def set_published_at_date\r\n if published_changed?(from: false, to: true)\r\n self.published_at = Date.today\r\n end\r\n end\r\nend\r\n```\r\n\r\n```ruby\r\nclass BookReview < ActiveRecord::Base\r\n belongs_to :author, class_name: 'User'\r\n\r\n validates_presence_of :book_title, :body, :book_author\r\n validates_length_of :book_title, :book_author, maximum: 244\r\n validates_presence_of :author\r\n validates_presence_of :slug\r\n validates_uniqueness_of :slug, case_sensitive: false\r\n validates_length_of :slug, maximum: 244\r\n\r\n before_validation :parameterize_slug\r\n before_save :set_published_at_date\r\n\r\n def to_param\r\n slug\r\n end\r\n\r\n def self.published\r\n where(published: true)\r\n end\r\n\r\n def self.sorted_by_published_date\r\n order(published_at: :desc)\r\n end\r\n\r\n private\r\n\r\n def parameterize_slug\r\n self.slug = slug.to_s\r\n self.slug = slug.parameterize\r\n end\r\n\r\n def set_published_at_date\r\n if published_changed?(from: false, to: true)\r\n self.published_at = Date.today\r\n end\r\n end\r\nend\r\n```\r\n\r\nLet's go through this code a bit. You'll notice that despite being two different objects, they have quite a bit of behavior in common. To start, they both belong to an Author and validate that an author is present. Additionally they both have slugs for friendly urls, a call to the method `#parameterize_slug` to ensure the slug is URL friendly, and some validations to ensure the URL is present, unique, and it fits in the DB. Finally both of these objects can be marked as published and have scopes for filtering based on whether they're published or not.\r\n\r\nLooking at this code we can see a lot of duplicate code. Both of these objects share similar roles and these roles have the same behavior. You could say they're both _sluggable_, _publishable_, and _authorable_. To refactor this duplicate code we should use Ruby's [module](http://ruby-doc.org/core-2.2.0/Module.html \"Ruby Module\"). Ruby's module will allow us to 'mixin' common code to objects that share roles. Let's start with the code that makes an object play the _authorable_ role. \r\n\r\n```ruby\r\nmodule Authorable\r\n def self.included(base)\r\n base.class_eval do\r\n belongs_to :author, class_name: 'User'\r\n validates_presence_of :author\r\n end\r\n end\r\nend\r\n```\r\n\r\nThis is some dense code if you've never seen this pattern before, so let's step through it. The method `.included` is a built in hook method that gets called when a Ruby module is included in a class. The `base` argument is simply the included class. So by including the `Authorable` module into the `Post` class, the `.included` method will be called with the `Post` class set to `base`. Since `base` is now equal to `Post` we can open up the `Post` class can evaluate code using Ruby's `class_eval` method. The code inside the block will be evaluated as if it were in the `Post` class.\r\n\r\n**Note:** This pattern is so common that the Rails framework actually provides a special module for this type of refactoring that's called a [Concern](http://api.rubyonrails.org/classes/ActiveSupport/Concern.html \"Rails Concern\"). Feel free to use this module if you like, however I'm using the traditional way so we can use it without ActiveSupport.\r\n\r\nNow that we lumped all the code related to making an object play the _authorable_ role into the `Authorable` module, let's rewrite our `Post` and `BookReview` classes to use our new module.\r\n\r\n```ruby\r\nclass Post < ActiveRecord::Base\r\n include Authorable\r\n\r\n validates_presence_of :title, :body, :author\r\n validates_length_of :title, maximum: 244\r\n validates_presence_of :slug\r\n validates_uniqueness_of :slug, case_sensitive: false\r\n validates_length_of :slug, maximum: 244\r\n\r\n before_validation :parameterize_slug\r\n before_save :set_published_at_date\r\n\r\n def to_param\r\n slug\r\n end\r\n\r\n def self.published\r\n where(published: true)\r\n end\r\n\r\n def self.sorted_by_published_date\r\n order(published_at: :desc)\r\n end\r\n\r\n private\r\n\r\n def parameterize_slug\r\n self.slug = slug.to_s\r\n self.slug = slug.parameterize\r\n end\r\n\r\n def set_published_at_date\r\n if published_changed?(from: false, to: true)\r\n self.published_at = Date.today\r\n end\r\n end\r\nend\r\n```\r\n\r\n```ruby\r\nclass BookReview < ActiveRecord::Base\r\n include Authorable\r\n\r\n validates_presence_of :book_title, :body, :book_author\r\n validates_length_of :book_title, :book_author, maximum: 244\r\n validates_presence_of :slug\r\n validates_uniqueness_of :slug, case_sensitive: false\r\n validates_length_of :slug, maximum: 244\r\n\r\n before_validation :parameterize_slug\r\n before_save :set_published_at_date\r\n\r\n def to_param\r\n slug\r\n end\r\n\r\n def self.published\r\n where(published: true)\r\n end\r\n\r\n def self.sorted_by_published_date\r\n order(published_at: :desc)\r\n end\r\n\r\n private\r\n\r\n def parameterize_slug\r\n self.slug = slug.to_s\r\n self.slug = slug.parameterize\r\n end\r\n\r\n def set_published_at_date\r\n if published_changed?(from: false, to: true)\r\n self.published_at = Date.today\r\n end\r\n end\r\nend\r\n```\r\nIn the end we removed the duplication, but more importantly we learned a pattern that we can apply to the other roles these two objects have in common. Let's next tackle the common code that makes these objects _publishable_. Again, we'll start by creating a new `Publishable` module to put code for our _publishable_ role. \r\n\r\n```ruby\r\nmodule Publishable\r\n module ClassMethods\r\n def published\r\n where(published: true)\r\n end\r\n\r\n def sorted_by_published_date\r\n order(published_at: :desc)\r\n end\r\n end\r\n\r\n def self.included(base)\r\n base.extend(ClassMethods)\r\n base.class_eval do\r\n before_save :set_published_at_date\r\n end\r\n end\r\n\r\n def css_classes\r\n if published?\r\n return \"published\"\r\n else\r\n return \"not-published\"\r\n end\r\n end\r\n\r\n private\r\n\r\n def set_published_at_date\r\n if published_changed?(from: false, to: true)\r\n self.published_at = Date.today\r\n end\r\n end\r\nend\r\n```\r\n\r\nYou'll notice this module has a bit more to it than the `Authorable` module. Let's walk through the new changes. Right away you see that we have a module within the `Publishable` module called `ClassMethods`. We're going to use the `ClassMethods` module as a container for defining methods that we want to add as class methods (as opposed to instance methods) to our _publishable_ objects. In our `.included` hook method that we used before, you'll notice that in addition to evaluating code we also `extend` our base class with the `ClassMethods` module. This adds (or mixes in) the methods in `ClassMethods` with the base or _publishable_ class, but since we're using `extend` they're added as class methods, not instance methods. Lastly, we have the `#css_classes` and `#set_published_at_date` methods. These are instance methods and will automatically be included as instance level methods when the module is included. Once again let's refactor our `Post` and `BookReview` classes.\r\n\r\n```ruby\r\nclass Post < ActiveRecord::Base\r\n include Authorable\r\n include Publishable\r\n\r\n validates_presence_of :title, :body, :author\r\n validates_length_of :title, maximum: 244\r\n validates_presence_of :slug\r\n validates_uniqueness_of :slug, case_sensitive: false\r\n validates_length_of :slug, maximum: 244\r\n\r\n before_validation :parameterize_slug\r\n\r\n def to_param\r\n slug\r\n end\r\n\r\n private\r\n\r\n def parameterize_slug\r\n self.slug = slug.to_s\r\n self.slug = slug.parameterize\r\n end\r\nend\r\n```\r\n\r\n```ruby\r\nclass BookReview < ActiveRecord::Base\r\n include Authorable\r\n include Publishable\r\n\r\n validates_presence_of :book_title, :body, :book_author\r\n validates_length_of :book_title, :book_author, maximum: 244\r\n validates_presence_of :slug\r\n validates_uniqueness_of :slug, case_sensitive: false\r\n validates_length_of :slug, maximum: 244\r\n\r\n before_validation :parameterize_slug\r\n\r\n def to_param\r\n slug\r\n end\r\n\r\n private\r\n\r\n def parameterize_slug\r\n self.slug = slug.to_s\r\n self.slug = slug.parameterize\r\n end\r\nend\r\n```\r\n\r\nThings are really starting to get cleaned up and duplicate lines of code are disappearing. Let's use the same pattern one last time for removing the duplication when it comes to the _sluggable_ role. Once again we'll create a `Sluggable` module to correspond to the _sluggable_ role and add the related code to the module. \r\n\r\n```ruby\r\nmodule Sluggable\r\n def self.included(base)\r\n base.class_eval do\r\n validates_presence_of :slug\r\n validates_uniqueness_of :slug, case_sensitive: false\r\n validates_length_of :slug, maximum: 244\r\n\r\n before_validation :parameterize_slug\r\n end\r\n end\r\n\r\n def to_param\r\n slug\r\n end\r\n\r\n private\r\n\r\n def parameterize_slug\r\n self.slug = slug.to_s\r\n self.slug = slug.parameterize\r\n end\r\nend\r\n```\r\n\r\nBy now you are familiar with everything this module is doing. We are evaluating some code in the context of the included _sluggable_ class within `class_eval` block and moving the instance methods relevant to the _sluggable_ role into the module which will be added to the to the _sluggable_ objects that include this module. Let's look at the final version of our `Post` and `BookReview` classes.\r\n\r\n```ruby\r\nclass Post < ActiveRecord::Base\r\n include Authorable\r\n include Publishable\r\n include Sluggable\r\n\r\n validates_presence_of :title, :body, :author\r\n validates_length_of :title, maximum: 244\r\nend\r\n```\r\n\r\n```ruby\r\nclass BookReview < ActiveRecord::Base\r\n include Authorable\r\n include Publishable\r\n include Sluggable\r\n\r\n validates_presence_of :book_title, :body, :book_author\r\n validates_length_of :book_title, :book_author, maximum: 244\r\nend\r\n```\r\n\r\nThose classes are really compact now. We also now have the neat side effect that when we add other models to our blog, adding roles will be trivially easy. For example, if we decide we want to add a Tags model, all we have to do is include the functionality we want. Tags don't need to play the roles of _authorable_ or _publishable_, but perhaps we want each Tag to have its own URL. To do this we can simply include the `Sluggable` module and be done with it (since this is technically a DB backed application we'll need to adjust the DB accordingly as well).\r\n\r\n## Warnings\r\nWhile this pattern is powerful there are trade-offs we have to consider. When including modules, the functionality behind each role is now not as apparent. Someone who isn't familiar with your code might wonder where all the functionality is hidden. This also adds a bit of cognitive load for the programmer as they now have code for one object in 3 additional different places they must consider. When refactoring out into modules, or anytime when using inheritance, you'll want to make sure you're constantly asking yourself, _will other programmers be able to easily navigate the code and find what they need_. \r\n\r\nWe could, for example, create another module called `Broadcastable` that would look something like:\r\n\r\n```ruby\r\nmodule Broadcastable\r\n include Authorable\r\n include Publishable\r\n include Sluggable\r\nend\r\n```\r\n\r\nAnd then include this in our `Post` and `BookReview` classes. While this does DRY up the code a bit, I feel that it adds too much complexity and cognitive load. Its not quite as clear as to what `Broadcastable` does and adds another layer in the inheritance tree that programmers must process. \r\n\r\nAnother thing to be careful with is using this pattern simply to remove duplicate code. Its important to consider that the purpose of the duplicate code is the same as opposed to having duplicate code purely because of coincidence. If the purpose is aligned, then its much more likely the future changes will be compatible with all involved objects. If the duplicate code exists between objects coincidentally, then its much more likely that the duplicate code may diverge in the future. Sometimes you might even want to hold off refactoring until further down the line, when the true roles of objects become more clear. \r\n\r\nWith these warnings in mind, factoring out common code that objects share by virtue of having a role into a module is a great way to organize shared behavior. \r\n\r\n## See More:\r\nTo see how to test this pattern, you can view the source code for this blog. It makes use of rspec's Shared Examples. In minitest you would simply use modules!\r\n\r\n* [Source code for this blog](https://github.com/jklina/joshklina.com \"joshklina.com source code\")\r\n* [Eloquent Ruby by Russ Olsen](http://amzn.to/1R2mkFA \"Eloquent Ruby\")\r\n* [Practical Object-Oriented Design in Ruby: An Agile Primer by Sandi Metz](http://amzn.to/1R2muN9 \"Eloquent Ruby\")\r\n* [Rails Concerns](http://api.rubyonrails.org/classes/ActiveSupport/Concern.html \"Rails Concerns\")\r\n", "author_id"=>"1", "slug"=>"test-title", "tag_ids"=>[""], "published"=>"1"}, "commit"=>"Update Post", "id"=>"test-title"}
- [1m[36mExposition::User Load (0.5ms)[0m [1mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT 1[0m [["id", 1]]
- [1m[35mExposition::Post Load (0.6ms)[0m SELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."slug" = $1 LIMIT 1 [["slug", "test-title"]]
- [1m[36m (0.2ms)[0m [1mBEGIN[0m
- [1m[35mCategorical::Tag Load (0.6ms)[0m SELECT "categorical_tags".* FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 [["taggable_id", 1], ["taggable_type", "Exposition::Post"]]
- [1m[36mCACHE (0.0ms)[0m [1mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT 1[0m [["id", 1]]
- [1m[35mExposition::Post Exists (9.8ms)[0m SELECT 1 AS one FROM "exposition_posts" WHERE (LOWER("exposition_posts"."slug") = LOWER('test-title') AND "exposition_posts"."id" != 1) LIMIT 1
- [1m[36mSQL (3.8ms)[0m [1mUPDATE "exposition_posts" SET "summary" = $1, "updated_at" = $2 WHERE "exposition_posts"."id" = $3[0m [["summary", "## H2\r\n###H3\r\n####H4\r\n#####H5\r\n######H6 \r\n\r\n* Blocks\r\n* Modules\r\n* Difference between including and extending Modules\r\n* Difference between instance and class methods\r\n\r\n## Demonstration\r\n\r\nOne of the most common problems that seem to naturally arise in code is handling objects that share a _role_. This tends to be an issue that is not immediately apparent, but as the application grows it begins to present itself. Let's illustrate this with a concrete example taken from the code used in this blog. A lot of this code will be ActiveRecord syntax, but the underlying concepts can be applied to plain old Ruby objects as well."], ["updated_at", "2016-03-09 15:37:07.077832"], ["id", 1]]
- [1m[35m (0.6ms)[0m COMMIT
-Redirected to http://localhost:3000/admin/posts
-Completed 302 Found in 188ms (ActiveRecord: 16.2ms)
-
-
-Started GET "/admin/posts" for ::1 at 2016-03-09 10:37:07 -0500
-Processing by Exposition::Admin::PostsController#index as HTML
- [1m[36mExposition::User Load (0.6ms)[0m [1mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT 1[0m [["id", 1]]
- [1m[35mExposition::Post Load (0.9ms)[0m SELECT "exposition_posts".* FROM "exposition_posts" ORDER BY "exposition_posts"."published_at" DESC LIMIT 25 OFFSET 0
- [1m[36mCACHE (0.0ms)[0m [1mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT 1[0m [["id", 1]]
- [1m[35mCategorical::Tag Load (0.7ms)[0m SELECT "categorical_tags".* FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 [["taggable_id", 2], ["taggable_type", "Exposition::Post"]]
- [1m[36mCACHE (0.0ms)[0m [1mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT 1[0m [["id", 1]]
- [1m[35mCategorical::Tag Load (0.6ms)[0m SELECT "categorical_tags".* FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 [["taggable_id", 1], ["taggable_type", "Exposition::Post"]]
- [1m[36m (0.6ms)[0m [1mSELECT COUNT(*) FROM "exposition_posts"[0m
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/posts/index.html.haml within layouts/exposition/admin (27.4ms)
-Completed 200 OK in 81ms (Views: 75.6ms | ActiveRecord: 3.4ms)
-
-
-Started GET "/" for ::1 at 2016-03-09 10:37:12 -0500
+[0m
+ [1m[35m (3.8ms)[0m [1m[35mCREATE TABLE "ar_internal_metadata" ("key" character varying NOT NULL PRIMARY KEY, "value" character varying, "created_at" timestamp NOT NULL, "updated_at" timestamp NOT NULL)[0m
+ [1m[36mActiveRecord::InternalMetadata Load (0.5ms)[0m [1m[34mSELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2[0m [["key", "environment"], ["LIMIT", 1]]
+ [1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
+ [1m[36mActiveRecord::InternalMetadata Create (0.7ms)[0m [1m[32mINSERT INTO "ar_internal_metadata" ("key", "value", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "key"[0m [["key", "environment"], ["value", "development"], ["created_at", "2018-12-09 18:39:56.318908"], ["updated_at", "2018-12-09 18:39:56.318908"]]
+ [1m[35m (0.5ms)[0m [1m[35mCOMMIT[0m
+ [1m[36mActiveRecord::InternalMetadata Load (0.4ms)[0m [1m[34mSELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2[0m [["key", "environment"], ["LIMIT", 1]]
+ [1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
+ [1m[36mActiveRecord::InternalMetadata Update (0.8ms)[0m [1m[33mUPDATE "ar_internal_metadata" SET "value" = $1, "updated_at" = $2 WHERE "ar_internal_metadata"."key" = $3[0m [["value", "test"], ["updated_at", "2018-12-09 18:39:56.323123"], ["key", "environment"]]
+ [1m[35m (0.5ms)[0m [1m[35mCOMMIT[0m
+ [1m[35m (1.0ms)[0m [1m[34mSELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC[0m
+ [1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
+ [1m[36mExposition::User Exists (1.6ms)[0m [1m[34mSELECT 1 AS one FROM "exposition_users" WHERE LOWER("exposition_users"."email") = LOWER($1) LIMIT $2[0m [["email", "admin@admin.admin"], ["LIMIT", 1]]
+ [1m[36mExposition::User Create (11.1ms)[0m [1m[32mINSERT INTO "exposition_users" ("name", "email", "password_digest", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id"[0m [["name", "Admin"], ["email", "admin@admin.admin"], ["password_digest", "$2a$10$Uib.OiXMpHHdXg/PyV0d0uI8ZoFj9QiKt2qBdXMU8eerrbyuDHbHq"], ["created_at", "2018-12-09 18:39:56.497483"], ["updated_at", "2018-12-09 18:39:56.497483"]]
+ [1m[35m (0.8ms)[0m [1m[35mCOMMIT[0m
+ [1m[35m (0.3ms)[0m [1m[35mBEGIN[0m
+ [1m[36mExposition::Post Exists (41.7ms)[0m [1m[34mSELECT 1 AS one FROM "exposition_posts" WHERE LOWER("exposition_posts"."slug") = LOWER($1) LIMIT $2[0m [["slug", "test-title"], ["LIMIT", 1]]
+ [1m[36mExposition::Post Create (1.0ms)[0m [1m[32mINSERT INTO "exposition_posts" ("title", "body", "published", "published_at", "created_at", "updated_at", "author_id", "slug", "summary") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) RETURNING "id"[0m [["title", "Test Title"], ["body", "Hello\n\nThis is a post.\n"], ["published", true], ["published_at", "2018-12-09 00:00:00"], ["created_at", "2018-12-09 18:39:57.016497"], ["updated_at", "2018-12-09 18:39:57.016497"], ["author_id", 1], ["slug", "test-title"], ["summary", "Hello\n\nThis is a post.\n"]]
+ [1m[35m (2.4ms)[0m [1m[35mCOMMIT[0m
+Started GET "/" for ::1 at 2020-01-02 21:29:21 -0700
Processing by Exposition::PostsController#index as HTML
- [1m[35m (0.6ms)[0m SELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT 10 OFFSET 0) subquery_for_count [["published", "t"]]
- [1m[36mExposition::Post Load (1.1ms)[0m [1mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT 10 OFFSET 0[0m [["published", "t"]]
- [1m[35mCategorical::Tag Exists (0.4ms)[0m SELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT 1 [["taggable_id", 2], ["taggable_type", "Exposition::Post"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (1.8ms)
- [1m[36mCategorical::Tag Exists (0.4ms)[0m [1mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT 1[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (1.4ms)
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml (11.7ms)
- [1m[35m (0.4ms)[0m SELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 [["published", "t"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (23.8ms)
-Completed 200 OK in 59ms (Views: 55.3ms | ActiveRecord: 2.9ms)
+ Rendering /Users/joshuaklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/application
+ [1m[36mExposition::Post Exists? (25.0ms)[0m [1m[34mSELECT 1 AS one FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 1], ["OFFSET", 0]]
+ [1m[36mExposition::Post Load (6.7ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
+ Rendered collection of /Users/joshuaklina/Development/exposition/app/views/exposition/posts/_post.html.haml [1 times] (Duration: 27.8ms | Allocations: 10721)
+ Rendered /Users/joshuaklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/application (Duration: 105.6ms | Allocations: 22535)
+Completed 500 Internal Server Error in 179ms (ActiveRecord: 92.2ms | Allocations: 32765)
-Started GET "/assets/exposition/application.self-8f19aaf36b36ca6b51a36609715d8d3eb66894ef841f3aaffd831fb6f86cbd59.css?body=1" for ::1 at 2016-03-09 10:37:12 -0500
-
-
-Started GET "/assets/exposition/twitter-5ed7dd10b95665b5d9056ecdab697788dd8b2ce71cecb98972b70b7b27a93213.svg" for ::1 at 2016-03-09 10:37:12 -0500
-
-
-Started GET "/posts/test-title" for ::1 at 2016-03-09 10:37:49 -0500
-Processing by Exposition::PostsController#show as HTML
- Parameters: {"id"=>"test-title"}
- [1m[36mExposition::Post Load (0.6ms)[0m [1mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 AND "exposition_posts"."slug" = $2 LIMIT 1[0m [["published", "t"], ["slug", "test-title"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application (30.8ms)
-Completed 200 OK in 58ms (Views: 55.5ms | ActiveRecord: 0.6ms)
-
-
-Started GET "/posts/test-title" for ::1 at 2016-03-09 10:38:08 -0500
-Processing by Exposition::PostsController#show as HTML
- Parameters: {"id"=>"test-title"}
- [1m[35mExposition::Post Load (0.7ms)[0m SELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 AND "exposition_posts"."slug" = $2 LIMIT 1 [["published", "t"], ["slug", "test-title"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application (30.1ms)
-Completed 200 OK in 61ms (Views: 59.0ms | ActiveRecord: 0.7ms)
-
-
-Started GET "/assets/exposition/application.self-8f19aaf36b36ca6b51a36609715d8d3eb66894ef841f3aaffd831fb6f86cbd59.css?body=1" for ::1 at 2016-03-09 10:38:08 -0500
-
-
-Started GET "/assets/exposition/twitter-5ed7dd10b95665b5d9056ecdab697788dd8b2ce71cecb98972b70b7b27a93213.svg" for ::1 at 2016-03-09 10:38:08 -0500
-
-
-Started GET "/admin/posts/another-test/edit" for ::1 at 2016-03-09 10:38:13 -0500
-Processing by Exposition::Admin::PostsController#edit as HTML
- Parameters: {"id"=>"another-test"}
- [1m[36mExposition::User Load (0.6ms)[0m [1mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT 1[0m [["id", 1]]
- [1m[35mExposition::Post Load (0.5ms)[0m SELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."slug" = $1 LIMIT 1 [["slug", "another-test"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/shared/_error_handler.html.haml (0.2ms)
- [1m[36mExposition::User Load (0.5ms)[0m [1mSELECT "exposition_users".* FROM "exposition_users"[0m
- [1m[35mCategorical::Tag Load (0.5ms)[0m SELECT "categorical_tags".* FROM "categorical_tags"
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/posts/_form_fields.html.haml (8.2ms)
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/posts/edit.html.haml within layouts/exposition/admin (18.1ms)
-Completed 200 OK in 77ms (Views: 73.2ms | ActiveRecord: 2.0ms)
-
-
-Started GET "/admin/posts/test-title/edit" for ::1 at 2016-03-09 10:38:16 -0500
-Processing by Exposition::Admin::PostsController#edit as HTML
- Parameters: {"id"=>"test-title"}
- [1m[36mExposition::User Load (0.5ms)[0m [1mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT 1[0m [["id", 1]]
- [1m[35mExposition::Post Load (0.6ms)[0m SELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."slug" = $1 LIMIT 1 [["slug", "test-title"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/shared/_error_handler.html.haml (0.1ms)
- [1m[36mExposition::User Load (0.5ms)[0m [1mSELECT "exposition_users".* FROM "exposition_users"[0m
- [1m[35mCategorical::Tag Load (0.4ms)[0m SELECT "categorical_tags".* FROM "categorical_tags"
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/posts/_form_fields.html.haml (6.1ms)
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/posts/edit.html.haml within layouts/exposition/admin (14.3ms)
-Completed 200 OK in 54ms (Views: 50.2ms | ActiveRecord: 2.1ms)
-
-
-Started PATCH "/admin/posts/test-title" for ::1 at 2016-03-09 10:38:27 -0500
-Processing by Exposition::Admin::PostsController#update as HTML
- Parameters: {"utf8"=>"✓", "authenticity_token"=>"ZVi8R9raWzv7VhkqTUytXFH4rt5yLZD1fz+fQjuH1UVYr0JlKDEiaDYtPfRqBQiT5BMTBFEWOTScss/MxXDPFA==", "post"=>{"title"=>"Test Title", "summary"=>"## H2\r\n###H3\r\n####H4\r\n#####H5\r\n######H6 \r\n\r\n* Blocks\r\n* Modules\r\n* Difference between including and extending Modules\r\n* Difference between instance and class methods\r\n\r\n## Demonstration\r\n\r\nOne of the most common problems that seem to naturally arise in code is handling objects that share a _role_. This tends to be an issue that is not immediately apparent, but as the application grows it begins to present itself. Let's illustrate this with a concrete example taken from the code used in this blog. A lot of this code will be ActiveRecord syntax, but the underlying concepts can be applied to plain old Ruby objects as well.", "body"=>"### Prerequisites \r\n\r\n* Blocks\r\n* Modules\r\n* Difference between including and extending Modules\r\n* Difference between instance and class methods\r\n\r\n### Demonstration\r\n\r\nOne of the most common problems that seem to naturally arise in code is handling objects that share a _role_. This tends to be an issue that is not immediately apparent, but as the application grows it begins to present itself. Let's illustrate this with a concrete example taken from the code used in this blog. A lot of this code will be ActiveRecord syntax, but the underlying concepts can be applied to plain old Ruby objects as well. When laying out out the code for the blog we have objects for `Posts` and `BookReviews` that look like the following:\r\n\r\n\r\n```ruby\r\nclass Post < ActiveRecord::Base\r\n belongs_to :author, class_name: 'User'\r\n\r\n validates_presence_of :title, :body, :author\r\n validates_length_of :title, maximum: 244\r\n validates_presence_of :author\r\n validates_presence_of :slug\r\n validates_uniqueness_of :slug, case_sensitive: false\r\n validates_length_of :slug, maximum: 244\r\n\r\n before_validation :parameterize_slug\r\n before_save :set_published_at_date\r\n\r\n def to_param\r\n slug\r\n end\r\n\r\n def self.published\r\n where(published: true)\r\n end\r\n\r\n def self.sorted_by_published_date\r\n order(published_at: :desc)\r\n end\r\n\r\n private\r\n\r\n def parameterize_slug\r\n self.slug = slug.to_s\r\n self.slug = slug.parameterize\r\n end\r\n\r\n def set_published_at_date\r\n if published_changed?(from: false, to: true)\r\n self.published_at = Date.today\r\n end\r\n end\r\nend\r\n```\r\n\r\n```ruby\r\nclass BookReview < ActiveRecord::Base\r\n belongs_to :author, class_name: 'User'\r\n\r\n validates_presence_of :book_title, :body, :book_author\r\n validates_length_of :book_title, :book_author, maximum: 244\r\n validates_presence_of :author\r\n validates_presence_of :slug\r\n validates_uniqueness_of :slug, case_sensitive: false\r\n validates_length_of :slug, maximum: 244\r\n\r\n before_validation :parameterize_slug\r\n before_save :set_published_at_date\r\n\r\n def to_param\r\n slug\r\n end\r\n\r\n def self.published\r\n where(published: true)\r\n end\r\n\r\n def self.sorted_by_published_date\r\n order(published_at: :desc)\r\n end\r\n\r\n private\r\n\r\n def parameterize_slug\r\n self.slug = slug.to_s\r\n self.slug = slug.parameterize\r\n end\r\n\r\n def set_published_at_date\r\n if published_changed?(from: false, to: true)\r\n self.published_at = Date.today\r\n end\r\n end\r\nend\r\n```\r\n\r\nLet's go through this code a bit. You'll notice that despite being two different objects, they have quite a bit of behavior in common. To start, they both belong to an Author and validate that an author is present. Additionally they both have slugs for friendly urls, a call to the method `#parameterize_slug` to ensure the slug is URL friendly, and some validations to ensure the URL is present, unique, and it fits in the DB. Finally both of these objects can be marked as published and have scopes for filtering based on whether they're published or not.\r\n\r\nLooking at this code we can see a lot of duplicate code. Both of these objects share similar roles and these roles have the same behavior. You could say they're both _sluggable_, _publishable_, and _authorable_. To refactor this duplicate code we should use Ruby's [module](http://ruby-doc.org/core-2.2.0/Module.html \"Ruby Module\"). Ruby's module will allow us to 'mixin' common code to objects that share roles. Let's start with the code that makes an object play the _authorable_ role. \r\n\r\n```ruby\r\nmodule Authorable\r\n def self.included(base)\r\n base.class_eval do\r\n belongs_to :author, class_name: 'User'\r\n validates_presence_of :author\r\n end\r\n end\r\nend\r\n```\r\n\r\nThis is some dense code if you've never seen this pattern before, so let's step through it. The method `.included` is a built in hook method that gets called when a Ruby module is included in a class. The `base` argument is simply the included class. So by including the `Authorable` module into the `Post` class, the `.included` method will be called with the `Post` class set to `base`. Since `base` is now equal to `Post` we can open up the `Post` class can evaluate code using Ruby's `class_eval` method. The code inside the block will be evaluated as if it were in the `Post` class.\r\n\r\n**Note:** This pattern is so common that the Rails framework actually provides a special module for this type of refactoring that's called a [Concern](http://api.rubyonrails.org/classes/ActiveSupport/Concern.html \"Rails Concern\"). Feel free to use this module if you like, however I'm using the traditional way so we can use it without ActiveSupport.\r\n\r\nNow that we lumped all the code related to making an object play the _authorable_ role into the `Authorable` module, let's rewrite our `Post` and `BookReview` classes to use our new module.\r\n\r\n```ruby\r\nclass Post < ActiveRecord::Base\r\n include Authorable\r\n\r\n validates_presence_of :title, :body, :author\r\n validates_length_of :title, maximum: 244\r\n validates_presence_of :slug\r\n validates_uniqueness_of :slug, case_sensitive: false\r\n validates_length_of :slug, maximum: 244\r\n\r\n before_validation :parameterize_slug\r\n before_save :set_published_at_date\r\n\r\n def to_param\r\n slug\r\n end\r\n\r\n def self.published\r\n where(published: true)\r\n end\r\n\r\n def self.sorted_by_published_date\r\n order(published_at: :desc)\r\n end\r\n\r\n private\r\n\r\n def parameterize_slug\r\n self.slug = slug.to_s\r\n self.slug = slug.parameterize\r\n end\r\n\r\n def set_published_at_date\r\n if published_changed?(from: false, to: true)\r\n self.published_at = Date.today\r\n end\r\n end\r\nend\r\n```\r\n\r\n```ruby\r\nclass BookReview < ActiveRecord::Base\r\n include Authorable\r\n\r\n validates_presence_of :book_title, :body, :book_author\r\n validates_length_of :book_title, :book_author, maximum: 244\r\n validates_presence_of :slug\r\n validates_uniqueness_of :slug, case_sensitive: false\r\n validates_length_of :slug, maximum: 244\r\n\r\n before_validation :parameterize_slug\r\n before_save :set_published_at_date\r\n\r\n def to_param\r\n slug\r\n end\r\n\r\n def self.published\r\n where(published: true)\r\n end\r\n\r\n def self.sorted_by_published_date\r\n order(published_at: :desc)\r\n end\r\n\r\n private\r\n\r\n def parameterize_slug\r\n self.slug = slug.to_s\r\n self.slug = slug.parameterize\r\n end\r\n\r\n def set_published_at_date\r\n if published_changed?(from: false, to: true)\r\n self.published_at = Date.today\r\n end\r\n end\r\nend\r\n```\r\nIn the end we removed the duplication, but more importantly we learned a pattern that we can apply to the other roles these two objects have in common. Let's next tackle the common code that makes these objects _publishable_. Again, we'll start by creating a new `Publishable` module to put code for our _publishable_ role. \r\n\r\n```ruby\r\nmodule Publishable\r\n module ClassMethods\r\n def published\r\n where(published: true)\r\n end\r\n\r\n def sorted_by_published_date\r\n order(published_at: :desc)\r\n end\r\n end\r\n\r\n def self.included(base)\r\n base.extend(ClassMethods)\r\n base.class_eval do\r\n before_save :set_published_at_date\r\n end\r\n end\r\n\r\n def css_classes\r\n if published?\r\n return \"published\"\r\n else\r\n return \"not-published\"\r\n end\r\n end\r\n\r\n private\r\n\r\n def set_published_at_date\r\n if published_changed?(from: false, to: true)\r\n self.published_at = Date.today\r\n end\r\n end\r\nend\r\n```\r\n\r\nYou'll notice this module has a bit more to it than the `Authorable` module. Let's walk through the new changes. Right away you see that we have a module within the `Publishable` module called `ClassMethods`. We're going to use the `ClassMethods` module as a container for defining methods that we want to add as class methods (as opposed to instance methods) to our _publishable_ objects. In our `.included` hook method that we used before, you'll notice that in addition to evaluating code we also `extend` our base class with the `ClassMethods` module. This adds (or mixes in) the methods in `ClassMethods` with the base or _publishable_ class, but since we're using `extend` they're added as class methods, not instance methods. Lastly, we have the `#css_classes` and `#set_published_at_date` methods. These are instance methods and will automatically be included as instance level methods when the module is included. Once again let's refactor our `Post` and `BookReview` classes.\r\n\r\n```ruby\r\nclass Post < ActiveRecord::Base\r\n include Authorable\r\n include Publishable\r\n\r\n validates_presence_of :title, :body, :author\r\n validates_length_of :title, maximum: 244\r\n validates_presence_of :slug\r\n validates_uniqueness_of :slug, case_sensitive: false\r\n validates_length_of :slug, maximum: 244\r\n\r\n before_validation :parameterize_slug\r\n\r\n def to_param\r\n slug\r\n end\r\n\r\n private\r\n\r\n def parameterize_slug\r\n self.slug = slug.to_s\r\n self.slug = slug.parameterize\r\n end\r\nend\r\n```\r\n\r\n```ruby\r\nclass BookReview < ActiveRecord::Base\r\n include Authorable\r\n include Publishable\r\n\r\n validates_presence_of :book_title, :body, :book_author\r\n validates_length_of :book_title, :book_author, maximum: 244\r\n validates_presence_of :slug\r\n validates_uniqueness_of :slug, case_sensitive: false\r\n validates_length_of :slug, maximum: 244\r\n\r\n before_validation :parameterize_slug\r\n\r\n def to_param\r\n slug\r\n end\r\n\r\n private\r\n\r\n def parameterize_slug\r\n self.slug = slug.to_s\r\n self.slug = slug.parameterize\r\n end\r\nend\r\n```\r\n\r\nThings are really starting to get cleaned up and duplicate lines of code are disappearing. Let's use the same pattern one last time for removing the duplication when it comes to the _sluggable_ role. Once again we'll create a `Sluggable` module to correspond to the _sluggable_ role and add the related code to the module. \r\n\r\n```ruby\r\nmodule Sluggable\r\n def self.included(base)\r\n base.class_eval do\r\n validates_presence_of :slug\r\n validates_uniqueness_of :slug, case_sensitive: false\r\n validates_length_of :slug, maximum: 244\r\n\r\n before_validation :parameterize_slug\r\n end\r\n end\r\n\r\n def to_param\r\n slug\r\n end\r\n\r\n private\r\n\r\n def parameterize_slug\r\n self.slug = slug.to_s\r\n self.slug = slug.parameterize\r\n end\r\nend\r\n```\r\n\r\nBy now you are familiar with everything this module is doing. We are evaluating some code in the context of the included _sluggable_ class within `class_eval` block and moving the instance methods relevant to the _sluggable_ role into the module which will be added to the to the _sluggable_ objects that include this module. Let's look at the final version of our `Post` and `BookReview` classes.\r\n\r\n```ruby\r\nclass Post < ActiveRecord::Base\r\n include Authorable\r\n include Publishable\r\n include Sluggable\r\n\r\n validates_presence_of :title, :body, :author\r\n validates_length_of :title, maximum: 244\r\nend\r\n```\r\n\r\n```ruby\r\nclass BookReview < ActiveRecord::Base\r\n include Authorable\r\n include Publishable\r\n include Sluggable\r\n\r\n validates_presence_of :book_title, :body, :book_author\r\n validates_length_of :book_title, :book_author, maximum: 244\r\nend\r\n```\r\n\r\nThose classes are really compact now. We also now have the neat side effect that when we add other models to our blog, adding roles will be trivially easy. For example, if we decide we want to add a Tags model, all we have to do is include the functionality we want. Tags don't need to play the roles of _authorable_ or _publishable_, but perhaps we want each Tag to have its own URL. To do this we can simply include the `Sluggable` module and be done with it (since this is technically a DB backed application we'll need to adjust the DB accordingly as well).\r\n\r\n## Warnings\r\nWhile this pattern is powerful there are trade-offs we have to consider. When including modules, the functionality behind each role is now not as apparent. Someone who isn't familiar with your code might wonder where all the functionality is hidden. This also adds a bit of cognitive load for the programmer as they now have code for one object in 3 additional different places they must consider. When refactoring out into modules, or anytime when using inheritance, you'll want to make sure you're constantly asking yourself, _will other programmers be able to easily navigate the code and find what they need_. \r\n\r\nWe could, for example, create another module called `Broadcastable` that would look something like:\r\n\r\n```ruby\r\nmodule Broadcastable\r\n include Authorable\r\n include Publishable\r\n include Sluggable\r\nend\r\n```\r\n\r\nAnd then include this in our `Post` and `BookReview` classes. While this does DRY up the code a bit, I feel that it adds too much complexity and cognitive load. Its not quite as clear as to what `Broadcastable` does and adds another layer in the inheritance tree that programmers must process. \r\n\r\nAnother thing to be careful with is using this pattern simply to remove duplicate code. Its important to consider that the purpose of the duplicate code is the same as opposed to having duplicate code purely because of coincidence. If the purpose is aligned, then its much more likely the future changes will be compatible with all involved objects. If the duplicate code exists between objects coincidentally, then its much more likely that the duplicate code may diverge in the future. Sometimes you might even want to hold off refactoring until further down the line, when the true roles of objects become more clear. \r\n\r\nWith these warnings in mind, factoring out common code that objects share by virtue of having a role into a module is a great way to organize shared behavior. \r\n\r\n## See More:\r\nTo see how to test this pattern, you can view the source code for this blog. It makes use of rspec's Shared Examples. In minitest you would simply use modules!\r\n\r\n* [Source code for this blog](https://github.com/jklina/joshklina.com \"joshklina.com source code\")\r\n* [Eloquent Ruby by Russ Olsen](http://amzn.to/1R2mkFA \"Eloquent Ruby\")\r\n* [Practical Object-Oriented Design in Ruby: An Agile Primer by Sandi Metz](http://amzn.to/1R2muN9 \"Eloquent Ruby\")\r\n* [Rails Concerns](http://api.rubyonrails.org/classes/ActiveSupport/Concern.html \"Rails Concerns\")\r\n", "author_id"=>"1", "slug"=>"test-title", "tag_ids"=>[""], "published"=>"1"}, "commit"=>"Update Post", "id"=>"test-title"}
- [1m[36mExposition::User Load (0.3ms)[0m [1mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT 1[0m [["id", 1]]
- [1m[35mExposition::Post Load (0.6ms)[0m SELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."slug" = $1 LIMIT 1 [["slug", "test-title"]]
- [1m[36m (0.2ms)[0m [1mBEGIN[0m
- [1m[35mCategorical::Tag Load (0.9ms)[0m SELECT "categorical_tags".* FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 [["taggable_id", 1], ["taggable_type", "Exposition::Post"]]
- [1m[36mCACHE (0.0ms)[0m [1mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT 1[0m [["id", 1]]
- [1m[35mExposition::Post Exists (0.5ms)[0m SELECT 1 AS one FROM "exposition_posts" WHERE (LOWER("exposition_posts"."slug") = LOWER('test-title') AND "exposition_posts"."id" != 1) LIMIT 1
- [1m[36mSQL (2.4ms)[0m [1mUPDATE "exposition_posts" SET "body" = $1, "updated_at" = $2 WHERE "exposition_posts"."id" = $3[0m [["body", "### Prerequisites \r\n\r\n* Blocks\r\n* Modules\r\n* Difference between including and extending Modules\r\n* Difference between instance and class methods\r\n\r\n### Demonstration\r\n\r\nOne of the most common problems that seem to naturally arise in code is handling objects that share a _role_. This tends to be an issue that is not immediately apparent, but as the application grows it begins to present itself. Let's illustrate this with a concrete example taken from the code used in this blog. A lot of this code will be ActiveRecord syntax, but the underlying concepts can be applied to plain old Ruby objects as well. When laying out out the code for the blog we have objects for `Posts` and `BookReviews` that look like the following:\r\n\r\n\r\n```ruby\r\nclass Post < ActiveRecord::Base\r\n belongs_to :author, class_name: 'User'\r\n\r\n validates_presence_of :title, :body, :author\r\n validates_length_of :title, maximum: 244\r\n validates_presence_of :author\r\n validates_presence_of :slug\r\n validates_uniqueness_of :slug, case_sensitive: false\r\n validates_length_of :slug, maximum: 244\r\n\r\n before_validation :parameterize_slug\r\n before_save :set_published_at_date\r\n\r\n def to_param\r\n slug\r\n end\r\n\r\n def self.published\r\n where(published: true)\r\n end\r\n\r\n def self.sorted_by_published_date\r\n order(published_at: :desc)\r\n end\r\n\r\n private\r\n\r\n def parameterize_slug\r\n self.slug = slug.to_s\r\n self.slug = slug.parameterize\r\n end\r\n\r\n def set_published_at_date\r\n if published_changed?(from: false, to: true)\r\n self.published_at = Date.today\r\n end\r\n end\r\nend\r\n```\r\n\r\n```ruby\r\nclass BookReview < ActiveRecord::Base\r\n belongs_to :author, class_name: 'User'\r\n\r\n validates_presence_of :book_title, :body, :book_author\r\n validates_length_of :book_title, :book_author, maximum: 244\r\n validates_presence_of :author\r\n validates_presence_of :slug\r\n validates_uniqueness_of :slug, case_sensitive: false\r\n validates_length_of :slug, maximum: 244\r\n\r\n before_validation :parameterize_slug\r\n before_save :set_published_at_date\r\n\r\n def to_param\r\n slug\r\n end\r\n\r\n def self.published\r\n where(published: true)\r\n end\r\n\r\n def self.sorted_by_published_date\r\n order(published_at: :desc)\r\n end\r\n\r\n private\r\n\r\n def parameterize_slug\r\n self.slug = slug.to_s\r\n self.slug = slug.parameterize\r\n end\r\n\r\n def set_published_at_date\r\n if published_changed?(from: false, to: true)\r\n self.published_at = Date.today\r\n end\r\n end\r\nend\r\n```\r\n\r\nLet's go through this code a bit. You'll notice that despite being two different objects, they have quite a bit of behavior in common. To start, they both belong to an Author and validate that an author is present. Additionally they both have slugs for friendly urls, a call to the method `#parameterize_slug` to ensure the slug is URL friendly, and some validations to ensure the URL is present, unique, and it fits in the DB. Finally both of these objects can be marked as published and have scopes for filtering based on whether they're published or not.\r\n\r\nLooking at this code we can see a lot of duplicate code. Both of these objects share similar roles and these roles have the same behavior. You could say they're both _sluggable_, _publishable_, and _authorable_. To refactor this duplicate code we should use Ruby's [module](http://ruby-doc.org/core-2.2.0/Module.html \"Ruby Module\"). Ruby's module will allow us to 'mixin' common code to objects that share roles. Let's start with the code that makes an object play the _authorable_ role. \r\n\r\n```ruby\r\nmodule Authorable\r\n def self.included(base)\r\n base.class_eval do\r\n belongs_to :author, class_name: 'User'\r\n validates_presence_of :author\r\n end\r\n end\r\nend\r\n```\r\n\r\nThis is some dense code if you've never seen this pattern before, so let's step through it. The method `.included` is a built in hook method that gets called when a Ruby module is included in a class. The `base` argument is simply the included class. So by including the `Authorable` module into the `Post` class, the `.included` method will be called with the `Post` class set to `base`. Since `base` is now equal to `Post` we can open up the `Post` class can evaluate code using Ruby's `class_eval` method. The code inside the block will be evaluated as if it were in the `Post` class.\r\n\r\n**Note:** This pattern is so common that the Rails framework actually provides a special module for this type of refactoring that's called a [Concern](http://api.rubyonrails.org/classes/ActiveSupport/Concern.html \"Rails Concern\"). Feel free to use this module if you like, however I'm using the traditional way so we can use it without ActiveSupport.\r\n\r\nNow that we lumped all the code related to making an object play the _authorable_ role into the `Authorable` module, let's rewrite our `Post` and `BookReview` classes to use our new module.\r\n\r\n```ruby\r\nclass Post < ActiveRecord::Base\r\n include Authorable\r\n\r\n validates_presence_of :title, :body, :author\r\n validates_length_of :title, maximum: 244\r\n validates_presence_of :slug\r\n validates_uniqueness_of :slug, case_sensitive: false\r\n validates_length_of :slug, maximum: 244\r\n\r\n before_validation :parameterize_slug\r\n before_save :set_published_at_date\r\n\r\n def to_param\r\n slug\r\n end\r\n\r\n def self.published\r\n where(published: true)\r\n end\r\n\r\n def self.sorted_by_published_date\r\n order(published_at: :desc)\r\n end\r\n\r\n private\r\n\r\n def parameterize_slug\r\n self.slug = slug.to_s\r\n self.slug = slug.parameterize\r\n end\r\n\r\n def set_published_at_date\r\n if published_changed?(from: false, to: true)\r\n self.published_at = Date.today\r\n end\r\n end\r\nend\r\n```\r\n\r\n```ruby\r\nclass BookReview < ActiveRecord::Base\r\n include Authorable\r\n\r\n validates_presence_of :book_title, :body, :book_author\r\n validates_length_of :book_title, :book_author, maximum: 244\r\n validates_presence_of :slug\r\n validates_uniqueness_of :slug, case_sensitive: false\r\n validates_length_of :slug, maximum: 244\r\n\r\n before_validation :parameterize_slug\r\n before_save :set_published_at_date\r\n\r\n def to_param\r\n slug\r\n end\r\n\r\n def self.published\r\n where(published: true)\r\n end\r\n\r\n def self.sorted_by_published_date\r\n order(published_at: :desc)\r\n end\r\n\r\n private\r\n\r\n def parameterize_slug\r\n self.slug = slug.to_s\r\n self.slug = slug.parameterize\r\n end\r\n\r\n def set_published_at_date\r\n if published_changed?(from: false, to: true)\r\n self.published_at = Date.today\r\n end\r\n end\r\nend\r\n```\r\nIn the end we removed the duplication, but more importantly we learned a pattern that we can apply to the other roles these two objects have in common. Let's next tackle the common code that makes these objects _publishable_. Again, we'll start by creating a new `Publishable` module to put code for our _publishable_ role. \r\n\r\n```ruby\r\nmodule Publishable\r\n module ClassMethods\r\n def published\r\n where(published: true)\r\n end\r\n\r\n def sorted_by_published_date\r\n order(published_at: :desc)\r\n end\r\n end\r\n\r\n def self.included(base)\r\n base.extend(ClassMethods)\r\n base.class_eval do\r\n before_save :set_published_at_date\r\n end\r\n end\r\n\r\n def css_classes\r\n if published?\r\n return \"published\"\r\n else\r\n return \"not-published\"\r\n end\r\n end\r\n\r\n private\r\n\r\n def set_published_at_date\r\n if published_changed?(from: false, to: true)\r\n self.published_at = Date.today\r\n end\r\n end\r\nend\r\n```\r\n\r\nYou'll notice this module has a bit more to it than the `Authorable` module. Let's walk through the new changes. Right away you see that we have a module within the `Publishable` module called `ClassMethods`. We're going to use the `ClassMethods` module as a container for defining methods that we want to add as class methods (as opposed to instance methods) to our _publishable_ objects. In our `.included` hook method that we used before, you'll notice that in addition to evaluating code we also `extend` our base class with the `ClassMethods` module. This adds (or mixes in) the methods in `ClassMethods` with the base or _publishable_ class, but since we're using `extend` they're added as class methods, not instance methods. Lastly, we have the `#css_classes` and `#set_published_at_date` methods. These are instance methods and will automatically be included as instance level methods when the module is included. Once again let's refactor our `Post` and `BookReview` classes.\r\n\r\n```ruby\r\nclass Post < ActiveRecord::Base\r\n include Authorable\r\n include Publishable\r\n\r\n validates_presence_of :title, :body, :author\r\n validates_length_of :title, maximum: 244\r\n validates_presence_of :slug\r\n validates_uniqueness_of :slug, case_sensitive: false\r\n validates_length_of :slug, maximum: 244\r\n\r\n before_validation :parameterize_slug\r\n\r\n def to_param\r\n slug\r\n end\r\n\r\n private\r\n\r\n def parameterize_slug\r\n self.slug = slug.to_s\r\n self.slug = slug.parameterize\r\n end\r\nend\r\n```\r\n\r\n```ruby\r\nclass BookReview < ActiveRecord::Base\r\n include Authorable\r\n include Publishable\r\n\r\n validates_presence_of :book_title, :body, :book_author\r\n validates_length_of :book_title, :book_author, maximum: 244\r\n validates_presence_of :slug\r\n validates_uniqueness_of :slug, case_sensitive: false\r\n validates_length_of :slug, maximum: 244\r\n\r\n before_validation :parameterize_slug\r\n\r\n def to_param\r\n slug\r\n end\r\n\r\n private\r\n\r\n def parameterize_slug\r\n self.slug = slug.to_s\r\n self.slug = slug.parameterize\r\n end\r\nend\r\n```\r\n\r\nThings are really starting to get cleaned up and duplicate lines of code are disappearing. Let's use the same pattern one last time for removing the duplication when it comes to the _sluggable_ role. Once again we'll create a `Sluggable` module to correspond to the _sluggable_ role and add the related code to the module. \r\n\r\n```ruby\r\nmodule Sluggable\r\n def self.included(base)\r\n base.class_eval do\r\n validates_presence_of :slug\r\n validates_uniqueness_of :slug, case_sensitive: false\r\n validates_length_of :slug, maximum: 244\r\n\r\n before_validation :parameterize_slug\r\n end\r\n end\r\n\r\n def to_param\r\n slug\r\n end\r\n\r\n private\r\n\r\n def parameterize_slug\r\n self.slug = slug.to_s\r\n self.slug = slug.parameterize\r\n end\r\nend\r\n```\r\n\r\nBy now you are familiar with everything this module is doing. We are evaluating some code in the context of the included _sluggable_ class within `class_eval` block and moving the instance methods relevant to the _sluggable_ role into the module which will be added to the to the _sluggable_ objects that include this module. Let's look at the final version of our `Post` and `BookReview` classes.\r\n\r\n```ruby\r\nclass Post < ActiveRecord::Base\r\n include Authorable\r\n include Publishable\r\n include Sluggable\r\n\r\n validates_presence_of :title, :body, :author\r\n validates_length_of :title, maximum: 244\r\nend\r\n```\r\n\r\n```ruby\r\nclass BookReview < ActiveRecord::Base\r\n include Authorable\r\n include Publishable\r\n include Sluggable\r\n\r\n validates_presence_of :book_title, :body, :book_author\r\n validates_length_of :book_title, :book_author, maximum: 244\r\nend\r\n```\r\n\r\nThose classes are really compact now. We also now have the neat side effect that when we add other models to our blog, adding roles will be trivially easy. For example, if we decide we want to add a Tags model, all we have to do is include the functionality we want. Tags don't need to play the roles of _authorable_ or _publishable_, but perhaps we want each Tag to have its own URL. To do this we can simply include the `Sluggable` module and be done with it (since this is technically a DB backed application we'll need to adjust the DB accordingly as well).\r\n\r\n## Warnings\r\nWhile this pattern is powerful there are trade-offs we have to consider. When including modules, the functionality behind each role is now not as apparent. Someone who isn't familiar with your code might wonder where all the functionality is hidden. This also adds a bit of cognitive load for the programmer as they now have code for one object in 3 additional different places they must consider. When refactoring out into modules, or anytime when using inheritance, you'll want to make sure you're constantly asking yourself, _will other programmers be able to easily navigate the code and find what they need_. \r\n\r\nWe could, for example, create another module called `Broadcastable` that would look something like:\r\n\r\n```ruby\r\nmodule Broadcastable\r\n include Authorable\r\n include Publishable\r\n include Sluggable\r\nend\r\n```\r\n\r\nAnd then include this in our `Post` and `BookReview` classes. While this does DRY up the code a bit, I feel that it adds too much complexity and cognitive load. Its not quite as clear as to what `Broadcastable` does and adds another layer in the inheritance tree that programmers must process. \r\n\r\nAnother thing to be careful with is using this pattern simply to remove duplicate code. Its important to consider that the purpose of the duplicate code is the same as opposed to having duplicate code purely because of coincidence. If the purpose is aligned, then its much more likely the future changes will be compatible with all involved objects. If the duplicate code exists between objects coincidentally, then its much more likely that the duplicate code may diverge in the future. Sometimes you might even want to hold off refactoring until further down the line, when the true roles of objects become more clear. \r\n\r\nWith these warnings in mind, factoring out common code that objects share by virtue of having a role into a module is a great way to organize shared behavior. \r\n\r\n## See More:\r\nTo see how to test this pattern, you can view the source code for this blog. It makes use of rspec's Shared Examples. In minitest you would simply use modules!\r\n\r\n* [Source code for this blog](https://github.com/jklina/joshklina.com \"joshklina.com source code\")\r\n* [Eloquent Ruby by Russ Olsen](http://amzn.to/1R2mkFA \"Eloquent Ruby\")\r\n* [Practical Object-Oriented Design in Ruby: An Agile Primer by Sandi Metz](http://amzn.to/1R2muN9 \"Eloquent Ruby\")\r\n* [Rails Concerns](http://api.rubyonrails.org/classes/ActiveSupport/Concern.html \"Rails Concerns\")\r\n"], ["updated_at", "2016-03-09 15:38:27.619581"], ["id", 1]]
- [1m[35m (0.5ms)[0m COMMIT
-Redirected to http://localhost:3000/admin/posts
-Completed 302 Found in 44ms (ActiveRecord: 5.4ms)
-
-
-Started GET "/admin/posts" for ::1 at 2016-03-09 10:38:27 -0500
-Processing by Exposition::Admin::PostsController#index as HTML
- [1m[36mExposition::User Load (0.4ms)[0m [1mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT 1[0m [["id", 1]]
- [1m[35mExposition::Post Load (1.2ms)[0m SELECT "exposition_posts".* FROM "exposition_posts" ORDER BY "exposition_posts"."published_at" DESC LIMIT 25 OFFSET 0
- [1m[36mCACHE (0.0ms)[0m [1mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT 1[0m [["id", 1]]
- [1m[35mCategorical::Tag Load (0.4ms)[0m SELECT "categorical_tags".* FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 [["taggable_id", 2], ["taggable_type", "Exposition::Post"]]
- [1m[36mCACHE (0.0ms)[0m [1mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT 1[0m [["id", 1]]
- [1m[35mCategorical::Tag Load (0.4ms)[0m SELECT "categorical_tags".* FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 [["taggable_id", 1], ["taggable_type", "Exposition::Post"]]
- [1m[36m (0.5ms)[0m [1mSELECT COUNT(*) FROM "exposition_posts"[0m
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/posts/index.html.haml within layouts/exposition/admin (24.3ms)
-Completed 200 OK in 62ms (Views: 57.3ms | ActiveRecord: 2.9ms)
-
-
-Started GET "/posts/test-title" for ::1 at 2016-03-09 10:38:33 -0500
-Processing by Exposition::PostsController#show as HTML
- Parameters: {"id"=>"test-title"}
- [1m[35mExposition::Post Load (1.1ms)[0m SELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 AND "exposition_posts"."slug" = $2 LIMIT 1 [["published", "t"], ["slug", "test-title"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application (22.6ms)
-Completed 200 OK in 60ms (Views: 57.2ms | ActiveRecord: 1.1ms)
-
-
-Started GET "/assets/exposition/application.self-8f19aaf36b36ca6b51a36609715d8d3eb66894ef841f3aaffd831fb6f86cbd59.css?body=1" for ::1 at 2016-03-09 10:38:33 -0500
-
-
-Started GET "/assets/exposition/twitter-5ed7dd10b95665b5d9056ecdab697788dd8b2ce71cecb98972b70b7b27a93213.svg" for ::1 at 2016-03-09 10:38:33 -0500
-
-
-Started GET "/posts/test-title" for ::1 at 2016-03-09 10:40:57 -0500
-Processing by Exposition::PostsController#show as HTML
- Parameters: {"id"=>"test-title"}
- [1m[36mExposition::Post Load (0.7ms)[0m [1mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 AND "exposition_posts"."slug" = $2 LIMIT 1[0m [["published", "t"], ["slug", "test-title"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application (29.1ms)
-Completed 500 Internal Server Error in 434ms (ActiveRecord: 0.7ms)
-
-ActionView::Template::Error (Undefined mixin 'modular-scale'.):
- 2: %html
- 3: %head
- 4: %title= t('title')
- 5: = stylesheet_link_tag "exposition/application"
- 6: = csrf_meta_tags
- 7: %meta{:name => "viewport", :content => "width=device-width, initial-scale=1.0, maximum-scale=1.0"}
- 8: %body
- /Users/jklina/Development/exposition/app/assets/stylesheets/exposition/_layout.scss:18:in `modular-scale'
- /Users/jklina/Development/exposition/app/assets/stylesheets/exposition/_layout.scss:18
- /Users/jklina/Development/exposition/app/assets/stylesheets/exposition/application.scss:10
- sass (3.4.21) lib/sass/tree/visitors/perform.rb:349:in `block in visit_mixin'
- sass (3.4.21) lib/sass/stack.rb:98:in `block in with_mixin'
- sass (3.4.21) lib/sass/stack.rb:115:in `with_frame'
- sass (3.4.21) lib/sass/stack.rb:98:in `with_mixin'
- sass (3.4.21) lib/sass/tree/visitors/perform.rb:347:in `visit_mixin'
- sass (3.4.21) lib/sass/tree/visitors/base.rb:36:in `visit'
- sass (3.4.21) lib/sass/tree/visitors/perform.rb:158:in `block in visit'
- sass (3.4.21) lib/sass/stack.rb:79:in `block in with_base'
- sass (3.4.21) lib/sass/stack.rb:115:in `with_frame'
- sass (3.4.21) lib/sass/stack.rb:79:in `with_base'
- sass (3.4.21) lib/sass/tree/visitors/perform.rb:158:in `visit'
- sass (3.4.21) lib/sass/tree/visitors/perform.rb:431:in `block (2 levels) in visit_rule'
- sass (3.4.21) lib/sass/tree/visitors/perform.rb:431:in `map'
- sass (3.4.21) lib/sass/tree/visitors/perform.rb:431:in `block in visit_rule'
- sass (3.4.21) lib/sass/tree/visitors/perform.rb:179:in `with_environment'
- sass (3.4.21) lib/sass/tree/visitors/perform.rb:429:in `visit_rule'
- sass (3.4.21) lib/sass/tree/visitors/base.rb:36:in `visit'
- sass (3.4.21) lib/sass/tree/visitors/perform.rb:158:in `block in visit'
- sass (3.4.21) lib/sass/stack.rb:79:in `block in with_base'
- sass (3.4.21) lib/sass/stack.rb:115:in `with_frame'
- sass (3.4.21) lib/sass/stack.rb:79:in `with_base'
- sass (3.4.21) lib/sass/tree/visitors/perform.rb:158:in `visit'
- sass (3.4.21) lib/sass/tree/visitors/perform.rb:326:in `block (2 levels) in visit_import'
- sass (3.4.21) lib/sass/tree/visitors/perform.rb:326:in `map'
- sass (3.4.21) lib/sass/tree/visitors/perform.rb:326:in `block in visit_import'
- sass (3.4.21) lib/sass/stack.rb:88:in `block in with_import'
- sass (3.4.21) lib/sass/stack.rb:115:in `with_frame'
- sass (3.4.21) lib/sass/stack.rb:88:in `with_import'
- sass (3.4.21) lib/sass/tree/visitors/perform.rb:323:in `visit_import'
- sass (3.4.21) lib/sass/tree/visitors/base.rb:36:in `visit'
- sass (3.4.21) lib/sass/tree/visitors/perform.rb:158:in `block in visit'
- sass (3.4.21) lib/sass/stack.rb:79:in `block in with_base'
- sass (3.4.21) lib/sass/stack.rb:115:in `with_frame'
- sass (3.4.21) lib/sass/stack.rb:79:in `with_base'
- sass (3.4.21) lib/sass/tree/visitors/perform.rb:158:in `visit'
- sass (3.4.21) lib/sass/tree/visitors/base.rb:52:in `block in visit_children'
- sass (3.4.21) lib/sass/tree/visitors/base.rb:52:in `map'
- sass (3.4.21) lib/sass/tree/visitors/base.rb:52:in `visit_children'
- sass (3.4.21) lib/sass/tree/visitors/perform.rb:167:in `block in visit_children'
- sass (3.4.21) lib/sass/tree/visitors/perform.rb:179:in `with_environment'
- sass (3.4.21) lib/sass/tree/visitors/perform.rb:166:in `visit_children'
- sass (3.4.21) lib/sass/tree/visitors/base.rb:36:in `block in visit'
- sass (3.4.21) lib/sass/tree/visitors/perform.rb:186:in `visit_root'
- sass (3.4.21) lib/sass/tree/visitors/base.rb:36:in `visit'
- sass (3.4.21) lib/sass/tree/visitors/perform.rb:157:in `visit'
- sass (3.4.21) lib/sass/tree/visitors/perform.rb:8:in `visit'
- sass (3.4.21) lib/sass/tree/root_node.rb:36:in `css_tree'
- sass (3.4.21) lib/sass/tree/root_node.rb:20:in `render'
- sass (3.4.21) lib/sass/engine.rb:278:in `render'
- sprockets (3.5.2) lib/sprockets/sass_processor.rb:74:in `block in call'
- sprockets (3.5.2) lib/sprockets/utils.rb:154:in `module_include'
- sprockets (3.5.2) lib/sprockets/sass_processor.rb:73:in `call'
- sprockets (3.5.2) lib/sprockets/sass_processor.rb:30:in `call'
- sprockets (3.5.2) lib/sprockets/processor_utils.rb:75:in `call_processor'
- sprockets (3.5.2) lib/sprockets/processor_utils.rb:57:in `block in call_processors'
- sprockets (3.5.2) lib/sprockets/processor_utils.rb:56:in `reverse_each'
- sprockets (3.5.2) lib/sprockets/processor_utils.rb:56:in `call_processors'
- sprockets (3.5.2) lib/sprockets/loader.rb:134:in `load_from_unloaded'
- sprockets (3.5.2) lib/sprockets/loader.rb:60:in `block in load'
- sprockets (3.5.2) lib/sprockets/loader.rb:318:in `fetch_asset_from_dependency_cache'
- sprockets (3.5.2) lib/sprockets/loader.rb:44:in `load'
- sprockets (3.5.2) lib/sprockets/cached_environment.rb:20:in `block in initialize'
- sprockets (3.5.2) lib/sprockets/cached_environment.rb:47:in `yield'
- sprockets (3.5.2) lib/sprockets/cached_environment.rb:47:in `load'
- sprockets (3.5.2) lib/sprockets/bundle.rb:23:in `block in call'
- sprockets (3.5.2) lib/sprockets/utils.rb:183:in `dfs'
- sprockets (3.5.2) lib/sprockets/bundle.rb:24:in `call'
- sprockets (3.5.2) lib/sprockets/processor_utils.rb:75:in `call_processor'
- sprockets (3.5.2) lib/sprockets/processor_utils.rb:57:in `block in call_processors'
- sprockets (3.5.2) lib/sprockets/processor_utils.rb:56:in `reverse_each'
- sprockets (3.5.2) lib/sprockets/processor_utils.rb:56:in `call_processors'
- sprockets (3.5.2) lib/sprockets/loader.rb:134:in `load_from_unloaded'
- sprockets (3.5.2) lib/sprockets/loader.rb:60:in `block in load'
- sprockets (3.5.2) lib/sprockets/loader.rb:318:in `fetch_asset_from_dependency_cache'
- sprockets (3.5.2) lib/sprockets/loader.rb:44:in `load'
- sprockets (3.5.2) lib/sprockets/cached_environment.rb:20:in `block in initialize'
- sprockets (3.5.2) lib/sprockets/cached_environment.rb:47:in `yield'
- sprockets (3.5.2) lib/sprockets/cached_environment.rb:47:in `load'
- sprockets (3.5.2) lib/sprockets/base.rb:66:in `find_asset'
- sprockets (3.5.2) lib/sprockets/base.rb:92:in `[]'
- sprockets-rails (3.0.1) lib/sprockets/rails/helper.rb:342:in `find_asset'
- sprockets-rails (3.0.1) lib/sprockets/rails/helper.rb:334:in `find_debug_asset'
- sprockets-rails (3.0.1) lib/sprockets/rails/helper.rb:217:in `block in lookup_debug_asset'
- sprockets-rails (3.0.1) lib/sprockets/rails/helper.rb:230:in `block in resolve_asset'
- sprockets-rails (3.0.1) lib/sprockets/rails/helper.rb:229:in `each'
- sprockets-rails (3.0.1) lib/sprockets/rails/helper.rb:229:in `detect'
- sprockets-rails (3.0.1) lib/sprockets/rails/helper.rb:229:in `resolve_asset'
- sprockets-rails (3.0.1) lib/sprockets/rails/helper.rb:216:in `lookup_debug_asset'
- sprockets-rails (3.0.1) lib/sprockets/rails/helper.rb:158:in `block in stylesheet_link_tag'
- sprockets-rails (3.0.1) lib/sprockets/rails/helper.rb:157:in `map'
- sprockets-rails (3.0.1) lib/sprockets/rails/helper.rb:157:in `stylesheet_link_tag'
- /Users/jklina/Development/exposition/app/views/layouts/exposition/application.html.haml:5:in `___sers_jklina__evelopment_exposition_app_views_layouts_exposition_application_html_haml__2103793355481475315_70231290603520'
- actionview (4.2.5) lib/action_view/template.rb:145:in `block in render'
- activesupport (4.2.5) lib/active_support/notifications.rb:166:in `instrument'
- actionview (4.2.5) lib/action_view/template.rb:333:in `instrument'
- actionview (4.2.5) lib/action_view/template.rb:143:in `render'
- actionview (4.2.5) lib/action_view/renderer/template_renderer.rb:66:in `render_with_layout'
- actionview (4.2.5) lib/action_view/renderer/template_renderer.rb:52:in `render_template'
- actionview (4.2.5) lib/action_view/renderer/template_renderer.rb:14:in `render'
- actionview (4.2.5) lib/action_view/renderer/renderer.rb:42:in `render_template'
- actionview (4.2.5) lib/action_view/renderer/renderer.rb:23:in `render'
- actionview (4.2.5) lib/action_view/rendering.rb:100:in `_render_template'
- actionpack (4.2.5) lib/action_controller/metal/streaming.rb:217:in `_render_template'
- actionview (4.2.5) lib/action_view/rendering.rb:83:in `render_to_body'
- actionpack (4.2.5) lib/action_controller/metal/rendering.rb:32:in `render_to_body'
- actionpack (4.2.5) lib/action_controller/metal/renderers.rb:37:in `render_to_body'
- actionpack (4.2.5) lib/abstract_controller/rendering.rb:25:in `render'
- actionpack (4.2.5) lib/action_controller/metal/rendering.rb:16:in `render'
- actionpack (4.2.5) lib/action_controller/metal/instrumentation.rb:44:in `block (2 levels) in render'
- activesupport (4.2.5) lib/active_support/core_ext/benchmark.rb:12:in `block in ms'
- /Users/jklina/.rbenv/versions/2.2.2/lib/ruby/2.2.0/benchmark.rb:303:in `realtime'
- activesupport (4.2.5) lib/active_support/core_ext/benchmark.rb:12:in `ms'
- actionpack (4.2.5) lib/action_controller/metal/instrumentation.rb:44:in `block in render'
- actionpack (4.2.5) lib/action_controller/metal/instrumentation.rb:87:in `cleanup_view_runtime'
- activerecord (4.2.5) lib/active_record/railties/controller_runtime.rb:25:in `cleanup_view_runtime'
- actionpack (4.2.5) lib/action_controller/metal/instrumentation.rb:43:in `render'
- actionpack (4.2.5) lib/action_controller/metal/implicit_render.rb:10:in `default_render'
- actionpack (4.2.5) lib/action_controller/metal/implicit_render.rb:5:in `send_action'
- actionpack (4.2.5) lib/abstract_controller/base.rb:198:in `process_action'
- actionpack (4.2.5) lib/action_controller/metal/rendering.rb:10:in `process_action'
- actionpack (4.2.5) lib/abstract_controller/callbacks.rb:20:in `block in process_action'
- activesupport (4.2.5) lib/active_support/callbacks.rb:117:in `call'
- activesupport (4.2.5) lib/active_support/callbacks.rb:117:in `call'
- activesupport (4.2.5) lib/active_support/callbacks.rb:555:in `block (2 levels) in compile'
- activesupport (4.2.5) lib/active_support/callbacks.rb:505:in `call'
- activesupport (4.2.5) lib/active_support/callbacks.rb:505:in `call'
- activesupport (4.2.5) lib/active_support/callbacks.rb:92:in `__run_callbacks__'
- activesupport (4.2.5) lib/active_support/callbacks.rb:778:in `_run_process_action_callbacks'
- activesupport (4.2.5) lib/active_support/callbacks.rb:81:in `run_callbacks'
- actionpack (4.2.5) lib/abstract_controller/callbacks.rb:19:in `process_action'
- actionpack (4.2.5) lib/action_controller/metal/rescue.rb:29:in `process_action'
- actionpack (4.2.5) lib/action_controller/metal/instrumentation.rb:32:in `block in process_action'
- activesupport (4.2.5) lib/active_support/notifications.rb:164:in `block in instrument'
- activesupport (4.2.5) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
- activesupport (4.2.5) lib/active_support/notifications.rb:164:in `instrument'
- actionpack (4.2.5) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
- actionpack (4.2.5) lib/action_controller/metal/params_wrapper.rb:250:in `process_action'
- activerecord (4.2.5) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
- actionpack (4.2.5) lib/abstract_controller/base.rb:137:in `process'
- actionview (4.2.5) lib/action_view/rendering.rb:30:in `process'
- actionpack (4.2.5) lib/action_controller/metal.rb:196:in `dispatch'
- actionpack (4.2.5) lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'
- actionpack (4.2.5) lib/action_controller/metal.rb:237:in `block in action'
- actionpack (4.2.5) lib/action_dispatch/routing/route_set.rb:76:in `call'
- actionpack (4.2.5) lib/action_dispatch/routing/route_set.rb:76:in `dispatch'
- actionpack (4.2.5) lib/action_dispatch/routing/route_set.rb:45:in `serve'
- actionpack (4.2.5) lib/action_dispatch/journey/router.rb:43:in `block in serve'
- actionpack (4.2.5) lib/action_dispatch/journey/router.rb:30:in `each'
- actionpack (4.2.5) lib/action_dispatch/journey/router.rb:30:in `serve'
- actionpack (4.2.5) lib/action_dispatch/routing/route_set.rb:817:in `call'
- railties (4.2.5) lib/rails/engine.rb:518:in `call'
- railties (4.2.5) lib/rails/railtie.rb:194:in `public_send'
- railties (4.2.5) lib/rails/railtie.rb:194:in `method_missing'
- actionpack (4.2.5) lib/action_dispatch/routing/mapper.rb:51:in `serve'
- actionpack (4.2.5) lib/action_dispatch/journey/router.rb:43:in `block in serve'
- actionpack (4.2.5) lib/action_dispatch/journey/router.rb:30:in `each'
- actionpack (4.2.5) lib/action_dispatch/journey/router.rb:30:in `serve'
- actionpack (4.2.5) lib/action_dispatch/routing/route_set.rb:817:in `call'
- rack (1.6.4) lib/rack/etag.rb:24:in `call'
- rack (1.6.4) lib/rack/conditionalget.rb:25:in `call'
- rack (1.6.4) lib/rack/head.rb:13:in `call'
- actionpack (4.2.5) lib/action_dispatch/middleware/params_parser.rb:27:in `call'
- actionpack (4.2.5) lib/action_dispatch/middleware/flash.rb:260:in `call'
- rack (1.6.4) lib/rack/session/abstract/id.rb:225:in `context'
- rack (1.6.4) lib/rack/session/abstract/id.rb:220:in `call'
- actionpack (4.2.5) lib/action_dispatch/middleware/cookies.rb:560:in `call'
- activerecord (4.2.5) lib/active_record/query_cache.rb:36:in `call'
- activerecord (4.2.5) lib/active_record/connection_adapters/abstract/connection_pool.rb:653:in `call'
- activerecord (4.2.5) lib/active_record/migration.rb:377:in `call'
- actionpack (4.2.5) lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'
- activesupport (4.2.5) lib/active_support/callbacks.rb:88:in `__run_callbacks__'
- activesupport (4.2.5) lib/active_support/callbacks.rb:778:in `_run_call_callbacks'
- activesupport (4.2.5) lib/active_support/callbacks.rb:81:in `run_callbacks'
- actionpack (4.2.5) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
- actionpack (4.2.5) lib/action_dispatch/middleware/reloader.rb:73:in `call'
- actionpack (4.2.5) lib/action_dispatch/middleware/remote_ip.rb:78:in `call'
- actionpack (4.2.5) lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'
- actionpack (4.2.5) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
- railties (4.2.5) lib/rails/rack/logger.rb:38:in `call_app'
- railties (4.2.5) lib/rails/rack/logger.rb:20:in `block in call'
- activesupport (4.2.5) lib/active_support/tagged_logging.rb:68:in `block in tagged'
- activesupport (4.2.5) lib/active_support/tagged_logging.rb:26:in `tagged'
- activesupport (4.2.5) lib/active_support/tagged_logging.rb:68:in `tagged'
- railties (4.2.5) lib/rails/rack/logger.rb:20:in `call'
- actionpack (4.2.5) lib/action_dispatch/middleware/request_id.rb:21:in `call'
- rack (1.6.4) lib/rack/methodoverride.rb:22:in `call'
- rack (1.6.4) lib/rack/runtime.rb:18:in `call'
- activesupport (4.2.5) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
- rack (1.6.4) lib/rack/lock.rb:17:in `call'
- actionpack (4.2.5) lib/action_dispatch/middleware/static.rb:116:in `call'
- rack (1.6.4) lib/rack/sendfile.rb:113:in `call'
- railties (4.2.5) lib/rails/engine.rb:518:in `call'
- railties (4.2.5) lib/rails/application.rb:165:in `call'
- rack (1.6.4) lib/rack/lock.rb:17:in `call'
- rack (1.6.4) lib/rack/content_length.rb:15:in `call'
- rack (1.6.4) lib/rack/handler/webrick.rb:88:in `service'
- /Users/jklina/.rbenv/versions/2.2.2/lib/ruby/2.2.0/webrick/httpserver.rb:138:in `service'
- /Users/jklina/.rbenv/versions/2.2.2/lib/ruby/2.2.0/webrick/httpserver.rb:94:in `run'
- /Users/jklina/.rbenv/versions/2.2.2/lib/ruby/2.2.0/webrick/server.rb:294:in `block in start_thread'
-
-
- Rendered /Users/jklina/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/actionpack-4.2.5/lib/action_dispatch/middleware/templates/rescues/_source.erb (12.9ms)
- Rendered /Users/jklina/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/actionpack-4.2.5/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (5.1ms)
- Rendered /Users/jklina/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/actionpack-4.2.5/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (2.1ms)
- Rendered /Users/jklina/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/actionpack-4.2.5/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb within rescues/layout (76.5ms)
-
-
-Started GET "/posts/test-title" for ::1 at 2016-03-09 10:41:29 -0500
-Processing by Exposition::PostsController#show as HTML
- Parameters: {"id"=>"test-title"}
- [1m[35mExposition::Post Load (1.3ms)[0m SELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 AND "exposition_posts"."slug" = $2 LIMIT 1 [["published", "t"], ["slug", "test-title"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application (32.3ms)
-Completed 200 OK in 780ms (Views: 776.1ms | ActiveRecord: 1.3ms)
-
-
-Started GET "/assets/exposition/application.self-a4451bd9952cffa298bc437ef0d7a70a0bd179bae6b179961a6f6dc0b15b7557.css?body=1" for ::1 at 2016-03-09 10:41:30 -0500
-
-
-Started GET "/assets/exposition/twitter-5ed7dd10b95665b5d9056ecdab697788dd8b2ce71cecb98972b70b7b27a93213.svg" for ::1 at 2016-03-09 10:41:30 -0500
-
-
-Started GET "/posts/test-title" for ::1 at 2016-03-09 10:41:42 -0500
-Processing by Exposition::PostsController#show as HTML
- Parameters: {"id"=>"test-title"}
- [1m[36mExposition::Post Load (0.8ms)[0m [1mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 AND "exposition_posts"."slug" = $2 LIMIT 1[0m [["published", "t"], ["slug", "test-title"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application (26.2ms)
-Completed 200 OK in 588ms (Views: 585.6ms | ActiveRecord: 0.8ms)
-
-
-Started GET "/assets/exposition/application.self-5b55adb8abd1219962976af272a6e05f79a94f51d0cb8405d4cc74dd4556565e.css?body=1" for ::1 at 2016-03-09 10:41:43 -0500
-
-
-Started GET "/assets/exposition/twitter-5ed7dd10b95665b5d9056ecdab697788dd8b2ce71cecb98972b70b7b27a93213.svg" for ::1 at 2016-03-09 10:41:43 -0500
-
-
-Started GET "/posts/test-title" for ::1 at 2016-03-09 10:42:19 -0500
-Processing by Exposition::PostsController#show as HTML
- Parameters: {"id"=>"test-title"}
- [1m[35mExposition::Post Load (0.7ms)[0m SELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 AND "exposition_posts"."slug" = $2 LIMIT 1 [["published", "t"], ["slug", "test-title"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application (25.8ms)
-Completed 200 OK in 577ms (Views: 574.4ms | ActiveRecord: 0.7ms)
-
-
-Started GET "/assets/exposition/twitter-5ed7dd10b95665b5d9056ecdab697788dd8b2ce71cecb98972b70b7b27a93213.svg" for ::1 at 2016-03-09 10:42:20 -0500
-
-
-Started GET "/assets/exposition/application.self-a62a7bf41ef12937bb298c7a80ad574afe343df4bff4a1c70dd4e597618171c0.css?body=1" for ::1 at 2016-03-09 10:42:20 -0500
-
-
-Started GET "/" for ::1 at 2016-03-09 10:42:21 -0500
-Processing by Exposition::PostsController#index as HTML
- [1m[36m (0.6ms)[0m [1mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT 10 OFFSET 0) subquery_for_count[0m [["published", "t"]]
- [1m[35mExposition::Post Load (0.9ms)[0m SELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT 10 OFFSET 0 [["published", "t"]]
- [1m[36mCategorical::Tag Exists (0.5ms)[0m [1mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT 1[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (1.7ms)
- [1m[35mCategorical::Tag Exists (0.4ms)[0m SELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT 1 [["taggable_id", 1], ["taggable_type", "Exposition::Post"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (1.2ms)
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml (10.6ms)
- [1m[36m (1.2ms)[0m [1mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", "t"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (23.5ms)
-Completed 200 OK in 52ms (Views: 47.9ms | ActiveRecord: 3.6ms)
-
-
-Started GET "/" for ::1 at 2016-03-09 10:42:28 -0500
-Processing by Exposition::PostsController#index as HTML
- [1m[35m (0.4ms)[0m SELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT 10 OFFSET 0) subquery_for_count [["published", "t"]]
- [1m[36mExposition::Post Load (0.5ms)[0m [1mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT 10 OFFSET 0[0m [["published", "t"]]
- [1m[35mCategorical::Tag Exists (0.5ms)[0m SELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT 1 [["taggable_id", 2], ["taggable_type", "Exposition::Post"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (1.5ms)
- [1m[36mCategorical::Tag Exists (0.4ms)[0m [1mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT 1[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (1.2ms)
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml (10.0ms)
- [1m[35m (0.3ms)[0m SELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 [["published", "t"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (18.8ms)
-Completed 200 OK in 44ms (Views: 40.6ms | ActiveRecord: 2.0ms)
-Started GET "/" for ::1 at 2016-06-10 13:16:28 -0400
-Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (4.7ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (3.2ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (6.3ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (61.7ms)
- [1m[36mCategorical::Tag Exists (0.8ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (2.0ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (133.0ms)
- [1m[35m (0.6ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (218.9ms)
-Completed 200 OK in 2282ms (Views: 2151.1ms | ActiveRecord: 69.8ms)
-
-
-Started GET "/assets/exposition/application.self-a62a7bf41ef12937bb298c7a80ad574afe343df4bff4a1c70dd4e597618171c0.css?body=1" for ::1 at 2016-06-10 13:16:31 -0400
-Started GET "/assets/exposition/twitter-5ed7dd10b95665b5d9056ecdab697788dd8b2ce71cecb98972b70b7b27a93213.svg" for ::1 at 2016-06-10 13:16:31 -0400
-Started GET "/" for ::1 at 2016-06-10 13:20:17 -0400
-Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (0.9ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (2.6ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (1.6ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (7.3ms)
- [1m[36mCategorical::Tag Exists (1.0ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (2.3ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (33.2ms)
- [1m[35m (0.6ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (78.1ms)
-Completed 500 Internal Server Error in 187ms (ActiveRecord: 6.7ms)
-
-
-ActionView::Template::Error (undefined local variable or method `page_description' for #<#<Class:0x007f9c0c1b3cf8>:0x007f9c0b4dc1b0>):
- 5: %meta{"http-equiv" => "x-ua-compatible", content: "ie=edge"}
- 6: %meta{:name => "viewport", :content => "width=device-width, initial-scale=1.0, maximum-scale=1.0"}
- 7: %meta{charset: "utf-8"}
- 8: %meta{name: "description", content: page_description}
- 9: %base{href: request.base_url}
- 10: = stylesheet_link_tag "exposition/application"
- 11: = csrf_meta_tags
+ActionView::Template::Error (undefined method `markdown_to_html' for #<#<Class:0x00007fcb10c48f50>:0x00007fcb0c1e6980>):
+ 3: .content.summary
+ 4: %h2= link_to(post.title, post)
+ 5: = preserve do
+ 6: = markdown_to_html(post.summary)
+ 7: %section.info
+ 8: = render 'exposition/posts/tags', tags: post.tags
-/Users/jklina/Development/exposition/app/views/layouts/exposition/application.html.haml:8:in `___sers_jklina__evelopment_exposition_app_views_layouts_exposition_application_html_haml___1285866276602022106_70154112931880'
-actionview (5.0.0.rc1) lib/action_view/template.rb:158:in `block in render'
-activesupport (5.0.0.rc1) lib/active_support/notifications.rb:166:in `instrument'
-actionview (5.0.0.rc1) lib/action_view/template.rb:348:in `instrument'
-actionview (5.0.0.rc1) lib/action_view/template.rb:156:in `render'
-actionview (5.0.0.rc1) lib/action_view/renderer/template_renderer.rb:66:in `render_with_layout'
-actionview (5.0.0.rc1) lib/action_view/renderer/template_renderer.rb:52:in `render_template'
-actionview (5.0.0.rc1) lib/action_view/renderer/template_renderer.rb:14:in `render'
-actionview (5.0.0.rc1) lib/action_view/renderer/renderer.rb:42:in `render_template'
-actionview (5.0.0.rc1) lib/action_view/renderer/renderer.rb:23:in `render'
-actionview (5.0.0.rc1) lib/action_view/rendering.rb:103:in `_render_template'
-actionpack (5.0.0.rc1) lib/action_controller/metal/streaming.rb:217:in `_render_template'
-actionview (5.0.0.rc1) lib/action_view/rendering.rb:83:in `render_to_body'
-actionpack (5.0.0.rc1) lib/action_controller/metal/rendering.rb:52:in `render_to_body'
-actionpack (5.0.0.rc1) lib/action_controller/metal/renderers.rb:144:in `render_to_body'
-actionpack (5.0.0.rc1) lib/abstract_controller/rendering.rb:26:in `render'
-actionpack (5.0.0.rc1) lib/action_controller/metal/rendering.rb:36:in `render'
-actionpack (5.0.0.rc1) lib/action_controller/metal/instrumentation.rb:44:in `block (2 levels) in render'
-activesupport (5.0.0.rc1) lib/active_support/core_ext/benchmark.rb:12:in `block in ms'
-/Users/jklina/.rbenv/versions/2.2.2/lib/ruby/2.2.0/benchmark.rb:303:in `realtime'
-activesupport (5.0.0.rc1) lib/active_support/core_ext/benchmark.rb:12:in `ms'
-actionpack (5.0.0.rc1) lib/action_controller/metal/instrumentation.rb:44:in `block in render'
-actionpack (5.0.0.rc1) lib/action_controller/metal/instrumentation.rb:87:in `cleanup_view_runtime'
-activerecord (5.0.0.rc1) lib/active_record/railties/controller_runtime.rb:25:in `cleanup_view_runtime'
-actionpack (5.0.0.rc1) lib/action_controller/metal/instrumentation.rb:43:in `render'
-actionpack (5.0.0.rc1) lib/action_controller/metal/implicit_render.rb:36:in `default_render'
-actionpack (5.0.0.rc1) lib/action_controller/metal/basic_implicit_render.rb:4:in `block in send_action'
-actionpack (5.0.0.rc1) lib/action_controller/metal/basic_implicit_render.rb:4:in `tap'
-actionpack (5.0.0.rc1) lib/action_controller/metal/basic_implicit_render.rb:4:in `send_action'
-actionpack (5.0.0.rc1) lib/abstract_controller/base.rb:181:in `process_action'
-actionpack (5.0.0.rc1) lib/action_controller/metal/rendering.rb:30:in `process_action'
-actionpack (5.0.0.rc1) lib/abstract_controller/callbacks.rb:20:in `block in process_action'
-activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:126:in `call'
-activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:126:in `call'
-activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:506:in `block (2 levels) in compile'
-activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:455:in `call'
-activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:455:in `call'
-activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:101:in `__run_callbacks__'
-activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:750:in `_run_process_action_callbacks'
-activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:90:in `run_callbacks'
-actionpack (5.0.0.rc1) lib/abstract_controller/callbacks.rb:19:in `process_action'
-actionpack (5.0.0.rc1) lib/action_controller/metal/rescue.rb:31:in `process_action'
-actionpack (5.0.0.rc1) lib/action_controller/metal/instrumentation.rb:32:in `block in process_action'
-activesupport (5.0.0.rc1) lib/active_support/notifications.rb:164:in `block in instrument'
-activesupport (5.0.0.rc1) lib/active_support/notifications/instrumenter.rb:21:in `instrument'
-activesupport (5.0.0.rc1) lib/active_support/notifications.rb:164:in `instrument'
-actionpack (5.0.0.rc1) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
-actionpack (5.0.0.rc1) lib/action_controller/metal/params_wrapper.rb:248:in `process_action'
-activerecord (5.0.0.rc1) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
-actionpack (5.0.0.rc1) lib/abstract_controller/base.rb:126:in `process'
-actionview (5.0.0.rc1) lib/action_view/rendering.rb:30:in `process'
-actionpack (5.0.0.rc1) lib/action_controller/metal.rb:190:in `dispatch'
-actionpack (5.0.0.rc1) lib/action_controller/metal.rb:262:in `dispatch'
-actionpack (5.0.0.rc1) lib/action_dispatch/routing/route_set.rb:50:in `dispatch'
-actionpack (5.0.0.rc1) lib/action_dispatch/routing/route_set.rb:32:in `serve'
-actionpack (5.0.0.rc1) lib/action_dispatch/journey/router.rb:39:in `block in serve'
-actionpack (5.0.0.rc1) lib/action_dispatch/journey/router.rb:26:in `each'
-actionpack (5.0.0.rc1) lib/action_dispatch/journey/router.rb:26:in `serve'
-actionpack (5.0.0.rc1) lib/action_dispatch/routing/route_set.rb:725:in `call'
-railties (5.0.0.rc1) lib/rails/engine.rb:522:in `call'
-railties (5.0.0.rc1) lib/rails/railtie.rb:193:in `public_send'
-railties (5.0.0.rc1) lib/rails/railtie.rb:193:in `method_missing'
-actionpack (5.0.0.rc1) lib/action_dispatch/routing/mapper.rb:17:in `block in <class:Constraints>'
-actionpack (5.0.0.rc1) lib/action_dispatch/routing/mapper.rb:46:in `call'
-actionpack (5.0.0.rc1) lib/action_dispatch/routing/mapper.rb:46:in `serve'
-actionpack (5.0.0.rc1) lib/action_dispatch/journey/router.rb:39:in `block in serve'
-actionpack (5.0.0.rc1) lib/action_dispatch/journey/router.rb:26:in `each'
-actionpack (5.0.0.rc1) lib/action_dispatch/journey/router.rb:26:in `serve'
-actionpack (5.0.0.rc1) lib/action_dispatch/routing/route_set.rb:725:in `call'
-actionview (5.0.0.rc1) lib/action_view/digestor.rb:12:in `call'
-rack (2.0.0.rc1) lib/rack/etag.rb:25:in `call'
-rack (2.0.0.rc1) lib/rack/conditional_get.rb:25:in `call'
-rack (2.0.0.rc1) lib/rack/head.rb:12:in `call'
-rack (2.0.0.rc1) lib/rack/session/abstract/id.rb:222:in `context'
-rack (2.0.0.rc1) lib/rack/session/abstract/id.rb:216:in `call'
-actionpack (5.0.0.rc1) lib/action_dispatch/middleware/cookies.rb:613:in `call'
-activerecord (5.0.0.rc1) lib/active_record/migration.rb:552:in `call'
-actionpack (5.0.0.rc1) lib/action_dispatch/middleware/callbacks.rb:38:in `block in call'
-activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:97:in `__run_callbacks__'
-activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:750:in `_run_call_callbacks'
-activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:90:in `run_callbacks'
-actionpack (5.0.0.rc1) lib/action_dispatch/middleware/callbacks.rb:36:in `call'
-actionpack (5.0.0.rc1) lib/action_dispatch/middleware/executor.rb:12:in `call'
-actionpack (5.0.0.rc1) lib/action_dispatch/middleware/remote_ip.rb:79:in `call'
-actionpack (5.0.0.rc1) lib/action_dispatch/middleware/debug_exceptions.rb:49:in `call'
-actionpack (5.0.0.rc1) lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'
-railties (5.0.0.rc1) lib/rails/rack/logger.rb:36:in `call_app'
-railties (5.0.0.rc1) lib/rails/rack/logger.rb:24:in `block in call'
-activesupport (5.0.0.rc1) lib/active_support/tagged_logging.rb:70:in `block in tagged'
-activesupport (5.0.0.rc1) lib/active_support/tagged_logging.rb:26:in `tagged'
-activesupport (5.0.0.rc1) lib/active_support/tagged_logging.rb:70:in `tagged'
-railties (5.0.0.rc1) lib/rails/rack/logger.rb:24:in `call'
-actionpack (5.0.0.rc1) lib/action_dispatch/middleware/request_id.rb:24:in `call'
-rack (2.0.0.rc1) lib/rack/method_override.rb:22:in `call'
-rack (2.0.0.rc1) lib/rack/runtime.rb:22:in `call'
-activesupport (5.0.0.rc1) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
-actionpack (5.0.0.rc1) lib/action_dispatch/middleware/executor.rb:12:in `call'
-actionpack (5.0.0.rc1) lib/action_dispatch/middleware/static.rb:136:in `call'
-rack (2.0.0.rc1) lib/rack/sendfile.rb:111:in `call'
-railties (5.0.0.rc1) lib/rails/engine.rb:522:in `call'
-rack (2.0.0.rc1) lib/rack/handler/webrick.rb:86:in `service'
-/Users/jklina/.rbenv/versions/2.2.2/lib/ruby/2.2.0/webrick/httpserver.rb:138:in `service'
-/Users/jklina/.rbenv/versions/2.2.2/lib/ruby/2.2.0/webrick/httpserver.rb:94:in `run'
-/Users/jklina/.rbenv/versions/2.2.2/lib/ruby/2.2.0/webrick/server.rb:294:in `block in start_thread'
- Rendering /Users/jklina/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb within rescues/layout
- Rendering /Users/jklina/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_source.html.erb
- Rendered /Users/jklina/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (7.3ms)
- Rendering /Users/jklina/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb
- Rendered /Users/jklina/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (3.3ms)
- Rendering /Users/jklina/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb
- Rendered /Users/jklina/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (3.2ms)
- Rendered /Users/jklina/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb within rescues/layout (92.9ms)
-Started GET "/" for ::1 at 2016-06-10 13:47:07 -0400
-Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (1.4ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (2.2ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (1.4ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (6.8ms)
- [1m[36mCategorical::Tag Exists (0.8ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (1.9ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (44.4ms)
- [1m[35m (0.6ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (85.7ms)
-Completed 200 OK in 179ms (Views: 142.9ms | ActiveRecord: 6.4ms)
-
-
-Started GET "/" for ::1 at 2016-06-10 13:47:37 -0400
-Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (0.7ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (0.8ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (1.2ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (7.0ms)
- [1m[36mCategorical::Tag Exists (1.2ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (2.4ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (27.8ms)
- [1m[35m (0.5ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (51.3ms)
-Completed 200 OK in 156ms (Views: 142.3ms | ActiveRecord: 4.4ms)
-
-
-Started GET "/" for ::1 at 2016-06-10 13:47:42 -0400
-Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (5.3ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (3.6ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (3.2ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (7.7ms)
- [1m[36mCategorical::Tag Exists (0.8ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (2.2ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (21.1ms)
- [1m[35m (0.8ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (54.3ms)
-Completed 200 OK in 97ms (Views: 78.6ms | ActiveRecord: 13.7ms)
-
-
-Started GET "/" for ::1 at 2016-06-10 13:47:47 -0400
-Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (0.6ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (0.8ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (0.8ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (4.7ms)
- [1m[36mCategorical::Tag Exists (0.8ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (2.8ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (25.0ms)
- [1m[35m (0.6ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (43.7ms)
-Completed 200 OK in 101ms (Views: 92.6ms | ActiveRecord: 3.7ms)
-
-
-Started GET "/" for ::1 at 2016-06-10 13:47:48 -0400
-Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (0.7ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (0.8ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (0.8ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (6.0ms)
- [1m[36mCategorical::Tag Exists (1.0ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (3.8ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (25.4ms)
- [1m[35m (0.5ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (43.8ms)
-Completed 200 OK in 104ms (Views: 96.4ms | ActiveRecord: 3.8ms)
-
-
-Started GET "/" for ::1 at 2016-06-10 13:48:34 -0400
-Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (0.7ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (1.0ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (1.1ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (9.3ms)
- [1m[36mCategorical::Tag Exists (0.8ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (1.9ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (36.5ms)
- [1m[35m (0.5ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (73.4ms)
-Completed 200 OK in 153ms (Views: 97.4ms | ActiveRecord: 41.6ms)
-
-
-Started GET "/posts/another-test" for ::1 at 2016-06-11 14:02:22 -0400
-Processing by Exposition::PostsController#show as HTML
- Parameters: {"id"=>"another-test"}
- [1m[36mExposition::Post Load (3.7ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 AND "exposition_posts"."slug" = $2 LIMIT $3[0m [["published", true], ["slug", "another-test"], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application (7.3ms)
-Completed 200 OK in 212ms (Views: 134.3ms | ActiveRecord: 3.7ms)
-
-
-Started GET "/posts/another-test" for ::1 at 2016-06-11 14:03:48 -0400
-Processing by Exposition::PostsController#show as HTML
- Parameters: {"id"=>"another-test"}
- [1m[36mExposition::Post Load (1.5ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 AND "exposition_posts"."slug" = $2 LIMIT $3[0m [["published", true], ["slug", "another-test"], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application (22.2ms)
-Completed 500 Internal Server Error in 38ms (ActiveRecord: 1.5ms)
-
-
+/Users/joshuaklina/Development/exposition/app/views/exposition/posts/_post.html.haml:6
+haml (5.1.2) lib/haml/helpers.rb:379:in `block in capture_haml'
+haml (5.1.2) lib/haml/helpers.rb:664:in `with_haml_buffer'
+haml (5.1.2) lib/haml/helpers.rb:375:in `capture_haml'
+haml (5.1.2) lib/haml/helpers/xss_mods.rb:63:in `capture_haml_with_haml_xss'
+haml (5.1.2) lib/haml/helpers.rb:134:in `preserve'
+haml (5.1.2) lib/haml/helpers/xss_mods.rb:34:in `preserve_with_haml_xss'
+/Users/joshuaklina/Development/exposition/app/views/exposition/posts/_post.html.haml:5
+actionview (6.0.2.1) lib/action_view/base.rb:274:in `_run'
+actionview (6.0.2.1) lib/action_view/template.rb:185:in `block in render'
+activesupport (6.0.2.1) lib/active_support/notifications.rb:182:in `instrument'
+actionview (6.0.2.1) lib/action_view/template.rb:386:in `instrument_render_template'
+actionview (6.0.2.1) lib/action_view/template.rb:183:in `render'
+actionview (6.0.2.1) lib/action_view/renderer/partial_renderer.rb:452:in `block in collection_with_template'
+actionview (6.0.2.1) lib/action_view/renderer/partial_renderer.rb:448:in `map'
+actionview (6.0.2.1) lib/action_view/renderer/partial_renderer.rb:448:in `collection_with_template'
+activerecord (6.0.2.1) lib/active_record/railties/collection_cache_association_loading.rb:30:in `collection_with_template'
+actionview (6.0.2.1) lib/action_view/renderer/partial_renderer.rb:337:in `block (2 levels) in render_collection'
+actionview (6.0.2.1) lib/action_view/renderer/partial_renderer/collection_caching.rb:15:in `cache_collection_render'
+actionview (6.0.2.1) lib/action_view/renderer/partial_renderer.rb:336:in `block in render_collection'
+actionview (6.0.2.1) lib/action_view/renderer/abstract_renderer.rb:89:in `block in instrument'
+activesupport (6.0.2.1) lib/active_support/notifications.rb:180:in `block in instrument'
+activesupport (6.0.2.1) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
+activesupport (6.0.2.1) lib/active_support/notifications.rb:180:in `instrument'
+actionview (6.0.2.1) lib/action_view/renderer/abstract_renderer.rb:88:in `instrument'
+actionview (6.0.2.1) lib/action_view/renderer/partial_renderer.rb:325:in `render_collection'
+actionview (6.0.2.1) lib/action_view/renderer/partial_renderer.rb:315:in `render'
+actionview (6.0.2.1) lib/action_view/renderer/renderer.rb:65:in `render_partial_to_object'
+actionview (6.0.2.1) lib/action_view/renderer/renderer.rb:53:in `render_partial'
+actionview (6.0.2.1) lib/action_view/helpers/rendering_helper.rb:38:in `render'
+haml (5.1.2) lib/haml/helpers/action_view_mods.rb:13:in `block in render'
+haml (5.1.2) lib/haml/helpers.rb:93:in `non_haml'
+haml (5.1.2) lib/haml/helpers/action_view_mods.rb:13:in `render'
+/Users/joshuaklina/Development/exposition/app/views/exposition/posts/index.html.haml:3
+actionview (6.0.2.1) lib/action_view/base.rb:274:in `_run'
+actionview (6.0.2.1) lib/action_view/template.rb:185:in `block in render'
+activesupport (6.0.2.1) lib/active_support/notifications.rb:182:in `instrument'
+actionview (6.0.2.1) lib/action_view/template.rb:386:in `instrument_render_template'
+actionview (6.0.2.1) lib/action_view/template.rb:183:in `render'
+actionview (6.0.2.1) lib/action_view/renderer/template_renderer.rb:59:in `block (2 levels) in render_template'
+actionview (6.0.2.1) lib/action_view/renderer/abstract_renderer.rb:89:in `block in instrument'
+activesupport (6.0.2.1) lib/active_support/notifications.rb:180:in `block in instrument'
+activesupport (6.0.2.1) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
+activesupport (6.0.2.1) lib/active_support/notifications.rb:180:in `instrument'
+actionview (6.0.2.1) lib/action_view/renderer/abstract_renderer.rb:88:in `instrument'
+actionview (6.0.2.1) lib/action_view/renderer/template_renderer.rb:58:in `block in render_template'
+actionview (6.0.2.1) lib/action_view/renderer/template_renderer.rb:66:in `render_with_layout'
+actionview (6.0.2.1) lib/action_view/renderer/template_renderer.rb:57:in `render_template'
+actionview (6.0.2.1) lib/action_view/renderer/template_renderer.rb:13:in `render'
+actionview (6.0.2.1) lib/action_view/renderer/renderer.rb:61:in `render_template_to_object'
+actionview (6.0.2.1) lib/action_view/renderer/renderer.rb:29:in `render_to_object'
+actionview (6.0.2.1) lib/action_view/rendering.rb:118:in `block in _render_template'
+actionview (6.0.2.1) lib/action_view/base.rb:304:in `in_rendering_context'
+actionview (6.0.2.1) lib/action_view/rendering.rb:117:in `_render_template'
+actionpack (6.0.2.1) lib/action_controller/metal/streaming.rb:219:in `_render_template'
+actionview (6.0.2.1) lib/action_view/rendering.rb:103:in `render_to_body'
+actionpack (6.0.2.1) lib/action_controller/metal/rendering.rb:52:in `render_to_body'
+actionpack (6.0.2.1) lib/action_controller/metal/renderers.rb:142:in `render_to_body'
+actionpack (6.0.2.1) lib/abstract_controller/rendering.rb:25:in `render'
+actionpack (6.0.2.1) lib/action_controller/metal/rendering.rb:36:in `render'
+actionpack (6.0.2.1) lib/action_controller/metal/instrumentation.rb:44:in `block (2 levels) in render'
+activesupport (6.0.2.1) lib/active_support/core_ext/benchmark.rb:14:in `block in ms'
+/Users/joshuaklina/.rbenv/versions/2.5.3/lib/ruby/2.5.0/benchmark.rb:308:in `realtime'
+activesupport (6.0.2.1) lib/active_support/core_ext/benchmark.rb:14:in `ms'
+actionpack (6.0.2.1) lib/action_controller/metal/instrumentation.rb:44:in `block in render'
+actionpack (6.0.2.1) lib/action_controller/metal/instrumentation.rb:85:in `cleanup_view_runtime'
+activerecord (6.0.2.1) lib/active_record/railties/controller_runtime.rb:34:in `cleanup_view_runtime'
+actionpack (6.0.2.1) lib/action_controller/metal/instrumentation.rb:43:in `render'
+actionpack (6.0.2.1) lib/action_controller/metal/implicit_render.rb:35:in `default_render'
+actionpack (6.0.2.1) lib/action_controller/metal/basic_implicit_render.rb:6:in `block in send_action'
+actionpack (6.0.2.1) lib/action_controller/metal/basic_implicit_render.rb:6:in `tap'
+actionpack (6.0.2.1) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
+actionpack (6.0.2.1) lib/abstract_controller/base.rb:196:in `process_action'
+actionpack (6.0.2.1) lib/action_controller/metal/rendering.rb:30:in `process_action'
+actionpack (6.0.2.1) lib/abstract_controller/callbacks.rb:42:in `block in process_action'
+activesupport (6.0.2.1) lib/active_support/callbacks.rb:135:in `run_callbacks'
+actionpack (6.0.2.1) lib/abstract_controller/callbacks.rb:41:in `process_action'
+actionpack (6.0.2.1) lib/action_controller/metal/rescue.rb:22:in `process_action'
+actionpack (6.0.2.1) lib/action_controller/metal/instrumentation.rb:33:in `block in process_action'
+activesupport (6.0.2.1) lib/active_support/notifications.rb:180:in `block in instrument'
+activesupport (6.0.2.1) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
+activesupport (6.0.2.1) lib/active_support/notifications.rb:180:in `instrument'
+actionpack (6.0.2.1) lib/action_controller/metal/instrumentation.rb:32:in `process_action'
+actionpack (6.0.2.1) lib/action_controller/metal/params_wrapper.rb:245:in `process_action'
+activerecord (6.0.2.1) lib/active_record/railties/controller_runtime.rb:27:in `process_action'
+actionpack (6.0.2.1) lib/abstract_controller/base.rb:136:in `process'
+actionview (6.0.2.1) lib/action_view/rendering.rb:39:in `process'
+actionpack (6.0.2.1) lib/action_controller/metal.rb:191:in `dispatch'
+actionpack (6.0.2.1) lib/action_controller/metal.rb:252:in `dispatch'
+actionpack (6.0.2.1) lib/action_dispatch/routing/route_set.rb:51:in `dispatch'
+actionpack (6.0.2.1) lib/action_dispatch/routing/route_set.rb:33:in `serve'
+actionpack (6.0.2.1) lib/action_dispatch/journey/router.rb:49:in `block in serve'
+actionpack (6.0.2.1) lib/action_dispatch/journey/router.rb:32:in `each'
+actionpack (6.0.2.1) lib/action_dispatch/journey/router.rb:32:in `serve'
+actionpack (6.0.2.1) lib/action_dispatch/routing/route_set.rb:837:in `call'
+railties (6.0.2.1) lib/rails/engine.rb:526:in `call'
+railties (6.0.2.1) lib/rails/railtie.rb:190:in `public_send'
+railties (6.0.2.1) lib/rails/railtie.rb:190:in `method_missing'
+actionpack (6.0.2.1) lib/action_dispatch/routing/mapper.rb:19:in `block in <class:Constraints>'
+actionpack (6.0.2.1) lib/action_dispatch/routing/mapper.rb:48:in `serve'
+actionpack (6.0.2.1) lib/action_dispatch/journey/router.rb:49:in `block in serve'
+actionpack (6.0.2.1) lib/action_dispatch/journey/router.rb:32:in `each'
+actionpack (6.0.2.1) lib/action_dispatch/journey/router.rb:32:in `serve'
+actionpack (6.0.2.1) lib/action_dispatch/routing/route_set.rb:837:in `call'
+rack (2.0.8) lib/rack/tempfile_reaper.rb:15:in `call'
+rack (2.0.8) lib/rack/etag.rb:25:in `call'
+rack (2.0.8) lib/rack/conditional_get.rb:25:in `call'
+rack (2.0.8) lib/rack/head.rb:12:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/http/content_security_policy.rb:18:in `call'
+rack (2.0.8) lib/rack/session/abstract/id.rb:259:in `context'
+rack (2.0.8) lib/rack/session/abstract/id.rb:253:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/cookies.rb:648:in `call'
+activerecord (6.0.2.1) lib/active_record/migration.rb:567:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
+activesupport (6.0.2.1) lib/active_support/callbacks.rb:101:in `run_callbacks'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/executor.rb:14:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/actionable_exceptions.rb:17:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:32:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
+railties (6.0.2.1) lib/rails/rack/logger.rb:38:in `call_app'
+railties (6.0.2.1) lib/rails/rack/logger.rb:26:in `block in call'
+activesupport (6.0.2.1) lib/active_support/tagged_logging.rb:80:in `block in tagged'
+activesupport (6.0.2.1) lib/active_support/tagged_logging.rb:28:in `tagged'
+activesupport (6.0.2.1) lib/active_support/tagged_logging.rb:80:in `tagged'
+railties (6.0.2.1) lib/rails/rack/logger.rb:26:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/request_id.rb:27:in `call'
+rack (2.0.8) lib/rack/method_override.rb:22:in `call'
+rack (2.0.8) lib/rack/runtime.rb:22:in `call'
+activesupport (6.0.2.1) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/executor.rb:14:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/static.rb:126:in `call'
+rack (2.0.8) lib/rack/sendfile.rb:111:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/host_authorization.rb:83:in `call'
+railties (6.0.2.1) lib/rails/engine.rb:526:in `call'
+rack (2.0.8) lib/rack/handler/webrick.rb:86:in `service'
+/Users/joshuaklina/.rbenv/versions/2.5.3/lib/ruby/2.5.0/webrick/httpserver.rb:140:in `service'
+/Users/joshuaklina/.rbenv/versions/2.5.3/lib/ruby/2.5.0/webrick/httpserver.rb:96:in `run'
+/Users/joshuaklina/.rbenv/versions/2.5.3/lib/ruby/2.5.0/webrick/server.rb:307:in `block in start_thread'
+Started GET "/admin" for ::1 at 2020-01-02 21:29:49 -0700
-ActionView::Template::Error (undefined method `page_description' for #<#<Class:0x007f9c1332fa58>:0x007f9c1215aaf8>):
- 1: - title(@post.title)
- 2: - page_description(@post.summary)
- 3: %article.post
- 4: %section.content
- 5: %h2= @post.title
+ActionController::RoutingError (No route matches [GET] "/admin"):
-/Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml:2:in `___sers_jklina__evelopment_exposition_app_views_exposition_posts_show_html_haml__4567656514483079070_70154147519080'
-actionview (5.0.0.rc1) lib/action_view/template.rb:158:in `block in render'
-activesupport (5.0.0.rc1) lib/active_support/notifications.rb:166:in `instrument'
-actionview (5.0.0.rc1) lib/action_view/template.rb:348:in `instrument'
-actionview (5.0.0.rc1) lib/action_view/template.rb:156:in `render'
-actionview (5.0.0.rc1) lib/action_view/renderer/template_renderer.rb:54:in `block (2 levels) in render_template'
-actionview (5.0.0.rc1) lib/action_view/renderer/abstract_renderer.rb:42:in `block in instrument'
-activesupport (5.0.0.rc1) lib/active_support/notifications.rb:164:in `block in instrument'
-activesupport (5.0.0.rc1) lib/active_support/notifications/instrumenter.rb:21:in `instrument'
-activesupport (5.0.0.rc1) lib/active_support/notifications.rb:164:in `instrument'
-actionview (5.0.0.rc1) lib/action_view/renderer/abstract_renderer.rb:41:in `instrument'
-actionview (5.0.0.rc1) lib/action_view/renderer/template_renderer.rb:53:in `block in render_template'
-actionview (5.0.0.rc1) lib/action_view/renderer/template_renderer.rb:61:in `render_with_layout'
-actionview (5.0.0.rc1) lib/action_view/renderer/template_renderer.rb:52:in `render_template'
-actionview (5.0.0.rc1) lib/action_view/renderer/template_renderer.rb:14:in `render'
-actionview (5.0.0.rc1) lib/action_view/renderer/renderer.rb:42:in `render_template'
-actionview (5.0.0.rc1) lib/action_view/renderer/renderer.rb:23:in `render'
-actionview (5.0.0.rc1) lib/action_view/rendering.rb:103:in `_render_template'
-actionpack (5.0.0.rc1) lib/action_controller/metal/streaming.rb:217:in `_render_template'
-actionview (5.0.0.rc1) lib/action_view/rendering.rb:83:in `render_to_body'
-actionpack (5.0.0.rc1) lib/action_controller/metal/rendering.rb:52:in `render_to_body'
-actionpack (5.0.0.rc1) lib/action_controller/metal/renderers.rb:144:in `render_to_body'
-actionpack (5.0.0.rc1) lib/abstract_controller/rendering.rb:26:in `render'
-actionpack (5.0.0.rc1) lib/action_controller/metal/rendering.rb:36:in `render'
-actionpack (5.0.0.rc1) lib/action_controller/metal/instrumentation.rb:44:in `block (2 levels) in render'
-activesupport (5.0.0.rc1) lib/active_support/core_ext/benchmark.rb:12:in `block in ms'
-/Users/jklina/.rbenv/versions/2.2.2/lib/ruby/2.2.0/benchmark.rb:303:in `realtime'
-activesupport (5.0.0.rc1) lib/active_support/core_ext/benchmark.rb:12:in `ms'
-actionpack (5.0.0.rc1) lib/action_controller/metal/instrumentation.rb:44:in `block in render'
-actionpack (5.0.0.rc1) lib/action_controller/metal/instrumentation.rb:87:in `cleanup_view_runtime'
-activerecord (5.0.0.rc1) lib/active_record/railties/controller_runtime.rb:25:in `cleanup_view_runtime'
-actionpack (5.0.0.rc1) lib/action_controller/metal/instrumentation.rb:43:in `render'
-actionpack (5.0.0.rc1) lib/action_controller/metal/implicit_render.rb:36:in `default_render'
-actionpack (5.0.0.rc1) lib/action_controller/metal/basic_implicit_render.rb:4:in `block in send_action'
-actionpack (5.0.0.rc1) lib/action_controller/metal/basic_implicit_render.rb:4:in `tap'
-actionpack (5.0.0.rc1) lib/action_controller/metal/basic_implicit_render.rb:4:in `send_action'
-actionpack (5.0.0.rc1) lib/abstract_controller/base.rb:181:in `process_action'
-actionpack (5.0.0.rc1) lib/action_controller/metal/rendering.rb:30:in `process_action'
-actionpack (5.0.0.rc1) lib/abstract_controller/callbacks.rb:20:in `block in process_action'
-activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:126:in `call'
-activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:126:in `call'
-activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:506:in `block (2 levels) in compile'
-activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:455:in `call'
-activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:455:in `call'
-activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:101:in `__run_callbacks__'
-activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:750:in `_run_process_action_callbacks'
-activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:90:in `run_callbacks'
-actionpack (5.0.0.rc1) lib/abstract_controller/callbacks.rb:19:in `process_action'
-actionpack (5.0.0.rc1) lib/action_controller/metal/rescue.rb:31:in `process_action'
-actionpack (5.0.0.rc1) lib/action_controller/metal/instrumentation.rb:32:in `block in process_action'
-activesupport (5.0.0.rc1) lib/active_support/notifications.rb:164:in `block in instrument'
-activesupport (5.0.0.rc1) lib/active_support/notifications/instrumenter.rb:21:in `instrument'
-activesupport (5.0.0.rc1) lib/active_support/notifications.rb:164:in `instrument'
-actionpack (5.0.0.rc1) lib/action_controller/metal/instrumentation.rb:30:in `process_action'
-actionpack (5.0.0.rc1) lib/action_controller/metal/params_wrapper.rb:248:in `process_action'
-activerecord (5.0.0.rc1) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
-actionpack (5.0.0.rc1) lib/abstract_controller/base.rb:126:in `process'
-actionview (5.0.0.rc1) lib/action_view/rendering.rb:30:in `process'
-actionpack (5.0.0.rc1) lib/action_controller/metal.rb:190:in `dispatch'
-actionpack (5.0.0.rc1) lib/action_controller/metal.rb:262:in `dispatch'
-actionpack (5.0.0.rc1) lib/action_dispatch/routing/route_set.rb:50:in `dispatch'
-actionpack (5.0.0.rc1) lib/action_dispatch/routing/route_set.rb:32:in `serve'
-actionpack (5.0.0.rc1) lib/action_dispatch/journey/router.rb:39:in `block in serve'
-actionpack (5.0.0.rc1) lib/action_dispatch/journey/router.rb:26:in `each'
-actionpack (5.0.0.rc1) lib/action_dispatch/journey/router.rb:26:in `serve'
-actionpack (5.0.0.rc1) lib/action_dispatch/routing/route_set.rb:725:in `call'
-railties (5.0.0.rc1) lib/rails/engine.rb:522:in `call'
-railties (5.0.0.rc1) lib/rails/railtie.rb:193:in `public_send'
-railties (5.0.0.rc1) lib/rails/railtie.rb:193:in `method_missing'
-actionpack (5.0.0.rc1) lib/action_dispatch/routing/mapper.rb:17:in `block in <class:Constraints>'
-actionpack (5.0.0.rc1) lib/action_dispatch/routing/mapper.rb:46:in `call'
-actionpack (5.0.0.rc1) lib/action_dispatch/routing/mapper.rb:46:in `serve'
-actionpack (5.0.0.rc1) lib/action_dispatch/journey/router.rb:39:in `block in serve'
-actionpack (5.0.0.rc1) lib/action_dispatch/journey/router.rb:26:in `each'
-actionpack (5.0.0.rc1) lib/action_dispatch/journey/router.rb:26:in `serve'
-actionpack (5.0.0.rc1) lib/action_dispatch/routing/route_set.rb:725:in `call'
-actionview (5.0.0.rc1) lib/action_view/digestor.rb:12:in `call'
-rack (2.0.0.rc1) lib/rack/etag.rb:25:in `call'
-rack (2.0.0.rc1) lib/rack/conditional_get.rb:25:in `call'
-rack (2.0.0.rc1) lib/rack/head.rb:12:in `call'
-rack (2.0.0.rc1) lib/rack/session/abstract/id.rb:222:in `context'
-rack (2.0.0.rc1) lib/rack/session/abstract/id.rb:216:in `call'
-actionpack (5.0.0.rc1) lib/action_dispatch/middleware/cookies.rb:613:in `call'
-activerecord (5.0.0.rc1) lib/active_record/migration.rb:552:in `call'
-actionpack (5.0.0.rc1) lib/action_dispatch/middleware/callbacks.rb:38:in `block in call'
-activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:97:in `__run_callbacks__'
-activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:750:in `_run_call_callbacks'
-activesupport (5.0.0.rc1) lib/active_support/callbacks.rb:90:in `run_callbacks'
-actionpack (5.0.0.rc1) lib/action_dispatch/middleware/callbacks.rb:36:in `call'
-actionpack (5.0.0.rc1) lib/action_dispatch/middleware/executor.rb:12:in `call'
-actionpack (5.0.0.rc1) lib/action_dispatch/middleware/remote_ip.rb:79:in `call'
-actionpack (5.0.0.rc1) lib/action_dispatch/middleware/debug_exceptions.rb:49:in `call'
-actionpack (5.0.0.rc1) lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'
-railties (5.0.0.rc1) lib/rails/rack/logger.rb:36:in `call_app'
-railties (5.0.0.rc1) lib/rails/rack/logger.rb:24:in `block in call'
-activesupport (5.0.0.rc1) lib/active_support/tagged_logging.rb:70:in `block in tagged'
-activesupport (5.0.0.rc1) lib/active_support/tagged_logging.rb:26:in `tagged'
-activesupport (5.0.0.rc1) lib/active_support/tagged_logging.rb:70:in `tagged'
-railties (5.0.0.rc1) lib/rails/rack/logger.rb:24:in `call'
-actionpack (5.0.0.rc1) lib/action_dispatch/middleware/request_id.rb:24:in `call'
-rack (2.0.0.rc1) lib/rack/method_override.rb:22:in `call'
-rack (2.0.0.rc1) lib/rack/runtime.rb:22:in `call'
-activesupport (5.0.0.rc1) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
-actionpack (5.0.0.rc1) lib/action_dispatch/middleware/executor.rb:12:in `call'
-actionpack (5.0.0.rc1) lib/action_dispatch/middleware/static.rb:136:in `call'
-rack (2.0.0.rc1) lib/rack/sendfile.rb:111:in `call'
-railties (5.0.0.rc1) lib/rails/engine.rb:522:in `call'
-rack (2.0.0.rc1) lib/rack/handler/webrick.rb:86:in `service'
-/Users/jklina/.rbenv/versions/2.2.2/lib/ruby/2.2.0/webrick/httpserver.rb:138:in `service'
-/Users/jklina/.rbenv/versions/2.2.2/lib/ruby/2.2.0/webrick/httpserver.rb:94:in `run'
-/Users/jklina/.rbenv/versions/2.2.2/lib/ruby/2.2.0/webrick/server.rb:294:in `block in start_thread'
- Rendering /Users/jklina/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb within rescues/layout
- Rendering /Users/jklina/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_source.html.erb
- Rendered /Users/jklina/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (8.6ms)
- Rendering /Users/jklina/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb
- Rendered /Users/jklina/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (4.1ms)
- Rendering /Users/jklina/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb
- Rendered /Users/jklina/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (2.0ms)
- Rendered /Users/jklina/.rbenv/versions/2.2.2/lib/ruby/gems/2.2.0/gems/actionpack-5.0.0.rc1/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb within rescues/layout (88.7ms)
-Started GET "/posts/another-test" for ::1 at 2016-06-11 14:08:14 -0400
-Processing by Exposition::PostsController#show as HTML
- Parameters: {"id"=>"another-test"}
- [1m[36mExposition::Post Load (1.2ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 AND "exposition_posts"."slug" = $2 LIMIT $3[0m [["published", true], ["slug", "another-test"], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application (5.7ms)
-Completed 200 OK in 152ms (Views: 71.7ms | ActiveRecord: 20.2ms)
-
-
-Started GET "/posts/another-test" for ::1 at 2016-06-11 14:08:22 -0400
-Processing by Exposition::PostsController#show as HTML
- Parameters: {"id"=>"another-test"}
- [1m[36mExposition::Post Load (1.8ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 AND "exposition_posts"."slug" = $2 LIMIT $3[0m [["published", true], ["slug", "another-test"], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application (2.8ms)
-Completed 200 OK in 47ms (Views: 39.0ms | ActiveRecord: 1.8ms)
-
-
-Started GET "/posts/another-test" for ::1 at 2016-06-11 14:08:49 -0400
-Processing by Exposition::PostsController#show as HTML
- Parameters: {"id"=>"another-test"}
- [1m[36mExposition::Post Load (2.6ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 AND "exposition_posts"."slug" = $2 LIMIT $3[0m [["published", true], ["slug", "another-test"], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application (2.6ms)
-Completed 200 OK in 54ms (Views: 45.3ms | ActiveRecord: 2.6ms)
-
-
-Started GET "/posts/another-test" for ::1 at 2016-06-11 14:08:54 -0400
-Processing by Exposition::PostsController#show as HTML
- Parameters: {"id"=>"another-test"}
- [1m[36mExposition::Post Load (1.1ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 AND "exposition_posts"."slug" = $2 LIMIT $3[0m [["published", true], ["slug", "another-test"], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application (3.4ms)
-Completed 200 OK in 41ms (Views: 34.7ms | ActiveRecord: 1.1ms)
-
-
-Started GET "/posts/another-test" for ::1 at 2016-06-11 14:10:17 -0400
-Processing by Exposition::PostsController#show as HTML
- Parameters: {"id"=>"another-test"}
- [1m[36mExposition::Post Load (1.4ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 AND "exposition_posts"."slug" = $2 LIMIT $3[0m [["published", true], ["slug", "another-test"], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application (3.1ms)
-Completed 200 OK in 81ms (Views: 46.0ms | ActiveRecord: 9.2ms)
-
-
-Started GET "/posts/another-test" for ::1 at 2016-06-11 17:05:15 -0400
-Processing by Exposition::PostsController#show as HTML
- Parameters: {"id"=>"another-test"}
- [1m[36mExposition::Post Load (6.1ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 AND "exposition_posts"."slug" = $2 LIMIT $3[0m [["published", true], ["slug", "another-test"], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application (27.0ms)
-Completed 200 OK in 235ms (Views: 186.8ms | ActiveRecord: 6.1ms)
-
-
-Started GET "/posts/another-test" for ::1 at 2016-06-11 17:05:18 -0400
-Processing by Exposition::PostsController#show as HTML
- Parameters: {"id"=>"another-test"}
- [1m[36mExposition::Post Load (1.7ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 AND "exposition_posts"."slug" = $2 LIMIT $3[0m [["published", true], ["slug", "another-test"], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application (3.0ms)
-Completed 200 OK in 83ms (Views: 74.0ms | ActiveRecord: 1.7ms)
-
-
-Started GET "/" for ::1 at 2016-06-11 17:24:06 -0400
+actionpack (6.0.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:36:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
+railties (6.0.2.1) lib/rails/rack/logger.rb:38:in `call_app'
+railties (6.0.2.1) lib/rails/rack/logger.rb:26:in `block in call'
+activesupport (6.0.2.1) lib/active_support/tagged_logging.rb:80:in `block in tagged'
+activesupport (6.0.2.1) lib/active_support/tagged_logging.rb:28:in `tagged'
+activesupport (6.0.2.1) lib/active_support/tagged_logging.rb:80:in `tagged'
+railties (6.0.2.1) lib/rails/rack/logger.rb:26:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/request_id.rb:27:in `call'
+rack (2.0.8) lib/rack/method_override.rb:22:in `call'
+rack (2.0.8) lib/rack/runtime.rb:22:in `call'
+activesupport (6.0.2.1) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/executor.rb:14:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/static.rb:126:in `call'
+rack (2.0.8) lib/rack/sendfile.rb:111:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/host_authorization.rb:83:in `call'
+railties (6.0.2.1) lib/rails/engine.rb:526:in `call'
+rack (2.0.8) lib/rack/handler/webrick.rb:86:in `service'
+/Users/joshuaklina/.rbenv/versions/2.5.3/lib/ruby/2.5.0/webrick/httpserver.rb:140:in `service'
+/Users/joshuaklina/.rbenv/versions/2.5.3/lib/ruby/2.5.0/webrick/httpserver.rb:96:in `run'
+/Users/joshuaklina/.rbenv/versions/2.5.3/lib/ruby/2.5.0/webrick/server.rb:307:in `block in start_thread'
+Started GET "/" for ::1 at 2020-01-02 21:29:56 -0700
Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (7.5ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (5.3ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (2.4ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (44.5ms)
- [1m[36mCategorical::Tag Exists (1.1ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (2.4ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (161.8ms)
- [1m[35m (0.5ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (240.6ms)
-Completed 200 OK in 437ms (Views: 352.7ms | ActiveRecord: 63.2ms)
+ Rendering /Users/joshuaklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/application
+ [1m[36mExposition::Post Exists? (1.1ms)[0m [1m[34mSELECT 1 AS one FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 1], ["OFFSET", 0]]
+ [1m[36mExposition::Post Load (0.9ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
+ Rendered collection of /Users/joshuaklina/Development/exposition/app/views/exposition/posts/_post.html.haml [1 times] (Duration: 24.7ms | Allocations: 4843)
+ Rendered /Users/joshuaklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/application (Duration: 29.8ms | Allocations: 5330)
+Completed 500 Internal Server Error in 32ms (ActiveRecord: 2.0ms | Allocations: 5825)
-Started GET "/posts/test-title" for ::1 at 2016-06-11 17:24:08 -0400
-Processing by Exposition::PostsController#show as HTML
- Parameters: {"id"=>"test-title"}
- [1m[36mExposition::Post Load (3.0ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 AND "exposition_posts"."slug" = $2 LIMIT $3[0m [["published", true], ["slug", "test-title"], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application (103.6ms)
-Completed 200 OK in 210ms (Views: 200.1ms | ActiveRecord: 3.0ms)
-
-
-Started GET "/" for ::1 at 2016-06-24 18:58:58 -0400
-Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (2.1ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (1.6ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (2.7ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (22.7ms)
- [1m[36mCategorical::Tag Exists (0.8ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (2.4ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (105.7ms)
- [1m[35m (0.7ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (167.4ms)
-Completed 200 OK in 691ms (Views: 558.2ms | ActiveRecord: 42.4ms)
-
-
-Started GET "/assets/exposition/application.self-a62a7bf41ef12937bb298c7a80ad574afe343df4bff4a1c70dd4e597618171c0.css?body=1" for ::1 at 2016-06-24 18:58:59 -0400
-Started GET "/assets/exposition/twitter-5ed7dd10b95665b5d9056ecdab697788dd8b2ce71cecb98972b70b7b27a93213.svg" for ::1 at 2016-06-24 18:58:59 -0400
-Started GET "/" for ::1 at 2016-06-27 15:54:00 -0400
-Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (3.5ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (18.0ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (1.8ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (331.6ms)
- [1m[36mCategorical::Tag Exists (1.3ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (9.3ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (465.9ms)
- [1m[35m (2.1ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (777.6ms)
-Completed 200 OK in 1282ms (Views: 1103.7ms | ActiveRecord: 26.6ms)
-
-
-Started GET "/" for ::1 at 2016-07-01 14:40:39 -0400
-Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (4.1ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (1.1ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (4.8ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (20.6ms)
- [1m[36mCategorical::Tag Exists (1.2ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (2.6ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (87.5ms)
- [1m[35m (0.7ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (164.8ms)
-Completed 200 OK in 2348ms (Views: 2202.6ms | ActiveRecord: 66.8ms)
-
-
-Started GET "/" for ::1 at 2016-07-01 14:40:57 -0400
-Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (1.3ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (1.0ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (2.1ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (23.0ms)
- [1m[36mCategorical::Tag Exists (0.8ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (1.8ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (99.7ms)
- [1m[35m (0.7ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (154.2ms)
-Completed 200 OK in 636ms (Views: 527.9ms | ActiveRecord: 24.6ms)
-
-
-Started GET "/assets/exposition/application.self-a62a7bf41ef12937bb298c7a80ad574afe343df4bff4a1c70dd4e597618171c0.css?body=1" for ::1 at 2016-07-01 14:40:59 -0400
-Started GET "/assets/exposition/twitter-5ed7dd10b95665b5d9056ecdab697788dd8b2ce71cecb98972b70b7b27a93213.svg" for ::1 at 2016-07-01 14:40:59 -0400
-Started GET "/" for ::1 at 2016-07-01 14:42:18 -0400
-Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (0.8ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (0.9ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (0.9ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (4.5ms)
- [1m[36mCategorical::Tag Exists (0.9ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (2.0ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (18.4ms)
- [1m[35m (0.6ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (36.6ms)
-Completed 200 OK in 121ms (Views: 112.7ms | ActiveRecord: 4.0ms)
-
-
-Started GET "/assets/exposition/twitter-5ed7dd10b95665b5d9056ecdab697788dd8b2ce71cecb98972b70b7b27a93213.svg" for ::1 at 2016-07-01 14:42:18 -0400
-Started GET "/assets/exposition/application.self-a62a7bf41ef12937bb298c7a80ad574afe343df4bff4a1c70dd4e597618171c0.css?body=1" for ::1 at 2016-07-01 14:42:18 -0400
-Started GET "/" for ::1 at 2016-07-01 14:48:28 -0400
-Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (3.4ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (2.1ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (2.1ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (11.1ms)
- [1m[36mCategorical::Tag Exists (1.0ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (2.6ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (49.7ms)
- [1m[35m (0.6ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (110.0ms)
-Completed 200 OK in 226ms (Views: 196.3ms | ActiveRecord: 9.2ms)
-
-
-Started GET "/assets/exposition/application.self-a62a7bf41ef12937bb298c7a80ad574afe343df4bff4a1c70dd4e597618171c0.css?body=1" for ::1 at 2016-07-01 14:48:28 -0400
-Started GET "/assets/exposition/twitter-5ed7dd10b95665b5d9056ecdab697788dd8b2ce71cecb98972b70b7b27a93213.svg" for ::1 at 2016-07-01 14:48:28 -0400
-Started GET "/" for ::1 at 2016-07-01 14:48:38 -0400
-Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (1.4ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (1.3ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (1.7ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (9.2ms)
- [1m[36mCategorical::Tag Exists (1.4ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (3.3ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (46.1ms)
- [1m[35m (0.6ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (73.4ms)
-Completed 200 OK in 151ms (Views: 136.9ms | ActiveRecord: 6.4ms)
-
-
-Started GET "/assets/exposition/application.self-a62a7bf41ef12937bb298c7a80ad574afe343df4bff4a1c70dd4e597618171c0.css?body=1" for ::1 at 2016-07-01 14:48:38 -0400
-Started GET "/assets/exposition/twitter-5ed7dd10b95665b5d9056ecdab697788dd8b2ce71cecb98972b70b7b27a93213.svg" for ::1 at 2016-07-01 14:48:38 -0400
-Started GET "/" for ::1 at 2016-07-01 14:49:06 -0400
-Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (1.1ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (1.1ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (1.0ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (5.7ms)
- [1m[36mCategorical::Tag Exists (1.3ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (3.5ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (28.6ms)
- [1m[35m (0.6ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (49.6ms)
-Completed 200 OK in 923ms (Views: 912.8ms | ActiveRecord: 5.1ms)
-
-
-Started GET "/assets/exposition/application.self-a5e531b65b188bdc355430b46474b25f87e993a04cb9ffbd70d230bbbde12cec.css?body=1" for ::1 at 2016-07-01 14:49:07 -0400
-Started GET "/assets/exposition/twitter-5ed7dd10b95665b5d9056ecdab697788dd8b2ce71cecb98972b70b7b27a93213.svg" for ::1 at 2016-07-01 14:49:07 -0400
-Started GET "/" for ::1 at 2016-07-01 14:49:28 -0400
-Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (1.0ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (1.3ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (0.8ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (3.2ms)
- [1m[36mCategorical::Tag Exists (0.8ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (1.8ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (17.2ms)
- [1m[35m (0.6ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (32.6ms)
-Completed 200 OK in 673ms (Views: 664.4ms | ActiveRecord: 4.4ms)
-
-
-Started GET "/assets/exposition/application.self-c74c77928d0c14e39fc6ae025dcb0e6d7b015a9462289cb64686fc0cffc18d61.css?body=1" for ::1 at 2016-07-01 14:49:29 -0400
-Started GET "/assets/exposition/twitter-5ed7dd10b95665b5d9056ecdab697788dd8b2ce71cecb98972b70b7b27a93213.svg" for ::1 at 2016-07-01 14:49:29 -0400
-Started GET "/posts/another-test" for ::1 at 2016-07-01 14:49:49 -0400
-Processing by Exposition::PostsController#show as HTML
- Parameters: {"id"=>"another-test"}
- [1m[36mExposition::Post Load (0.9ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 AND "exposition_posts"."slug" = $2 LIMIT $3[0m [["published", true], ["slug", "another-test"], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application (2.2ms)
-Completed 200 OK in 46ms (Views: 37.7ms | ActiveRecord: 0.9ms)
-
-
-Started GET "/posts/another-test" for ::1 at 2016-07-01 14:50:23 -0400
-Processing by Exposition::PostsController#show as HTML
- Parameters: {"id"=>"another-test"}
- [1m[36mExposition::Post Load (0.8ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 AND "exposition_posts"."slug" = $2 LIMIT $3[0m [["published", true], ["slug", "another-test"], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application (4.3ms)
-Completed 200 OK in 709ms (Views: 702.7ms | ActiveRecord: 0.8ms)
-
-
-Started GET "/assets/exposition/application.self-6154175ebee594ad8775f53d3c6b679116ee32f88069160f19da1e5ead73f51e.css?body=1" for ::1 at 2016-07-01 14:50:23 -0400
-Started GET "/assets/exposition/twitter-5ed7dd10b95665b5d9056ecdab697788dd8b2ce71cecb98972b70b7b27a93213.svg" for ::1 at 2016-07-01 14:50:23 -0400
-Started GET "/posts/another-test" for ::1 at 2016-07-01 14:51:20 -0400
-Processing by Exposition::PostsController#show as HTML
- Parameters: {"id"=>"another-test"}
- [1m[36mExposition::Post Load (1.1ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 AND "exposition_posts"."slug" = $2 LIMIT $3[0m [["published", true], ["slug", "another-test"], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application (1.8ms)
-Completed 200 OK in 39ms (Views: 32.5ms | ActiveRecord: 1.1ms)
-
-
-Started GET "/assets/exposition/application.self-6154175ebee594ad8775f53d3c6b679116ee32f88069160f19da1e5ead73f51e.css?body=1" for ::1 at 2016-07-01 14:51:20 -0400
-Started GET "/assets/exposition/twitter-5ed7dd10b95665b5d9056ecdab697788dd8b2ce71cecb98972b70b7b27a93213.svg" for ::1 at 2016-07-01 14:51:20 -0400
-Started GET "/" for ::1 at 2016-07-01 14:51:51 -0400
-Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (0.7ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (1.5ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (1.0ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (3.8ms)
- [1m[36mCategorical::Tag Exists (0.8ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (1.8ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (21.3ms)
- [1m[35m (0.5ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (70.8ms)
-Completed 200 OK in 115ms (Views: 106.7ms | ActiveRecord: 4.5ms)
-
-
-Started GET "/admin/login" for ::1 at 2016-07-01 14:58:50 -0400
-Processing by Exposition::Admin::SessionsController#new as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/admin/sessions/new.html.haml within layouts/exposition/admin
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/sessions/new.html.haml within layouts/exposition/admin (107.1ms)
- [1m[36mExposition::User Load (5.1ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT $2[0m [["id", 1], ["LIMIT", 1]]
-Completed 200 OK in 557ms (Views: 506.5ms | ActiveRecord: 42.5ms)
-
-
-Started GET "/assets/jquery.self-660adc51e0224b731d29f575a6f1ec167ba08ad06ed5deca4f1e8654c135bf4c.js?body=1" for ::1 at 2016-07-01 14:58:51 -0400
-Started GET "/assets/jquery_ujs.self-e87806d0cf4489aeb1bb7288016024e8de67fd18db693fe026fe3907581e53cd.js?body=1" for ::1 at 2016-07-01 14:58:51 -0400
-Started GET "/assets/exposition/admin/application.self-f65bd21bac68a8b5ceaa2f380f9932b67ea4d43b8f5170feb553ec9156a09060.css?body=1" for ::1 at 2016-07-01 14:58:51 -0400
-Started GET "/assets/exposition/admin/application.self-6a3cf5192354f71615ac51034b3e97c20eda99643fcaf5bbe6d41ad59bd12167.js?body=1" for ::1 at 2016-07-01 14:58:51 -0400
- [1m[36mExposition::User Load (1.2ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" ORDER BY "exposition_users"."id" DESC LIMIT $1[0m [["LIMIT", 1]]
-Started POST "/admin/login" for ::1 at 2016-07-01 15:22:19 -0400
-Processing by Exposition::Admin::SessionsController#create as HTML
- Parameters: {"utf8"=>"✓", "authenticity_token"=>"wzHuzaVeyjgN/As1lRko/0t1k2Lm0sTf1piusLcBz/zpI6G9wSDybHlcJzwVqs1AElIZkqXaOD9uQ/qA9R/3kw==", "session"=>{"email"=>"admin@admin.com", "password"=>"[FILTERED]"}, "commit"=>"Log in"}
- [1m[36mExposition::User Load (2.8ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."email" = $1 LIMIT $2[0m [["email", "admin@admin.com"], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/admin/sessions/new.html.haml within layouts/exposition/admin
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/sessions/new.html.haml within layouts/exposition/admin (22.2ms)
- [1m[36mExposition::User Load (0.5ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT $2[0m [["id", 1], ["LIMIT", 1]]
-Completed 200 OK in 259ms (Views: 219.1ms | ActiveRecord: 4.0ms)
-
-
-Started POST "/admin/login" for ::1 at 2016-07-01 15:22:26 -0400
-Processing by Exposition::Admin::SessionsController#create as HTML
- Parameters: {"utf8"=>"✓", "authenticity_token"=>"NNBD+1KmRdc14pspaQSvbv+KpW3kLKraxiMKrhYZ2QwewgyLNth9g0FCtyDpt0rRpq0vnackVjp++F6eVAfhYw==", "session"=>{"email"=>"admin@admin.com", "password"=>"[FILTERED]"}, "commit"=>"Log in"}
- [1m[36mExposition::User Load (0.8ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."email" = $1 LIMIT $2[0m [["email", "admin@admin.com"], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/admin/sessions/new.html.haml within layouts/exposition/admin
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/sessions/new.html.haml within layouts/exposition/admin (7.3ms)
- [1m[36mExposition::User Load (0.8ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT $2[0m [["id", 1], ["LIMIT", 1]]
-Completed 200 OK in 196ms (Views: 187.4ms | ActiveRecord: 1.6ms)
-
-
-Started POST "/admin/login" for ::1 at 2016-07-01 15:22:42 -0400
-Processing by Exposition::Admin::SessionsController#create as HTML
- Parameters: {"utf8"=>"✓", "authenticity_token"=>"6+kgLB4+uFwXJLcuEuoLpOmV5cFOgZCwiWSn0bwZtX3B+29cekCACGOEmyeSWe4bsLJvMQ2JbFAxv/Ph/geNEg==", "session"=>{"email"=>"admin@admin.admin", "password"=>"[FILTERED]"}, "commit"=>"Log in"}
- [1m[36mExposition::User Load (6.7ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."email" = $1 LIMIT $2[0m [["email", "admin@admin.admin"], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/admin/sessions/new.html.haml within layouts/exposition/admin
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/sessions/new.html.haml within layouts/exposition/admin (5.9ms)
- [1m[36mExposition::User Load (0.9ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT $2[0m [["id", 1], ["LIMIT", 1]]
-Completed 200 OK in 317ms (Views: 160.8ms | ActiveRecord: 7.6ms)
-
-
-Started POST "/admin/login" for ::1 at 2016-07-01 15:22:50 -0400
-Processing by Exposition::Admin::SessionsController#create as HTML
- Parameters: {"utf8"=>"✓", "authenticity_token"=>"VO5f+uWNatnWlccxvwQdjnpwntbjJ0RXJP8Dem0GjnJ+/BCKgfNSjaI16zg/t/gxI1cUJqAvuLecJFdKLxi2HQ==", "session"=>{"email"=>"admin@admin.admin", "password"=>"[FILTERED]"}, "commit"=>"Log in"}
- [1m[36mExposition::User Load (2.6ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."email" = $1 LIMIT $2[0m [["email", "admin@admin.admin"], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/admin/sessions/new.html.haml within layouts/exposition/admin
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/sessions/new.html.haml within layouts/exposition/admin (4.0ms)
- [1m[36mExposition::User Load (0.8ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT $2[0m [["id", 1], ["LIMIT", 1]]
-Completed 200 OK in 244ms (Views: 149.6ms | ActiveRecord: 3.4ms)
-
-
-Started GET "/admin/login" for ::1 at 2016-07-01 15:23:27 -0400
-Processing by Exposition::Admin::SessionsController#new as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/admin/sessions/new.html.haml within layouts/exposition/admin
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/sessions/new.html.haml within layouts/exposition/admin (87.7ms)
- [1m[36mExposition::User Load (1.9ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT $2[0m [["id", 1], ["LIMIT", 1]]
-Completed 200 OK in 462ms (Views: 436.5ms | ActiveRecord: 1.9ms)
-
-
-Started POST "/admin/login" for ::1 at 2016-07-01 15:23:35 -0400
-Processing by Exposition::Admin::SessionsController#create as HTML
- Parameters: {"utf8"=>"✓", "authenticity_token"=>"4w+epOFT8us+MTFOPx3FXpOCi2rkL9yIzd2Y+P7wyr+WwonGT5RCMAm4tO2MpIiDvd1bq+4TkixcDt5MEvtkCQ==", "session"=>{"email"=>"admin@admin.admin", "password"=>"[FILTERED]"}, "commit"=>"Log in"}
- [1m[36mExposition::User Load (2.7ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."email" = $1 LIMIT $2[0m [["email", "admin@admin.admin"], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/admin/sessions/new.html.haml within layouts/exposition/admin
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/sessions/new.html.haml within layouts/exposition/admin (12.2ms)
- [1m[36mExposition::User Load (0.8ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT $2[0m [["id", 1], ["LIMIT", 1]]
-Completed 200 OK in 295ms (Views: 182.7ms | ActiveRecord: 3.4ms)
-
-
-Started POST "/admin/login" for ::1 at 2016-07-01 15:26:10 -0400
-Processing by Exposition::Admin::SessionsController#create as HTML
- Parameters: {"utf8"=>"✓", "authenticity_token"=>"e47jJTEnSdkkSQQCAH1u2CtOZJJA2CN3c0TTX8AKhoQOQ/RHn+D5AhPAgaGzxCMFBRG0U0rkbdPil5XrLAEoMg==", "session"=>{"email"=>"admin@admin.admin", "password"=>"[FILTERED]"}, "commit"=>"Log in"}
- [1m[36mExposition::User Load (1.8ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."email" = $1 LIMIT $2[0m [["email", "admin@admin.admin"], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/admin/sessions/new.html.haml within layouts/exposition/admin
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/sessions/new.html.haml within layouts/exposition/admin (25.8ms)
- [1m[36mExposition::User Load (0.8ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT $2[0m [["id", 1], ["LIMIT", 1]]
-Completed 200 OK in 337ms (Views: 206.4ms | ActiveRecord: 2.7ms)
-
-
-Started POST "/admin/login" for ::1 at 2016-07-01 15:26:50 -0400
-Processing by Exposition::Admin::SessionsController#create as HTML
- Parameters: {"utf8"=>"✓", "authenticity_token"=>"3mEMQaPN2eF5aHs27sG0jYKUEEfNgBSr0+vqy3lYTTirrBsjDQppOk7h/pVdePlQrMvAhse8Wg9COKx/lVPjjg==", "session"=>{"email"=>"admin@admin.admin", "password"=>"[FILTERED]"}, "commit"=>"Log in"}
- [1m[36mExposition::User Load (1.2ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."email" = $1 LIMIT $2[0m [["email", "admin@admin.admin"], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/admin/sessions/new.html.haml within layouts/exposition/admin
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/sessions/new.html.haml within layouts/exposition/admin (6.8ms)
- [1m[36mExposition::User Load (0.9ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT $2[0m [["id", 1], ["LIMIT", 1]]
-Completed 200 OK in 274ms (Views: 173.4ms | ActiveRecord: 2.1ms)
-
-
- [1m[36mExposition::User Load (2.3ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" ORDER BY "exposition_users"."id" DESC LIMIT $1[0m [["LIMIT", 1]]
- [1m[35m (1.2ms)[0m [1m[35mBEGIN[0m
- [1m[36mExposition::User Exists (3.3ms)[0m [1m[34mSELECT 1 AS one FROM "exposition_users" WHERE LOWER("exposition_users"."email") = LOWER($1) AND ("exposition_users"."id" != $2) LIMIT $3[0m [["email", "admin@admin.admin"], ["id", 1], ["LIMIT", 1]]
- [1m[35mSQL (5.4ms)[0m [1m[33mUPDATE "exposition_users" SET "password_digest" = $1, "updated_at" = $2 WHERE "exposition_users"."id" = $3[0m [["password_digest", "$2a$10$xCvVdEvMpBYPfgW.lVHT/e6/pDSZXRS2DHvM9QZVhVoW9LsJB3HwC"], ["updated_at", 2016-07-01 19:27:01 UTC], ["id", 1]]
- [1m[35m (3.5ms)[0m [1m[35mCOMMIT[0m
-Started POST "/admin/login" for ::1 at 2016-07-01 15:27:10 -0400
-Processing by Exposition::Admin::SessionsController#create as HTML
- Parameters: {"utf8"=>"✓", "authenticity_token"=>"Pf/NcQcfggO2V02TZ8sGLZ+sWwLCZUFP6kGGD/Tb69xIMtoTqdgy2IHeyDDUckvwsfOLw8hZD+t7ksC7GNBFag==", "session"=>{"email"=>"admin@admin.admin", "password"=>"[FILTERED]"}, "commit"=>"Log in"}
- [1m[36mExposition::User Load (1.1ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."email" = $1 LIMIT $2[0m [["email", "admin@admin.admin"], ["LIMIT", 1]]
- [1m[35m (0.4ms)[0m [1m[35mBEGIN[0m
- [1m[35mSQL (0.9ms)[0m [1m[33mUPDATE "exposition_users" SET "remember_digest" = $1, "updated_at" = $2 WHERE "exposition_users"."id" = $3[0m [["remember_digest", "$2a$10$J9t0q/LtGRYgJiQwyskEwumi.K/fmrbw9rOpOglRnEq8rPhwHGuTG"], ["updated_at", 2016-07-01 19:27:11 UTC], ["id", 1]]
- [1m[35m (0.7ms)[0m [1m[35mCOMMIT[0m
-Redirected to http://localhost:3000/admin/posts
-Completed 302 Found in 258ms (ActiveRecord: 3.1ms)
-
-
-Started GET "/admin/posts" for ::1 at 2016-07-01 15:27:11 -0400
-Processing by Exposition::Admin::PostsController#index as HTML
- [1m[36mExposition::User Load (1.8ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT $2[0m [["id", 1], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/admin/posts/index.html.haml within layouts/exposition/admin
- [1m[36mExposition::Post Load (2.1ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" ORDER BY "exposition_posts"."published_at" DESC LIMIT $1 OFFSET $2[0m [["LIMIT", 25], ["OFFSET", 0]]
- [1m[36mCACHE (0.0ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT $2[0m [["id", 1], ["LIMIT", 1]]
- [1m[36mCategorical::Tag Load (1.4ms)[0m [1m[34mSELECT "categorical_tags".* FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"]]
- [1m[36mCACHE (0.1ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT $2[0m [["id", 1], ["LIMIT", 1]]
- [1m[36mCategorical::Tag Load (0.9ms)[0m [1m[34mSELECT "categorical_tags".* FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"]]
- [1m[35m (2.7ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts"[0m
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/posts/index.html.haml within layouts/exposition/admin (60.6ms)
-Completed 200 OK in 128ms (Views: 106.1ms | ActiveRecord: 8.9ms)
-
-
-Started GET "/admin/tags" for ::1 at 2016-07-01 15:27:36 -0400
-Processing by Exposition::Admin::TagsController#index as HTML
- [1m[36mExposition::User Load (0.7ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT $2[0m [["id", 1], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/admin/tags/index.html.haml within layouts/exposition/admin
- [1m[36mCategorical::Tag Load (1.4ms)[0m [1m[34mSELECT "categorical_tags".* FROM "categorical_tags" LIMIT $1 OFFSET $2[0m [["LIMIT", 25], ["OFFSET", 0]]
- [1m[35m (0.9ms)[0m [1m[34mSELECT COUNT(*) FROM "categorical_tags"[0m
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/tags/index.html.haml within layouts/exposition/admin (14.1ms)
-Completed 200 OK in 58ms (Views: 48.9ms | ActiveRecord: 3.0ms)
-
-
-Started GET "/admin/tags/new" for ::1 at 2016-07-01 15:27:37 -0400
-Processing by Exposition::Admin::TagsController#new as HTML
- [1m[36mExposition::User Load (0.7ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT $2[0m [["id", 1], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/admin/tags/new.html.haml within layouts/exposition/admin
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/shared/_error_handler.html.haml (2.5ms)
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/tags/new.html.haml within layouts/exposition/admin (11.2ms)
-Completed 200 OK in 65ms (Views: 49.6ms | ActiveRecord: 5.6ms)
-
-
-Started POST "/admin/tags" for ::1 at 2016-07-01 15:27:42 -0400
-Processing by Exposition::Admin::TagsController#create as HTML
- Parameters: {"utf8"=>"✓", "authenticity_token"=>"QtK5LgMnfZgC0a75KZIuURdvNOfKnImv9cnE8+el3Mk3H65MreDNQzVYK1qaK2OMOTDkJsCgxwtkGoJHC65yfw==", "tag"=>{"label"=>"My Tag"}, "commit"=>"Create Tag"}
- [1m[36mExposition::User Load (1.1ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT $2[0m [["id", 1], ["LIMIT", 1]]
- [1m[35m (0.7ms)[0m [1m[35mBEGIN[0m
- [1m[36mCategorical::Tag Exists (0.8ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" WHERE LOWER("categorical_tags"."label") = LOWER($1) LIMIT $2[0m [["label", "My Tag"], ["LIMIT", 1]]
- [1m[36mCategorical::Tag Exists (0.7ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" WHERE "categorical_tags"."slug" = $1 LIMIT $2[0m [["slug", "my-tag"], ["LIMIT", 1]]
- [1m[35mSQL (14.6ms)[0m [1m[32mINSERT INTO "categorical_tags" ("label", "slug", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id"[0m [["label", "My Tag"], ["slug", "my-tag"], ["created_at", 2016-07-01 19:27:42 UTC], ["updated_at", 2016-07-01 19:27:42 UTC]]
- [1m[35m (1.7ms)[0m [1m[35mCOMMIT[0m
-Redirected to http://localhost:3000/admin/tags
-Completed 302 Found in 139ms (ActiveRecord: 22.6ms)
-
-
-Started GET "/admin/tags" for ::1 at 2016-07-01 15:27:42 -0400
-Processing by Exposition::Admin::TagsController#index as HTML
- [1m[36mExposition::User Load (0.7ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT $2[0m [["id", 1], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/admin/tags/index.html.haml within layouts/exposition/admin
- [1m[36mCategorical::Tag Load (0.5ms)[0m [1m[34mSELECT "categorical_tags".* FROM "categorical_tags" LIMIT $1 OFFSET $2[0m [["LIMIT", 25], ["OFFSET", 0]]
- [1m[35m (0.5ms)[0m [1m[34mSELECT COUNT(*) FROM "categorical_tags"[0m
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/tags/index.html.haml within layouts/exposition/admin (11.3ms)
-Completed 200 OK in 46ms (Views: 39.1ms | ActiveRecord: 1.6ms)
-
-
-Started GET "/admin/tags/new" for ::1 at 2016-07-01 15:27:43 -0400
-Processing by Exposition::Admin::TagsController#new as HTML
- [1m[36mExposition::User Load (0.7ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT $2[0m [["id", 1], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/admin/tags/new.html.haml within layouts/exposition/admin
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/shared/_error_handler.html.haml (1.9ms)
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/tags/new.html.haml within layouts/exposition/admin (7.9ms)
-Completed 200 OK in 42ms (Views: 37.9ms | ActiveRecord: 0.7ms)
-
-
-Started POST "/admin/tags" for ::1 at 2016-07-01 15:27:48 -0400
-Processing by Exposition::Admin::TagsController#create as HTML
- Parameters: {"utf8"=>"✓", "authenticity_token"=>"4WxEGW4jjlHCmPnh7kqBkDLj9q32BO7gC+HhReBxeNaUoVN7wOQ+ivURfEJd88xNHLwmbPw4oESaMqfxDHrWYA==", "tag"=>{"label"=>"Another Tag"}, "commit"=>"Create Tag"}
- [1m[36mExposition::User Load (0.7ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT $2[0m [["id", 1], ["LIMIT", 1]]
- [1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
- [1m[36mCategorical::Tag Exists (1.4ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" WHERE LOWER("categorical_tags"."label") = LOWER($1) LIMIT $2[0m [["label", "Another Tag"], ["LIMIT", 1]]
- [1m[36mCategorical::Tag Exists (0.6ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" WHERE "categorical_tags"."slug" = $1 LIMIT $2[0m [["slug", "another-tag"], ["LIMIT", 1]]
- [1m[35mSQL (0.9ms)[0m [1m[32mINSERT INTO "categorical_tags" ("label", "slug", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id"[0m [["label", "Another Tag"], ["slug", "another-tag"], ["created_at", 2016-07-01 19:27:48 UTC], ["updated_at", 2016-07-01 19:27:48 UTC]]
- [1m[35m (0.5ms)[0m [1m[35mCOMMIT[0m
-Redirected to http://localhost:3000/admin/tags
-Completed 302 Found in 16ms (ActiveRecord: 7.3ms)
-
-
-Started GET "/admin/tags" for ::1 at 2016-07-01 15:27:48 -0400
-Processing by Exposition::Admin::TagsController#index as HTML
- [1m[36mExposition::User Load (0.5ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT $2[0m [["id", 1], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/admin/tags/index.html.haml within layouts/exposition/admin
- [1m[36mCategorical::Tag Load (0.8ms)[0m [1m[34mSELECT "categorical_tags".* FROM "categorical_tags" LIMIT $1 OFFSET $2[0m [["LIMIT", 25], ["OFFSET", 0]]
- [1m[35m (0.6ms)[0m [1m[34mSELECT COUNT(*) FROM "categorical_tags"[0m
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/tags/index.html.haml within layouts/exposition/admin (51.3ms)
-Completed 200 OK in 95ms (Views: 87.4ms | ActiveRecord: 2.0ms)
-
-
-Started GET "/admin/posts" for ::1 at 2016-07-01 15:27:51 -0400
-Processing by Exposition::Admin::PostsController#index as HTML
- [1m[36mExposition::User Load (0.6ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT $2[0m [["id", 1], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/admin/posts/index.html.haml within layouts/exposition/admin
- [1m[36mExposition::Post Load (1.0ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" ORDER BY "exposition_posts"."published_at" DESC LIMIT $1 OFFSET $2[0m [["LIMIT", 25], ["OFFSET", 0]]
- [1m[36mCACHE (0.0ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT $2[0m [["id", 1], ["LIMIT", 1]]
- [1m[36mCategorical::Tag Load (0.7ms)[0m [1m[34mSELECT "categorical_tags".* FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"]]
- [1m[36mCACHE (0.0ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT $2[0m [["id", 1], ["LIMIT", 1]]
- [1m[36mCategorical::Tag Load (0.7ms)[0m [1m[34mSELECT "categorical_tags".* FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"]]
- [1m[35m (0.5ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts"[0m
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/posts/index.html.haml within layouts/exposition/admin (25.7ms)
-Completed 200 OK in 82ms (Views: 65.5ms | ActiveRecord: 3.6ms)
-
-
-Started GET "/admin/posts/another-test/edit" for ::1 at 2016-07-01 15:27:53 -0400
-Processing by Exposition::Admin::PostsController#edit as HTML
- Parameters: {"id"=>"another-test"}
- [1m[36mExposition::User Load (0.6ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT $2[0m [["id", 1], ["LIMIT", 1]]
- [1m[36mExposition::Post Load (1.2ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."slug" = $1 LIMIT $2[0m [["slug", "another-test"], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/admin/posts/edit.html.haml within layouts/exposition/admin
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/shared/_error_handler.html.haml (2.3ms)
- [1m[36mExposition::User Load (0.6ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users"[0m
- [1m[36mCategorical::Tag Load (0.5ms)[0m [1m[34mSELECT "categorical_tags".* FROM "categorical_tags"[0m
- [1m[35m (1.2ms)[0m [1m[34mSELECT "categorical_tags".id FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/posts/_form_fields.html.haml (31.7ms)
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/posts/edit.html.haml within layouts/exposition/admin (44.9ms)
-Completed 200 OK in 95ms (Views: 83.2ms | ActiveRecord: 5.2ms)
-
-
-Started PATCH "/admin/posts/another-test" for ::1 at 2016-07-01 15:27:59 -0400
-Processing by Exposition::Admin::PostsController#update as HTML
- Parameters: {"utf8"=>"✓", "authenticity_token"=>"lXVcOPkOpCf7yaw7vUGNF92Xu6FuM3DUtGGYVbeprwLguEtaV8kU/MxAKZgO+MDK88hrYGQPPnAlst7hW6IBtA==", "post"=>{"title"=>"Another test", "summary"=>"Just another test", "body"=>"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras eget nibh neque. Proin sed tellus id neque accumsan cursus. Nam lacinia diam sit amet tortor tincidunt nec semper neque vulputate. Vestibulum eros enim, facilisis a fermentum sit amet, fringilla at odio. Duis vestibulum volutpat massa, et semper sapien tincidunt non. Curabitur pellentesque dictum nisi ac dictum. Nunc viverra felis nec risus consectetur suscipit. Sed pellentesque pharetra nibh sit amet porta. Aenean metus ligula, accumsan vehicula facilisis eu, consectetur ac ante. Nulla adipiscing, erat eu aliquet tincidunt, nunc arcu elementum mi, non lacinia sapien lorem et lacus. Donec tortor justo, ultricies id dictum in, feugiat vitae nunc.\r\n \r\n Phasellus cursus tristique dui nec imperdiet. Cras viverra porta placerat. Nunc commodo convallis elit, hendrerit porta massa consequat eu. In rutrum luctus felis sit amet imperdiet. Nulla magna arcu, sollicitudin sed congue eu, porttitor sed libero. Aliquam aliquam nulla vel nulla gravida tempor facilisis diam placerat. Nullam viverra, sem eget bibendum interdum, enim urna gravida ante, ut vulputate orci odio et eros. Pellentesque sit amet convallis ante. Etiam neque dui, accumsan ut lacinia pharetra, placerat ut sem. Suspendisse vehicula mi eu odio egestas vehicula.", "author_id"=>"1", "slug"=>"another-test", "tag_ids"=>["", "1", "2"], "published"=>"1"}, "commit"=>"Update Post", "id"=>"another-test"}
- [1m[36mExposition::User Load (0.5ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT $2[0m [["id", 1], ["LIMIT", 1]]
- [1m[36mExposition::Post Load (0.8ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."slug" = $1 LIMIT $2[0m [["slug", "another-test"], ["LIMIT", 1]]
- [1m[35m (0.2ms)[0m [1m[35mBEGIN[0m
- [1m[36mCategorical::Tag Load (2.4ms)[0m [1m[34mSELECT "categorical_tags".* FROM "categorical_tags" WHERE "categorical_tags"."id" IN (1, 2)[0m
- [1m[36mCategorical::Tag Load (1.2ms)[0m [1m[34mSELECT "categorical_tags".* FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"]]
- [1m[36mCategorical::Tag Exists (1.2ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" WHERE LOWER("categorical_tags"."label") = LOWER($1) AND ("categorical_tags"."id" != $2) LIMIT $3[0m [["label", "My Tag"], ["id", 1], ["LIMIT", 1]]
- [1m[36mCategorical::Tag Exists (0.6ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" WHERE "categorical_tags"."slug" = $1 AND ("categorical_tags"."id" != $2) LIMIT $3[0m [["slug", "my-tag"], ["id", 1], ["LIMIT", 1]]
- [1m[35mSQL (1.4ms)[0m [1m[32mINSERT INTO "categorical_taggings" ("taggable_id", "taggable_type", "tag_id") VALUES ($1, $2, $3) RETURNING "id"[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["tag_id", 1]]
- [1m[36mCategorical::Tag Exists (0.6ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" WHERE LOWER("categorical_tags"."label") = LOWER($1) AND ("categorical_tags"."id" != $2) LIMIT $3[0m [["label", "Another Tag"], ["id", 2], ["LIMIT", 1]]
- [1m[36mCategorical::Tag Exists (0.5ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" WHERE "categorical_tags"."slug" = $1 AND ("categorical_tags"."id" != $2) LIMIT $3[0m [["slug", "another-tag"], ["id", 2], ["LIMIT", 1]]
- [1m[35mSQL (0.6ms)[0m [1m[32mINSERT INTO "categorical_taggings" ("taggable_id", "taggable_type", "tag_id") VALUES ($1, $2, $3) RETURNING "id"[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["tag_id", 2]]
- [1m[36mExposition::User Load (0.5ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT $2[0m [["id", 1], ["LIMIT", 1]]
- [1m[36mExposition::Post Exists (0.6ms)[0m [1m[34mSELECT 1 AS one FROM "exposition_posts" WHERE "exposition_posts"."slug" = $1 AND ("exposition_posts"."id" != $2) LIMIT $3[0m [["slug", "another-test"], ["id", 2], ["LIMIT", 1]]
- [1m[35mSQL (2.1ms)[0m [1m[33mUPDATE "exposition_posts" SET "body" = $1, "updated_at" = $2 WHERE "exposition_posts"."id" = $3[0m [["body", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras eget nibh neque. Proin sed tellus id neque accumsan cursus. Nam lacinia diam sit amet tortor tincidunt nec semper neque vulputate. Vestibulum eros enim, facilisis a fermentum sit amet, fringilla at odio. Duis vestibulum volutpat massa, et semper sapien tincidunt non. Curabitur pellentesque dictum nisi ac dictum. Nunc viverra felis nec risus consectetur suscipit. Sed pellentesque pharetra nibh sit amet porta. Aenean metus ligula, accumsan vehicula facilisis eu, consectetur ac ante. Nulla adipiscing, erat eu aliquet tincidunt, nunc arcu elementum mi, non lacinia sapien lorem et lacus. Donec tortor justo, ultricies id dictum in, feugiat vitae nunc.\r\n \r\n Phasellus cursus tristique dui nec imperdiet. Cras viverra porta placerat. Nunc commodo convallis elit, hendrerit porta massa consequat eu. In rutrum luctus felis sit amet imperdiet. Nulla magna arcu, sollicitudin sed congue eu, porttitor sed libero. Aliquam aliquam nulla vel nulla gravida tempor facilisis diam placerat. Nullam viverra, sem eget bibendum interdum, enim urna gravida ante, ut vulputate orci odio et eros. Pellentesque sit amet convallis ante. Etiam neque dui, accumsan ut lacinia pharetra, placerat ut sem. Suspendisse vehicula mi eu odio egestas vehicula."], ["updated_at", 2016-07-01 19:27:59 UTC], ["id", 2]]
- [1m[35m (0.5ms)[0m [1m[35mCOMMIT[0m
-Redirected to http://localhost:3000/admin/posts
-Completed 302 Found in 64ms (ActiveRecord: 23.0ms)
-
-
-Started GET "/admin/posts" for ::1 at 2016-07-01 15:27:59 -0400
-Processing by Exposition::Admin::PostsController#index as HTML
- [1m[36mExposition::User Load (0.6ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT $2[0m [["id", 1], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/admin/posts/index.html.haml within layouts/exposition/admin
- [1m[36mExposition::Post Load (1.2ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" ORDER BY "exposition_posts"."published_at" DESC LIMIT $1 OFFSET $2[0m [["LIMIT", 25], ["OFFSET", 0]]
- [1m[36mCACHE (0.0ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT $2[0m [["id", 1], ["LIMIT", 1]]
- [1m[36mCategorical::Tag Load (0.6ms)[0m [1m[34mSELECT "categorical_tags".* FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"]]
- [1m[36mCACHE (0.0ms)[0m [1m[34mSELECT "exposition_users".* FROM "exposition_users" WHERE "exposition_users"."id" = $1 LIMIT $2[0m [["id", 1], ["LIMIT", 1]]
- [1m[36mCategorical::Tag Load (0.7ms)[0m [1m[34mSELECT "categorical_tags".* FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"]]
- [1m[35m (0.5ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts"[0m
- Rendered /Users/jklina/Development/exposition/app/views/exposition/admin/posts/index.html.haml within layouts/exposition/admin (26.1ms)
-Completed 200 OK in 78ms (Views: 68.0ms | ActiveRecord: 3.7ms)
-
-
-Started GET "/" for ::1 at 2016-07-01 15:28:02 -0400
-Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (1.2ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (0.9ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (0.8ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (4.1ms)
- [1m[36mCategorical::Tag Exists (0.9ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- [1m[36mCategorical::Tag Load (1.3ms)[0m [1m[34mSELECT "categorical_tags".* FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (5.2ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (28.1ms)
- [1m[35m (0.6ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (48.3ms)
-Completed 200 OK in 97ms (Views: 87.9ms | ActiveRecord: 5.7ms)
-
-
-Started GET "/" for ::1 at 2016-07-01 15:31:37 -0400
-Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (5.1ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (2.1ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (1.0ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (8.9ms)
- [1m[36mCategorical::Tag Exists (1.0ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- [1m[36mCategorical::Tag Load (1.0ms)[0m [1m[34mSELECT "categorical_tags".* FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (13.2ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (74.9ms)
- [1m[35m (0.6ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (150.5ms)
-Completed 200 OK in 302ms (Views: 268.9ms | ActiveRecord: 10.9ms)
-
-
-Started GET "/assets/exposition/application.self-6154175ebee594ad8775f53d3c6b679116ee32f88069160f19da1e5ead73f51e.css?body=1" for ::1 at 2016-07-01 15:31:38 -0400
-Started GET "/assets/exposition/twitter-5ed7dd10b95665b5d9056ecdab697788dd8b2ce71cecb98972b70b7b27a93213.svg" for ::1 at 2016-07-01 15:31:38 -0400
-Started GET "/" for ::1 at 2016-07-01 15:34:19 -0400
-Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (1.3ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (2.0ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (1.4ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (18.2ms)
- [1m[36mCategorical::Tag Exists (1.1ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- [1m[36mCategorical::Tag Load (1.2ms)[0m [1m[34mSELECT "categorical_tags".* FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (12.7ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (88.3ms)
- [1m[35m (0.6ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (171.2ms)
-Completed 200 OK in 1126ms (Views: 1096.7ms | ActiveRecord: 7.6ms)
-
-
-Started GET "/assets/exposition/twitter-5ed7dd10b95665b5d9056ecdab697788dd8b2ce71cecb98972b70b7b27a93213.svg" for ::1 at 2016-07-01 15:34:20 -0400
-Started GET "/assets/exposition/application.self-4b425c7c13f00e55f69793cd2b87663131990d6d53895416dd5da0882e1f2ef9.css?body=1" for ::1 at 2016-07-01 15:34:20 -0400
-Started GET "/" for ::1 at 2016-07-01 15:34:26 -0400
-Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (2.7ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (2.3ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (1.2ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (4.3ms)
- [1m[36mCategorical::Tag Exists (0.8ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- [1m[36mCategorical::Tag Load (0.9ms)[0m [1m[34mSELECT "categorical_tags".* FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (4.3ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (22.1ms)
- [1m[35m (0.7ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (43.5ms)
-Completed 200 OK in 654ms (Views: 642.2ms | ActiveRecord: 8.7ms)
-
-
-Started GET "/assets/exposition/application.self-3789660c7c3f3e706eb8a5b000b8abb4be7a79206e68fe81a6cd9fba569ded6a.css?body=1" for ::1 at 2016-07-01 15:34:27 -0400
-Started GET "/assets/exposition/twitter-5ed7dd10b95665b5d9056ecdab697788dd8b2ce71cecb98972b70b7b27a93213.svg" for ::1 at 2016-07-01 15:34:27 -0400
-Started GET "/" for ::1 at 2016-07-01 15:34:32 -0400
-Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (1.5ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (1.2ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (1.1ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (4.7ms)
- [1m[36mCategorical::Tag Exists (1.3ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- [1m[36mCategorical::Tag Load (1.9ms)[0m [1m[34mSELECT "categorical_tags".* FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (7.2ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (24.4ms)
- [1m[35m (0.7ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (43.8ms)
-Completed 200 OK in 595ms (Views: 583.1ms | ActiveRecord: 7.8ms)
-
-
-Started GET "/assets/exposition/application.self-bc48b176f0ee4ee32e482f46f56bfce104bb27783193c0960a73df82823c5981.css?body=1" for ::1 at 2016-07-01 15:34:33 -0400
-Started GET "/assets/exposition/twitter-5ed7dd10b95665b5d9056ecdab697788dd8b2ce71cecb98972b70b7b27a93213.svg" for ::1 at 2016-07-01 15:34:33 -0400
-Started GET "/" for ::1 at 2016-07-01 15:36:42 -0400
-Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (1.3ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (1.4ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (1.1ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (5.9ms)
- [1m[36mCategorical::Tag Exists (1.9ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- [1m[36mCategorical::Tag Load (0.9ms)[0m [1m[34mSELECT "categorical_tags".* FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (8.6ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (45.5ms)
- [1m[35m (0.7ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (245.6ms)
-Completed 200 OK in 348ms (Views: 319.9ms | ActiveRecord: 7.3ms)
-
-
-Started GET "/" for ::1 at 2016-07-01 15:48:20 -0400
-Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (1.2ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (1.3ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (2.0ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (19.9ms)
- [1m[36mCategorical::Tag Exists (1.0ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- [1m[36mCategorical::Tag Load (0.6ms)[0m [1m[34mSELECT "categorical_tags".* FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (12.7ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (89.3ms)
- [1m[35m (0.6ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (154.1ms)
-Completed 200 OK in 684ms (Views: 568.1ms | ActiveRecord: 24.9ms)
-
-
-Started GET "/assets/exposition/application.self-bc48b176f0ee4ee32e482f46f56bfce104bb27783193c0960a73df82823c5981.css?body=1" for ::1 at 2016-07-01 15:48:21 -0400
-Started GET "/assets/exposition/twitter-5ed7dd10b95665b5d9056ecdab697788dd8b2ce71cecb98972b70b7b27a93213.svg" for ::1 at 2016-07-01 15:48:21 -0400
-Started GET "/" for ::1 at 2016-07-01 16:40:30 -0400
-Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (1.7ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (2.0ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (5.3ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (25.8ms)
- [1m[36mCategorical::Tag Exists (1.0ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- [1m[36mCategorical::Tag Load (1.9ms)[0m [1m[34mSELECT "categorical_tags".* FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (6.6ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (159.1ms)
- [1m[35m (1.0ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (216.1ms)
-Completed 200 OK in 1160ms (Views: 1126.4ms | ActiveRecord: 12.9ms)
-
-
-Started GET "/assets/exposition/application.self-1d7a1d8f8285e054a988859b48c52af4e341285a26b062e6086462bb21dd7e59.css?body=1" for ::1 at 2016-07-01 16:40:31 -0400
-Started GET "/assets/exposition/twitter-5ed7dd10b95665b5d9056ecdab697788dd8b2ce71cecb98972b70b7b27a93213.svg" for ::1 at 2016-07-01 16:40:31 -0400
-Started GET "/posts/test-title" for ::1 at 2016-07-01 16:40:36 -0400
-Processing by Exposition::PostsController#show as HTML
- Parameters: {"id"=>"test-title"}
- [1m[36mExposition::Post Load (1.4ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 AND "exposition_posts"."slug" = $2 LIMIT $3[0m [["published", true], ["slug", "test-title"], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application (36.3ms)
-Completed 200 OK in 262ms (Views: 253.3ms | ActiveRecord: 1.4ms)
-
-
-Started GET "/posts/another-test" for ::1 at 2016-07-01 16:40:48 -0400
-Processing by Exposition::PostsController#show as HTML
- Parameters: {"id"=>"another-test"}
- [1m[36mExposition::Post Load (4.1ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 AND "exposition_posts"."slug" = $2 LIMIT $3[0m [["published", true], ["slug", "another-test"], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application (4.7ms)
-Completed 200 OK in 50ms (Views: 42.0ms | ActiveRecord: 4.1ms)
-
-
-Started GET "/posts/another-test" for ::1 at 2016-07-01 16:41:34 -0400
-Processing by Exposition::PostsController#show as HTML
- Parameters: {"id"=>"another-test"}
- [1m[36mExposition::Post Load (0.8ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 AND "exposition_posts"."slug" = $2 LIMIT $3[0m [["published", true], ["slug", "another-test"], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application (3.0ms)
-Completed 200 OK in 47ms (Views: 41.2ms | ActiveRecord: 0.8ms)
-
-
-Started GET "/assets/exposition/twitter-5ed7dd10b95665b5d9056ecdab697788dd8b2ce71cecb98972b70b7b27a93213.svg" for ::1 at 2016-07-01 16:41:34 -0400
-Started GET "/assets/exposition/application.self-bc48b176f0ee4ee32e482f46f56bfce104bb27783193c0960a73df82823c5981.css?body=1" for ::1 at 2016-07-01 16:41:34 -0400
-Started GET "/posts/another-test" for ::1 at 2016-07-01 16:41:36 -0400
-Processing by Exposition::PostsController#show as HTML
- Parameters: {"id"=>"another-test"}
- [1m[36mExposition::Post Load (0.7ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 AND "exposition_posts"."slug" = $2 LIMIT $3[0m [["published", true], ["slug", "another-test"], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application (2.8ms)
-Completed 200 OK in 41ms (Views: 36.7ms | ActiveRecord: 0.7ms)
-
-
-Started GET "/assets/exposition/application.self-bc48b176f0ee4ee32e482f46f56bfce104bb27783193c0960a73df82823c5981.css?body=1" for ::1 at 2016-07-01 16:41:36 -0400
-Started GET "/assets/exposition/twitter-5ed7dd10b95665b5d9056ecdab697788dd8b2ce71cecb98972b70b7b27a93213.svg" for ::1 at 2016-07-01 16:41:36 -0400
-Started GET "/posts/another-test" for ::1 at 2016-07-01 16:53:39 -0400
-Processing by Exposition::PostsController#show as HTML
- Parameters: {"id"=>"another-test"}
- [1m[36mExposition::Post Load (3.5ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 AND "exposition_posts"."slug" = $2 LIMIT $3[0m [["published", true], ["slug", "another-test"], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application (7.7ms)
-Completed 200 OK in 1448ms (Views: 1312.6ms | ActiveRecord: 27.4ms)
-
-
-Started GET "/assets/exposition/application.self-f6998f1e99320fe331e4f9a6920c953ba34401b07edb64ca28e4886d511558ed.css?body=1" for ::1 at 2016-07-01 16:53:41 -0400
-Started GET "/assets/exposition/twitter-5ed7dd10b95665b5d9056ecdab697788dd8b2ce71cecb98972b70b7b27a93213.svg" for ::1 at 2016-07-01 16:53:41 -0400
-Started GET "/" for ::1 at 2016-07-01 16:53:48 -0400
-Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (3.0ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (1.7ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (3.5ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (21.8ms)
- [1m[36mCategorical::Tag Exists (2.0ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- [1m[36mCategorical::Tag Load (0.6ms)[0m [1m[34mSELECT "categorical_tags".* FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (16.6ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (85.6ms)
- [1m[35m (0.7ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (111.4ms)
-Completed 200 OK in 151ms (Views: 130.0ms | ActiveRecord: 16.8ms)
-
-
-Started GET "/" for ::1 at 2016-07-01 16:53:48 -0400
-Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (2.3ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (1.9ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (2.0ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (4.5ms)
- [1m[36mCategorical::Tag Exists (0.9ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- [1m[36mCategorical::Tag Load (1.1ms)[0m [1m[34mSELECT "categorical_tags".* FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (5.9ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (24.6ms)
- [1m[35m (1.0ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (46.2ms)
-Completed 200 OK in 86ms (Views: 72.0ms | ActiveRecord: 9.2ms)
-
-
-Started GET "/posts/test-title" for ::1 at 2016-07-01 17:06:03 -0400
-Processing by Exposition::PostsController#show as HTML
- Parameters: {"id"=>"test-title"}
- [1m[36mExposition::Post Load (1.8ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 AND "exposition_posts"."slug" = $2 LIMIT $3[0m [["published", true], ["slug", "test-title"], ["LIMIT", 1]]
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/show.html.haml within layouts/exposition/application (74.9ms)
-Completed 200 OK in 200ms (Views: 165.2ms | ActiveRecord: 1.8ms)
-
-
-Started GET "/" for ::1 at 2016-07-01 17:06:11 -0400
-Processing by Exposition::PostsController#index as HTML
- Rendering /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application
- [1m[35m (1.3ms)[0m [1m[34mSELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 LIMIT $2 OFFSET $3) subquery_for_count[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mExposition::Post Load (3.2ms)[0m [1m[34mSELECT "exposition_posts".* FROM "exposition_posts" WHERE "exposition_posts"."published" = $1 ORDER BY "exposition_posts"."published_at" DESC LIMIT $2 OFFSET $3[0m [["published", true], ["LIMIT", 10], ["OFFSET", 0]]
- [1m[36mCategorical::Tag Exists (1.1ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 1], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (5.3ms)
- [1m[36mCategorical::Tag Exists (1.5ms)[0m [1m[34mSELECT 1 AS one FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2 LIMIT $3[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"], ["LIMIT", 1]]
- [1m[36mCategorical::Tag Load (1.0ms)[0m [1m[34mSELECT "categorical_tags".* FROM "categorical_tags" INNER JOIN "categorical_taggings" ON "categorical_tags"."id" = "categorical_taggings"."tag_id" WHERE "categorical_taggings"."taggable_id" = $1 AND "categorical_taggings"."taggable_type" = $2[0m [["taggable_id", 2], ["taggable_type", "Exposition::Post"]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/_tags.html.haml (8.7ms)
- Rendered collection of /Users/jklina/Development/exposition/app/views/exposition/posts/_post.html.haml [2 times] (38.2ms)
- [1m[35m (1.3ms)[0m [1m[34mSELECT COUNT(*) FROM "exposition_posts" WHERE "exposition_posts"."published" = $1[0m [["published", true]]
- Rendered /Users/jklina/Development/exposition/app/views/exposition/posts/index.html.haml within layouts/exposition/application (65.6ms)
-Completed 200 OK in 112ms (Views: 96.8ms | ActiveRecord: 9.5ms)
-
-
+
+ActionView::Template::Error (undefined method `markdown_to_html' for #<#<Class:0x00007fcb10c48f50>:0x00007fcb10adeb38>):
+ 3: .content.summary
+ 4: %h2= link_to(post.title, post)
+ 5: = preserve do
+ 6: = markdown_to_html(post.summary)
+ 7: %section.info
+ 8: = render 'exposition/posts/tags', tags: post.tags
+
+/Users/joshuaklina/Development/exposition/app/views/exposition/posts/_post.html.haml:6
+haml (5.1.2) lib/haml/helpers.rb:379:in `block in capture_haml'
+haml (5.1.2) lib/haml/helpers.rb:664:in `with_haml_buffer'
+haml (5.1.2) lib/haml/helpers.rb:375:in `capture_haml'
+haml (5.1.2) lib/haml/helpers/xss_mods.rb:63:in `capture_haml_with_haml_xss'
+haml (5.1.2) lib/haml/helpers.rb:134:in `preserve'
+haml (5.1.2) lib/haml/helpers/xss_mods.rb:34:in `preserve_with_haml_xss'
+/Users/joshuaklina/Development/exposition/app/views/exposition/posts/_post.html.haml:5
+actionview (6.0.2.1) lib/action_view/base.rb:274:in `_run'
+actionview (6.0.2.1) lib/action_view/template.rb:185:in `block in render'
+activesupport (6.0.2.1) lib/active_support/notifications.rb:182:in `instrument'
+actionview (6.0.2.1) lib/action_view/template.rb:386:in `instrument_render_template'
+actionview (6.0.2.1) lib/action_view/template.rb:183:in `render'
+actionview (6.0.2.1) lib/action_view/renderer/partial_renderer.rb:452:in `block in collection_with_template'
+actionview (6.0.2.1) lib/action_view/renderer/partial_renderer.rb:448:in `map'
+actionview (6.0.2.1) lib/action_view/renderer/partial_renderer.rb:448:in `collection_with_template'
+activerecord (6.0.2.1) lib/active_record/railties/collection_cache_association_loading.rb:30:in `collection_with_template'
+actionview (6.0.2.1) lib/action_view/renderer/partial_renderer.rb:337:in `block (2 levels) in render_collection'
+actionview (6.0.2.1) lib/action_view/renderer/partial_renderer/collection_caching.rb:15:in `cache_collection_render'
+actionview (6.0.2.1) lib/action_view/renderer/partial_renderer.rb:336:in `block in render_collection'
+actionview (6.0.2.1) lib/action_view/renderer/abstract_renderer.rb:89:in `block in instrument'
+activesupport (6.0.2.1) lib/active_support/notifications.rb:180:in `block in instrument'
+activesupport (6.0.2.1) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
+activesupport (6.0.2.1) lib/active_support/notifications.rb:180:in `instrument'
+actionview (6.0.2.1) lib/action_view/renderer/abstract_renderer.rb:88:in `instrument'
+actionview (6.0.2.1) lib/action_view/renderer/partial_renderer.rb:325:in `render_collection'
+actionview (6.0.2.1) lib/action_view/renderer/partial_renderer.rb:315:in `render'
+actionview (6.0.2.1) lib/action_view/renderer/renderer.rb:65:in `render_partial_to_object'
+actionview (6.0.2.1) lib/action_view/renderer/renderer.rb:53:in `render_partial'
+actionview (6.0.2.1) lib/action_view/helpers/rendering_helper.rb:38:in `render'
+haml (5.1.2) lib/haml/helpers/action_view_mods.rb:13:in `block in render'
+haml (5.1.2) lib/haml/helpers.rb:93:in `non_haml'
+haml (5.1.2) lib/haml/helpers/action_view_mods.rb:13:in `render'
+/Users/joshuaklina/Development/exposition/app/views/exposition/posts/index.html.haml:3
+actionview (6.0.2.1) lib/action_view/base.rb:274:in `_run'
+actionview (6.0.2.1) lib/action_view/template.rb:185:in `block in render'
+activesupport (6.0.2.1) lib/active_support/notifications.rb:182:in `instrument'
+actionview (6.0.2.1) lib/action_view/template.rb:386:in `instrument_render_template'
+actionview (6.0.2.1) lib/action_view/template.rb:183:in `render'
+actionview (6.0.2.1) lib/action_view/renderer/template_renderer.rb:59:in `block (2 levels) in render_template'
+actionview (6.0.2.1) lib/action_view/renderer/abstract_renderer.rb:89:in `block in instrument'
+activesupport (6.0.2.1) lib/active_support/notifications.rb:180:in `block in instrument'
+activesupport (6.0.2.1) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
+activesupport (6.0.2.1) lib/active_support/notifications.rb:180:in `instrument'
+actionview (6.0.2.1) lib/action_view/renderer/abstract_renderer.rb:88:in `instrument'
+actionview (6.0.2.1) lib/action_view/renderer/template_renderer.rb:58:in `block in render_template'
+actionview (6.0.2.1) lib/action_view/renderer/template_renderer.rb:66:in `render_with_layout'
+actionview (6.0.2.1) lib/action_view/renderer/template_renderer.rb:57:in `render_template'
+actionview (6.0.2.1) lib/action_view/renderer/template_renderer.rb:13:in `render'
+actionview (6.0.2.1) lib/action_view/renderer/renderer.rb:61:in `render_template_to_object'
+actionview (6.0.2.1) lib/action_view/renderer/renderer.rb:29:in `render_to_object'
+actionview (6.0.2.1) lib/action_view/rendering.rb:118:in `block in _render_template'
+actionview (6.0.2.1) lib/action_view/base.rb:304:in `in_rendering_context'
+actionview (6.0.2.1) lib/action_view/rendering.rb:117:in `_render_template'
+actionpack (6.0.2.1) lib/action_controller/metal/streaming.rb:219:in `_render_template'
+actionview (6.0.2.1) lib/action_view/rendering.rb:103:in `render_to_body'
+actionpack (6.0.2.1) lib/action_controller/metal/rendering.rb:52:in `render_to_body'
+actionpack (6.0.2.1) lib/action_controller/metal/renderers.rb:142:in `render_to_body'
+actionpack (6.0.2.1) lib/abstract_controller/rendering.rb:25:in `render'
+actionpack (6.0.2.1) lib/action_controller/metal/rendering.rb:36:in `render'
+actionpack (6.0.2.1) lib/action_controller/metal/instrumentation.rb:44:in `block (2 levels) in render'
+activesupport (6.0.2.1) lib/active_support/core_ext/benchmark.rb:14:in `block in ms'
+/Users/joshuaklina/.rbenv/versions/2.5.3/lib/ruby/2.5.0/benchmark.rb:308:in `realtime'
+activesupport (6.0.2.1) lib/active_support/core_ext/benchmark.rb:14:in `ms'
+actionpack (6.0.2.1) lib/action_controller/metal/instrumentation.rb:44:in `block in render'
+actionpack (6.0.2.1) lib/action_controller/metal/instrumentation.rb:85:in `cleanup_view_runtime'
+activerecord (6.0.2.1) lib/active_record/railties/controller_runtime.rb:34:in `cleanup_view_runtime'
+actionpack (6.0.2.1) lib/action_controller/metal/instrumentation.rb:43:in `render'
+actionpack (6.0.2.1) lib/action_controller/metal/implicit_render.rb:35:in `default_render'
+actionpack (6.0.2.1) lib/action_controller/metal/basic_implicit_render.rb:6:in `block in send_action'
+actionpack (6.0.2.1) lib/action_controller/metal/basic_implicit_render.rb:6:in `tap'
+actionpack (6.0.2.1) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
+actionpack (6.0.2.1) lib/abstract_controller/base.rb:196:in `process_action'
+actionpack (6.0.2.1) lib/action_controller/metal/rendering.rb:30:in `process_action'
+actionpack (6.0.2.1) lib/abstract_controller/callbacks.rb:42:in `block in process_action'
+activesupport (6.0.2.1) lib/active_support/callbacks.rb:135:in `run_callbacks'
+actionpack (6.0.2.1) lib/abstract_controller/callbacks.rb:41:in `process_action'
+actionpack (6.0.2.1) lib/action_controller/metal/rescue.rb:22:in `process_action'
+actionpack (6.0.2.1) lib/action_controller/metal/instrumentation.rb:33:in `block in process_action'
+activesupport (6.0.2.1) lib/active_support/notifications.rb:180:in `block in instrument'
+activesupport (6.0.2.1) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
+activesupport (6.0.2.1) lib/active_support/notifications.rb:180:in `instrument'
+actionpack (6.0.2.1) lib/action_controller/metal/instrumentation.rb:32:in `process_action'
+actionpack (6.0.2.1) lib/action_controller/metal/params_wrapper.rb:245:in `process_action'
+activerecord (6.0.2.1) lib/active_record/railties/controller_runtime.rb:27:in `process_action'
+actionpack (6.0.2.1) lib/abstract_controller/base.rb:136:in `process'
+actionview (6.0.2.1) lib/action_view/rendering.rb:39:in `process'
+actionpack (6.0.2.1) lib/action_controller/metal.rb:191:in `dispatch'
+actionpack (6.0.2.1) lib/action_controller/metal.rb:252:in `dispatch'
+actionpack (6.0.2.1) lib/action_dispatch/routing/route_set.rb:51:in `dispatch'
+actionpack (6.0.2.1) lib/action_dispatch/routing/route_set.rb:33:in `serve'
+actionpack (6.0.2.1) lib/action_dispatch/journey/router.rb:49:in `block in serve'
+actionpack (6.0.2.1) lib/action_dispatch/journey/router.rb:32:in `each'
+actionpack (6.0.2.1) lib/action_dispatch/journey/router.rb:32:in `serve'
+actionpack (6.0.2.1) lib/action_dispatch/routing/route_set.rb:837:in `call'
+railties (6.0.2.1) lib/rails/engine.rb:526:in `call'
+railties (6.0.2.1) lib/rails/railtie.rb:190:in `public_send'
+railties (6.0.2.1) lib/rails/railtie.rb:190:in `method_missing'
+actionpack (6.0.2.1) lib/action_dispatch/routing/mapper.rb:19:in `block in <class:Constraints>'
+actionpack (6.0.2.1) lib/action_dispatch/routing/mapper.rb:48:in `serve'
+actionpack (6.0.2.1) lib/action_dispatch/journey/router.rb:49:in `block in serve'
+actionpack (6.0.2.1) lib/action_dispatch/journey/router.rb:32:in `each'
+actionpack (6.0.2.1) lib/action_dispatch/journey/router.rb:32:in `serve'
+actionpack (6.0.2.1) lib/action_dispatch/routing/route_set.rb:837:in `call'
+rack (2.0.8) lib/rack/tempfile_reaper.rb:15:in `call'
+rack (2.0.8) lib/rack/etag.rb:25:in `call'
+rack (2.0.8) lib/rack/conditional_get.rb:25:in `call'
+rack (2.0.8) lib/rack/head.rb:12:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/http/content_security_policy.rb:18:in `call'
+rack (2.0.8) lib/rack/session/abstract/id.rb:259:in `context'
+rack (2.0.8) lib/rack/session/abstract/id.rb:253:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/cookies.rb:648:in `call'
+activerecord (6.0.2.1) lib/active_record/migration.rb:567:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
+activesupport (6.0.2.1) lib/active_support/callbacks.rb:101:in `run_callbacks'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/executor.rb:14:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/actionable_exceptions.rb:17:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:32:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
+railties (6.0.2.1) lib/rails/rack/logger.rb:38:in `call_app'
+railties (6.0.2.1) lib/rails/rack/logger.rb:26:in `block in call'
+activesupport (6.0.2.1) lib/active_support/tagged_logging.rb:80:in `block in tagged'
+activesupport (6.0.2.1) lib/active_support/tagged_logging.rb:28:in `tagged'
+activesupport (6.0.2.1) lib/active_support/tagged_logging.rb:80:in `tagged'
+railties (6.0.2.1) lib/rails/rack/logger.rb:26:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/request_id.rb:27:in `call'
+rack (2.0.8) lib/rack/method_override.rb:22:in `call'
+rack (2.0.8) lib/rack/runtime.rb:22:in `call'
+activesupport (6.0.2.1) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/executor.rb:14:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/static.rb:126:in `call'
+rack (2.0.8) lib/rack/sendfile.rb:111:in `call'
+actionpack (6.0.2.1) lib/action_dispatch/middleware/host_authorization.rb:83:in `call'
+railties (6.0.2.1) lib/rails/engine.rb:526:in `call'
+rack (2.0.8) lib/rack/handler/webrick.rb:86:in `service'
+/Users/joshuaklina/.rbenv/versions/2.5.3/lib/ruby/2.5.0/webrick/httpserver.rb:140:in `service'
+/Users/joshuaklina/.rbenv/versions/2.5.3/lib/ruby/2.5.0/webrick/httpserver.rb:96:in `run'
+/Users/joshuaklina/.rbenv/versions/2.5.3/lib/ruby/2.5.0/webrick/server.rb:307:in `block in start_thread'