summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/models/flag.rb3
-rw-r--r--app/models/page.rb22
-rw-r--r--db/migrate/20090201211159_create_flags.rb13
-rw-r--r--db/migrate/20090201211523_add_join_table_for_flags_pages.rb15
-rw-r--r--test/fixtures/flags.yml7
-rw-r--r--test/unit/flag_test.rb8
6 files changed, 57 insertions, 11 deletions
diff --git a/app/models/flag.rb b/app/models/flag.rb
new file mode 100644
index 0000000..6d67377
--- /dev/null
+++ b/app/models/flag.rb
@@ -0,0 +1,3 @@
1class Flag < ActiveRecord::Base
2 has_and_belongs_to_many :pages
3end
diff --git a/app/models/page.rb b/app/models/page.rb
index 3d02e9f..d5d888f 100644
--- a/app/models/page.rb
+++ b/app/models/page.rb
@@ -1,9 +1,19 @@
1class Page < ActiveRecord::Base 1class Page < ActiveRecord::Base
2 2
3 belongs_to :node 3 belongs_to :node
4 has_and_belongs_to_many :flags
4 5
5 acts_as_list :column => :revision, :scope => :node_id 6 acts_as_list :column => :revision, :scope => :node_id
6 7
8 named_scope :with_flags, lambda {|flag_names|
9 if (flags = Flag.find_all_by_name(flag_names)).empty?
10 {}
11 else
12 {:include => :flags, :conditions => ['flags_pages.flag_id IN (?)', flags.map(&:id)] }
13 end
14 }
15
16
7 17
8 # <aggregate 18 # <aggregate
9 # flags="updates pressemitteilungen" 19 # flags="updates pressemitteilungen"
@@ -29,14 +39,4 @@ class Page < ActiveRecord::Base
29 :order => "#{options[:order_by]} #{options[:order_direction]}" 39 :order => "#{options[:order_by]} #{options[:order_direction]}"
30 ) 40 )
31 end 41 end
32end 42end \ No newline at end of file
33
34
35named_scope :flagged_as, lambda { |flags|
36 conditions = {}
37 flags.each do |flag|
38 conditions[flag] = true
39 end
40
41 { :conditions => conditions }
42} \ No newline at end of file
diff --git a/db/migrate/20090201211159_create_flags.rb b/db/migrate/20090201211159_create_flags.rb
new file mode 100644
index 0000000..3b9da43
--- /dev/null
+++ b/db/migrate/20090201211159_create_flags.rb
@@ -0,0 +1,13 @@
1class CreateFlags < ActiveRecord::Migration
2 def self.up
3 create_table :flags do |t|
4 t.string :name
5
6 t.timestamps
7 end
8 end
9
10 def self.down
11 drop_table :flags
12 end
13end
diff --git a/db/migrate/20090201211523_add_join_table_for_flags_pages.rb b/db/migrate/20090201211523_add_join_table_for_flags_pages.rb
new file mode 100644
index 0000000..99eb9c9
--- /dev/null
+++ b/db/migrate/20090201211523_add_join_table_for_flags_pages.rb
@@ -0,0 +1,15 @@
1class AddJoinTableForFlagsPages < ActiveRecord::Migration
2 def self.up
3 create_table :flags_pages, :id => false do |t|
4 t.integer :flag_id
5 t.integer :page_id
6 end
7 add_index :flags_pages, [:flag_id]
8 add_index :flags_pages, [:page_id]
9 end
10
11 def self.down
12 remove_table :flags_pages
13 end
14
15end
diff --git a/test/fixtures/flags.yml b/test/fixtures/flags.yml
new file mode 100644
index 0000000..157d747
--- /dev/null
+++ b/test/fixtures/flags.yml
@@ -0,0 +1,7 @@
1# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
3one:
4 name: MyString
5
6two:
7 name: MyString
diff --git a/test/unit/flag_test.rb b/test/unit/flag_test.rb
new file mode 100644
index 0000000..49b0d96
--- /dev/null
+++ b/test/unit/flag_test.rb
@@ -0,0 +1,8 @@
1require 'test_helper'
2
3class FlagTest < ActiveSupport::TestCase
4 # Replace this with your real tests.
5 test "the truth" do
6 assert true
7 end
8end