OSDN Git Service

fix local_manifest
authoryasushiito <yas@pen-chan.jp>
Sun, 23 Mar 2014 02:27:48 +0000 (11:27 +0900)
committeryasushiito <yas@pen-chan.jp>
Sun, 23 Mar 2014 02:27:48 +0000 (11:27 +0900)
70 files changed:
lib/local_manifest/filer.rb
lib/local_manifest/filer/caption.rb
lib/local_manifest/filer/caption/base.rb
lib/local_manifest/filer/caption/default.rb
lib/local_manifest/filer/caption/default/face.rb
lib/local_manifest/filer/caption/default/face/face.rb
lib/local_manifest/filer/caption/default/link.rb
lib/local_manifest/filer/caption/default/link/link.rb
lib/local_manifest/filer/caption/template.rb
lib/local_manifest/filer/date.rb
lib/local_manifest/filer/date/date.rb
lib/local_manifest/filer/edit.rb
lib/local_manifest/filer/edit/edit.rb
lib/local_manifest/filer/icon.rb
lib/local_manifest/filer/icon/icon.rb
lib/local_manifest/filer/summary.rb
lib/local_manifest/filer/summary/summary.rb
lib/local_manifest/filer/symbol.rb
lib/local_manifest/filer/symbol/base.rb
lib/local_manifest/filer/symbol/default.rb
lib/local_manifest/filer/symbol/default/face.rb
lib/local_manifest/filer/symbol/default/face/face.rb
lib/local_manifest/filer/symbol/default/link.rb
lib/local_manifest/filer/symbol/default/link/link.rb
lib/local_manifest/filer/symbol/template.rb
lib/local_manifest/list_group.rb
lib/local_manifest/list_group/list.rb
lib/local_manifest/list_group/list/base.rb
lib/local_manifest/list_group/list/filter.rb
lib/local_manifest/list_group/list/foreign_filter.rb
lib/local_manifest/list_group/list/includes.rb
lib/local_manifest/list_group/list/includes/auto.rb
lib/local_manifest/list_group/list/includes/base.rb
lib/local_manifest/list_group/list/includes/method.rb
lib/local_manifest/list_group/list/play.rb
lib/local_manifest/list_group/list/where.rb
lib/local_manifest/list_group/list/where/base.rb
lib/local_manifest/list_group/list/where/method.rb
lib/local_manifest/local_manifest.rb
lib/local_manifest/profiler.rb
lib/local_manifest/profiler/association.rb
lib/local_manifest/profiler/association/belongs_to.rb
lib/local_manifest/profiler/association/has_many.rb
lib/local_manifest/profiler/association/has_one.rb
lib/local_manifest/profiler/column.rb [deleted file]
lib/manifest/controller.rb
lib/manifest/controller/action.rb
lib/manifest/controller/action/base.rb
lib/manifest/model.rb
lib/manifest/model/association.rb
lib/manifest/model/association/belongs_to.rb
lib/manifest/model/association/has_many.rb
lib/manifest/model/association/has_one.rb
lib/manifest/model/attribute.rb
lib/manifest/model/attribute/source.rb
lib/manifest/model/attribute/source/base.rb [new file with mode: 0644]
lib/manifest/model/attribute/source/magic_number.rb
lib/manifest/model/attribute/source/model.rb
lib/manifest/model/list.rb
lib/manifest/model/peta.rb
lib/manifest/model/peta/binder.rb
lib/manifest/model/peta/element.rb
lib/manifest/model/peta/root.rb
lib/manifest_base/base.rb
lib/manifest_base/factory.rb
lib/manifest_base/manifest_base.rb
lib/manifest_base/name_values.rb
lib/manifest_base/names.rb [new file with mode: 0644]
lib/manifest_base/type_args.rb
lib/manifest_base/values.rb

index 6f1c3e3..2d5cee5 100644 (file)
@@ -1,51 +1,40 @@
-require_dependency "local_manifest/filer/symbol"
-require_dependency "local_manifest/filer/caption"
-require_dependency "local_manifest/filer/summary"
-require_dependency "local_manifest/filer/icon"
-require_dependency "local_manifest/filer/date"
-require_dependency "local_manifest/filer/edit"
+ManifestBase.require_modules "local_manifest/filer/", 
+  %w|symbol caption summary icon date edit|
+
 module LocalManifest
-  class Filer
-    
-    def self.manager manifest, my_manifests
-      filers = {}
-      my_manifests.each {|item_name, filer_manifest|
-        filers[item_name] = self.new(manifest, item_name, filer_manifest)
-      }
-      filers
-    end
+  class Filer < ManifestBase::Base
+    include FilerModule
     
-    attr :filer_manifest, :item_name, :manifest, :item_class,
+    attr :item_class,
       :symbol, :caption, :summary, :icon, :date, :edit
-    def initialize manifest, item_name, filer_manifest
-      @manifest = manifest
-      @item_name = item_name
-      @filer_manifest = filer_manifest
-      @item_class = ::Manifest.item_name_to_model @item_name
-      self.set_default
-      self.init
-    end
     
     def set_default
-      @filer_manifest['symbol'] ||= {}
-      @filer_manifest['caption'] ||= {}
-      @filer_manifest['summary'] ||= {}
-      @filer_manifest['icon'] ||= {}
-      @filer_manifest['date'] ||= {}
-      @filer_manifest['edit'] ||= {}
+      super
+      @item_class = ::Manifest.item_name_to_model @name
+      @json['symbol'] ||= {}
+      @json['caption'] ||= {}
+      @json['summary'] ||= {}
+      @json['icon'] ||= {}
+      @json['date'] ||= {}
+      @json['edit'] ||= {}
     end
     
     def init
-      @symbol = FilerModule::SymbolFactory.factory self, @filer_manifest['symbol']
-      @caption = FilerModule::CaptionFactory.factory self, @filer_manifest['caption']
-      @summary = FilerModule::SummaryFactory.factory self, @filer_manifest['summary']
-      @icon = FilerModule::IconFactory.factory self, @filer_manifest['icon']
-      @date = FilerModule::DateFactory.factory self, @filer_manifest['date']
-      @edit = FilerModule::EditFactory.factory self, @filer_manifest['edit']
+      super
+      @symbol = ManifestBase.load_type_args self, @json, 'symbol', SymbolFactory
+      @caption = ManifestBase.load_type_args self, @json, 'caption', CaptionFactory
+      @summary = ManifestBase.load_type_args self, @json, 'summary', SummaryFactory
+      @icon = ManifestBase.load_type_args self, @json, 'icon', IconFactory
+      @date = ManifestBase.load_type_args self, @json, 'date', DateFactory
+      @edit = ManifestBase.load_type_args self, @json, 'edit', EditFactory
+    end
+    
+    def item_name
+      @name
     end
     
     def filer_name
-      @item_name
+      @name
     end
     
   end
index 3289dbe..af17140 100644 (file)
@@ -1,25 +1,21 @@
-require_dependency "local_manifest/filer/caption/base"
-require_dependency "local_manifest/filer/caption/default"
-require_dependency "local_manifest/filer/caption/template"
-require_dependency "local_manifest/filer/caption/none"
+ManifestBase.require_modules "local_manifest/filer/caption/", 
+  %w|base default template none|
+
 module LocalManifest
   module FilerModule
-    class CaptionFactory
+    class CaptionFactory < ManifestBase::Factory
       include CaptionModule
-      @@types = {
-        'default' => Default, 'template' => Template, 'none' => None
-      }
       
-      def self.factory filer, my_manifest
-        my_manifest['type'] ||=  'default'
-        type = my_manifest['type']
-        raise "undefined type for filers > #{filer.filer_name} > caption\n" unless type
-        my_class = @@types[type]
-        raise "undefined class for filers > #{filer.filer_name} > caption > #{type}\n" unless my_class
-        my_class.new(filer, my_manifest)
+      def self.types
+        {
+          'default' => Default, 'template' => Template, 'none' => None
+        }
+      end
+      
+      def self.default_type
+        'default'
       end
       
     end
-    
   end
 end
index 7ed16a4..44a523c 100644 (file)
@@ -1,31 +1,22 @@
 module LocalManifest
   module FilerModule
     module CaptionModule
-      class Base
-        attr :filer, :caption_manifest, :type
-        
-        def initialize filer, caption_manifest
-          @filer = filer
-          @caption_manifest = caption_manifest
-          self.set_default
-          self.init
-        end
+      class Base < ManifestBase::TypeArgs
         
         def set_default
-          @caption_manifest['args'] ||= {}
+          super
         end
         
         def init
-          @type = @caption_manifest['type']
-          @args = @caption_manifest['args']
+          super
         end
         
         def filer_name
-          @filer.item_name
+          @parent.name
         end
         
