OSDN Git Service

manifest list_group
authoryasushiito <yas@pen-chan.jp>
Wed, 26 Feb 2014 01:50:29 +0000 (10:50 +0900)
committeryasushiito <yas@pen-chan.jp>
Wed, 26 Feb 2014 01:50:29 +0000 (10:50 +0900)
47 files changed:
app/assets/javascripts/manifest/work/list_groups.js.coffee.erb [new file with mode: 0644]
app/assets/javascripts/manifest/work/lists.js.coffee.erb [deleted file]
app/assets/javascripts/panels.js.coffee
app/assets/javascripts/system.js.coffee
app/controllers/application_controller.rb
app/controllers/panels_controller.rb
lib/manifest.rb
lib/manifest/list.rb [deleted file]
lib/manifest/list/base.rb [deleted file]
lib/manifest/list/filter.rb [deleted file]
lib/manifest/list/foreign_filter.rb [deleted file]
lib/manifest/list/includes.rb [deleted file]
lib/manifest/list/includes/auto.rb [deleted file]
lib/manifest/list/includes/base.rb [deleted file]
lib/manifest/list/includes/method.rb [deleted file]
lib/manifest/list/play.rb [deleted file]
lib/manifest/list/private.rb [deleted file]
lib/manifest/list/public.rb [deleted file]
lib/manifest/list/system_resource.rb [deleted file]
lib/manifest/list/through_filter.rb [deleted file]
lib/manifest/list/where.rb [deleted file]
lib/manifest/list/where/auto.rb [deleted file]
lib/manifest/list/where/base.rb [deleted file]
lib/manifest/list/where/method.rb [deleted file]
lib/manifest/list_group.rb [new file with mode: 0644]
lib/manifest/list_group/list.rb [new file with mode: 0644]
lib/manifest/list_group/list/base.rb [new file with mode: 0644]
lib/manifest/list_group/list/filter.rb [new file with mode: 0644]
lib/manifest/list_group/list/foreign_filter.rb [new file with mode: 0644]
lib/manifest/list_group/list/includes.rb [new file with mode: 0644]
lib/manifest/list_group/list/includes/auto.rb [new file with mode: 0644]
lib/manifest/list_group/list/includes/base.rb [new file with mode: 0644]
lib/manifest/list_group/list/includes/method.rb [new file with mode: 0644]
lib/manifest/list_group/list/includes/none.rb [new file with mode: 0644]
lib/manifest/list_group/list/play.rb [new file with mode: 0644]
lib/manifest/list_group/list/private.rb [new file with mode: 0644]
lib/manifest/list_group/list/public.rb [moved from lib/manifest/list/includes/none.rb with 58% similarity]
lib/manifest/list_group/list/system_resource.rb [new file with mode: 0644]
lib/manifest/list_group/list/through_filter.rb [new file with mode: 0644]
lib/manifest/list_group/list/where.rb [new file with mode: 0644]
lib/manifest/list_group/list/where/auto.rb [new file with mode: 0644]
lib/manifest/list_group/list/where/base.rb [new file with mode: 0644]
lib/manifest/list_group/list/where/method.rb [new file with mode: 0644]
lib/manifest/manifest.rb
lib/manifest/profiler/association/has_many.rb
lib/manifest/system_resource.rb
public/manifest.json

diff --git a/app/assets/javascripts/manifest/work/list_groups.js.coffee.erb b/app/assets/javascripts/manifest/work/list_groups.js.coffee.erb
new file mode 100644 (file)
index 0000000..e011230
--- /dev/null
@@ -0,0 +1,256 @@
+#マニフェスト\r
+@list_groups = {\r
+  scroll: {\r
+    lists: {\r
+      public: {\r
+      },\r
+      private: {\r
+      },\r
+      by_author: {\r
+      },\r
+      by_panel: {\r
+      },\r
+      play: {\r
+      },\r
+    },\r
+  },\r
+  scroll_panel: {\r
+    tree_name: 'owner'\r
+    lists: {\r
+      public: {\r
+      },\r
+      private: {\r
+      },\r
+      by_scroll: {\r
+      },\r
+      by_panel: {\r
+      },\r
+    },\r
+  },\r
+  comic: {\r
+    lists: {\r
+      public: {\r
+      },\r
+      private: {\r
+      },\r
+      by_author: {\r
+      },\r
+    },\r
+  },\r
+  story: {\r
+    lists: {\r
+      public: {\r
+      },\r
+      private: {\r
+      },\r
+      by_comic: {\r
+      },\r
+      by_sheet: {\r
+      },\r
+      by_author: {\r
+      },\r
+      play: {\r
+      },\r
+    },\r
+  },\r
+  story_sheet: {\r
+    lists: {\r
+      public: {\r
+      },\r
+      private: {\r
+      },\r
+      by_story: {\r
+      },\r
+      by_sheet: {\r
+      },\r
+    },\r
+  },\r
+  sheet: {\r
+    lists: {\r
+      public: {\r
+      },\r
+      private: {\r
+      },\r
+      by_story: {\r
+      },\r
+      by_panel: {\r
+      },\r
+      by_author: {\r
+      },\r
+      play: {\r
+      },\r
+    },\r
+  },\r
+  sheet_panel: {\r
+    lists: {\r
+      public: {\r
+      },\r
+      private: {\r
+      },\r
+      by_sheet: {\r
+      },\r
+      by_panel: {\r
+      },\r
+    },\r
+  },\r
+  panel: {\r
+    lists: {\r
+      public: {\r
+      },\r
+      private: {\r
+      },\r
+      by_scroll: {\r
+      },\r
+      by_sheet: {\r
+      },\r
+      by_author: {\r
+      },\r
+      by_speech_balloon_template: {\r
+      },\r
+    },\r
+  },\r
+  panel_picture: {\r
+    lists: {\r
+      public: {\r
+      },\r
+      private: {\r
+      },\r
+      by_panel: {\r
+      },\r
+      by_author: {\r
+      },\r
+    },\r
+  },\r
+  speech_balloon: {\r
+    lists: {\r
+      public: {\r
+      },\r
+      private: {\r
+      },\r
+      by_panel: {\r
+      },\r
+      by_speech_balloon_template: {\r
+      },\r
+      by_author: {\r
+      },\r
+    },\r
+  },\r
+  speech: {\r
+    lists: {\r
+      public: {\r
+      },\r
+      by_speech_balloon: {\r
+      },\r
+      by_writing_format: {\r
+      },\r
+    },\r
+  },\r
+  balloon: {\r
+    lists: {\r
+      public: {\r
+      },\r
+      by_speech_balloon: {\r
+      },\r
+      #by_system_picture: {\r
+      #},\r
+    },\r
+  },\r
+  ground_picture: {\r
+    lists: {\r
+      public: {\r
+      },\r
+      private: {\r
+      },\r
+      by_panel: {\r
+      },\r
+      by_author: {\r
+      },\r
+    },\r
+  },\r
+  ground_color: {\r
+    lists: {\r
+      public: {\r
+      },\r
+      private: {\r
+      },\r
+      by_panel: {\r
+      },\r
+      by_author: {\r
+      },\r
+    },\r
+  },\r
+  original_picture: {\r
+    lists: {\r
+      private: {\r
+      },\r
+    },\r
+  },\r
+  picture: {\r
+  },\r
+  resource_picture: {\r
+    lists: {\r
+      public: {\r
+      },\r
+      private: {\r
+      },\r
+      by_license: {\r
+      },\r
+      by_artist: {\r
+      },\r
+    },\r
+  },\r
+  speech_balloon_template: {\r
+    lists: {\r
+      public: {\r
+      },\r
+      select_items: {\r
+      },\r
+    },\r
+  },\r
+  writing_format: {\r
+    lists: {\r
+      public: {\r
+      },\r
+      select_items: {\r
+      },\r
+      by_system_picture: {\r
+      },\r
+    },\r
+  },\r
+  license_group: {\r
+    lists: {\r
+      public: {\r
+      },\r
+      select_items: {\r
+      },\r
+    },\r
+  },\r
+  license: {\r
+    lists: {\r
+      public: {\r
+      },\r
+      by_license_group: {\r
+      },\r
+      by_system_picture: {\r
+      },\r
+    },\r
+  },\r
+  author: {\r
+    lists: {\r
+      public: {\r
+      },\r
+    },\r
+  },\r
+  artist: {\r
+    lists: {\r
+      public: {\r
+      },\r
+    },\r
+  },\r
+  system_picture: {\r
+    lists: {\r
+      public: {\r
+      },\r
+    },\r
+  },\r
+}\r
diff --git a/app/assets/javascripts/manifest/work/lists.js.coffee.erb b/app/assets/javascripts/manifest/work/lists.js.coffee.erb
deleted file mode 100644 (file)
index d3add6f..0000000
+++ /dev/null
@@ -1,209 +0,0 @@
-#マニフェスト\r
-@lists = {\r
-  scroll: {\r
-    public: {\r
-    },\r
-    private: {\r
-    },\r
-    by_author: {\r
-    },\r
-    by_panel: {\r
-    },\r
-    play: {\r
-    },\r
-  },\r
-  scroll_panel: {\r
-    public: {\r
-    },\r
-    private: {\r
-    },\r
-    by_scroll: {\r
-    },\r
-    by_panel: {\r
-    },\r
-  },\r
-  comic: {\r
-    public: {\r
-    },\r
-    private: {\r
-    },\r
-    by_author: {\r
-    },\r
-  },\r
-  story: {\r
-    public: {\r
-    },\r
-    private: {\r
-    },\r
-    by_comic: {\r
-    },\r
-    by_sheet: {\r
-    },\r
-    by_author: {\r
-    },\r
-    play: {\r
-    },\r
-  },\r
-  story_sheet: {\r
-    public: {\r
-    },\r
-    private: {\r
-    },\r
-    by_story: {\r
-    },\r
-    by_sheet: {\r
-    },\r
-  },\r
-  sheet: {\r
-    public: {\r
-    },\r
-    private: {\r
-    },\r
-    by_story: {\r
-    },\r
-    by_panel: {\r
-    },\r
-    by_author: {\r
-    },\r
-    play: {\r
-    },\r
-  },\r
-  sheet_panel: {\r
-    public: {\r
-    },\r
-    private: {\r
-    },\r
-    by_sheet: {\r
-    },\r
-    by_panel: {\r
-    },\r
-  },\r
-  panel: {\r
-    public: {\r
-    },\r
-    private: {\r
-    },\r
-    by_scroll: {\r
-    },\r
-    by_sheet: {\r
-    },\r
-    by_author: {\r
-    },\r
-    by_speech_balloon_template: {\r
-    },\r
-  },\r
-  panel_picture: {\r
-    public: {\r
-    },\r
-    private: {\r
-    },\r
-    by_panel: {\r
-    },\r
-    by_author: {\r
-    },\r
-  },\r
-  speech_balloon: {\r
-    public: {\r
-    },\r
-    private: {\r
-    },\r
-    by_panel: {\r
-    },\r
-    by_speech_balloon_template: {\r
-    },\r
-    by_author: {\r
-    },\r
-  },\r
-  speech: {\r
-    public: {\r
-    },\r
-    by_speech_balloon: {\r
-    },\r
-    by_writing_format: {\r
-    },\r
-  },\r
-  balloon: {\r
-    public: {\r
-    },\r
-    by_speech_balloon: {\r
-    },\r
-    #by_system_picture: {\r
-    #},\r
-  },\r
-  ground_picture: {\r
-    public: {\r
-    },\r
-    private: {\r
-    },\r
-    by_panel: {\r
-    },\r
-    by_author: {\r
-    },\r
-  },\r
-  ground_color: {\r
-    public: {\r
-    },\r
-    private: {\r
-    },\r
-    by_panel: {\r
-    },\r
-    by_author: {\r
-    },\r
-  },\r
-  original_picture: {\r
-    private: {\r
-    },\r
-  },\r
-  picture: {\r
-  },\r
-  resource_picture: {\r
-    public: {\r
-    },\r
-    private: {\r
-    },\r
-    by_license: {\r
-    },\r
-    by_artist: {\r
-    },\r
-  },\r
-  speech_balloon_template: {\r
-    public: {\r
-    },\r
-    select_items: {\r
-    },\r
-  },\r
-  writing_format: {\r
-    public: {\r
-    },\r
-    select_items: {\r
-    },\r
-    by_system_picture: {\r
-    },\r
-  },\r
-  license_group: {\r
-    public: {\r
-    },\r
-    select_items: {\r
-    },\r
-  },\r
-  license: {\r
-    public: {\r
-    },\r
-    by_license_group: {\r
-    },\r
-    by_system_picture: {\r
-    },\r
-  },\r
-  author: {\r
-    public: {\r
-    },\r
-  },\r
-  artist: {\r
-    public: {\r
-    },\r
-  },\r
-  system_picture: {\r
-    public: {\r
-    },\r
-  },\r
-}\r
index 7223904..99cfedc 100644 (file)
@@ -16,7 +16,7 @@ $ ->
     locals: {\r
       profilers: window.profilers,\r
       filers: window.filers,\r
-      lists: window.lists,\r
+      list_groups: window.list_groups,\r
       elements: window.elements,\r
       forms: window.forms,\r
     }\r
