From c5c5ae201d8a9c382c9051932872d9b6268e66c4 Mon Sep 17 00:00:00 2001 From: Daniel Miranda Date: Wed, 13 May 2015 14:08:02 -0300 Subject: [PATCH] Prepare model for optional Reading Group/Configuration visibility [no-ci] --- app/models/kalibro_configuration.rb | 20 ++++++++++++++++++++ app/models/kalibro_configuration_attributes.rb | 13 +++++++++++++ app/models/kalibro_configuration_ownership.rb | 4 ---- app/models/reading_group.rb | 20 ++++++++++++++++++++ app/models/reading_group_attributes.rb | 13 +++++++++++++ app/models/reading_group_ownership.rb | 4 ---- app/models/user.rb | 4 ++-- db/migrate/20140124124835_create_mezuro_configuration_ownerships.rb | 6 +++--- db/migrate/20150511180712_rename_kalibro_configuration_ownerships_to_kalibro_confiugration_attributes.rb | 6 ++++++ db/migrate/20150511181035_rename_reading_group_ownerships_to_reading_group_attributes.rb | 6 ++++++ db/schema.rb | 29 +++++++++++++++++------------ spec/factories/kalibro_configuration_attributes.rb | 13 +++++++++++++ spec/factories/reading_group_attributes.rb | 13 +++++++++++++ spec/models/kalibro_configuration_attributes_spec.rb | 7 +++++++ spec/models/reading_group_attributes_spec.rb | 7 +++++++ 15 files changed, 140 insertions(+), 25 deletions(-) create mode 100644 app/models/kalibro_configuration_attributes.rb delete mode 100644 app/models/kalibro_configuration_ownership.rb create mode 100644 app/models/reading_group_attributes.rb delete mode 100644 app/models/reading_group_ownership.rb create mode 100644 db/migrate/20150511180712_rename_kalibro_configuration_ownerships_to_kalibro_confiugration_attributes.rb create mode 100644 db/migrate/20150511181035_rename_reading_group_ownerships_to_reading_group_attributes.rb create mode 100644 spec/factories/kalibro_configuration_attributes.rb create mode 100644 spec/factories/reading_group_attributes.rb create mode 100644 spec/models/kalibro_configuration_attributes_spec.rb create mode 100644 spec/models/reading_group_attributes_spec.rb diff --git a/app/models/kalibro_configuration.rb b/app/models/kalibro_configuration.rb index cdc51ab..aaff545 100644 --- a/app/models/kalibro_configuration.rb +++ b/app/models/kalibro_configuration.rb @@ -1,3 +1,23 @@ class KalibroConfiguration < KalibroClient::Entities::Configurations::KalibroConfiguration include KalibroRecord + + def self.public_or_owned_by_user(user=nil) + query = if user + KalibroConfigurationAttributes.where("user_id == ? OR public", user.id) + else + KalibroConfigurationAttributes.where(public: true) + end + + query.map { |cfg_attr| + self.find(cfg_attr.kalibro_configuration_id) + }.compact + end + + def self.public + self.public_or_owned_by_user(nil) + end + + def attributes + KalibroConfigurationAttributes.find_by(kalibro_configuration_id: self.id) + end end diff --git a/app/models/kalibro_configuration_attributes.rb b/app/models/kalibro_configuration_attributes.rb new file mode 100644 index 0000000..d4944bf --- /dev/null +++ b/app/models/kalibro_configuration_attributes.rb @@ -0,0 +1,13 @@ +class KalibroConfigurationAttributes < ActiveRecord::Base + belongs_to :user + validates :kalibro_configuration_id, presence: true + + def kalibro_configuration + @kalibro_configuration ||= KalibroConfiguration.find(kalibro_configuration_id) + end + + def kalibro_configuration=(cfg) + @kalibro_configuration = cfg + self.kalibro_configuration_id = cfg.id + end +end diff --git a/app/models/kalibro_configuration_ownership.rb b/app/models/kalibro_configuration_ownership.rb deleted file mode 100644 index 887edc1..0000000 --- a/app/models/kalibro_configuration_ownership.rb +++ /dev/null @@ -1,4 +0,0 @@ -class KalibroConfigurationOwnership < ActiveRecord::Base - belongs_to :user - validates :kalibro_configuration_id, presence: true -end diff --git a/app/models/reading_group.rb b/app/models/reading_group.rb index 67288f8..22d9dc1 100644 --- a/app/models/reading_group.rb +++ b/app/models/reading_group.rb @@ -1,3 +1,23 @@ class ReadingGroup < KalibroClient::Entities::Configurations::ReadingGroup include KalibroRecord + + def self.public_or_owned_by_user(user=nil) + query = if user + ReadingGroupAttributes.where("user_id == ? OR public", user.id) + else + ReadingGroupAttributes.where(public: true) + end + + query.map { |cfg_attr| + self.find(cfg_attr.reading_group_id) + }.compact + end + + def self.public + self.public_or_owned_by_user(nil) + end + + def attributes + ReadingGroupAttributes.find_by(reading_group_id: self.id) + end end diff --git a/app/models/reading_group_attributes.rb b/app/models/reading_group_attributes.rb new file mode 100644 index 0000000..aade0a8 --- /dev/null +++ b/app/models/reading_group_attributes.rb @@ -0,0 +1,13 @@ +class ReadingGroupAttributes < ActiveRecord::Base + belongs_to :user + validates :reading_group_id, presence: true + + def reading_group + @reading_group ||= ReadingGroup.find(reading_group_id) + end + + def reading_group=(group) + @reading_group = group + self.reading_group_id = group.id + end +end diff --git a/app/models/reading_group_ownership.rb b/app/models/reading_group_ownership.rb deleted file mode 100644 index 5318d9b..0000000 --- a/app/models/reading_group_ownership.rb +++ /dev/null @@ -1,4 +0,0 @@ -class ReadingGroupOwnership < ActiveRecord::Base - belongs_to :user - validates :reading_group_id, presence: true -end diff --git a/app/models/user.rb b/app/models/user.rb index f50d981..da3f9f0 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -9,8 +9,8 @@ class User < ActiveRecord::Base validates :email, uniqueness: true has_many :project_attributes, class_name: 'ProjectAttributes' - has_many :reading_group_ownerships - has_many :kalibro_configuration_ownerships + has_many :reading_group_attributess + has_many :kalibro_configuration_attributes # Alert: when adding new parameters to this model, they should also be added to registrations_controller def projects diff --git a/db/migrate/20140124124835_create_mezuro_configuration_ownerships.rb b/db/migrate/20140124124835_create_mezuro_configuration_ownerships.rb index 31797be..7dec5a5 100644 --- a/db/migrate/20140124124835_create_mezuro_configuration_ownerships.rb +++ b/db/migrate/20140124124835_create_mezuro_configuration_ownerships.rb @@ -1,8 +1,8 @@ -class CreateKalibroConfigurationOwnerships < ActiveRecord::Migration +class CreateMezuroConfigurationOwnerships < ActiveRecord::Migration def change - create_table :kalibro_configuration_ownerships do |t| + create_table :mezuro_configuration_ownerships do |t| t.integer :user_id - t.integer :kalibro_configuration_id + t.integer :mezuro_configuration_id t.timestamps end diff --git a/db/migrate/20150511180712_rename_kalibro_configuration_ownerships_to_kalibro_confiugration_attributes.rb b/db/migrate/20150511180712_rename_kalibro_configuration_ownerships_to_kalibro_confiugration_attributes.rb new file mode 100644 index 0000000..45e7c2f --- /dev/null +++ b/db/migrate/20150511180712_rename_kalibro_configuration_ownerships_to_kalibro_confiugration_attributes.rb @@ -0,0 +1,6 @@ +class RenameKalibroConfigurationOwnershipsToKalibroConfiugrationAttributes < ActiveRecord::Migration + def change + rename_table :kalibro_configuration_ownerships, :kalibro_configuration_attributes + add_column :kalibro_configuration_attributes, :public, :boolean, default: false + end +end diff --git a/db/migrate/20150511181035_rename_reading_group_ownerships_to_reading_group_attributes.rb b/db/migrate/20150511181035_rename_reading_group_ownerships_to_reading_group_attributes.rb new file mode 100644 index 0000000..b4155cb --- /dev/null +++ b/db/migrate/20150511181035_rename_reading_group_ownerships_to_reading_group_attributes.rb @@ -0,0 +1,6 @@ +class RenameReadingGroupOwnershipsToReadingGroupAttributes < ActiveRecord::Migration + def change + rename_table :reading_group_ownerships, :reading_group_attributes + add_column :reading_group_attributes, :public, :boolean, default: false + end +end diff --git a/db/schema.rb b/db/schema.rb index d2fe7bb..2db5d72 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,13 +11,17 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20150225170704) do +ActiveRecord::Schema.define(version: 20150511181035) do - create_table "kalibro_configuration_ownerships", force: :cascade do |t| + # These are extensions that must be enabled in order to support this database + enable_extension "plpgsql" + + create_table "kalibro_configuration_attributes", force: :cascade do |t| t.integer "user_id" t.integer "kalibro_configuration_id" t.datetime "created_at" t.datetime "updated_at" + t.boolean "public", default: false end create_table "project_attributes", force: :cascade do |t| @@ -29,30 +33,31 @@ ActiveRecord::Schema.define(version: 20150225170704) do t.datetime "updated_at", null: false end - create_table "reading_group_ownerships", force: :cascade do |t| + create_table "reading_group_attributes", force: :cascade do |t| t.integer "user_id" t.integer "reading_group_id" t.datetime "created_at" t.datetime "updated_at" + t.boolean "public", default: false end create_table "users", force: :cascade do |t| - t.string "name", limit: 255, default: "", null: false - t.string "email", limit: 255, default: "", null: false + t.string "name", default: "", null: false + t.string "email", default: "", null: false t.datetime "created_at" t.datetime "updated_at" - t.string "encrypted_password", limit: 255, default: "", null: false - t.string "reset_password_token", limit: 255 + t.string "encrypted_password", default: "", null: false + t.string "reset_password_token" t.datetime "reset_password_sent_at" t.datetime "remember_created_at" - t.integer "sign_in_count", default: 0 + t.integer "sign_in_count", default: 0 t.datetime "current_sign_in_at" t.datetime "last_sign_in_at" - t.string "current_sign_in_ip", limit: 255 - t.string "last_sign_in_ip", limit: 255 + t.string "current_sign_in_ip" + t.string "last_sign_in_ip" end - add_index "users", ["email"], name: "index_users_on_email", unique: true - add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true + add_index "users", ["email"], name: "index_users_on_email", unique: true, using: :btree + add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true, using: :btree end diff --git a/spec/factories/kalibro_configuration_attributes.rb b/spec/factories/kalibro_configuration_attributes.rb new file mode 100644 index 0000000..b017c26 --- /dev/null +++ b/spec/factories/kalibro_configuration_attributes.rb @@ -0,0 +1,13 @@ +# Read about factories at https://github.com/thoughtbot/factory_girl + +FactoryGirl.define do + factory :kalibro_configuration_attributes, class: KalibroConfigurationAttributes do + association :user, strategy: :build + association :kalibro_configuration, :with_id, strategy: :build + self.public false + + trait :public do + self.public true + end + end +end diff --git a/spec/factories/reading_group_attributes.rb b/spec/factories/reading_group_attributes.rb new file mode 100644 index 0000000..1b30512 --- /dev/null +++ b/spec/factories/reading_group_attributes.rb @@ -0,0 +1,13 @@ +# Read about factories at https://github.com/thoughtbot/factory_girl + +FactoryGirl.define do + factory :reading_group_attributes, class: ReadingGroupAttributes do + association :user, strategy: :build + association :reading_group, :with_id, strategy: :build + self.public false + + trait :public do + self.public true + end + end +end diff --git a/spec/models/kalibro_configuration_attributes_spec.rb b/spec/models/kalibro_configuration_attributes_spec.rb new file mode 100644 index 0000000..27cbd3b --- /dev/null +++ b/spec/models/kalibro_configuration_attributes_spec.rb @@ -0,0 +1,7 @@ +require 'rails_helper' + +describe KalibroConfigurationAttributes, :type => :model do + describe 'associations' do + it { is_expected.to belong_to(:user) } + end +end diff --git a/spec/models/reading_group_attributes_spec.rb b/spec/models/reading_group_attributes_spec.rb new file mode 100644 index 0000000..1a08bc3 --- /dev/null +++ b/spec/models/reading_group_attributes_spec.rb @@ -0,0 +1,7 @@ +require 'rails_helper' + +describe ReadingGroupAttributes, :type => :model do + describe 'associations' do + it { is_expected.to belong_to(:user) } + end +end -- libgit2 0.21.2