-        def filer_manifest
-          @filer.filer_manifest
+        def filer
+          @parent
         end
         
       end
index a35b9d7..516065d 100644 (file)
@@ -1,5 +1,6 @@
-require_dependency "local_manifest/filer/caption/default/face"
-require_dependency "local_manifest/filer/caption/default/link"
+ManifestBase.require_modules "local_manifest/filer/caption/default/", 
+  %w|face link|
+
 module LocalManifest
   module FilerModule
     module CaptionModule
@@ -9,14 +10,14 @@ module LocalManifest
         
         def set_default
           super
-          @caption_manifest['args']['face'] ||= {}
-          @caption_manifest['args']['link'] ||= {}
+          @args['face'] ||= {}
+          @args['link'] ||= {}
         end
         
         def init
           super
-          @face = FaceFactory.factory(self, @args['face'])
-          @link = LinkFactory.factory(self, @args['link'])
+          @face = ManifestBase.load_type_args self, @args, 'face', FaceFactory
+          @link = ManifestBase.load_type_args self, @args, 'link', LinkFactory
         end
         
         def visible?
index 73d95ca..dd88a9f 100644 (file)
@@ -1,24 +1,24 @@
-require_dependency "local_manifest/filer/caption/default/face/face"
+ManifestBase.require_modules "local_manifest/filer/caption/default/face/", 
+  %w|face|
+
 module LocalManifest
   module FilerModule
     module CaptionModule
       module DefaultModule
-        class FaceFactory
+        class FaceFactory < ManifestBase::Factory
           include FaceModule
-          @@types = {
-            'column' => ColumnFace, 'method' => MethodFace, 'none' => NoneFace
-          }
-          def self.factory default_caption, my_manifest
-            my_manifest['type'] ||= 'column'
-            type = my_manifest['type']
-            raise "undefined type for filers > #{default_caption.filer_name} > caption > default > face\n" unless type
-            my_class = @@types[type]
-            raise "undefined class for filers > #{default_caption.filer_name} > caption > default > face > #{type}\n" unless my_class
-            my_class.new(default_caption, my_manifest)
+          
+          def self.types
+            {
+              'column' => ColumnFace, 'method' => MethodFace, 'none' => NoneFace
+            }
+          end
+          
+          def self.default_type
+            'column'
           end
           
         end
-        
       end
     end
   end
index 0b591b2..09cfb09 100644 (file)
@@ -3,31 +3,24 @@ module LocalManifest
     module CaptionModule
       module DefaultModule
         module FaceModule
-          class BaseFace
-            attr :caption, :face_manifest, :type
-            def initialize caption, face_manifest
-              @caption = caption
-              @face_manifest = face_manifest
-              self.set_default
-              self.init
-            end
+          class BaseFace < ManifestBase::TypeArgs
             
             def set_default
-              @face_manifest['args'] ||= {}
+              super
             end
             
             def init
-              @type = @face_manifest['type']
-              @args = @face_manifest['args']
+              super
             end
             
           end
           
           class ColumnFace < BaseFace
             attr :column_name
+            
             def set_default
               super
-              @face_manifest['args']['column_name'] ||= 'caption'
+              @args['column_name'] ||= 'caption'
             end
             
             def init
@@ -38,9 +31,10 @@ module LocalManifest
           
           class MethodFace < BaseFace
             attr :method_name
+            
             def set_default
               super
-              @face_manifest['args']['method_name'] ||= 'caption'
+              @args['method_name'] ||= 'caption'
             end
             
             def init
index fe06e7f..ec30065 100644 (file)
@@ -1,24 +1,24 @@
-require_dependency "local_manifest/filer/caption/default/link/link"
+ManifestBase.require_modules "local_manifest/filer/caption/default/link/", 
+  %w|link|
+
 module LocalManifest
   module FilerModule
     module CaptionModule
       module DefaultModule
-        class LinkFactory
+        class LinkFactory < ManifestBase::Factory
           include LinkModule
-          @@types = {
-            'action' => ActionLink, 'none' => NoneLink, 'url_column' => UrlColumnLink
-          }
-          def self.factory default_caption, my_manifest
-            my_manifest['type'] ||= 'action'
-            type = my_manifest['type']
-            raise "undefined type for filers > #{default_caption.filer_name} > caption > default > link\n" unless type
-            my_class = @@types[type]
-            raise "undefined class for filers > #{default_caption.filer_name} > caption > default > link > #{type}\n" unless my_class
-            my_class.new(default_caption, my_manifest)
+          
+          def self.types
+            {
+              'action' => ActionLink, 'none' => NoneLink, 'url_column' => UrlColumnLink
+            }
+          end
+          
+          def self.default_type
+            'action'
           end
           
         end
-        
       end
     end
   end
index 1cc07dd..b7d7196 100644 (file)
@@ -3,37 +3,28 @@ module LocalManifest
     module CaptionModule
       module DefaultModule
         module LinkModule
-          class BaseLink
-            attr :caption, :link_manifest, :type
-            
-            def initialize caption, link_manifest
-              @caption = caption
-              @link_manifest = link_manifest
-              self.set_default
-              self.init
-            end
+          class BaseLink < ManifestBase::TypeArgs
             
             def set_default
-              @link_manifest['args'] ||= {}
+              super
             end
             
             def init
-              @type = @link_manifest['type']
-              @args = @link_manifest['args']
+              super
             end
             
             def filer
-              @caption.filer
+              @parent.filer
             end
             
           end
           
           class ActionLink < BaseLink
-            attr  :action_name
+            attr :action_name
             
             def set_default
               super
-              @link_manifest['args']['action_name'] ||= 'show'
+              @args['action_name'] ||= 'show'
             end
             
             def init
@@ -61,11 +52,11 @@ module LocalManifest
           end
           
           class UrlColumnLink < BaseLink
-            attr  :column_name
+            attr :column_name
             
             def set_default
               super
-              @link_manifest['args']['column_name'] ||= 'url'
+              @args['column_name'] ||= 'url'
             end
             
             def init
index c7267e4..4aa9bc2 100644 (file)
@@ -6,7 +6,7 @@ module LocalManifest
         
         def set_default
           super
-          @caption_manifest['args']['template_name'] ||= 'caption'
+          @args['template_name'] ||= 'caption'
         end
         
         def init
index c9d6038..b844abb 100644 (file)
@@ -1,19 +1,19 @@
-require_dependency "local_manifest/filer/date/date"
+ManifestBase.require_modules "local_manifest/filer/date/", 
+  %w|date|
+
 module LocalManifest
   module FilerModule
-    class DateFactory
+    class DateFactory < ManifestBase::Factory
       include DateModule
-      @@types = {
-        'default' => Base
-      }
       
-      def self.factory filer, my_manifest
-        my_manifest['type'] ||=  'default'
-        type = my_manifest['type']
-        raise "undefined type for filers > #{filer.filer_name} > date\n" unless type
-        my_class = @@types[type]
-        raise "undefined class for filers > #{filer.filer_name} > date > #{type}\n" unless my_class
-        my_class.new(filer, my_manifest)
+      def self.types
+        {
+          'default' => Base
+        }
+      end
+      
+      def self.default_type
+        'default'
       end
       
     end
index d5e9e2a..06c7c2c 100644 (file)
@@ -1,23 +1,14 @@
 module LocalManifest
   module FilerModule
     module  DateModule
-      class Base
-        attr :filer, :date_manifest, :type
-        
-        def initialize filer, date_manifest
-          @filer = filer
-          @date_manifest = date_manifest
-          self.set_default
-          self.init
-        end
+      class Base < ManifestBase::TypeArgs
         
         def set_default
-          @date_manifest['args'] ||= {}
+          super
         end
         
         def init
-          @type = @date_manifest['type']
-          @args = @date_manifest['args']
+          super
         end
         
         def visible?
index 7f9d527..46a79c5 100644 (file)
@@ -1,20 +1,20 @@
-require_dependency "local_manifest/filer/edit/edit"
+ManifestBase.require_modules "local_manifest/filer/edit/", 
+  %w|edit|
+
 module LocalManifest
   module FilerModule
-    class EditFactory
+    class EditFactory < ManifestBase::Factory
       include EditModule
       
-      @@types = {
-        'default' => Default, 'none' => None, 'template' => Template, 'account' => Account
-      }
-      def self.factory filer, my_manifest
-        my_manifest['type'] ||=  'default'
-        type = my_manifest['type']
-        type = my_manifest['type']
-        raise "undefined type for filers > #{filer.item_name} > edit\n" unless type
-        my_class = @@types[type]
-        raise "undefined class for filers > #{filer.item_name} > edit > #{type}\n" unless my_class
-        my_class.new(filer, my_manifest)
+      def self.types
+        {
+          'default' => Default, 'none' => None, 'template' => Template, 
+          'account' => Account
+        }
+      end
+      
+      def self.default_type
+        'default'
       end
       
     end
