aboutsummaryrefslogtreecommitdiff
path: root/interfaces/ruby/models
diff options
context:
space:
mode:
Diffstat (limited to 'interfaces/ruby/models')
-rw-r--r--interfaces/ruby/models/comment.rb20
-rw-r--r--interfaces/ruby/models/config.rb17
-rw-r--r--interfaces/ruby/models/post.rb18
-rw-r--r--interfaces/ruby/models/tag.rb26
4 files changed, 81 insertions, 0 deletions
diff --git a/interfaces/ruby/models/comment.rb b/interfaces/ruby/models/comment.rb
new file mode 100644
index 0000000..b3977f6
--- /dev/null
+++ b/interfaces/ruby/models/comment.rb
@@ -0,0 +1,20 @@
+class Comment < ActiveRecord::Base
+ belongs_to :post
+ validates_presence_of :date
+ validates_presence_of :author
+ validates_presence_of :email
+ validates_format_of :email, with: /@/
+ validates_presence_of :body
+end
+
+class CreateCommentTable < ActiveRecord::Migration[6.0]
+ def change
+ create_table :comments do |t|
+ t.references :post, foreign_key: true, index: true
+ t.string :author, null: false
+ t.string :email, null: false
+ t.string :body, null: false
+ t.timestamps
+ end
+ end
+end
diff --git a/interfaces/ruby/models/config.rb b/interfaces/ruby/models/config.rb
new file mode 100644
index 0000000..55b4106
--- /dev/null
+++ b/interfaces/ruby/models/config.rb
@@ -0,0 +1,17 @@
+class Config < ActiveRecord::Base
+ self.table_name = 'config'
+ validates_presence_of :title
+ validates_presence_of :timezone
+ validates_presence_of :postsperpage
+end
+
+class CreateConfigTable < ActiveRecord::Migration[6.0]
+ def change
+ create_table :config do |t|
+ t.string :title, null: false
+ t.string :subtitle
+ t.string :timezone, null: false
+ t.integer :postsperpage, null: false
+ end
+ end
+end
diff --git a/interfaces/ruby/models/post.rb b/interfaces/ruby/models/post.rb
new file mode 100644
index 0000000..1d44051
--- /dev/null
+++ b/interfaces/ruby/models/post.rb
@@ -0,0 +1,18 @@
+class Post < ActiveRecord::Base
+ has_many :comments
+ has_many :tags, through: :post_tag_links
+
+ validates_presence_of :title
+ validates_presence_of :body
+end
+
+class CreatePostTable < ActiveRecord::Migration[6.0]
+ def change
+ create_table :posts do |t|
+ t.string :title, null: false
+ t.string :body, null: false
+ t.boolean :locked, default: false
+ t.timestamps
+ end
+ end
+end
diff --git a/interfaces/ruby/models/tag.rb b/interfaces/ruby/models/tag.rb
new file mode 100644
index 0000000..9c24b6c
--- /dev/null
+++ b/interfaces/ruby/models/tag.rb
@@ -0,0 +1,26 @@
+class PostTagLink < ActiveRecord::Base
+ belongs_to :post
+ belongs_to :tag
+end
+
+class CreatePostTagLinkTable < ActiveRecord::Migration[6.0]
+ def change
+ create_table :post_tag_links do |t|
+ t.references :post, foreign_key: true, index: true
+ t.references :tag, foreign_key: true, index: true
+ end
+ end
+end
+
+class Tag < ActiveRecord::Base
+ belongs_to :post
+ validates_presence_of :name
+end
+
+class CreateTagTable < ActiveRecord::Migration[6.0]
+ def change
+ create_table :tags do |t|
+ t.string :name, null: false
+ end
+ end
+end