OSDN Git Service

temp
authoryasushiito <yas@pen-chan.jp>
Mon, 9 Dec 2013 23:40:12 +0000 (08:40 +0900)
committeryasushiito <yas@pen-chan.jp>
Mon, 9 Dec 2013 23:40:12 +0000 (08:40 +0900)
12 files changed:
app/assets/javascripts/configurations.js.coffee.erb
app/controllers/authors_controller.rb
app/controllers/home_controller.rb
app/models/author.rb
app/models/panel.rb
app/models/scroll.rb
app/models/scroll_panel.rb
app/views/authors/_summary.html.erb
lib/manifest/controller.rb
lib/manifest/list.rb
lib/manifest/profiler.rb
public/manifest.json

index 07d48b8..6784d73 100644 (file)
@@ -23,7 +23,7 @@
           item_name: 'scroll',\r
           type: 'list',\r
           list: {\r
-            list_name: 'public_list',\r
+            list_name: 'private_list',\r
             \r
           },\r
         },\r
         },\r
         by_scroll: {\r
           type: 'filter',\r
+          from: 'scroll',\r
           filter_key: 'scroll_id',\r
           list: {\r
             method: 'filtered_list',\r
       },\r
     },\r
     panel: {\r
+      default_page_size: 20, \r
+      lists: {\r
+        by_scroll: {\r
+          type: 'through_filter',\r
+          from: 'scroll',\r
+          through: 'scroll_panels',\r
+          filter_key: 'scroll_id',\r
+          list: {\r
+            method: 'filtered_list',\r
+          },\r
+        },\r
+      },\r
     },\r
     panel_picture: {\r
     },\r
             model_name: 'scroll_panel',\r
             list_name: 'by_scroll',\r
           }, \r