index 1468ad7..8f28bee 100644 (file)
@@ -1,23 +1,14 @@
 module LocalManifest
   module FilerModule
-    module  EditModule
-      class Base
-        attr :filer, :edit_manifest, :type
-        
-        def initialize filer, edit_manifest
-          @filer = filer
-          @edit_manifest = edit_manifest
-          self.set_default
-          self.init
-        end
+    module EditModule
+      class Base < ManifestBase::TypeArgs
         
         def set_default
-          @edit_manifest['args'] ||= {}
+          super
         end
         
         def init
-          @type = @edit_manifest['type']
-          @args = @edit_manifest['args']
+          super
         end
         
         def visible?
@@ -40,7 +31,7 @@ module LocalManifest
         
         def set_default
           super
-          @edit_manifest['args']['template_name'] ||= 'edit'
+          @args['template_name'] ||= 'edit'
         end
         
         def init
index 7b28d18..3f4d981 100644 (file)
@@ -1,19 +1,19 @@
-require_dependency "local_manifest/filer/icon/icon"
+ManifestBase.require_modules "local_manifest/filer/icon/", 
+  %w|icon|
+
 module LocalManifest
   module FilerModule
-    class IconFactory
+    class IconFactory < ManifestBase::Factory
       include IconModule
-      @@types = {
-        'default' => Base
-      }
       
-      def self.factory filer, my_manifest
-        my_manifest['type'] ||=  'default'
-        type = my_manifest['type']
-        raise "undefined type for filers > #{filer.filer_name} > icon\n" unless type
-        my_class = @@types[type]
-        raise "undefined class for filers > #{filer.filer_name} > icon > #{type}\n" unless my_class
-        my_class.new(filer, my_manifest)
+      def self.types
+        {
+          'default' => Base
+        }
+      end
+      
+      def self.default_type
+        'default'
       end
       
     end
index 88fb879..537d064 100644 (file)
@@ -1,23 +1,14 @@
 module LocalManifest
   module FilerModule
     module  IconModule
-      class Base
-        attr :filer, :icon_manifest, :type
-        
-        def initialize filer, icon_manifest
-          @filer = filer
-          @icon_manifest = icon_manifest
-          self.set_default
-          self.init
-        end
+      class Base < ManifestBase::TypeArgs
         
         def set_default
-          @icon_manifest['args'] ||= {}
+          super
         end
         
         def init
-          @type = @icon_manifest['type']
-          @args = @icon_manifest['args']
+          super
         end
         
         def visible?
index c7fd547..bfd77d7 100644 (file)
@@ -1,19 +1,19 @@
-require_dependency "local_manifest/filer/summary/summary"
+ManifestBase.require_modules "local_manifest/filer/summary/", 
+  %w|summary|
+
 module LocalManifest
   module FilerModule
-    class SummaryFactory
+    class SummaryFactory < ManifestBase::Factory
       include SummaryModule
-      @@types = {
-        'none' => None, 'template' => Template
-      }
       
-      def self.factory filer, my_manifest
-        my_manifest['type'] ||=  'template'
-        type = my_manifest['type']
-        raise "undefined type for filers > #{filer.filer_name} > summary\n" unless type
-        my_class = @@types[type]
-        raise "undefined class for filers > #{filer.filer_name} > summary > #{type}\n" unless my_class
-        my_class.new(filer, my_manifest)
+      def self.types
+        {
+          'none' => None, 'template' => Template
+        }
+      end
+      
+      def self.default_type
+        'template'
       end
       
     end
index d1b29af..48603f3 100644 (file)
@@ -1,23 +1,14 @@
 module LocalManifest
   module FilerModule
-    module  SummaryModule
-      class Base
-        attr :filer, :summary_manifest, :type
-        
-        def initialize filer, summary_manifest
-          @filer = filer
-          @summary_manifest = summary_manifest
-          self.set_default
-          self.init
-        end
+    module SummaryModule
+      class Base < ManifestBase::TypeArgs
         
         def set_default
-          @summary_manifest['args'] ||= {}
+          super
         end
         
         def init
-          @type = @summary_manifest['type']
-          @args = @summary_manifest['args']
+          super
         end
         
         def visible?
@@ -34,7 +25,7 @@ module LocalManifest
         
         def set_default
           super
-          @summary_manifest['args']['template_name'] ||= 'summary'
+          @args['template_name'] ||= 'summary'
         end
         
         def init
index 312ca37..5068102 100644 (file)
@@ -1,21 +1,19 @@
-require_dependency "local_manifest/filer/symbol/base"
-require_dependency "local_manifest/filer/symbol/default"
-require_dependency "local_manifest/filer/symbol/template"
+ManifestBase.require_modules "local_manifest/filer/symbol/", 
+  %w|base default template|
+
 module LocalManifest
   module FilerModule
-    class SymbolFactory
+    class SymbolFactory < ManifestBase::Factory
       include SymbolModule
-      @@types = {
-        'default' => Default, 'template' => Template
-      }
       
-      def self.factory filer, my_manifest
-        my_manifest['type'] ||=  'default'
-        type = my_manifest['type']
-        raise "undefined type for filers > #{filer.filer_name} > symbol\n" unless type
-        my_class = @@types[type]
-        raise "undefined class for filers > #{filer.filer_name} > symbol > #{type}\n" unless my_class
-        my_class.new(filer, my_manifest)
+      def self.types
+        {
+          'default' => Default, 'template' => Template
+        }
+      end
+      
+      def self.default_type
+        'default'
       end
       
     end
index 4dd5cb2..b5190dd 100644 (file)
@@ -1,23 +1,14 @@
 module LocalManifest
   module FilerModule
     module SymbolModule
-      class Base
-        attr :filer, :symbol_manifest, :type
-        
-        def initialize filer, symbol_manifest
-          @filer = filer
-          @symbol_manifest = symbol_manifest
-          self.set_default
-          self.init
-        end
+      class Base < ManifestBase::TypeArgs
         
         def set_default
-          @symbol_manifest['args'] ||= {}
+          super
         end
         
         def init
-          @type = @symbol_manifest['type']
-          @args = @symbol_manifest['args']
+          super
         end
         
         def visible?
@@ -25,11 +16,11 @@ module LocalManifest
         end
         
         def filer_name
-          @filer.item_name
+          @parent.name
         end
         
-        def filer_manifest
-          @filer.filer_manifest
+        def filer
+          @parent
         end
         
       end
index fdfd993..bf482c9 100644 (file)
@@ -1,5 +1,6 @@
-require_dependency "local_manifest/filer/symbol/default/face"
-require_dependency "local_manifest/filer/symbol/default/link"
+ManifestBase.require_modules "local_manifest/filer/symbol/default/", 
+  %w|face link|
+
 module LocalManifest
   module FilerModule
     module SymbolModule
@@ -9,14 +10,14 @@ module LocalManifest
         
         def set_default
           super
-          @symbol_manifest['args']['face'] ||= {}
-          @symbol_manifest['args']['link'] ||= {}
+          @args['face'] ||= {}
+          @args['link'] ||= {}
         end
         
         def init
           super
-          @face = FaceFactory.factory(self, @args['face'])
-          @link = LinkFactory.factory(self, @args['link'])
+          @face = ManifestBase.load_type_args self, @args, 'face', FaceFactory
+          @link = ManifestBase.load_type_args self, @args, 'link', LinkFactory
         end
         
         def visible?
index 42e16d3..1c8f1a5 100644 (file)
@@ -1,24 +1,24 @@
-require_dependency "local_manifest/filer/symbol/default/face/face"
+ManifestBase.require_modules "local_manifest/filer/symbol/default/face/", 
+  %w|face|
+
 module LocalManifest
   module FilerModule
     module SymbolModule
       module DefaultModule
-        class FaceFactory
+        class FaceFactory < ManifestBase::Factory
           include FaceModule
-          @@types = {
-            'image' => ImageFace, 'picture' => PictureFace
-          }
-          def self.factory default_symbol, my_manifest
-            my_manifest['type'] ||= 'image'
-            type = my_manifest['type']
-            raise "undefined type for filers > #{default_symbol.filer_name} > symbol > default > face\n" unless type
-            my_class = @@types[type]
-            raise "undefined class for filers > #{default_symbol.filer_name} > symbol > default > face > #{type}\n" unless my_class
-            my_class.new(default_symbol, my_manifest)
+          
+          def self.types
+            {
+              'image' => ImageFace, 'picture' => PictureFace
+            }
+          end
+          
+          def self.default_type
+            'image'
           end
           
         end