index 292e3fa..255158a 100644 (file)
@@ -2,11 +2,11 @@ $ ->
   configurations =  {\r
     controllers: window.controllers,\r
     models: window.models,\r
-    lists: window.lists,\r
     system_resources: window.system_resources,\r
     magic_numbers: window.magic_numbers,\r
     select_items: window.select_items,\r
     locals: {\r
+      list_groups: window.list_groups,\r
       profilers: window.profilers,\r
       filers: window.filers,\r
       elements: window.elements,\r
index 679c1a1..20d2fd6 100644 (file)
@@ -118,8 +118,8 @@ class ApplicationController < ActionController::Base
   def set_list
     set_model
     @my_model_list = @my_model.lists[@my_action.list_name]
-    @my_list = Manifest.manifest.lists[@my_action.item_name]
-    @list = @my_list[@my_action.list_name]
+    @list_group = Manifest.manifest.list_groups[@my_action.item_name]
+    @list = @list_group.lists[@my_action.list_name]
   end
   
   def filer_list
@@ -219,7 +219,7 @@ class ApplicationController < ActionController::Base
   end
   
   def assist_items item_name, list_name
-    list = Manifest.manifest.lists[item_name][list_name]
+    list = Manifest.manifest.list_groups[item_name].lists[list_name]
     list_result = list.open(@operators, {:id => @item.id, :page => 1, :page_size => 5})
     list_result.items
   end
index 7220b2f..fa1d3fc 100644 (file)
@@ -34,14 +34,14 @@ class PanelsController < ApplicationController
     format.html {
       @panel = @item
       if @operators.author
-        @new_scroll_items = assist_items('scroll', 'private_list')
+        @new_scroll_items = assist_items('scroll', 'private')
         #@new_scroll_filer = assist_filer 'scroll', @new_scroll_items
-        @fresh_scroll_items = assist_items('scroll_panel', 'private_list').map {|sp| sp.scroll}
+        @fresh_scroll_items = assist_items('scroll_panel', 'private').map {|sp| sp.scroll}
         #@fresh_scroll_filer = assist_filer 'scroll', @fresh_scroll_items
         
-        @new_sheet_items = assist_items('sheet', 'private_list')
+        @new_sheet_items = assist_items('sheet', 'private')
         #@new_sheet_filer = assist_filer 'sheet', @new_sheet_items
-        @fresh_sheet_items = assist_items('sheet_panel', 'private_list').map {|sp| sp.sheet}
+        @fresh_sheet_items = assist_items('sheet_panel', 'private').map {|sp| sp.sheet}
         #@fresh_sheet_filer = assist_filer 'sheet', @fresh_sheet_items
       end
     }
index 96db517..056e05d 100644 (file)
@@ -6,7 +6,7 @@ require_dependency "manifest/model"
 require_dependency "manifest/profiler"
 require_dependency "manifest/filer"
 require_dependency "manifest/form"
-require_dependency "manifest/list"
+require_dependency "manifest/list_group"
 require_dependency "manifest/system_resource"
 require_dependency "manifest/local/view"
 Manifest::load JSON.parse(open(File.expand_path('../../public/manifest.json', __FILE__)).read)
diff --git a/lib/manifest/list.rb b/lib/manifest/list.rb
deleted file mode 100644 (file)
index 4fdd3f0..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-require_dependency "manifest/list/base"
-require_dependency "manifest/list/public"
-require_dependency "manifest/list/private"
-require_dependency "manifest/list/system_resource"
-require_dependency "manifest/list/filter"
-require_dependency "manifest/list/through_filter"
-require_dependency "manifest/list/foreign_filter"
-require_dependency "manifest/list/play"
-module Manifest
-  module ListModule
-    class ListFactory
-      @@types = {
-        'public' => ListModule::PublicList, 'private' => PrivateList, 'system_resource' => SystemResourceList,
-        'filter' => FilterList, 'through_filter' => ThroughFilterList, 'foreign_filter' => ForeignFilterList, 
-        'play' => PlayList
-      }
-      def self.factory manifest, item_name, my_manifests
-        lists = {}
-        my_manifests.each {|list_name, my_manifest|
-          model_manifest = manifest.models[item_name]
-          raise "undefined model for lists > #{item_name}\n" unless model_manifest
-          model_list_manifest = model_manifest.lists[list_name]
-          raise "undefined model_list for lists > #{item_name} > #{list_name}\n" unless model_list_manifest
-          type = model_list_manifest.type
-          raise "undefined type for lists > #{item_name} > #{list_name}\n" unless type
-          my_class = @@types[type]
-          raise "undefined class for lists > #{item_name} > #{list_name} > #{type}\n" unless my_class
-          lists[list_name] = my_class.new(manifest, item_name, list_name, my_manifest)
-        }
-        lists
-      end
-      
-    end
-  end
-  
-  class List
-    include ListModule
-    def self.manager manifest, my_manifests
-      lists = {}
-      my_manifests.each {|item_name, list_manifest|
-        lists[item_name] = ListModule::ListFactory.factory(manifest, item_name, list_manifest)
-      }
-      lists
-    end
-  end
-  
-end
-
diff --git a/lib/manifest/list/base.rb b/lib/manifest/list/base.rb
deleted file mode 100644 (file)
index a771846..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-require_dependency "manifest/list/where"
-require_dependency "manifest/list/includes"
-module Manifest
-  module ListModule
-    class Base
-      class ListResult
-        attr :items, :paginate
-        def initialize items, paginate
-          @items = items
-          @paginate = paginate
-        end
-        
-      end
-      
-      attr :manifest, :item_name, :list_name, :list_manifest, 
-        :model, :model_manifest, :model_list_manifest, 
-        :where, :includes
-      def initialize manifest, item_name, list_name, list_manifest
-        @manifest = manifest
-        @item_name = item_name
-        @list_name = list_name
-        @list_manifest = list_manifest
-        self.set_default
-        self.init
-      end
-      
-      def set_default
-        @model_manifest = @manifest.models[@item_name]
-        @model_list_manifest = @model_manifest.lists[@list_name]
-        @list_manifest['where'] ||= {}
-        @list_manifest['includes'] ||= {}
-      end
-      
-      def init
-        @model = ::Manifest.item_name_to_model @item_name
-        @table_name = @model.table_name
-        @where = WhereFactory.factory self, @list_manifest['where']
-        @includes = IncludeFactory.factory self, @list_manifest['includes']
-      end
-      
-      def default_page_size
-        @model_list_manifest.default_page_size
-      end
-      
-      def max_page_size
-        @model_list_manifest.max_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 = self.max_page_size if page_size > self.max_page_size
-        page_size = self.default_page_size if page_size < 1
-        page_size
-      end
-      
-      def base_where_condition
-        method_name = @where.conditions do |name|
-          name
-        end
-        @model.__send__ method_name
-      end
-      
-      def where_condition
-        base_where_condition
-      end
-      
-      def include_hash
-        @includes.includes
-      end
-      
-      def order
-        @model.list_order
-      end
-      
-      def items operators, options, offset, page_size
-        @model.where(self.where_condition).includes(self.include_hash).order(self.order).offset(offset).limit(page_size)
-      end
-      
-      def count operators, options
-        @model.where(self.where_condition).includes(self.include_hash).count
-      end
-      
-      def paginate count, offset, page_size
-        c = count ? count.to_i : 0
-        Kaminari.paginate_array(Array.new(c, nil)).page(offset).per(page_size)
-      end
-      
-      def open operators, options
-        page = self.page_number(options[:page]) 
-        page_size = self.page_size options[:page_size]
-        offset = (page -1) * page_size
-        items = self.items operators, options, offset, page_size
-        count = self.count operators, options
-        pg = self.paginate count, offset, page_size
-        ListResult.new items, pg
-      end
-      
-    end
-  end
-end
diff --git a/lib/manifest/list/filter.rb b/lib/manifest/list/filter.rb
deleted file mode 100644 (file)
index b5a0d56..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-module Manifest
-  module ListModule
-    class FilterList < Base
-      
-      def set_default
-        super
-      end
-      
-      def init
-        super
-        @filter_item_name = @model_list_manifest.filter_item_name
-        @filter_key = @model_list_manifest.filter_key
-      end
-      
-      def where_condition filter_item_id
-        w = self.base_where_condition
-        w += ' and ' unless w.blank?
-        [w + @table_name + '.' + @filter_key + ' = ?', filter_item_id] 
-      end
-      
-      def include_hash
-        w = super
-        w.merge({@filter_item_name => {} }) unless w[@filter_item_name]
-      end
-      
-      def items operators, options, offset, page_size
-        filter_item_id = options[:id]
-        @model.where(self.where_condition(filter_item_id)).includes(self.include_hash).order(self.order).offset(offset).limit(page_size)
-      end
-      
-      def count operators, options
-        filter_item_id = options[:id]
-        @model.where(self.where_condition(filter_item_id)).includes(self.include_hash).count
-      end
-      
-      def self._add_action item_name, action_name, list_name, list_conf
-        return
-        model = item_name.classify.constantize
-        controller_name = model.plural + 'Controller'
-        controller = controller_name.constantize
-        list_list_conf = Pettanr::Application::manifest.list(item_name).lists[list_name] || {}
-        from = list_list_conf['from']
-        filter_model = from.classify.constantize
-        filter_key = list_list_conf['filter_key']
-        return if controller.method_defined?(action_name)
-        controller.define_method(action_name) do 
-          filter_list filter_model, params
-        end
-      end
-      
-    end
-    
-  end
-end
diff --git a/lib/manifest/list/foreign_filter.rb b/lib/manifest/list/foreign_filter.rb
deleted file mode 100644 (file)
index 899edb1..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-module Manifest
-  module ListModule
-    class ForeignFilterList <  FilterList
-      
-      def set_default
-        super
-      end
-      
-      def init
-        super
-        @filter_table_name = ::Manifest.manifest.models[@filter_item_name].classify.table_name
-      end
-      
-      def where_condition filter_item_id
-        w = super()
-        w += ' and ' unless w.blank?
-        [w + @filter_table_name + '.id' + ' = ?', filter_item_id] 
-      end
-      
-      def self.add_action item_name, action_name, list_name, list_conf
-        return
-      end
-    end
-    
-  end
-end
diff --git a/lib/manifest/list/includes.rb b/lib/manifest/list/includes.rb
deleted file mode 100644 (file)
index 7873585..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-require_dependency "manifest/list/includes/base"
-require_dependency "manifest/list/includes/method"
-require_dependency "manifest/list/includes/auto"
-require_dependency "manifest/list/includes/none"
-module Manifest
-  module ListModule
-    class IncludeFactory
-      include IncludeModule
-      @@types = {
-        'method' => IncludeMethod, 'auto' => IncludeAuto, 'none' => IncludeNone
-      }
-      
-      def self.factory list, my_manifest
-        my_manifest['type'] ||=  'auto'
-        type = my_manifest['type']
-        raise "undefined type for lists > #{list.item_name} > #{list.list_name} > includes\n" unless type
-        my_class = @@types[type]
-        raise "undefined class for lists > #{list.item_name} > #{list.list_name} > includes > #{type}\n" unless my_class
-        my_class.new(list, my_manifest)
-      end
-      
-    end
-  end
-end
diff --git a/lib/manifest/list/includes/auto.rb b/lib/manifest/list/includes/auto.rb
deleted file mode 100644 (file)
index 73d5eaa..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-module Manifest
-  module ListModule
-    module IncludeModule
-      class IncludeAuto < Base
-        attr :tree_name
-        def set_default
-          super
-          @includes_manifest['args']['tree_name'] ||= 'owner'
-        end
-        
-        def init
-          super
-          @tree_name = @args['tree_name']
-          @parent_model_manifest = @list.model_manifest.tree_model_manifest(@tree_name)
-          if @parent_model_manifest
-            @parent_model_name = @parent_model_manifest.classify.item_name
-            @root_model_manifest = @parent_model_manifest.tree_model_manifest(@tree_name)
-            if @root_model_manifest
-              @root_model_name = @root_model_manifest.classify.item_name
-            end
-          end
-        end
-        
-        def includes
-          if @parent_model_name
-            if @root_model_name
-              {@parent_model_name => {@root_model_name => {}}}
-            else
-              {@parent_model_name => {}}
-            end
-          else
-            {}
-          end
-        end
-        
-        def foreign_model_name
-          if @root_model_name
-            @root_model_name
-          else
-            @parent_model_name
-          end
-        end
-        
-      end
-      
-    end
-  end
-end
diff --git a/lib/manifest/list/includes/base.rb b/lib/manifest/list/includes/base.rb
deleted file mode 100644 (file)
index 742f7f1..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-module Manifest
-  module ListModule
-    module IncludeModule
-      class Base
-        attr :list, :includes_manifest, :type
-        def initialize list, includes_manifest
-          @list = list
-          @includes_manifest = includes_manifest
-          self.set_default
-          self.init
-        end
-        
-        def set_default
-          @includes_manifest['args'] ||= {}
-        end
-        
-        def init
-          @type = @includes_manifest['type']
-          @args = @includes_manifest['args']
-        end
-        
-        def item_name
-          @list.item_name
-        end
-        
-        def list_name
-          @list.list_name
-        end
-        
-        def model
-          @list.model
-        end
-        
-      end
-      
-    end
-  end
-end
diff --git a/lib/manifest/list/includes/method.rb b/lib/manifest/list/includes/method.rb
deleted file mode 100644 (file)
index 7b99fcb..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-module Manifest
-  module ListModule
-    module IncludeModule
-      class IncludeMethod < Base
-        attr :method_name
-        def set_default
-          super
-          @includes_manifest['args']['method_name'] ||= self.list_name + '_list_includes'
-        end
-        
-        def init
-          super
-          @method_name = @args['method_name']
-        end
-        
-        def includes
-          self.model.__send__ @method_name
-        end
-        
-      end
-      
-    end
-  end
-end
diff --git a/lib/manifest/list/play.rb b/lib/manifest/list/play.rb
deleted file mode 100644 (file)
index 338e2f2..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-module Manifest
-  module ListModule
-    class PlayList
-      attr :model, :list_name, :list_manifest
-      
-      def initialize manifest, item_name, list_name, list_manifest
-        @manifest = manifest
-        @item_name = item_name
-        @list_name = list_name
-        @list_manifest = list_manifest
-        self.set_default
-        self.init
-      end
-      
-      def set_default
-        return
-        @default_page_size = @conf['default_page_size'] || 25
-        @max_page_size = @conf['max_page_size'] || 100
-        @params_offset = params_offset
-        @params_count = params_count
-        @list_list_conf = @manifest.list(@item_name).lists[list_name] || {}
-        @model_name = @list_list_conf['model']
-        @filter_key = @list_list_conf['filter_key']
-        @model = @model_name.classify.constantize
-        @table_name = @model.table_name
-        if @model.content?
-          @owner_model = @model.owner_model
-          @owner_table_name = @owner_model.table_name if @owner_model
-        end
-      end
-      
-      def init
-      end
-      
-      def offset cnt, prm = nil
-        offset = prm.to_i
-        offset = cnt - 1 if offset >= cnt
-        offset = cnt - offset.abs if offset < 0
-        offset = 0 if offset < 0
-        offset
-      end
-      
-      def limit prm
-        prm ||= @default_page_size
-        count = prm.to_i
-        count = @max_page_size if count > @max_page_size
-        count = @default_page_size if count < 1
-        count
-      end
-      
-      def count filter_item
-        @count ||= @model.count(:conditions => self.where(filter_item), :include => self.includes).to_i
-      end
-      
-      def where filter_item
-        w = @model.list_where
-        w += ' and ' unless w.blank?
-        [w + @table_name + '.' + @filter_key + ' = ?', filter_item.id] 
-      end
-      
-      def includes
-        {@owner_model.item_name => {}}
-      end
-      
-      def order
-        @table_name + '.t'
-      end
-      
-      def items filter_item
-        c  = @count || self.count(filter_item)
-        o  = self.offset c, @offset
-        l  = self.limit @count
-        @model.where(self.where(filter_item)).includes(self.includes).order(self.order).offset(o).limit(l)
-      end
-      
-      def prev_offset filter_item
-        c  = @count || self.count(filter_item)
-        o  = self.offset c, @offset
-        l  = self.limit @count
-        if o > 0
-          if o - l < 0
-            0
-          else
-            o - l
-          end
-        else
-          nil
-        end
-      end
-      
-      def next_offset filter_item
-        c  = @count || self.count(filter_item)
-        o  = self.offset c, @offset
-        l  = self.limit @count
-        if o + l > c
-          nil
-        else
-          o + l
-        end
-      end
-      
-      def self.add_action item_name, action_name, list_name, list_conf
-        return
-      end
-    end
-    
-  end
-end
diff --git a/lib/manifest/list/private.rb b/lib/manifest/list/private.rb
deleted file mode 100644 (file)
index 81a123b..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-module Manifest
-  module ListModule
-    class PrivateList < Base
-      def where_condition operators
-        case @model.owner_type
-        when :author
-          operator = operators.author
-        when :artist
-          operator = operators.artist
-        end
-        t = if @owner_model
-          if @owner_model.owner_model
-            @owner_model.owner_model.table_name
-          else
-            @owner_model.table_name
-          end
-        else
-          @table_name
-        end
-        @where.conditions do |name|
-          [t + '.' + @model.owner_type.to_s + '_id = ?', operator.id]
-        end
-      end
-    
-      def items operators, options, offset, page_size
-        @model.where(self.where_condition(operators)).includes(self.include_hash).order(self.order).offset(offset).limit(page_size)
-      end
-      
-      def count operators, options
-        filter_item_id = options[:id]
-        @model.where(self.where_condition(operators)).includes(self.include_hash).count
-      end
-      
-    end
-    
-  end
-end
diff --git a/lib/manifest/list/public.rb b/lib/manifest/list/public.rb
deleted file mode 100644 (file)
index 6a19c43..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-module Manifest
-  module ListModule
-    class PublicList < Base
-      
-      def set_default
-        super
-      end
-      
-      def init
-        super
-      end
-      
-      def order
-        @model.list_order
-      end
-      
-    end
-    
-  end
-end
diff --git a/lib/manifest/list/system_resource.rb b/lib/manifest/list/system_resource.rb
deleted file mode 100644 (file)
index 99c57dd..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-module Manifest
-  module ListModule
-    class SystemResourceList < Base
-      
-      def set_default
-        super
-      end
-      
-      def init
-        super
-      end
-      
-      def items operators, options, offset, page_size
-        @model.enable_list
-      end
-      
-      def self.add_action item_name, action_name, list_name, list_conf
-        return
-      end
-    end
-    
-  end
-end
diff --git a/lib/manifest/list/through_filter.rb b/lib/manifest/list/through_filter.rb
deleted file mode 100644 (file)
index 8e84937..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-module Manifest
-  module ListModule
-    class ThroughFilterList < FilterList
-      attr :list, :list_name, :list_manifest
-      
-      def set_default
-        super
-      end
-      
-      def init
-        super
-        @through = @model_list_manifest.through
-        @filter_table_name = ::Manifest.manifest.models[@filter_item_name].classify.table_name
-      end
-      
-      def include_hash
-        {@through => {@filter_item_name => {}} }
-      end
-      
-      def where_condition filter_item_id
-        w = self.base_where_condition
-        w += ' and ' unless w.blank?
-        [w + @filter_table_name + '.id' + ' = ?', filter_item_id] 
-      end
-      
-    end
-    
-  end
-end
diff --git a/lib/manifest/list/where.rb b/lib/manifest/list/where.rb
deleted file mode 100644 (file)
index 6a67f63..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-require_dependency "manifest/list/where/base"
-require_dependency "manifest/list/where/method"
-require_dependency "manifest/list/where/auto"
-module Manifest
-  module ListModule
-    class WhereFactory
-      include WhereModule
-      @@types = {
-        'method' => WhereMethod, 'auto' => WhereAuto
-      }
-      
-      def self.factory list, my_manifest
-        my_manifest['type'] ||=  'auto'
-        type = my_manifest['type']
-        raise "undefined type for lists > #{list.item_name} > #{list.list_name} > where\n" unless type
-        my_class = @@types[type]
-        raise "undefined class for lists > #{list.item_name} > #{list.list_name} > where > #{type}\n" unless my_class
-        my_class.new(list, my_manifest)
-      end
-      
-    end
-  end
-end
diff --git a/lib/manifest/list/where/auto.rb b/lib/manifest/list/where/auto.rb
deleted file mode 100644 (file)
index ca8c14d..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-module Manifest
-  module ListModule
-    module WhereModule
-      class WhereAuto < Base
-        attr :method_name
-        def set_default
-          super
-          @where_manifest['args']['method_name'] ||= self.base_name
-        end
-        
-        def init
-          super
-          @method_name = @args['method_name']
-        end
-        
-        def base_name
-          if self.model.content?
-            'public_list_where'
-          else
-            'list_where'
-          end
-        end
-        
-        def conditions
-          yield @method_name
-        end
-        
-      end
-      
-    end
-  end
-end
diff --git a/lib/manifest/list/where/base.rb b/lib/manifest/list/where/base.rb
deleted file mode 100644 (file)
index 41ba04f..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-module Manifest
-  module ListModule
-    module WhereModule
-      class Base
-        attr :list, :where_manifest, :type
-        def initialize list, where_manifest
-          @list = list
-          @where_manifest = where_manifest
-          self.set_default
-          self.init
-        end
-        
-        def set_default
-          @where_manifest['args'] ||= {}
-        end
-        
-        def init
-          @type = @where_manifest['type']
-          @args = @where_manifest['args']
-        end
-        
-        def item_name
-          @list.item_name
-        end
-        
-        def list_name
-          @list.list_name
-        end
-        
-        def model
-          @list.model
-        end
-        
-      end
-      
-    end
-  end
-end
diff --git a/lib/manifest/list/where/method.rb b/lib/manifest/list/where/method.rb
deleted file mode 100644 (file)
index 723edde..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-module Manifest
-  module ListModule
-    module WhereModule
-      class WhereMethod < Base
-        attr :method_name
-        def set_default
-          super
-          @where_manifest['args']['method_name'] ||= self.list_name + '_list_where'
-        end
-        
-        def init
-          super
-          @method_name = @args['method_name']
-        end
-        
-        def conditions
-          yield @method_name
-        end
-        
-      end
-      
-    end
-  end
-end
diff --git a/lib/manifest/list_group.rb b/lib/manifest/list_group.rb
new file mode 100644 (file)
index 0000000..e5f808a
--- /dev/null
@@ -0,0 +1,40 @@
+require_dependency "manifest/list_group/list"
+module Manifest
+  class ListGroup
+    include ListGroupModule
+    def self.manager manifest, my_manifests
+      list_groups = {}
+      my_manifests.each {|item_name, list_group_manifest|
+        list_groups[item_name] = ListGroup.new(manifest, item_name, list_group_manifest)
+      }
+      list_groups
+    end
+    
+    attr :manifest, :list_group_name, :list_group_manifest, 
+      :item_name, :tree_name, :lists
+    def initialize manifest, list_group_name, list_group_manifest
+      @manifest = manifest
+      @list_group_name = list_group_name
+      @list_group_manifest = list_group_manifest
+      self.set_default
+      self.init
+    end
+    
+    def set_default
+      @list_group_manifest['item_name'] ||= @list_group_name
+      @list_group_manifest['lists'] ||= {}
+    end
+    
+    def init
+      @item_name = @list_group_manifest['item_name']
+      @tree_name = @list_group_manifest['tree_name']
+      @lists = {}
+      @list_group_manifest['lists'].each {|list_name, list_manifest|
+        @lists[list_name] = ListFactory.factory self, list_name, list_manifest
+      }
+    end
+    
+  end
+  
+end
+
diff --git a/lib/manifest/list_group/list.rb b/lib/manifest/list_group/list.rb
new file mode 100644 (file)
index 0000000..661aa53
--- /dev/null
@@ -0,0 +1,34 @@
+require_dependency "manifest/list_group/list/base"
+require_dependency "manifest/list_group/list/public"
+require_dependency "manifest/list_group/list/private"
+require_dependency "manifest/list_group/list/system_resource"
+require_dependency "manifest/list_group/list/filter"
+require_dependency "manifest/list_group/list/through_filter"
+require_dependency "manifest/list_group/list/foreign_filter"
+require_dependency "manifest/list_group/list/play"
+module Manifest
+  module ListGroupModule
+    class ListFactory
+      include ListModule
+      @@types = {
+        'public' => PublicList, 'private' => PrivateList, 'system_resource' => SystemResourceList,
+        'filter' => FilterList, 'through_filter' => ThroughFilterList, 'foreign_filter' => ForeignFilterList, 
+        'play' => PlayList
+      }
+      def self.factory list_group, list_name, my_manifest
+        model_manifest = ::Manifest.manifest.models[list_group.item_name]
+        raise "undefined model for list_groups > #{list_group.item_name}\n" unless model_manifest
+        model_list_manifest = model_manifest.lists[list_name]
+        raise "undefined model.list for list_groups > #{list_group.item_name} > #{list_name}\n" unless model_list_manifest
+        type = model_list_manifest.type
+        raise "undefined type for list_groups > #{list_group.item_name} > #{list_name}\n" unless type
+        my_class = @@types[type]
+        raise "undefined class for list_groups > #{list_group.item_name} > #{list_name} > #{type}\n" unless my_class
+        my_class.new(list_group, list_name, my_manifest)
+      end
+      
+    end
+  end
+  
+end
+
diff --git a/lib/manifest/list_group/list/base.rb b/lib/manifest/list_group/list/base.rb
new file mode 100644 (file)
index 0000000..2441c3b
--- /dev/null
@@ -0,0 +1,111 @@
+require_dependency "manifest/list_group/list/where"
+require_dependency "manifest/list_group/list/includes"
+module Manifest
+  module ListGroupModule
+    module ListModule
+      class Base
+        class ListResult
+          attr :items, :paginate
+          def initialize items, paginate
+            @items = items
+            @paginate = paginate
+          end
+          
+        end
+        
+        attr :list_group, :list_name, :list_manifest, 
+          :model, :model_manifest, :model_list_manifest, 
+          :where, :includes
+        def initialize list_group, list_name, list_manifest
+          @list_group = list_group
+          @list_name = list_name
+          @list_manifest = list_manifest
+          self.set_default
+          self.init
+        end
+        
+        def set_default
+          @model_manifest = ::Manifest.manifest.models[self.item_name]
+          @model_list_manifest = @model_manifest.lists[@list_name]
+          @list_manifest['where'] ||= {}
+          @list_manifest['includes'] ||= {}
+        end
+        
+        def init
+          @model = ::Manifest.item_name_to_model self.item_name
+          @table_name = @model.table_name
+          @where = WhereFactory.factory self, @list_manifest['where']
+          @includes = IncludeFactory.factory self, @list_manifest['includes']
+        end
+        
+        def item_name
+          @list_group.item_name
+        end
+        
+        def default_page_size
+          @model_list_manifest.default_page_size
+        end
+        
+        def max_page_size
+          @model_list_manifest.max_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 = self.max_page_size if page_size > self.max_page_size
+          page_size = self.default_page_size if page_size < 1
+          page_size
+        end
+        
+        def base_where_condition
+          method_name = @where.conditions do |name|
+            name
+          end
+          @model.__send__ method_name
+        end
+        
+        def where_condition
+          base_where_condition
+        end
+        
+        def include_hash
+          @includes.includes
+        end
+        
+        def order
+          @model.list_order
+        end
+        
+        def items operators, options, offset, page_size
+          @model.where(self.where_condition).includes(self.include_hash).order(self.order).offset(offset).limit(page_size)
+        end
+        
+        def count operators, options
+          @model.where(self.where_condition).includes(self.include_hash).count
+        end
+        
+        def paginate count, offset, page_size
+          c = count ? count.to_i : 0
+          Kaminari.paginate_array(Array.new(c, nil)).page(offset).per(page_size)
+        end
+        
+        def open operators, options
+          page = self.page_number(options[:page]) 
+          page_size = self.page_size options[:page_size]
+          offset = (page -1) * page_size
+          items = self.items operators, options, offset, page_size
+          count = self.count operators, options
+          pg = self.paginate count, offset, page_size
+          ListResult.new items, pg
+        end
+        
+      end
+    end
+  end
+end
diff --git a/lib/manifest/list_group/list/filter.rb b/lib/manifest/list_group/list/filter.rb
new file mode 100644 (file)
index 0000000..0239edb
--- /dev/null
@@ -0,0 +1,56 @@
+module Manifest
+  module ListGroupModule
+    module ListModule
+      class FilterList < Base
+        
+        def set_default
+          super
+        end
+        
+        def init
+          super
+          @filter_item_name = @model_list_manifest.filter_item_name
+          @filter_key = @model_list_manifest.filter_key
+        end
+        
+        def where_condition filter_item_id
+          w = self.base_where_condition
+          w += ' and ' unless w.blank?
+          [w + @table_name + '.' + @filter_key + ' = ?', filter_item_id] 
+        end
+        
+        def include_hash
+          w = super
+          w.merge({@filter_item_name => {} }) unless w[@filter_item_name]
+        end
+        
+        def items operators, options, offset, page_size
+          filter_item_id = options[:id]
+          @model.where(self.where_condition(filter_item_id)).includes(self.include_hash).order(self.order).offset(offset).limit(page_size)
+        end
+        
+        def count operators, options
+          filter_item_id = options[:id]
+          @model.where(self.where_condition(filter_item_id)).includes(self.include_hash).count
+        end
+        
+        def self._add_action item_name, action_name, list_name, list_conf
+          return
+          model = item_name.classify.constantize
+          controller_name = model.plural + 'Controller'
+          controller = controller_name.constantize
+          list_list_conf = Pettanr::Application::manifest.list(item_name).lists[list_name] || {}
+          from = list_list_conf['from']
+          filter_model = from.classify.constantize
+          filter_key = list_list_conf['filter_key']
+          return if controller.method_defined?(action_name)
+          controller.define_method(action_name) do 
+            filter_list filter_model, params
+          end
+        end
+        
+      end
+      
+    end
+  end
+end
diff --git a/lib/manifest/list_group/list/foreign_filter.rb b/lib/manifest/list_group/list/foreign_filter.rb
new file mode 100644 (file)
index 0000000..7d0c771
--- /dev/null
@@ -0,0 +1,28 @@
+module Manifest
+  module ListGroupModule
+    module ListModule
+      class ForeignFilterList <  FilterList
+        
+        def set_default
+          super
+        end
+        
+        def init
+          super
+          @filter_table_name = ::Manifest.manifest.models[@filter_item_name].classify.table_name
+        end
+        
+        def where_condition filter_item_id
+          w = super()
+          w += ' and ' unless w.blank?
+          [w + @filter_table_name + '.id' + ' = ?', filter_item_id] 
+        end
+        
+        def self.add_action item_name, action_name, list_name, list_conf
+          return
+        end
+      end
+      
+    end
+  end
+end
diff --git a/lib/manifest/list_group/list/includes.rb b/lib/manifest/list_group/list/includes.rb
new file mode 100644 (file)
index 0000000..9264d04
--- /dev/null
@@ -0,0 +1,26 @@
+require_dependency "manifest/list_group/list/includes/base"
+require_dependency "manifest/list_group/list/includes/method"
+require_dependency "manifest/list_group/list/includes/auto"
+require_dependency "manifest/list_group/list/includes/none"
+module Manifest
+  module ListGroupModule
+    module ListModule
+      class IncludeFactory
+        include IncludeModule
+        @@types = {
+          'method' => IncludeMethod, 'auto' => IncludeAuto, 'none' => IncludeNone
+        }
+        
+        def self.factory list, my_manifest
+          my_manifest['type'] ||=  'auto'
+          type = my_manifest['type']
+          raise "undefined type for lists > #{list.item_name} > #{list.list_name} > includes\n" unless type
+          my_class = @@types[type]
+          raise "undefined class for lists > #{list.item_name} > #{list.list_name} > includes > #{type}\n" unless my_class
+          my_class.new(list, my_manifest)
+        end
+        
+      end
+    end
+  end
+end
diff --git a/lib/manifest/list_group/list/includes/auto.rb b/lib/manifest/list_group/list/includes/auto.rb
new file mode 100644 (file)
index 0000000..ad7e7b3
--- /dev/null
@@ -0,0 +1,50 @@
+module Manifest
+  module ListGroupModule
+    module ListModule
+      module IncludeModule
+        class IncludeAuto < Base
+          attr :tree_name
+          def set_default
+            super
+            @includes_manifest['args']['tree_name'] ||= 'owner'
+          end
+          
+          def init
+            super
+            @tree_name = @args['tree_name']
+            @parent_model_manifest = @list.model_manifest.tree_model_manifest(@tree_name)
+            if @parent_model_manifest
+              @parent_model_name = @parent_model_manifest.classify.item_name
+              @root_model_manifest = @parent_model_manifest.tree_model_manifest(@tree_name)
+              if @root_model_manifest
+                @root_model_name = @root_model_manifest.classify.item_name
+              end
+            end
+          end
+          
+          def includes
+            if @parent_model_name
+              if @root_model_name
+                {@parent_model_name => {@root_model_name => {}}}
+              else
+                {@parent_model_name => {}}
+              end
+            else
+              {}
+            end
+          end
+          
+          def foreign_model_name
+            if @root_model_name
+              @root_model_name
+            else
+              @parent_model_name
+            end
+          end
+          
+        end
+        
+      end
+    end
+  end
+end
diff --git a/lib/manifest/list_group/list/includes/base.rb b/lib/manifest/list_group/list/includes/base.rb
new file mode 100644 (file)
index 0000000..b90942f
--- /dev/null
@@ -0,0 +1,40 @@
+module Manifest
+  module ListGroupModule
+    module ListModule
+      module IncludeModule
+        class Base
+          attr :list, :includes_manifest, :type
+          def initialize list, includes_manifest
+            @list = list
+            @includes_manifest = includes_manifest
+            self.set_default
+            self.init
+          end
+          
+          def set_default
+            @includes_manifest['args'] ||= {}
+          end
+          
+          def init
+            @type = @includes_manifest['type']
+            @args = @includes_manifest['args']
+          end
+          
+          def item_name
+            @list.item_name
+          end
+          
+          def list_name
+            @list.list_name
+          end
+          
+          def model
+            @list.model
+          end
+          
+        end
+        
+      end
+    end
+  end
+end
diff --git a/lib/manifest/list_group/list/includes/method.rb b/lib/manifest/list_group/list/includes/method.rb
new file mode 100644 (file)
index 0000000..3cbf7e5
--- /dev/null
@@ -0,0 +1,26 @@
+module Manifest
+  module ListGroupModule
+    module ListModule
+      module IncludeModule
+        class IncludeMethod < Base
+          attr :method_name
+          def set_default
+            super
+            @includes_manifest['args']['method_name'] ||= self.list_name + '_list_includes'
+          end
+          
+          def init
+            super
+            @method_name = @args['method_name']
+          end
+          
+          def includes
+            self.model.__send__ @method_name
+          end
+          
+        end
+        
+      end
+    end
+  end
+end
diff --git a/lib/manifest/list_group/list/includes/none.rb b/lib/manifest/list_group/list/includes/none.rb
new file mode 100644 (file)
index 0000000..dbb60fb
--- /dev/null
@@ -0,0 +1,24 @@
+module Manifest
+  module ListGroupModule
+    module ListModule
+      module IncludeModule
+        class IncludeNone < Base
+          attr :tree_name
+          def set_default
+            super
+          end
+          
+          def init
+            super
+          end
+          
+          def includes
+            {}
+          end
+          
+        end
+        
+      end
+    end
+  end
+end
diff --git a/lib/manifest/list_group/list/play.rb b/lib/manifest/list_group/list/play.rb
new file mode 100644 (file)
index 0000000..09f5510
--- /dev/null
@@ -0,0 +1,109 @@
+module Manifest
+  module ListGroupModule
+    module ListModule
+      class PlayList
+        attr :list_group, :list_name, :list_manifest
+        
+        def initialize list_group, list_name, list_manifest
+          @list_group = list_group
+          @list_name = list_name
+          @list_manifest = list_manifest
+          self.set_default
+          self.init
+        end
+        
+        def set_default
+          return
+          @default_page_size = @conf['default_page_size'] || 25
+          @max_page_size = @conf['max_page_size'] || 100
+          @params_offset = params_offset
+          @params_count = params_count
+          @list_list_conf = @manifest.list(@item_name).lists[list_name] || {}
+          @model_name = @list_list_conf['model']
+          @filter_key = @list_list_conf['filter_key']
+          @model = @model_name.classify.constantize
+          @table_name = @model.table_name
+          if @model.content?
+            @owner_model = @model.owner_model
+            @owner_table_name = @owner_model.table_name if @owner_model
+          end
+        end
+        
+        def init
+        end
+        
+        def offset cnt, prm = nil
+          offset = prm.to_i
+          offset = cnt - 1 if offset >= cnt
+          offset = cnt - offset.abs if offset < 0
+          offset = 0 if offset < 0
+          offset
+        end
+        
+        def limit prm
+          prm ||= @default_page_size
+          count = prm.to_i
+          count = @max_page_size if count > @max_page_size
+          count = @default_page_size if count < 1
+          count
+        end
+        
+        def count filter_item
+          @count ||= @model.count(:conditions => self.where(filter_item), :include => self.includes).to_i
+        end
+        
+        def where filter_item
+          w = @model.list_where
+          w += ' and ' unless w.blank?
+          [w + @table_name + '.' + @filter_key + ' = ?', filter_item.id] 
+        end
+        
+        def includes
+          {@owner_model.item_name => {}}
+        end
+        
+        def order
+          @table_name + '.t'
+        end
+        
+        def items filter_item
+          c  = @count || self.count(filter_item)
+          o  = self.offset c, @offset
+          l  = self.limit @count
+          @model.where(self.where(filter_item)).includes(self.includes).order(self.order).offset(o).limit(l)
+        end
+        
+        def prev_offset filter_item
+          c  = @count || self.count(filter_item)
+          o  = self.offset c, @offset
+          l  = self.limit @count
+          if o > 0
+            if o - l < 0
+              0
+            else
+              o - l
+            end
+          else
+            nil
+          end
+        end
+        
+        def next_offset filter_item
+          c  = @count || self.count(filter_item)
+          o  = self.offset c, @offset
+          l  = self.limit @count
+          if o + l > c
+            nil
+          else
+            o + l
+          end
+        end
+        
+        def self.add_action item_name, action_name, list_name, list_conf
+          return
+        end
+      end
+      
+    end
+  end
+end
diff --git a/lib/manifest/list_group/list/private.rb b/lib/manifest/list_group/list/private.rb
new file mode 100644 (file)
index 0000000..3cec19d
--- /dev/null
@@ -0,0 +1,39 @@
+module Manifest
+  module ListGroupModule
+    module ListModule
+      class PrivateList < Base
+        def where_condition operators
+          case @model.owner_type
+          when :author
+            operator = operators.author
+          when :artist
+            operator = operators.artist
+          end
+          t = if @owner_model
+            if @owner_model.owner_model
+              @owner_model.owner_model.table_name
+            else
+              @owner_model.table_name
+            end
+          else
+            @table_name
+          end
+          @where.conditions do |name|
+            [t + '.' + @model.owner_type.to_s + '_id = ?', operator.id]
+          end
+        end
+      
+        def items operators, options, offset, page_size
+          @model.where(self.where_condition(operators)).includes(self.include_hash).order(self.order).offset(offset).limit(page_size)
+        end
+        
+        def count operators, options
+          filter_item_id = options[:id]
+          @model.where(self.where_condition(operators)).includes(self.include_hash).count
+        end
+        
+      end
+      
+    end
+  end
+end
similarity index 58%
rename from lib/manifest/list/includes/none.rb
rename to lib/manifest/list_group/list/public.rb
index 0dae0b2..826c0eb 100644 (file)
@@ -1,8 +1,8 @@
 module Manifest
-  module ListModule
-    module IncludeModule
-      class IncludeNone < Base
-        attr :tree_name
+  module ListGroupModule
+    module ListModule
+      class PublicList < Base
+        
         def set_default
           super
         end
@@ -11,8 +11,8 @@ module Manifest
           super
         end
         
-        def includes
-          {}
+        def order
+          @model.list_order
         end
         
       end
diff --git a/lib/manifest/list_group/list/system_resource.rb b/lib/manifest/list_group/list/system_resource.rb
new file mode 100644 (file)
index 0000000..eb547c5
--- /dev/null
@@ -0,0 +1,25 @@
+module Manifest
+  module ListGroupModule
+    module ListModule
+      class SystemResourceList < Base
+        
+        def set_default
+          super
+        end
+        
+        def init
+          super
+        end
+        
+        def items operators, options, offset, page_size
+          @model.enable_list
+        end
+        
+        def self.add_action item_name, action_name, list_name, list_conf
+          return
+        end
+      end
+      
+    end
+  end
+end
diff --git a/lib/manifest/list_group/list/through_filter.rb b/lib/manifest/list_group/list/through_filter.rb
new file mode 100644 (file)
index 0000000..1a6162e
--- /dev/null
@@ -0,0 +1,31 @@
+module Manifest
+  module ListGroupModule
+    module ListModule
+      class ThroughFilterList < FilterList
+        attr :list, :list_name, :list_manifest
+        
+        def set_default
+          super
+        end
+        
+        def init
+          super
+          @through = @model_list_manifest.through
+          @filter_table_name = ::Manifest.manifest.models[@filter_item_name].classify.table_name
+        end
+        
+        def include_hash
+          {@through => {@filter_item_name => {}} }
+        end
+        
+        def where_condition filter_item_id
+          w = self.base_where_condition
+          w += ' and ' unless w.blank?
+          [w + @filter_table_name + '.id' + ' = ?', filter_item_id] 
+        end
+        
+      end
+      
+    end
+  end
+end
diff --git a/lib/manifest/list_group/list/where.rb b/lib/manifest/list_group/list/where.rb
new file mode 100644 (file)
index 0000000..88ea3ef
--- /dev/null
@@ -0,0 +1,25 @@
+require_dependency "manifest/list_group/list/where/base"
+require_dependency "manifest/list_group/list/where/method"
+require_dependency "manifest/list_group/list/where/auto"
+module Manifest
+  module ListGroupModule
+    module ListModule
+      class WhereFactory
+        include WhereModule
+        @@types = {
+          'method' => WhereMethod, 'auto' => WhereAuto
+        }
+        
+        def self.factory list, my_manifest
+          my_manifest['type'] ||=  'auto'
+          type = my_manifest['type']
+          raise "undefined type for lists > #{list.item_name} > #{list.list_name} > where\n" unless type
+          my_class = @@types[type]
+          raise "undefined class for lists > #{list.item_name} > #{list.list_name} > where > #{type}\n" unless my_class
+          my_class.new(list, my_manifest)
+        end
+        
+      end
+    end
+  end
+end
diff --git a/lib/manifest/list_group/list/where/auto.rb b/lib/manifest/list_group/list/where/auto.rb
new file mode 100644 (file)
index 0000000..afad55a
--- /dev/null
@@ -0,0 +1,34 @@
+module Manifest
+  module ListGroupModule
+    module ListModule
+      module WhereModule
+        class WhereAuto < Base
+          attr :method_name
+          def set_default
+            super
+            @where_manifest['args']['method_name'] ||= self.base_name
+          end
+          
+          def init
+            super
+            @method_name = @args['method_name']
+          end
+          
+          def base_name
+            if self.model.content?
+              'public_list_where'
+            else
+              'list_where'
+            end
+          end
+          
+          def conditions
+            yield @method_name
+          end
+          
+        end
+        
+      end
+    end
+  end
+end
diff --git a/lib/manifest/list_group/list/where/base.rb b/lib/manifest/list_group/list/where/base.rb
new file mode 100644 (file)
index 0000000..7010ea1
--- /dev/null
@@ -0,0 +1,40 @@
+module Manifest
+  module ListGroupModule
+    module ListModule
+      module WhereModule
+        class Base
+          attr :list, :where_manifest, :type
+          def initialize list, where_manifest
+            @list = list
+            @where_manifest = where_manifest
+            self.set_default
+            self.init
+          end
+          
+          def set_default
+            @where_manifest['args'] ||= {}
+          end
+          
+          def init
+            @type = @where_manifest['type']
+            @args = @where_manifest['args']
+          end
+          
+          def item_name
+            @list.item_name
+          end
+          
+          def list_name
+            @list.list_name
+          end
+          
+          def model
+            @list.model
+          end
+          
+        end
+        
+      end
+    end
+  end
+end
diff --git a/lib/manifest/list_group/list/where/method.rb b/lib/manifest/list_group/list/where/method.rb
new file mode 100644 (file)
index 0000000..2ac8e21
--- /dev/null
@@ -0,0 +1,26 @@
+module Manifest
+  module ListGroupModule
+    module ListModule
+      module WhereModule
+        class WhereMethod < Base
+          attr :method_name
+          def set_default
+            super
+            @where_manifest['args']['method_name'] ||= self.list_name + '_list_where'
+          end
+          
+          def init
+            super
+            @method_name = @args['method_name']
+          end
+          
+          def conditions
+            yield @method_name
+          end
+          
+        end
+        
+      end
+    end
+  end
+end
index a2da8f8..959f6cc 100644 (file)
@@ -2,7 +2,7 @@ module Manifest
   class Manifest
     cattr_accessor :manifest
     attr :system_resources, :magic_numbers,
-      :controllers, :models, :lists, :profilers, :filers, :forms, :lists, :views
+      :controllers, :models, :list_groups, :profilers, :filers, :forms, :lists, :views
     # call me before load routes.rb
     # routes.rb needs engine_resources manifest in system_resources
     # ex. it's adding license_groups routes
@@ -18,7 +18,7 @@ module Manifest
       @controllers = Controller.manager(self, @manifest['controllers'])
       @models = Model.manager(self, @manifest['models'])
       @locals = @manifest['locals']
-      @lists = List.manager(self, @locals['lists'])
+      @list_groups = ListGroup.manager(self, @locals['list_groups'] || {})
       @filers = Filer.manager(self, @locals['filers'])
       @profilers = Profiler.manager(self, @locals['profilers'])
       @forms = Form.base_manager(self, @locals['forms'])
index bc9553b..4f076da 100644 (file)
@@ -27,9 +27,9 @@ module Manifest
               raise "undefined list for profilers > #{self.profiler.item_name} > lists > #{@my_name}\n" unless @list_manifest['model_name']
             end
           end
-          @my_list = ::Manifest.manifest.lists[@model_name]
-          raise "undefined my_list for profilers > #{self.profiler.item_name} > lists > #{@my_name} ... #{@model_name}\n" unless @my_list
-          @list = @my_list[@list_name]
+          @list_group = ::Manifest.manifest.list_groups[@model_name]
+          raise "undefined list_group for profilers > #{self.profiler.item_name} > lists > #{@my_name} ... #{@model_name}\n" unless @list_group
+          @list = @list_group.lists[@list_name]
           raise "undefined list for profilers > #{self.profiler.item_name} > lists > #{@my_name} ... #{@list_name}\n" unless @list
         end
         
index 5a9a556..095e4fd 100644 (file)
@@ -40,10 +40,10 @@ module Manifest
           resource_model_name = source_manifest.resource_model_name
           resource_list_name = source_manifest.resource_list_name
           caption = source_manifest.caption_name
-          list_group = @manifest.lists[resource_model_name]
-          raise "undefined resource model list for lists > #{resource_model_name}\n" unless list_group
-          list = list_group[resource_list_name]
-          raise "undefined resource list for lists > #{resource_model_name} > #{resource_list_name}\n" unless list
+          list_group = @manifest.list_groups[resource_model_name]
+          raise "undefined list_group for list_groups > #{resource_model_name}\n" unless list_group
+          list = list_group.lists[resource_list_name]
+          raise "undefined resource list for list_groups > #{resource_model_name} > #{resource_list_name}\n" unless list
           r = list.open nil, {}
           @select_items[source_manifest.select_item_name] = 
             r.items.map {|item| [item.attributes[caption], item.id]}
index 58a76fc..a3505c5 100644 (file)
         }\r
       }\r
     },\r