+          'panels.by_scroll': {\r
+            model_name: 'panel',\r
+            list_name: 'by_scroll',\r
+          }, \r
         }, \r
         columns: [\r
           'id', \r
index 0de9864..c958706 100644 (file)
@@ -11,12 +11,23 @@ class AuthorsController < ApplicationController
   before_filter :authenticate_admin!, :only => [:list, :browse]
 
   @@model = Author
+  @@controller = Pettanr::Application::manifest.controller_managers[@@model.item_name]
+  @@profiler_manager = Pettanr::Application::manifest.profiler_managers[@@model.item_name]
+  
   def index
-    set_filer
-
+    action_name = params[:action]
+    @action = @@controller.open(action_name, params, @operators)
+    @items = @action.items 
     respond_to do |format|
-      format_filer format
+      format.html {
+        @filer = @action.filer
+        render :template => 'system/filer', :locals => {
+          :filer => @filer
+        }
+      }
       format.json { render json: @items.to_json(@@model.list_json_opt) }
+      format.atom 
+      format.rss
     end
   end
 
index 716bedc..5ee2052 100644 (file)
@@ -42,8 +42,9 @@ class HomeController < ApplicationController
   
   def scrolls
     model = Scroll
-    controller = Pettanr::Application::manifest.controller_managers[model.item_name]
-    action_name = 'private'
+    controller_name = params[:controller]
+    action_name = params[:action]
+    controller = Pettanr::Application::manifest.controller_managers[controller_name]
     @action = controller.open(action_name, params, @operators)
     @items = @action.items 
 
index 63940e0..1c88fba 100644 (file)
@@ -2,7 +2,6 @@ class Author < Pettanr::Owner
   belongs_to :user
   has_many :scrolls
   has_many :comics
-  has_many :stories
   has_many :sheets
   has_many :panels
   belongs_to :working_panel, :class_name => "Panel"
@@ -11,6 +10,25 @@ class Author < Pettanr::Owner
   validates :working_panel_id, :numericality => {:allow_nil => true}
   validates :user_id, :numericality => true, :existence => {:both => false}
   
+  cattr_reader :singular, :plural
+  @@singular = 'Author'
+  @@plural = 'Authors'
+  def self.item_name
+    self.singular.underscore
+  end
+  
+  def item_name
+    self.class.item_name
+  end
+  
+  def self.path_name with_engine = false
+    self.plural.underscore
+  end
+  
+  def path_name 
+    self.class.path_name
+  end
+  
   @@valid_encode_columns += ['name']
   # @@visible_count_options = {}
   
index d2bfdf7..7856a9b 100644 (file)
@@ -18,6 +18,25 @@ class Panel < ActiveRecord::Base
   validates :author_id, :presence => true, :numericality => true, :existence => {:both => false}
   validates :publish, :presence => true, :numericality => true
   
+  cattr_reader :singular, :plural
+  @@singular = 'Panel'
+  @@plural = 'Panels'
+  def self.item_name
+    self.singular.underscore
+  end
+  
+  def item_name
+    self.class.item_name
+  end
+  
+  def self.path_name with_engine = false
+    self.plural.underscore
+  end
+  
+  def path_name 
+    self.class.path_name
+  end
+  
   before_validation :valid_encode
   
   def valid_encode
@@ -152,6 +171,10 @@ class Panel < ActiveRecord::Base
     page_size
   end
   
+  def self.list_order
+    'panels.updated_at desc'
+  end
+  
   def self.list_where
     'panels.publish > 0'
   end
index a41342c..4fe7a52 100644 (file)
@@ -27,6 +27,10 @@ class Scroll < ActiveRecord::Base
     self.class.path_name
   end
   
+  def self.owner_type
+    :author
+  end
+  
   def valid_encode
     ['title', 'description'].each do |a|
       next if attributes[a] == nil
index 520aacc..1860ac1 100644 (file)
@@ -8,6 +8,25 @@ class ScrollPanel < ActiveRecord::Base
   validates :author_id, :presence => true, :numericality => true, :existence => {:both => false}
   validates :t, :presence => true, :numericality => {:greater_than_or_equal_to => 0}
   
+  cattr_reader :singular, :plural
+  @@singular = 'ScrollPanel'
+  @@plural = 'ScrollPanels'
+  def self.item_name
+    self.singular.underscore
+  end
+  
+  def item_name
+    self.class.item_name
+  end
+  
+  def self.path_name with_engine = false
+    self.plural.underscore
+  end
+  
+  def path_name 
+    self.class.path_name
+  end
+  
   def supply_default
     self.scroll_id = nil
     self.panel_id = nil
index dc1e39f..01aac17 100644 (file)
@@ -3,8 +3,6 @@
   <%= link_to item.comics.size, comics_author_path(item)  %>
   S.
   <%= link_to item.scrolls.size, scrolls_author_path(item) %>
-  S.
-  <%= link_to item.stories.size, stories_author_path(item) %>
   P.
   <%= link_to item.panels.size, panels_author_path(item) %>
 </div>
index 74cb24d..fff689e 100644 (file)
@@ -48,8 +48,8 @@ module Pettanr
     end
     
     def open action_name, params, operators
-      name = if @controller_conf['item_name']
-        @controller_conf['item_name']
+      name = if @controller_manifest.actions[action_name]['item_name']
+        @controller_manifest.actions[action_name]['item_name']
       else
         @item_name
       end
index 4882d2e..a1e4c6d 100644 (file)
@@ -2,15 +2,16 @@
 module Pettanr
   class ListManager
     class PublicList
-      def initialize page, page_size, operators, item_name, conf, manifest
+      def initialize page, page_size, operators, item_name, list_name, conf, manifest
+        @operators = operators
         @item_name = item_name
+        @list_name = list_name
         @conf = conf
         @manifest = manifest
         @default_page_size = @conf['default_page_size'] || 25
         @max_page_size = @conf['max_page_size'] || 100
         @page = self.page_number(page) 
         @page_size = self.page_size page_size
-        @operators = operators
         
         @model = @item_name.classify.constantize
         @offset = (@page -1) * @page_size
@@ -44,15 +45,31 @@ module Pettanr
     end
     
     class PrivateList
-      def initialize page, page_size, operators, item_name, conf, manifest
-        @page = page
-        @page_size = page_size
+      def initialize page, page_size, operators, item_name, list_name, conf, manifest
         @operators = operators
         @item_name = item_name
         @conf = conf
         @manifest = manifest
+        @default_page_size = @conf['default_page_size'] || 25
+        @max_page_size = @conf['max_page_size'] || 100
+        @page = self.page_number(page) 
+        @page_size = self.page_size page_size
         
         @model = @item_name.classify.constantize
+        @offset = (@page -1) * @page_size
+      end
+      
+      def page_number prm = nil
+        page = prm.to_i
+        page = 1 if page < 1
+        page
+      end
+      
+      def page_size prm
+        page_size = prm.to_i
+        page_size = @max_page_size if page_size > @max_page_size
+        page_size = @default_page_size if page_size < 1
+        page_size
       end
       
       def where 
@@ -70,21 +87,25 @@ module Pettanr
       end
       
       def paginate
-        Kaminari.paginate_array(Array.new(@model.where(self.where()).includes(@model.list_opt).count, nil)).page(page).per(page_size)
+        Kaminari.paginate_array(Array.new(@model.where(self.where()).includes(@model.list_opt).count, nil)).page(@offset).per(@page_size)
       end
       
     end
     
     class HasManyList
-      def initialize page, page_size, operators, item_name, conf, manifest
-        @page = page
-        @page_size = page_size
+      def initialize page, page_size, operators, item_name, list_name, conf, manifest
         @operators = operators
         @item_name = item_name
+        @list_name = list_name
         @conf = conf
         @manifest = manifest
+        @default_page_size = @conf['default_page_size'] || 25
+        @max_page_size = @conf['max_page_size'] || 100
+        @page = self.page_number(page) 
+        @page_size = self.page_size page_size
         
         @model = @item_name.classify.constantize
+        @offset = (@page -1) * @page_size
         @association_name = @conf['association_name']
         @has_many_conf = @manifest.model(@item_name).associations['has_many'] || {}
         @association_conf = @has_many_conf[@association_name] || {}
@@ -93,6 +114,19 @@ module Pettanr
         @foreign_key = @association_conf['foreign_key']
       end
       
+      def page_number prm = nil
+        page = prm.to_i
+        page = 1 if page < 1
+        page
+      end
+      
+      def page_size prm
+        page_size = prm.to_i
+        page_size = @max_page_size if page_size > @max_page_size
+        page_size = @default_page_size if page_size < 1
+        page_size
+      end
+      
       def where parent_item
         w = @model.list_where
         w += ' and ' unless w.blank?
@@ -104,45 +138,119 @@ module Pettanr
       end
       
       def paginate
-        Kaminari.paginate_array(Array.new(@model.where(self.where(parent_item)).includes(@model.list_opt).count, nil)).page(page).per(page_size)
+        Kaminari.paginate_array(Array.new(@model.where(self.where(parent_item)).includes(@model.list_opt).count, nil)).page(@offset).per(@page_size)
       end
       
     end
     
     class FilterList
-      def initialize page, page_size, operators, item_name, conf, manifest
-        @page = page
-        @page_size = page_size
+      def initialize page, page_size, operators, item_name, list_name, conf, manifest
         @operators = operators
         @item_name = item_name
+        @list_name = list_name
         @conf = conf
         @manifest = manifest
+        @default_page_size = @conf['default_page_size'] || 25
+        @max_page_size = @conf['max_page_size'] || 100
+        @page = self.page_number(page) 
+        @page_size = self.page_size page_size
         
         @model = @item_name.classify.constantize
-        @filter_key = @conf['filter_key']
+        @table_name = @model.table_name
+        @offset = (@page -1) * @page_size
+        @list_list_conf = @manifest.list(@item_name).lists[list_name] || {}
+        @from = @list_list_conf['from']
+        @filter_key = @list_list_conf['filter_key']
+      end
+      
+      def page_number prm = nil
+        page = prm.to_i
+        page = 1 if page < 1
+        page
+      end
+      
+      def page_size prm
+        page_size = prm.to_i
+        page_size = @max_page_size if page_size > @max_page_size
+        page_size = @default_page_size if page_size < 1
+        page_size
+      end
+      
+      def list_opt
+        {@from => {} }
+      end
+      
+      def where filter_item
+        w = @model.list_where
+        w += ' and ' unless w.blank?
+        [w + @table_name + '.' + @filter_key + ' = ?', filter_item.id] 
+      end
+      
+      def items filter_item
+        @model.where(self.where(filter_item)).includes(self.list_opt).order(@model.list_order).offset(@offset).limit(@page_size)
+      end
+      
+      def paginate filter_item
+        Kaminari.paginate_array(Array.new(@model.where(self.where(filter_item)).includes(self.list_opt).count, nil)).page(@offset).per(@page_size)
+      end
+      
+    end
+    
+    class ThroughFilterList
+      def initialize page, page_size, operators, item_name, list_name, conf, manifest
+        @operators = operators
+        @item_name = item_name
+        @list_name = list_name
+        @conf = conf
+        @manifest = manifest
+        @default_page_size = @conf['default_page_size'] || 25
+        @max_page_size = @conf['max_page_size'] || 100
+        @page = self.page_number(page) 
+        @page_size = self.page_size page_size
+        
+        @model = @item_name.classify.constantize
+        @table_name = @model.table_name
+        @offset = (@page -1) * @page_size
+        @list_list_conf = @manifest.list(@item_name).lists[list_name] || {}
+        @filter_key = @list_list_conf['filter_key']
+        @from = @list_list_conf['from']
+        @through = @list_list_conf['through']
+      end
+      
+      def page_number prm = nil
+        page = prm.to_i
+        page = 1 if page < 1
+        page
+      end
+      
+      def page_size prm
+        page_size = prm.to_i
+        page_size = @max_page_size if page_size > @max_page_size
+        page_size = @default_page_size if page_size < 1
+        page_size
+      end
+      
+      def list_opt
+        {@through => {@from => {}} }
       end
       
       def where filter_item
         w = @model.list_where
         w += ' and ' unless w.blank?
-          p w
-          p @model.table_name
-          p @filter_key
-          p filter_item
-        [w + @model.table_name + '.' + @filter_key + ' = ?', filter_item.id] 
+        [w + @through + '.' + @filter_key + ' = ?', filter_item.id] 
       end
       
       def items filter_item
-        @model.where(self.where(filter_item)).includes(@model.list_opt).order(@model.list_order).offset(@offset).limit(@page_size)
+        @model.where(self.where(filter_item)).includes(self.list_opt).order(@model.list_order).offset(@offset).limit(@page_size)
       end
       
       def paginate filter_item
-        Kaminari.paginate_array(Array.new(@model.where(self.where(filter_item)).includes(@model.list_opt).count, nil)).page(page).per(page_size)
+        Kaminari.paginate_array(Array.new(@model.where(self.where(filter_item)).includes(self.list_opt).count, nil)).page(@offset).per(@page_size)
       end
       
     end
     
-    @@types = {'public' => PublicList, 'private' => PrivateList, 'has_many' => HasManyList, 'filter' => FilterList}
+    @@types = {'public' => PublicList, 'private' => PrivateList, 'has_many' => HasManyList, 'filter' => FilterList, 'through_filter' => ThroughFilterList}
     def initialize list_manifest
       @list_manifest = list_manifest
       @item_name = @list_manifest.item_name
@@ -156,7 +264,7 @@ module Pettanr
     end
     
     def open list_name, page, page_size, operators
-      @lists[list_name].new page, page_size, operators, @item_name, @list_conf, @manifest
+      @lists[list_name].new page, page_size, operators, @item_name, list_name, @list_conf, @manifest
     end
     
   end
index 30df16a..40e1fd2 100644 (file)
@@ -112,7 +112,7 @@ module Pettanr
           parent_model = self.modelize association_model_name
           parent = self.parent_item parent_model, model_belongs_to_conf
           if parent
-            parent_filer = @manifest.filer_managers[@item_name].open @item_name, [@item], @operators, nil
+            parent_filer = @manifest.filer_managers[parent_model.item_name].open parent_model.item_name, [parent], @operators, nil
             yield parent_filer
           end
         end
index 163f528..1b3898a 100644 (file)
@@ -21,7 +21,7 @@
                     "item_name": "scroll",\r
                     "type": "list",\r
                     "list": {\r
-                        "list_name": "public_list"\r
+                        "list_name": "private_list"\r
                     }\r
                 }\r
             }\r
                 },\r
                 "by_scroll": {\r
                     "type": "filter",\r
+                    "from": "scroll",\r
                     "filter_key": "scroll_id",\r
                     "list": {\r
                         "method": "filtered_list"\r
                 }\r
             }\r
         },\r
-        "panel": {},\r
+        "panel": {\r
+            "default_page_size": 20,\r
+            "lists": {\r
+                "by_scroll": {\r
+                    "type": "through_filter",\r
+                    "from": "scroll",\r
+                    "through": "scroll_panels",\r
+                    "filter_key": "scroll_id",\r
+                    "list": {\r
+                        "method": "filtered_list"\r
+                    }\r
+                }\r
+            }\r
+        },\r
         "panel_picture": {},\r
         "speech_balloon": {},\r
         "speech": {},\r
                     "scroll_panels.by_scroll": {\r
                         "model_name": "scroll_panel",\r
                         "list_name": "by_scroll"\r
+                    },\r
+                    "panels.by_scroll": {\r
+                        "model_name": "panel",\r
+                        "list_name": "by_scroll"\r
                     }\r
                 },\r
                 "columns": [\r