-        
       end
     end
   end
index 1050f24..9eed69a 100644 (file)
@@ -3,29 +3,20 @@ module LocalManifest
     module SymbolModule
       module DefaultModule
         module FaceModule
-          class BaseFace
-            attr :symbol, :face_manifest, :type
-            
-            def initialize symbol, face_manifest
-              @symbol = symbol
-              @face_manifest = face_manifest
-              self.set_default
-              self.init
-            end
+          class BaseFace < ManifestBase::TypeArgs
             
             def set_default
-              @face_manifest['args'] ||= {}
+              super
             end
             
             def init
-              @type = @face_manifest['type']
-              @args = @face_manifest['args']
+              super
+            end
+            
+            def filer
+              @parent.filer
             end
             
-        def filer
-          @symbol.filer
-        end
-        
           end
           
           class ImageFace < BaseFace
@@ -33,7 +24,7 @@ module LocalManifest
             
             def set_default
               super
-              @face_manifest['args']['url'] ||= '/images/' + self.filer.item_name + '.gif'
+              @args['url'] ||= '/images/' + self.filer.item_name + '.gif'
             end
             
             def init
@@ -48,7 +39,7 @@ module LocalManifest
             
             def set_default
               super
-              @face_manifest['args']['method_name'] ||= 'symbol_option'
+              @args['method_name'] ||= 'symbol_option'
             end
             
             def init
index f1a56c6..3120fa6 100644 (file)
@@ -1,24 +1,24 @@
-require_dependency "local_manifest/filer/symbol/default/link/link"
+ManifestBase.require_modules "local_manifest/filer/symbol/default/link/", 
+  %w|link|
+
 module LocalManifest
   module FilerModule
     module SymbolModule
       module DefaultModule
-        class LinkFactory
+        class LinkFactory < ManifestBase::Factory
           include LinkModule
-          @@types = {
-            'action' => ActionLink, 'none' => NoneLink, 'url_column' => UrlColumnLink
-          }
-          def self.factory default_symbol, my_manifest
-            my_manifest['type'] ||= 'action'
-            type = my_manifest['type']
-            raise "undefined type for filers > #{default_symbol.filer_name} > symbol > default > link\n" unless type
-            my_class = @@types[type]
-            raise "undefined class for filers > #{default_symbol.filer_name} > symbol > default > link > #{type}\n" unless my_class
-            my_class.new(default_symbol, my_manifest)
+          
+          def self.types
+            {
+              'action' => ActionLink, 'none' => NoneLink, 'url_column' => UrlColumnLink
+            }
+          end
+          
+          def self.default_type
+            'action'
           end
           
         end
-        
       end
     end
   end
index b69c3cb..bb25f56 100644 (file)
@@ -3,37 +3,28 @@ module LocalManifest
     module SymbolModule
       module DefaultModule
         module LinkModule
-          class BaseLink
-            attr :symbol, :link_manifest, :type
-            
-            def initialize symbol, link_manifest
-              @symbol = symbol
-              @link_manifest = link_manifest
-              self.set_default
-              self.init
-            end
+          class BaseLink < ManifestBase::TypeArgs
             
             def set_default
-              @link_manifest['args'] ||= {}
+              super
             end
             
             def init
-              @type = @link_manifest['type']
-              @args = @link_manifest['args']
+              super
             end
             
             def filer
-              @symbol.filer
+              @parent.filer
             end
             
           end
           
           class ActionLink < BaseLink
-            attr  :action_name
+            attr :action_name
             
             def set_default
               super
-              @link_manifest['args']['action_name'] ||= 'show'
+              @args['action_name'] ||= 'show'
             end
             
             def init
@@ -61,11 +52,11 @@ module LocalManifest
           end
           
           class UrlColumnLink < BaseLink
-            attr  :column_name
+            attr :column_name
             
             def set_default
               super
-              @link_manifest['args']['column_name'] ||= 'url'
+              @args['column_name'] ||= 'url'
             end
             
             def init
index 5b1409c..ac6d92d 100644 (file)
@@ -6,7 +6,7 @@ module LocalManifest
         
         def set_default
           super
-          @symbol_manifest['args']['template_name'] ||= 'symbol'
+          @args['template_name'] ||= 'symbol'
         end
         
         def init
index 5d98144..7b33dc4 100644 (file)
@@ -1,37 +1,23 @@
-require_dependency "local_manifest/list_group/list"
+ManifestBase.require_modules "local_manifest/list_group/", 
+  %w|list|
+
 module LocalManifest
-  class ListGroup
+  class ListGroup < ManifestBase::Base
     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
+    attr :item_name, :tree_name, :lists
     
     def set_default
-      @list_group_manifest['item_name'] ||= @list_group_name
-      @list_group_manifest['lists'] ||= {}
+      super
+      @json['item_name'] ||= @name
+      @json['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
-      }
+      super
+      @item_name = @json['item_name']
+      @tree_name = @json['tree_name']
+      @lists = ManifestBase.load_type_name_args self, @json, 'lists', ListFactory
     end
     
   end
index 4976af9..1309e08 100644 (file)
@@ -1,14 +1,9 @@
-require_dependency "local_manifest/list_group/list/base"
-require_dependency "local_manifest/list_group/list/public"
-require_dependency "local_manifest/list_group/list/private"
-require_dependency "local_manifest/list_group/list/system_resource"
-require_dependency "local_manifest/list_group/list/filter"
-require_dependency "local_manifest/list_group/list/through_filter"
-require_dependency "local_manifest/list_group/list/foreign_filter"
-require_dependency "local_manifest/list_group/list/play"
+ManifestBase.require_modules "local_manifest/list_group/list/", 
+  %w|base public private system_resource filter through_filter foreign_filter play|
+
 module LocalManifest
   module ListGroupModule
-    class ListFactory
+    class ListFactory < ManifestBase::Factory
       include ListModule
       
       def self.types
@@ -19,13 +14,8 @@ module LocalManifest
         }
       end
       
-      def self.factory list_group, list_name, my_manifest
-        my_manifest['type'] ||=  'public'
-        type = my_manifest['type']
-        raise "undefined type for list_groups > #{list_group.item_name} > #{list_name}\n" unless type
-        my_class = self.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)
+      def self.default_type
+        'public'
       end
       
     end
index b78118c..86d178a 100644 (file)
@@ -1,32 +1,24 @@
-require_dependency "local_manifest/list_group/list/where"
-require_dependency "local_manifest/list_group/list/includes"
+ManifestBase.require_modules "local_manifest/list_group/list/", 
+  %w|where includes|
+
 module LocalManifest
   module ListGroupModule
     module ListModule
-      class Base
-        attr :list_group, :list_name, :list_manifest, :type, 
-          :model_manifest, :model_list_manifest, :model, 
+      class Base < ManifestBase::TypeNameArgs
+        attr :model_manifest, :model_list_manifest, :model, 
           :where, :includes, :tree_name
-        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
-          @list_manifest['args'] ||= {}
-          @list_manifest['args']['where'] ||= {}
-          @list_manifest['args']['includes'] ||= {}
-          @list_manifest['args']['tree_name'] ||= @list_group.tree_name
+          super
+          @args['where'] ||= {}
+          @args['includes'] ||= {}
+          @args['tree_name'] ||= @parent.tree_name
         end
         
         def init
-          @type = @list_manifest['type']
-          @args = @list_manifest['args']
-          @where = WhereFactory.factory self, @args['where']
-          @includes = IncludeFactory.factory self, @args['includes']
+          super
+          @where = ManifestBase.load_type_args self, @args, 'where', WhereFactory
+          @includes = ManifestBase.load_type_args self, @args, 'includes', IncludeFactory
           @tree_name = @args['tree_name']
           
           @model_manifest = ::Manifest.manifest.models[self.item_name]
@@ -35,7 +27,11 @@ module LocalManifest
         end
         
         def item_name
-          @list_group.item_name
+          @parent.item_name
+        end
+        
+        def list_group
+          @parent
         end
         
       end
index 4696226..6b500f1 100644 (file)
@@ -6,8 +6,8 @@ module LocalManifest
         
         def set_default
           super
-          @list_manifest['args']['filter_item_name'] ||= @list_name.gsub(/^by_/, '')
-          @list_manifest['args']['filter_key'] ||= @list_manifest['args']['filter_item_name'] + '_id'
+          @args['filter_item_name'] ||= @name.gsub(/^by_/, '')
+          @args['filter_key'] ||= @args['filter_item_name'] + '_id'
         end
         
         def init
index 69c5e68..55747cf 100644 (file)
@@ -6,7 +6,7 @@ module LocalManifest
         
         def set_default
           super
-          @list_manifest['args']['tree_name'] ||= 'owner'
+          @args['tree_name'] ||= 'owner'
         end
         
         def init