-    "lists": {\r
+    "list_groups": {\r
       "scroll": {\r
-        "public": {},\r
-        "private": {},\r
-        "by_author": {},\r
-        "by_panel": {},\r
-        "play": {}\r
+        "lists": {\r
+          "public": {},\r
+          "private": {},\r
+          "by_author": {},\r
+          "by_panel": {},\r
+          "play": {}\r
+        }\r
       },\r
       "scroll_panel": {\r
-        "public": {},\r
-        "private": {},\r
-        "by_scroll": {},\r
-        "by_panel": {}\r
+        "tree_name": "owner",\r
+        "lists": {\r
+          "public": {},\r
+          "private": {},\r
+          "by_scroll": {},\r
+          "by_panel": {}\r
+        }\r
       },\r
       "comic": {\r
-        "public": {},\r
-        "private": {},\r
-        "by_author": {}\r
+        "lists": {\r
+          "public": {},\r
+          "private": {},\r
+          "by_author": {}\r
+        }\r
       },\r
       "story": {\r
-        "public": {},\r
-        "private": {},\r
-        "by_comic": {},\r
-        "by_sheet": {},\r
-        "by_author": {},\r
-        "play": {}\r
+        "lists": {\r
+          "public": {},\r
+          "private": {},\r
+          "by_comic": {},\r
+          "by_sheet": {},\r
+          "by_author": {},\r
+          "play": {}\r
+        }\r
       },\r
       "story_sheet": {\r
-        "public": {},\r
-        "private": {},\r
-        "by_story": {},\r
-        "by_sheet": {}\r
+        "lists": {\r
+          "public": {},\r
+          "private": {},\r
+          "by_story": {},\r
+          "by_sheet": {}\r
+        }\r
       },\r
       "sheet": {\r
-        "public": {},\r
-        "private": {},\r
-        "by_story": {},\r
-        "by_panel": {},\r
-        "by_author": {},\r
-        "play": {}\r
+        "lists": {\r
+          "public": {},\r
+          "private": {},\r
+          "by_story": {},\r
+          "by_panel": {},\r
+          "by_author": {},\r
+          "play": {}\r
+        }\r
       },\r
       "sheet_panel": {\r
-        "public": {},\r
-        "private": {},\r
-        "by_sheet": {},\r
-        "by_panel": {}\r
+        "lists": {\r
+          "public": {},\r
+          "private": {},\r
+          "by_sheet": {},\r
+          "by_panel": {}\r
+        }\r
       },\r
       "panel": {\r
-        "public": {},\r
-        "private": {},\r
-        "by_scroll": {},\r
-        "by_sheet": {},\r
-        "by_author": {},\r
-        "by_speech_balloon_template": {}\r
+        "lists": {\r
+          "public": {},\r
+          "private": {},\r
+          "by_scroll": {},\r
+          "by_sheet": {},\r
+          "by_author": {},\r
+          "by_speech_balloon_template": {}\r
+        }\r
       },\r
       "panel_picture": {\r
-        "public": {},\r
-        "private": {},\r
-        "by_panel": {},\r
-        "by_author": {}\r
+        "lists": {\r
+          "public": {},\r
+          "private": {},\r
+          "by_panel": {},\r
+          "by_author": {}\r
+        }\r
       },\r
       "speech_balloon": {\r
-        "public": {},\r
-        "private": {},\r
-        "by_panel": {},\r
-        "by_speech_balloon_template": {},\r
-        "by_author": {}\r
+        "lists": {\r
+          "public": {},\r
+          "private": {},\r
+          "by_panel": {},\r
+          "by_speech_balloon_template": {},\r
+          "by_author": {}\r
+        }\r
       },\r
       "speech": {\r
-        "public": {},\r
-        "by_speech_balloon": {},\r
-        "by_writing_format": {}\r
+        "lists": {\r
+          "public": {},\r
+          "by_speech_balloon": {},\r
+          "by_writing_format": {}\r
+        }\r
       },\r
       "balloon": {\r
-        "public": {},\r
-        "by_speech_balloon": {}\r
+        "lists": {\r
+          "public": {},\r
+          "by_speech_balloon": {}\r
+        }\r
       },\r
       "ground_picture": {\r
-        "public": {},\r
-        "private": {},\r
-        "by_panel": {},\r
-        "by_author": {}\r
+        "lists": {\r
+          "public": {},\r
+          "private": {},\r
+          "by_panel": {},\r
+          "by_author": {}\r
+        }\r
       },\r
       "ground_color": {\r
-        "public": {},\r
-        "private": {},\r
-        "by_panel": {},\r
-        "by_author": {}\r
+        "lists": {\r
+          "public": {},\r
+          "private": {},\r
+          "by_panel": {},\r
+          "by_author": {}\r
+        }\r
       },\r
       "original_picture": {\r
-        "private": {}\r
+        "lists": {\r
+          "private": {}\r
+        }\r
       },\r
       "picture": {},\r
       "resource_picture": {\r
-        "public": {},\r
-        "private": {},\r
-        "by_license": {},\r
-        "by_artist": {}\r
+        "lists": {\r
+          "public": {},\r
+          "private": {},\r
+          "by_license": {},\r
+          "by_artist": {}\r
+        }\r
       },\r
       "speech_balloon_template": {\r
-        "public": {},\r
-        "select_items": {}\r
+        "lists": {\r
+          "public": {},\r
+          "select_items": {}\r
+        }\r
       },\r
       "writing_format": {\r
-        "public": {},\r
-        "select_items": {},\r
-        "by_system_picture": {}\r
+        "lists": {\r
+          "public": {},\r
+          "select_items": {},\r
+          "by_system_picture": {}\r
+        }\r
       },\r
       "license_group": {\r
-        "public": {},\r
-        "select_items": {}\r
+        "lists": {\r
+          "public": {},\r
+          "select_items": {}\r
+        }\r
       },\r
       "license": {\r
-        "public": {},\r
-        "by_license_group": {},\r
-        "by_system_picture": {}\r
+        "lists": {\r
+          "public": {},\r
+          "by_license_group": {},\r
+          "by_system_picture": {}\r
+        }\r
       },\r
       "author": {\r
-        "public": {}\r
+        "lists": {\r
+          "public": {}\r
+        }\r
       },\r
       "artist": {\r
-        "public": {}\r
+        "lists": {\r
+          "public": {}\r
+        }\r
       },\r
       "system_picture": {\r
-        "public": {}\r
+        "lists": {\r
+          "public": {}\r
+        }\r
       }\r
     },\r
     "elements": [\r