index 411b67a..a7c356c 100644 (file)
@@ -1,23 +1,20 @@
-require_dependency "local_manifest/list_group/list/includes/base"
-require_dependency "local_manifest/list_group/list/includes/method"
-require_dependency "local_manifest/list_group/list/includes/auto"
-require_dependency "local_manifest/list_group/list/includes/none"
+ManifestBase.require_modules "local_manifest/list_group/list/includes/", 
+  %w|base method auto none|
+
 module LocalManifest
   module ListGroupModule
     module ListModule
-      class IncludeFactory
+      class IncludeFactory < ManifestBase::Factory
         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)
+        def self.types
+          {
+            'method' => IncludeMethod, 'auto' => IncludeAuto, 'none' => IncludeNone
+          }
+        end
+        
+        def self.default_type
+          'auto'
         end
         
       end
index c62589b..cc30cfd 100644 (file)
@@ -4,9 +4,10 @@ module LocalManifest
       module IncludeModule
         class IncludeAuto < Base
           attr :tree_name
+          
           def set_default
             super
-            @includes_manifest['args']['tree_name'] ||= @list.tree_name
+            @args['tree_name'] ||= @parent.tree_name
           end
           
           def init
@@ -19,7 +20,7 @@ module LocalManifest
           end
           
           def tree_manifest
-            self.model_manifest.tree[@list.list_group.tree_name]
+            self.model_manifest.tree[self.list_group.tree_name]
           end
           
           def includes
@@ -30,6 +31,10 @@ module LocalManifest
             end
           end
           
+          def list_group
+            @parent.list_group
+          end
+          
         end
         
       end
index 70fb673..65242c9 100644 (file)
@@ -2,34 +2,26 @@ module LocalManifest
   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
+        class Base < ManifestBase::TypeArgs
           
           def set_default
-            @includes_manifest['args'] ||= {}
+            super
           end
           
           def init
-            @type = @includes_manifest['type']
-            @args = @includes_manifest['args']
+            super
           end
           
           def item_name
-            @list.item_name
+            @parent.item_name
           end
           
           def list_name
-            @list.list_name
+            @parent.list_name
           end
           
           def model
-            @list.model
+            @parent.model
           end
           
         end
index 3f3f32d..e82c03e 100644 (file)
@@ -4,9 +4,10 @@ module LocalManifest
       module IncludeModule
         class IncludeMethod < Base
           attr :method_name
+          
           def set_default
             super
-            @includes_manifest['args']['method_name'] ||= self.list_name + '_list_includes'
+            @args['method_name'] ||= @parent.name + '_list_includes'
           end
           
           def init
index 7351abd..1d09133 100644 (file)
@@ -1,16 +1,7 @@
 module LocalManifest
   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
+      class PlayList < Base
         
         def set_default
           return
index 799407d..f27c8ae 100644 (file)
@@ -1,22 +1,20 @@
-require_dependency "local_manifest/list_group/list/where/base"
-require_dependency "local_manifest/list_group/list/where/method"
-require_dependency "local_manifest/list_group/list/where/auto"
+ManifestBase.require_modules "local_manifest/list_group/list/where/", 
+  %w|base method auto|
+
 module LocalManifest
   module ListGroupModule
     module ListModule
-      class WhereFactory
+      class WhereFactory < ManifestBase::Factory
         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)
+        def self.types
+          {
+            'method' => WhereMethod, 'auto' => WhereAuto
+          }
+        end
+        
+        def self.default_type
+          'auto'
         end
         
       end
index 10d3f6f..b09f4f4 100644 (file)
@@ -2,34 +2,26 @@ module LocalManifest
   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
+        class Base < ManifestBase::TypeArgs
           
           def set_default
-            @where_manifest['args'] ||= {}
+            super
           end
           
           def init
-            @type = @where_manifest['type']
-            @args = @where_manifest['args']
+            super
           end
           
           def item_name
-            @list.item_name
+            @parent.item_name
           end
           
           def list_name
-            @list.list_name
+            @parent.list_name
           end
           
           def model
-            @list.model
+            @parent.model
           end
           
         end
index 3f4aeda..72e79de 100644 (file)
@@ -4,9 +4,10 @@ module LocalManifest
       module WhereModule
         class WhereMethod < Base
           attr :method_name
+          
           def set_default
             super
-            @where_manifest['args']['method_name'] ||= self.list_name + '_list_where'
+            @args['method_name'] ||= @parent.name + '_list_where'
           end
           
           def init
index 65534dd..f5602b9 100644 (file)
@@ -1,20 +1,21 @@
 module LocalManifest
   class LocalManifest
     cattr_accessor :manifest
-    attr :list_groups, :profilers, :filers, :forms
+    attr :list_groups, :profilers, :filers, :forms, :module_names
     # call me before load routes.rb
     # routes.rb needs engine_resources manifest in system_resources
     # ex. it's adding license_groups routes
     def initialize local_json
+      @module_names = []
       @local_json = local_json || {}
     end
     
     def init
       # managers can't initialize before load  application.rb
       return unless defined? ::Pettanr
-      @list_groups = ListGroup.manager(self, @local_json['list_groups'] || {})
-      @filers = Filer.manager(self, @local_json['filers'] || {})
-      @profilers = Profiler.manager(self, @local_json['profilers'] || {})
+      @list_groups = ListGroup.load(self, @local_json, 'list_groups')
+      @filers = Filer.load(self, @local_json, 'filers')
+      @profilers = Profiler.load(self, @local_json, 'profilers')
       @forms = Form.base_manager(self, @local_json['forms'] || {})
       @forms.merge(Form.extend_manager(self, @local_json['forms'] || {}))
     end
index 56f4ab2..301d7c5 100644 (file)
@@ -1,40 +1,28 @@
-require_dependency "local_manifest/profiler/column"
-require_dependency "local_manifest/profiler/list"
-require_dependency "local_manifest/profiler/association"
+ManifestBase.require_modules "local_manifest/profiler/", 
+  %w|list association|
+
 module LocalManifest
-  class Profiler
-    
-    def self.manager manifest, my_manifests
-      profilers = {}
-      my_manifests.each {|item_name, profiler_manifest|
-        profilers[item_name] = self.new(manifest, item_name, profiler_manifest)
-      }
-      profilers
-    end
+  class Profiler < ManifestBase::Base
+    include ProfilerModule
     
-    attr :profiler_manifest, :item_name, :manifest, 
-      :column_names, :lists, :associations
-    def initialize manifest, item_name, profiler_manifest
-      @manifest = manifest
-      @item_name = item_name
-      @profiler_manifest = profiler_manifest
-      self.set_default
-      self.init
-    end
+    attr :column_names, :lists, :associations
     
     def set_default
-      @profiler_manifest['column_names'] ||= []
-      @profiler_manifest['lists'] ||= {}
-      @profiler_manifest['associations'] ||= {}
+      super
+      @json['column_names'] ||= []
+      @json['lists'] ||= {}
+      @json['associations'] ||= {}
     end
     
     def init
-      @column_names = ['id'] + @profiler_manifest['column_names'] + ['created_at', 'updated_at']
-      @lists = {}
-      @profiler_manifest['lists'].each {|list_name, list_manifest|
-        @lists[list_name] = ProfilerModule::List.new(self, list_name, list_manifest)
-      }
-      @associations = ProfilerModule::Association.new(self, @profiler_manifest['associations'])
+      super
+      @column_names = ['id'] + @json['column_names'] + ['created_at', 'updated_at']
+      @lists =  ManifestBase.load_type_name_args self, @json, 'lists', List
+      @associations = ManifestBase.load_value self, @json, 'associations', Association
+    end
+    
+    def item_name
+      @name
     end
     
     def each_column
index db7365b..7b2fce2 100644 (file)
@@ -1,46 +1,32 @@
-require_dependency "local_manifest/profiler/association/belongs_to"
-require_dependency "local_manifest/profiler/association/has_many"
-require_dependency "local_manifest/profiler/association/has_one"
+ManifestBase.require_modules "local_manifest/profiler/association/", 
+  %w|belongs_to has_many has_one|
+
 module LocalManifest
   module ProfilerModule
-    class Association
+    class Association < ManifestBase::Values
       include AssociationModule
-      attr :profiler, :association_manifest, 
-        :belongs_to, :has_many, :has_one
-      def initialize profiler, association_manifest
-        @profiler = profiler
-        @association_manifest = association_manifest
-        self.set_default
-        self.init
-      end
+      attr :belongs_to, :has_many, :has_one
       
       def set_default
-        @association_manifest['belongs_to'] ||= []
-        @association_manifest['has_many'] ||= []
-        @association_manifest['has_one'] ||= []
+        super
+        @values['belongs_to'] ||= []
+        @values['has_many'] ||= []
+        @values['has_one'] ||= []
       end
       
       def init
-        @belongs_to = []
-        @has_many = []
-        @has_one = []
-        @association_manifest['belongs_to'].each {|model_name|
-          @belongs_to << BelongsTo.new(self, model_name)
-        }
-        @association_manifest['has_many'].each {|list_name|
-          @has_many << HasMany.new(self, list_name)
-        }
-        @association_manifest['has_one'].each {|list_name|
-          @has_one << HasOne.new(self, list_name)
-        }
+        super
+        @belongs_to = ManifestBase.load_names self, @values, 'belongs_to', BelongsTo
+        @has_many = ManifestBase.load_names self, @values, 'has_many', HasMany
+        @has_one = ManifestBase.load_names self, @values, 'has_one', HasOne
       end
       
-      def profiler_name
-        @profiler.model_name
+      def profiler
+        @parent
       end
       
-      def profiler_manifest
-        @profiler.profiler_manifest
+      def profiler_name
+        @parent.name
       end
       
     end
index 8ce0697..b150350 100644 (file)
@@ -1,19 +1,16 @@
 module LocalManifest
   module ProfilerModule
     module AssociationModule
-      class BelongsTo
-        attr :association, :model_name
-        def initialize association, model_name
-          @association = association
-          @model_name = model_name
-          self.set_default
-          self.init
-        end
+      class BelongsTo < ManifestBase::Names
+        attr :model_name
         
         def set_default
+          super
         end
         
         def init
+          super
+          @model_name = @name
         end
         
         def model
@@ -21,7 +18,7 @@ module LocalManifest
         end
         
         def association_name
-          @association.association_name
+          @parent.name
         end
         
       end
index f330826..faad3fb 100644 (file)
@@ -1,31 +1,26 @@
 module LocalManifest
   module ProfilerModule
     module AssociationModule
-      class HasMany
-        attr :association, :profiler_list_name, 
-          :model_name, :list_name, :list
-        def initialize association, profiler_list_name
-          @association = association
-          @profiler_list_name = profiler_list_name
-          self.set_default
-          self.init
-        end
+      class HasMany < ManifestBase::Names
+        attr :model_name, :list_name, :list
         
         def set_default
+          super
         end
         
         def init
-          if list_manifest = self.profiler.lists[@profiler_list_name]
+          super
+          if list_manifest = self.profiler.lists[@name]
             @model_name = list_manifest.model_name
             @list_name = list_manifest.list_name
           else
-            n = @profiler_list_name.split '.'
+            n = @name.split '.'
             if n.size > 1
               @table_name = n[0]
               @model_name = @table_name.singularize
               @list_name = n[1]
             else
-              raise "undefined list for profilers > #{self.profiler.item_name} > has_many > #{@profiler_list_name}\n"
+              ManifestBase::alert_undefined_message 'list', self.module_message
             end
           end
           @list = Locmare::ListGroup.list @model_name, @list_name
@@ -36,15 +31,15 @@ module LocalManifest
         end
         
         def association_name
-          @association.association_name
+          @parent.association_name
         end
         
         def profiler
-          @association.profiler
+          @parent.profiler
         end
         
         def profiler_manifest
-          @association.profiler_manifest
+          @parent.profiler_manifest
         end
         
       end
index 5d30cd1..dc00bf9 100644 (file)
@@ -1,30 +1,25 @@
 module LocalManifest
   module ProfilerModule
     module AssociationModule
-      class HasOne
-        attr :association, :profiler_list_name, 
-          :model_name, :list_name, :list
-        def initialize association, profiler_list_name
-          @association = association
-          @profiler_list_name = profiler_list_name
-          self.set_default
-          self.init
-        end
+      class HasOne < ManifestBase::Names
+        attr :model_name, :list_name, :list
         
         def set_default
+          super
         end
         
         def init
-          if list_manifest = self.profiler.lists[@profiler_list_name]
-            @model_name = list_manifest.model_name
-            @list_name = list_manifest.list_name
+          super
+          if list_manifest = self.profiler.lists[@name]
+            @model_name = @parent.model_name
+            @list_name = @parent.list_name
           else
-            n = @profiler_list_name.split '.'
+            n = @name.split '.'
             if n.size > 1
               @model_name = n[0]
               @list_name = n[1]
             else
-              raise "undefined list for profilers > #{self.profiler.item_name} > has_one > #{@profiler_list_name}\n"
+              ManifestBase::alert_undefined_message 'list', self.module_message
             end
           end
           @list = Locmare::ListGroup.list @model_name, @list_name
@@ -35,15 +30,15 @@ module LocalManifest
         end
         
         def association_name
-          @association.association_name
+          @parent.association_name
         end
         
         def profiler
-          @association.profiler
+          @parent.profiler
         end
         
         def profiler_manifest
-          @association.profiler_manifest
+          @parent.profiler_manifest
         end
         
       end
diff --git a/lib/local_manifest/profiler/column.rb b/lib/local_manifest/profiler/column.rb
deleted file mode 100644 (file)
index 843abff..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-module LocalManifest
-  module ProfilerModule
-    class Column
-      def initialize item_name, column_name, item, operators, manifest
-        @item_name = item_name
-        @column_name = column_name
-        @item = item
-        @operators = operators
-        @manifest = manifest
-        
-        @model = @item_name.classify.constantize
-        @model_attributes = @manifest.model(@item_name).attributes
-        @column_conf = @model_attributes[@column_name]
-      end
-      
-      def label view
-        @model.human_attribute_name(@column_name)
-      end
-      
-      def date?
-        case @column_conf['type']
-        when 'datetime'
-          if self.value
-            true
-          else
-            false
-          end
-        else
-          false
-        end
-      end
-      
-      def value
-        @item.attributes[@column_name]
-      end
-      
-      def disp_value view
-        if self.date?
-          view.l self.value
-        else
-          self.value
-        end
-      end
-      
-      def note?
-        if @column_conf['source']
-          case @column_conf['source']['type']
-          when 'magic_number'
-            true
-          when 'model'
-            false
-          else
-            false
-          end
-        else
-          false
-        end
-      end
-      
-      def note view
-        if self.note?
-          '(' + view.t_selected_item(@column_conf['source']['key'], self.value) + ')'
-        else
-        end
-      end
-      
-    end
-    
-  end
-end
index ea35a7f..678d6d6 100644 (file)
@@ -7,13 +7,15 @@ module Manifest
     attr :item_name, :actions
     
     def set_default
+      super
       @json['item_name'] ||= ::Manifest.singularize(@name)
       @json['actions'] ||= {}
     end
     
     def init
+      super
       @item_name = @json['item_name']
-      @actions = ManifestBase.load_type_name_args self, @json, 'actions', ActionFactory, 'list'
+      @actions = ManifestBase.load_type_name_args self, @json, 'actions', ActionFactory
     end
     
   end
index ff38680..e3c53ca 100644 (file)
@@ -13,6 +13,10 @@ module Manifest
         }
       end
       
+      def self.default_type
+        'list'
+      end
+      
     end
     
   end
index 0f80ff4..a832b22 100644 (file)
@@ -6,7 +6,6 @@ module Manifest
         
         def set_default
           super
-          @args ||= {}
           @args['item_name'] ||= self.parent.item_name  # not parent.name. follow singularized name
         end
         
index fdf3064..6b86071 100644 (file)
@@ -8,6 +8,7 @@ module Manifest
     attr :attributes, :associations, :tree, :list, :peta, :extend_column_name
     
     def set_default
+      super
       @json['attributes'] ||= {}
       @json['associations'] ||= {}
       @json['tree'] ||= {}
@@ -30,15 +31,16 @@ module Manifest
     end
     
     def init
+      super
       @attributes = ManifestBase.load_name_values self, @json, 'attributes', Attribute
       @associations = ManifestBase.load_value self, @json, 'associations', Association
       @tree = {}
       @json['tree'].each {|tree_name, parent_model_name|
         @tree[tree_name] = Tree.new(self, tree_name, parent_model_name)
       }
-      @peta = ManifestBase.load_type_args(self, @json, 'peta', PetaFactory, 'item')
+      @peta = ManifestBase.load_type_args(self, @json, 'peta', PetaFactory)
       @extend_column_name = @json['extend_column_name']
-      @list = List.new(self, @json['list'])
+      @list = ManifestBase.load_value self, @json, 'list', List
     end
     
     def model_name
index e81624b..0724664 100644 (file)
@@ -1,6 +1,6 @@
-require_dependency "manifest/model/association/belongs_to"
-require_dependency "manifest/model/association/has_many"
-require_dependency "manifest/model/association/has_one"
+ManifestBase.require_modules "manifest/model/association/", 
+  %w|belongs_to has_many has_one|
+
 module Manifest
   module ModelModule
     class Association < ManifestBase::Values
@@ -10,25 +10,16 @@ module Manifest
       
       def set_default
         super
-        @args['belongs_to'] ||= {}
-        @args['has_many'] ||= {}
-        @args['has_one'] ||= {}
+        @values['belongs_to'] ||= {}
+        @values['has_many'] ||= {}
+        @values['has_one'] ||= {}
       end
       
       def init
         super
-        @belongs_to = {}
-        @has_many = {}
-        @has_one = {}
-        @args['belongs_to'].each {|name, json|
-          @belongs_to[name] = BelongsTo.new(self, name, json)
-        }
-        @args['has_many'].each {|name, json|
-          @has_many[name] = HasMany.new(self, name, json)
-        }
-        @args['has_one'].each {|name, json|
-          @has_one[name] = HasOne.new(self, name, json)
-        }
+        @belongs_to = ManifestBase.load_name_values self, @values, 'belongs_to', BelongsTo
+        @has_many = ManifestBase.load_name_values self, @values, 'has_many', HasMany
+        @has_one = ManifestBase.load_name_values self, @values, 'has_one', HasOne
       end
       
       def model_name
index 20f50e8..e570c06 100644 (file)
@@ -1,25 +1,19 @@
 module Manifest
   module ModelModule
     module AssociationModule
-      class BelongsTo
-        attr :association, :belongs_to_name, :belongs_to_manifest, 
-          :id_column, :model_name
-        def initialize association, belongs_to_name, belongs_to_manifest
-          @association = association
-          @belongs_to_name = belongs_to_name
-          @belongs_to_manifest = belongs_to_manifest
-          self.set_default
-          self.init
-        end
+      class BelongsTo < ManifestBase::NameValues
+        attr :id_column, :model_name
         
         def set_default
-          @belongs_to_manifest['model_name'] ||= @belongs_to_name
-          @belongs_to_manifest['id_column'] ||= @belongs_to_name + '_id' 
+          super
+          @values['model_name'] ||= @name
+          @values['id_column'] ||= @name + '_id' 
         end
         
         def init
-          @model_name = @belongs_to_manifest['model_name']
-          @id_column = @belongs_to_manifest['id_column']
+          super
+          @model_name = @values['model_name']
+          @id_column = @values['id_column']
         end
         
         def model
@@ -27,7 +21,7 @@ module Manifest
         end
         
         def association_name
-          @association.association_name
+          @parent.association_name
         end
         
       end
index 063fdcf..2d5e7dd 100644 (file)
@@ -1,26 +1,20 @@
 module Manifest
   module ModelModule
     module AssociationModule
-      class HasMany
-        attr :association, :has_many_name, :has_many_manifest, 
-          :model_name, :foreign_key, :through
-        def initialize association, has_many_name, has_many_manifest
-          @association = association
-          @has_many_name = has_many_name
-          @has_many_manifest = has_many_manifest
-          self.set_default
-          self.init
-        end
+      class HasMany < ManifestBase::NameValues
+        attr :model_name, :foreign_key, :through
         
         def set_default
-          @has_many_manifest['model_name'] ||= @has_many_name.singularize
-          @has_many_manifest['foreign_key'] ||= @association.model_name + '_id'
+          super
+          @values['model_name'] ||= @name.singularize
+          @values['foreign_key'] ||= @parent.model_name + '_id'
         end
         
         def init
-          @model_name = @has_many_manifest['model_name']
-          @foreign_key = @has_many_manifest['foreign_key']
-          @through = @has_many_manifest['through']
+          super
+          @model_name = @values['model_name']
+          @foreign_key = @values['foreign_key']
+          @through = @values['through']
         end
         
         def model
@@ -28,7 +22,7 @@ module Manifest
         end
         
         def association_name
-          @association.association_name
+          @parent.association_name
         end
         
       end
index 7cf723d..6db1fc5 100644 (file)
@@ -1,25 +1,19 @@
 module Manifest
   module ModelModule
     module AssociationModule
-      class HasOne
-        attr :association, :has_one_name, :has_one_manifest, 
-          :model_name, :foreign_key
-        def initialize association, has_one_name, has_one_manifest
-          @association = association
-          @has_one_name = has_one_name
-          @has_one_manifest = has_one_manifest
-          self.set_default
-          self.init
-        end
+      class HasOne < ManifestBase::NameValues
+        attr :model_name, :foreign_key
         
         def set_default
-          @has_one_manifest['model_name'] ||= @has_one_name
-          @has_one_manifest['foreign_key'] ||= @association.model_name + '_id'
+          super
+          @values['model_name'] ||= @name
+          @values['foreign_key'] ||= @parent.model_name + '_id'
         end
         
         def init
-          @model_name = @has_one_manifest['model_name']
-          @foreign_key = @has_one_manifest['foreign_key']
+          super
+          @model_name = @values['model_name']
+          @foreign_key = @values['foreign_key']
         end
         
         def model
@@ -27,7 +21,7 @@ module Manifest
         end
         
         def association_name
-          @association.association_name
+          @parent.association_name
         end
         
       end
index cf8d40a..ea57d4b 100644 (file)
@@ -10,20 +10,24 @@ module Manifest
       
       def set_default
         super
-        raise "undefined type for #{self.module_message}\n" unless @args['type']
-        @args['primary_key'] ||= 0
-        @args['rules'] ||= {}
+        ManifestBase.alert_undefined_message 'type',  self.module_message unless @values['type']
+        @values['primary_key'] ||= 0
+        @values['rules'] ||= {}
       end
       
       def init
         super
-        @primary_key = @args['primary_key']
-        @rules = @args['rules']
-        if @args['source']
-          @source = SourceFactory.factory(self, @name, @args['source'])
+        @primary_key = @values['primary_key']
+        @rules = @values['rules']
+        if @values['source']
+          @source = ManifestBase.load_type_args self, @values, 'source', SourceFactory
         end
       end
       
+      def model_name
+        @parent.name
+      end
+      
     end
     
   end
index 2313389..34926f3 100644 (file)
@@ -1,19 +1,20 @@
-require_dependency "manifest/model/attribute/source/model"
-require_dependency "manifest/model/attribute/source/magic_number"
+ManifestBase.require_modules "manifest/model/attribute/source/", 
+  %w|base model magic_number|
+
 module Manifest
   module ModelModule
     module AttributeModule
-        class SourceFactory
+        class SourceFactory < ManifestBase::Factory
           include SourceModule
-          @@types = {
-            'model' => ModelSource, 'magic_number' => MagicNumberSource
-          }
-          def self.factory attribute, attribute_name, my_manifest
-            type = my_manifest['type']
-            raise "undefined type for models > #{attribute.mode_name} > attributes > #{attribute_name} > source\n" unless type
-            my_class = @@types[type]
-            raise "undefined class for models > #{attribute.mode_name} > attributes > #{attribute_name} > source > #{type}\n" unless my_class
-            my_class.new(attribute, my_manifest)
+          
+          def self.types
+            {
+              'model' => ModelSource, 'magic_number' => MagicNumberSource
+            }
+          end
+          
+          def self.default_type
+            'magic_number'
           end
           
         end
diff --git a/lib/manifest/model/attribute/source/base.rb b/lib/manifest/model/attribute/source/base.rb
new file mode 100644 (file)
index 0000000..a57bbdb
--- /dev/null
@@ -0,0 +1,24 @@
+module Manifest
+  module ModelModule
+    module AttributeModule
+      module SourceModule
+        class Base < ManifestBase::TypeArgs
+          
+          def set_default
+            super
+          end
+          
+          def init
+            super
+          end
+          
+          def model_name
+            @parent.model_name
+          end
+          
+        end
+        
+      end
+    end
+  end
+end
index 2665974..d477ff5 100644 (file)
@@ -2,35 +2,19 @@ module Manifest
   module ModelModule
     module AttributeModule
       module SourceModule
-        class MagicNumberSource
-          attr :attribute, :source_manifest, :type, :select_item_name
-          
-          def initialize attribute, source_manifest
-            @attribute = attribute
-            @source_manifest = source_manifest
-            self.set_default
-            self.init
-          end
+        class MagicNumberSource < Base
+          attr :select_item_name
           
           def set_default
-            @source_manifest['args'] ||= {}
-            raise "undefined select_item_name for models > #{@attribute.model_name} > attributes > #{@attribute.attribute_name} > source\n" unless @source_manifest['args']['select_item_name']
+            super
+            ManifestBase.alert_undefined_message 'select_item_name',  self.module_message unless @args['select_item_name']
           end
           
           def init
-            @args = @source_manifest['args']
-            @type = @source_manifest['type']
+            super
             @select_item_name = @args['select_item_name']
           end
           
-          def model_name
-            @attribute.model_name
-          end
-          
-          def attribute_name
-            @attribute.attribute_name
-          end
-          
         end
         
       end
index ac7591d..36eb6aa 100644 (file)
@@ -2,42 +2,26 @@ module Manifest
   module ModelModule
     module AttributeModule
       module SourceModule
-        class ModelSource
-          attr :attribute, :source_manifest, :type, 
-            :resource_model_name, :resource_list_name, :select_item_name, :caption_name
-          
-          def initialize attribute, source_manifest
-            @attribute = attribute
-            @source_manifest = source_manifest
-            self.set_default
-            self.init
-          end
+        class ModelSource < Base
+          attr :resource_model_name, :resource_list_name, 
+            :select_item_name, :caption_name
           
           def set_default
-            @source_manifest['args'] ||= {}
-            @source_manifest['args']['resource_model_name'] ||= (@attribute.name.gsub('_id', ''))
-            @source_manifest['args']['resource_list_name'] ||= 'select_items'
-            @source_manifest['args']['select_item_name'] ||= self.model_name + '_' + @attribute.name.gsub('_id', '') + '_items'
-            @source_manifest['args']['caption_name'] ||= 'caption'
+            super
+            @args['resource_model_name'] ||= (@parent.name.gsub('_id', ''))
+            @args['resource_list_name'] ||= 'select_items'
+            @args['select_item_name'] ||= self.model_name + '_' + @parent.name.gsub('_id', '') + '_items'
+            @args['caption_name'] ||= 'caption'
           end
           
           def init
-            @args = @source_manifest['args']
-            @type = @source_manifest['type']
+            super
             @resource_model_name = @args['resource_model_name']
             @resource_list_name = @args['resource_list_name']
             @select_item_name = @args['select_item_name']
             @caption_name = @args['caption_name']
           end
           
-          def model_name
-            @attribute.parent_name
-          end
-          
-          def attribute_name
-            @attribute.name
-          end
-          
         end
         
       end
index 75c67b1..b41d921 100644 (file)
@@ -1,23 +1,18 @@
 module Manifest
   module ModelModule
-    class List
-      attr :model, :list_manifest, 
-        :default_page_size, :max_page_size
-      def initialize model, list_manifest
-        @model = model
-        @list_manifest = list_manifest
-        self.set_default
-        self.init
-      end
+    class List < ManifestBase::Values
+      attr :default_page_size, :max_page_size
       
       def set_default
-        @list_manifest['default_page_size'] ||= 25
-        @list_manifest['max_page_size'] ||= 100
+        super
+        @values['default_page_size'] ||= 25
+        @values['max_page_size'] ||= 100
       end
       
       def init
-        @default_page_size = @list_manifest['default_page_size']
-        @max_page_size = @list_manifest['max_page_size']
+        super
+        @default_page_size = @values['default_page_size']
+        @max_page_size = @values['max_page_size']
       end
       
     end
index 9b3dedb..c23fb47 100644 (file)
@@ -14,6 +14,10 @@ module Manifest
         }
       end
       
+      def self.default_type
+        'item'
+      end
+      
     end
     
   end
index d8bd64c..8c59a84 100644 (file)
@@ -6,7 +6,7 @@ module Manifest
         
         def set_default
           super
-          ManifestBase.undefined_message 'leaf_tree_name',  self.module_message unless @args['leaf_tree_name']
+          ManifestBase.alert_undefined_message 'leaf_tree_name', self.module_message unless @args['leaf_tree_name']
         end
         
         def init
index f34b399..28a5a71 100644 (file)
@@ -6,7 +6,7 @@ module Manifest
         
         def set_default
           super
-          raise "undefined element_tree_name for #{self.module_message}\n" unless @args['element_tree_name']
+          ManifestBase.alert_undefined_message 'element_tree_name', self.module_message unless @args['element_tree_name']
         end
         
         def init
index 038295e..e5963ec 100644 (file)
@@ -6,7 +6,7 @@ module Manifest
         
         def set_default
           super
-          raise "undefined element_tree_name for #{self.module_message}\n" unless @args['element_tree_name']
+          ManifestBase.alert_undefined_message 'element_tree_name', self.module_message unless @args['element_tree_name']
         end
         
         def init
index cbbd60e..2deecb0 100644 (file)
@@ -44,7 +44,7 @@ module ManifestBase
       raise "#{message} for #{message}\n"
     end
     
-    def undefined_message name, location
+    def alert_undefined_message name, location
       alert_message 'undefined ' + name, location
     end
     
@@ -58,16 +58,23 @@ module ManifestBase
       }]
     end
     
-    def load_type_args _self, jsons, module_name, klass, default_type = nil
-      klass.factory_type_args(_self, jsons[module_name], module_name, default_type)
+    def load_type_args _self, jsons, module_name, klass
+      klass.factory_type_args(_self, jsons[module_name], module_name)
     end
     
-    def load_type_name_args _self, jsons, module_name, klass, default_type = nil
+    def load_type_name_args _self, jsons, module_name, klass
       Hash[jsons[module_name].map {|_name, _json|
-        [_name, klass.factory(_self, _name, _json, module_name, default_type)]
+        [_name, klass.factory(_self, _name, _json, module_name)]
       }]
     end
     
+    # LocalManifest::Profiler::Association::HasMany
+    def load_names _self, json, module_name, klass
+      json[module_name].map {|_name|
+        klass.new(_self, _name, module_name)
+      }
+    end
+    
   end
 
   extend ModuleMethods
index f7e8cbe..31599eb 100644 (file)
@@ -4,23 +4,27 @@ module ManifestBase
       {}
     end
     
-    def self.factory parent, name, json, module_name, default_type = nil
+    def self.default_type
+      nil
+    end
+    
+    def self.factory parent, name, json, module_name
       module_message = ManifestBase.module_message(parent.module_names, [module_name, name])
-      json['type'] ||= default_type
+      json['type'] ||= self.default_type
       type = json['type']
-      raise "undefined type for #{module_message}\n" unless type
+      alert_undefined_message 'type', module_message unless type
       my_class = self.types[type]
-      raise "undefined class for #{module_message} > #{type}\n" unless my_class
+      alert_undefined_message 'class', module_message unless my_class
       my_class.new(parent, name, json, module_name)
     end
     
-    def self.factory_type_args parent, json, module_name, default_type = nil
+    def self.factory_type_args parent, json, module_name
       module_message = ManifestBase.module_message(parent.module_names, [module_name])
-      json['type'] ||= default_type
+      json['type'] ||= self.default_type
       type = json['type']
-      raise "undefined type for #{module_message}\n" unless type
+      alert_undefined_message 'type', module_message unless type
       my_class = self.types[type]
-      raise "undefined class for #{module_message} > #{type}\n" unless my_class
+      alert_undefined_message 'class', module_message unless my_class
       my_class.new(parent, json, module_name)
     end
     
index 1478565..1a61ac3 100644 (file)
@@ -1,2 +1,3 @@
 require_dependency "manifest_base/base"
-require_dependency "manifest_base/factory"
+ManifestBase.require_modules "manifest_base/", 
+  %w|factory values name_values type_args type_name_args names|
index ae3531c..75a91f4 100644 (file)
@@ -12,7 +12,7 @@ module ManifestBase
     end
     
     def set_default
-      @args = @json
+      @values = @json
     end
     
     def init
diff --git a/lib/manifest_base/names.rb b/lib/manifest_base/names.rb
new file mode 100644 (file)
index 0000000..fe89b0d
--- /dev/null
@@ -0,0 +1,37 @@
+module ManifestBase
+  class Names
+    attr :parent, :name, :module_name
+    
+    def initialize parent, name, module_name
+      @parent = parent
+      @name = name
+      @module_name = module_name
+      self.set_default
+      self.init
+    end
+    
+    def set_default
+    end
+    
+    def init
+    end
+    
+    def module_names
+      self.parent.module_names + [@module_name, @name]
+    end
+    
+    def module_message
+      ManifestBase.module_message(self.module_names)
+    end
+    
+    def parent_name
+      @parent.name
+    end
+    
+    def parent_json
+      @parent.json
+    end
+    
+  end
+end
+
index e64e35b..d80fede 100644 (file)
@@ -11,6 +11,7 @@ module ManifestBase
     end
     
     def set_default
+      @json['args'] ||= {}
       @type = @json['type']
       @args = @json['args']
     end
index fe87a66..28a5098 100644 (file)
@@ -11,7 +11,7 @@ module ManifestBase
     end
     
     def set_default
-      @args = @json
+      @values = @json
     end
     
     def init