OSDN Git Service

fix profiler extend system
authoryasushiito <yas@pen-chan.jp>
Mon, 7 Apr 2014 02:22:15 +0000 (11:22 +0900)
committeryasushiito <yas@pen-chan.jp>
Mon, 7 Apr 2014 02:22:15 +0000 (11:22 +0900)
42 files changed:
app/assets/javascripts/manifest/work/forms.js.coffee.erb
app/assets/javascripts/manifest/work/items.js.coffee.erb
app/assets/javascripts/manifest/work/models.js.coffee.erb
app/assets/javascripts/manifest/work/profilers.js.coffee.erb
app/assets/javascripts/manifest/work/system_resources.js.coffee.erb
app/controllers/application_controller.rb
app/models/license.rb
app/views/templates/r/profiler/_columns.html.erb
app/views/templates/r/profiler/column/_date.html.erb [new file with mode: 0644]
app/views/templates/r/profiler/column/_default.html.erb [new file with mode: 0644]
app/views/templates/r/profiler/column/_source.html.erb [moved from app/views/templates/r/profiler/_column.html.erb with 100% similarity]
config/locales/pettanr.ja.yml
db/migrate/20140329220907_fix_extend_system.rb
db/migrate/20140329222717_fix_extend_system_data.rb
db/migrate/20140401234553_create_pettanr_pettan_commons_v01_licenses_credit_pictures.rb [new file with mode: 0644]
lib/local_manifest/profiler.rb
lib/local_manifest/profiler/column.rb [new file with mode: 0644]
lib/local_manifest/profiler/column/base.rb [new file with mode: 0644]
lib/local_manifest/profiler/column/date.rb [new file with mode: 0644]
lib/local_manifest/profiler/column/default.rb [new file with mode: 0644]
lib/local_manifest/profiler/column/extend.rb [new file with mode: 0644]
lib/local_manifest/profiler/column/source.rb [new file with mode: 0644]
lib/local_manifest/profiler/extend_setting.rb [new file with mode: 0644]
lib/local_manifest/profiler/extend_setting/column.rb [new file with mode: 0644]
lib/local_manifest/profiler/extend_setting/column/base.rb [new file with mode: 0644]
lib/local_manifest/profiler/extend_setting/column/default.rb [new file with mode: 0644]
lib/local_manifest/profiler/list.rb
lib/locmare/booster.rb
lib/locmare/list_group/list/base.rb
lib/locmare/profiler.rb
lib/locmare/profiler/column.rb
lib/locmare/profiler/column/base.rb [new file with mode: 0644]
lib/locmare/profiler/column/date.rb [new file with mode: 0644]
lib/locmare/profiler/column/default.rb [new file with mode: 0644]
lib/locmare/profiler/column/extend.rb [new file with mode: 0644]
lib/locmare/profiler/column/source.rb [new file with mode: 0644]
lib/manifest_base/factory.rb
lib/peta/item.rb
lib/validators/boost_validator.rb
public/local_manifest.json
public/manifest.json
script/ls_helper.rb

index 80540fe..ee5bbec 100644 (file)
         'caption',\r
         'system_picture_id',\r
         'url',\r
-        'icense_group_settings',\r
+        'license_group_settings',\r
         'credit_picture_settings',\r
       ]\r
     }\r
index 7f22f48..61e8b98 100644 (file)
   picture: {\r
     args: {\r
       boost: {\r
+        license_group: {\r
+        },\r
         license: {\r
           extend_item_name: 'attribute',\r
         },\r
+        credit_picture: {\r
+          level: 'read',\r
+          extend_model_class_name: 'CreditPicture',\r
+          extend_item_name: 'credit_picture',\r
+          extend_column_name: 'license_group_classname',\r
+        },\r
       },\r
     },\r
   },\r
   resource_picture: {\r
     args: {\r
       boost: {\r
+        license_group: {\r
+        },\r
         license: {\r
           extend_item_name: 'attribute',\r
         },\r
+        credit_picture: {\r
+          level: 'read',\r
+          extend_model_class_name: 'CreditPicture',\r
+          extend_item_name: 'credit_picture',\r
+          extend_column_name: 'license_group_classname',\r
+        },\r
       },\r
     },\r
   },\r
         license_group: {\r
         },\r
         credit_picture: {\r
+          level: 'read',\r
+          extend_model_class_name: 'CreditPicture',\r
           extend_item_name: 'credit_picture',\r
           extend_column_name: 'license_group_classname',\r
         },\r
index bddc23d..9b5e62d 100644 (file)
           required: true,\r
         }\r
       },\r
-      credit: {\r
+      license_group_settings: {\r
+        type: 'text',\r
+        rules : {\r
+        }\r
+      },\r
+      credit_picture_settings: {\r
         type: 'text',\r
         rules : {\r
         }\r
           required: true,\r
         }\r
       },\r
-      credit: {\r
+      license_group_settings: {\r
+        type: 'text',\r
+        rules : {\r
+        }\r
+      },\r
+      credit_picture_settings: {\r
         type: 'text',\r
         rules : {\r
         }\r
       },\r
     },\r
   },\r
+  pettanr_pettan_commons_v01_licenses_credit_picture: {\r
+    attributes: {\r
+      source_url_btn_id: {\r
+        type: 'number',\r
+        rules : {\r
+          required: true,\r
+          number: true,\r
+        }\r
+      },\r
+      source_url_off_btn_id: {\r
+        type: 'number',\r
+        rules : {\r
+          required: true,\r
+          number: true,\r
+        }\r
+      },\r
+    },\r
+  },\r
   pettanr_pettan_commons_v01_licenses_attribute: {\r
     attributes: {\r
       license_id: {\r
index 24fbd52..be67021 100644 (file)
@@ -1,6 +1,11 @@
 #マニフェスト\r
 @profilers = {\r
   scroll: {\r
+    columns: {\r
+      visible: {\r
+        type: 'source',\r
+      }, \r
+    },\r
     column_names: [\r
       'title', \r
       'description', \r
       'url', \r
     ],\r
     extend_settings: {\r
-      pettanr_pettan_commons_v01_licenses: {\r
+      pettanr_pettan_commons_v01_licenses_license: {\r
         columns: {\r
           open: {\r
           },\r
           'overlap', \r
         ],\r
       },\r
+      pettanr_pettan_commons_v01_licenses_credit_picture: {\r
+        columns: {\r
+        },\r
+        column_names: [\r
+          'source_url_btn_id', \r
+          'source_url_off_btn_id', \r
+        ],\r
+      },\r
     },\r
     associations: {\r
       has_many: [\r
       },\r
       license_group_settings: {\r
         type: 'extend',\r
+        args: {\r
+          boost_name: 'license_group',\r
+        },\r
+      }, \r
+      credit_picture_settings: {\r
+        type: 'extend',\r
+        args: {\r
+          boost_name: 'credit_picture',\r
+        },\r
       }, \r
     },\r
     column_names: [\r
       'system_picture_id', \r
       'url', \r
       'license_group_settings', \r
-      'credit_pictures', \r
+      'credit_picture_settings', \r
     ],\r
     associations: {\r
       belongs_to: [\r
index d1e51c9..bea14ca 100644 (file)
@@ -22,7 +22,7 @@
     writing_formats: {\r
       has_route: 0,\r
       resource_items: {\r
-        SimpleFormat: 'pettanr_simple_format',\r
+        PettanrSimpleFormat: 'pettanr_simple_format',\r
       },\r
     },\r
   },\r
index 235e0ef..55f54d1 100644 (file)
@@ -66,8 +66,8 @@ class ApplicationController < ActionController::Base
     authenticate_user! unless @operators.user?
   end
   
-  def authenticate_user
-    authenticate_user! unless @operators.user?
+  def authenticate_resource_reader
+    authenticate_user! unless @operators.resource_reader?
   end
   
   def authenticate_admin
index c21e592..abb7c2c 100644 (file)
@@ -9,7 +9,7 @@ class License < Peta::SystemResource
   validates :license_group_classname, :presence => true, :length => {:maximum => 50}
   validates :name, :presence => true, :length => {:maximum => 50}
   validates :caption, :presence => true, :length => {:maximum => 30}
-  validates :url, :presence => true, :length => {:maximum => 200}, :uniqueness => true, :url => {:message => I18n.t('errors.messages.url')} #{:allow_blank => true}
+  validates :url, :presence => true, :length => {:maximum => 200}, :uniqueness => {:scope => :name}, :url => {:message => I18n.t('errors.messages.url')} #{:allow_blank => true}
   validates :system_picture_id, :presence => true, :numericality => true, :existence => {:both => false}
   
   def supply_default
@@ -52,7 +52,8 @@ class License < Peta::SystemResource
   
   def self.store name, attr
     r = License.replace_system_picture attr
-    attr['credit_pictures'] = attr['credit_pictures'].to_json
+    attr['credit_picture_settings'] = attr['credit_picture_settings'].to_json
+    attr['license_group_settings'] = attr['license_group_settings'].to_json
     l = License.modify_object name, attr
     if r == false
       l.errors.add :base, SystemPicture.model_name.human + I18n.t('errors.not_create')
index 6df659a..6409a73 100644 (file)
@@ -1,5 +1,5 @@
 <div class="columns">
-  <% profiler.columns.each do |column| %>
+  <% profiler.each_column do |column| %>
     <%= render column.template_name, :column => column %>
   <% end %>
 </div>
diff --git a/app/views/templates/r/profiler/column/_date.html.erb b/app/views/templates/r/profiler/column/_date.html.erb
new file mode 100644 (file)
index 0000000..b5a6e27
--- /dev/null
@@ -0,0 +1,4 @@
+<div class="column">
+  <%= column.label %>
+  <%= render column.value_template_name, :column => column %>
+</div>
diff --git a/app/views/templates/r/profiler/column/_default.html.erb b/app/views/templates/r/profiler/column/_default.html.erb
new file mode 100644 (file)
index 0000000..b5a6e27
--- /dev/null
@@ -0,0 +1,4 @@
+<div class="column">
+  <%= column.label %>
+  <%= render column.value_template_name, :column => column %>
+</div>
index 9da1165..e6e189f 100644 (file)
@@ -297,7 +297,7 @@ ja:
         url: URL
         system_picture_id: マーク
         license_group_settings: ライセンス拡張データ
-        credit_pictures: クレジット内画像
+        credit_picture_settings: クレジット内画像
         created_at: 作成
         updated_at: 更新
       author:
index e322a56..299b804 100644 (file)
@@ -12,6 +12,7 @@ class FixExtendSystem < ActiveRecord::Migration
     add_column :speeches, :writing_format_settings, :text
     add_column :licenses, :license_group_classname, :string, :null => false, :limit => 50, :default => 'noname'
     rename_column :licenses, :settings, :license_group_settings
+    rename_column :licenses, :credit_pictures, :credit_picture_settings
   end
 
   def down
index 4812aa9..7868231 100644 (file)
@@ -5,28 +5,30 @@ class FixExtendSystemData < ActiveRecord::Migration
       if balloon.speech_balloon_template_classname == 'noname'
         balloon.speech_balloon_template_id = sbt.id
         balloon.speech_balloon_template_classname = sbt.classname
-        balloon.save!
+        balloon.boosts 'post'
       end
+      balloon.save!
     end
     Speech.find(:all).each do |speech|
       sbt = speech.speech_balloon.speech_balloon_template
       if speech.speech_balloon_template_classname == 'noname'
         speech.speech_balloon_template_id = sbt.id
         speech.speech_balloon_template_classname = sbt.classname
-        speech.save!
       end
       wf =  speech.writing_format
       if speech.writing_format_classname == 'noname'
         speech.writing_format_classname = wf.classname
-        speech.save!
       end
+      speech.boosts 'post'
+      speech.save!
     end
     License.find(:all).each do |license|
       lg = license.license_group
       if license.license_group_classname == 'noname'
         license.license_group_classname = lg.classname
-        license.save!
       end
+      license.boosts 'post'
+      license.save!
     end
   end
 
diff --git a/db/migrate/20140401234553_create_pettanr_pettan_commons_v01_licenses_credit_pictures.rb b/db/migrate/20140401234553_create_pettanr_pettan_commons_v01_licenses_credit_pictures.rb
new file mode 100644 (file)
index 0000000..4883402
--- /dev/null
@@ -0,0 +1,10 @@
+class CreatePettanrPettanCommonsV01LicensesCreditPictures < ActiveRecord::Migration
+  def change
+    create_table :pettanr_pettan_commons_v01_licenses_credit_pictures do |t|
+      t.column :source_url_btn_id, :integer, :null => false, :default => 0
+      t.column :source_url_off_btn_id, :integer, :null => false, :default => 0
+
+      t.timestamps
+    end
+  end
+end
index 301d7c5..c46b497 100644 (file)
@@ -1,23 +1,34 @@
 ManifestBase.require_modules "local_manifest/profiler/", 
-  %w|list association|
+  %w|column extend_setting list association|
 
 module LocalManifest
   class Profiler < ManifestBase::Base
     include ProfilerModule
     
-    attr :column_names, :lists, :associations
+    attr :columns, :column_names, :extend_settings, :lists, :associations
     
     def set_default
       super
+      @json['columns'] ||= {}
       @json['column_names'] ||= []
+      @json['extend_settings'] ||= {}
       @json['lists'] ||= {}
       @json['associations'] ||= {}
+      # supply column configures
+      @json['column_names'] = ['id'] + @json['column_names'] + ['created_at', 'updated_at']
+      @json['columns']['created_at'] = {'type' => 'date'}
+      @json['columns']['updated_at'] = {'type' => 'date'}
+      @json['column_names'].each do |column_name|
+        @json['columns'][column_name] = {} unless @json['columns'][column_name]
+      end
     end
     
     def init
       super
-      @column_names = ['id'] + @json['column_names'] + ['created_at', 'updated_at']
-      @lists =  ManifestBase.load_type_name_args self, @json, 'lists', List
+      @columns =  ManifestBase.load_type_name_args self, @json, 'columns', ColumnFactory
+      @column_names = @json['column_names']
+      @extend_settings = ManifestBase.load_name_values self, @json, 'extend_settings', ExtendSetting
+      @lists = ManifestBase.load_name_values self, @json, 'lists', List
       @associations = ManifestBase.load_value self, @json, 'associations', Association
     end
     
diff --git a/lib/local_manifest/profiler/column.rb b/lib/local_manifest/profiler/column.rb
new file mode 100644 (file)
index 0000000..351a47c
--- /dev/null
@@ -0,0 +1,24 @@
+ManifestBase.require_modules "local_manifest/profiler/column/", 
+  %w|base default date source extend|
+
+module LocalManifest
+  module ProfilerModule
+    class ColumnFactory < ManifestBase::Factory
+      include ColumnModule
+      
+      def self.types
+        {
+          'default' => DefaultColumn, 'date' => DateColumn, 
+          'source' => SourceColumn, 'extend' => ExtendColumn
+        }
+      end
+      
+      def self.default_type
+        'default'
+      end
+      
+    end
+  end
+  
+end
+
diff --git a/lib/local_manifest/profiler/column/base.rb b/lib/local_manifest/profiler/column/base.rb
new file mode 100644 (file)
index 0000000..5acf55b
--- /dev/null
@@ -0,0 +1,25 @@
+module LocalManifest
+  module ProfilerModule
+    module ColumnModule
+      class Base < ManifestBase::TypeNameArgs
+        
+        def set_default
+          super
+        end
+        
+        def init
+          super
+        end
+        
+        def item_name
+          @parent.item_name
+        end
+        
+        def profiler
+          @parent
+        end
+        
+      end
+    end
+  end
+end
diff --git a/lib/local_manifest/profiler/column/date.rb b/lib/local_manifest/profiler/column/date.rb
new file mode 100644 (file)
index 0000000..6ee9f42
--- /dev/null
@@ -0,0 +1,18 @@
+module LocalManifest
+  module ProfilerModule
+    module ColumnModule
+      class DateColumn < Base
+        
+        def set_default
+          super
+        end
+        
+        def init
+          super
+        end
+        
+      end
+      
+    end
+  end
+end
diff --git a/lib/local_manifest/profiler/column/default.rb b/lib/local_manifest/profiler/column/default.rb
new file mode 100644 (file)
index 0000000..618f5f3
--- /dev/null
@@ -0,0 +1,18 @@
+module LocalManifest
+  module ProfilerModule
+    module ColumnModule
+      class DefaultColumn < Base
+        
+        def set_default
+          super
+        end
+        
+        def init
+          super
+        end
+        
+      end
+      
+    end
+  end
+end
diff --git a/lib/local_manifest/profiler/column/extend.rb b/lib/local_manifest/profiler/column/extend.rb
new file mode 100644 (file)
index 0000000..2fa1c6d
--- /dev/null
@@ -0,0 +1,28 @@
+module LocalManifest
+  module ProfilerModule
+    module ColumnModule
+      class ExtendColumn < Base
+        attr :boost_name
+        
+        def set_default
+          super
+          @args['boost_name'] ||= @name.gsub(/_settings/, '')
+        end
+        
+        def init
+          super
+          @boost_name = @args['boost_name']
+        end
+        
+        def item_manifest
+          Manifest.manifest.items[self.profiler.name]
+        end
+        
+        def boost_manifest
+          self.item_manifest.boost[@boost_name]
+        end
+        
+      end
+    end
+  end
+end
diff --git a/lib/local_manifest/profiler/column/source.rb b/lib/local_manifest/profiler/column/source.rb
new file mode 100644 (file)
index 0000000..77ec5fa
--- /dev/null
@@ -0,0 +1,18 @@
+module LocalManifest
+  module ProfilerModule
+    module ColumnModule
+      class SourceColumn < Base
+        
+        def set_default
+          super
+        end
+        
+        def init
+          super
+        end
+        
+      end
+      
+    end
+  end
+end
diff --git a/lib/local_manifest/profiler/extend_setting.rb b/lib/local_manifest/profiler/extend_setting.rb
new file mode 100644 (file)
index 0000000..ddcefab
--- /dev/null
@@ -0,0 +1,24 @@
+ManifestBase.require_modules "local_manifest/profiler/extend_setting/", 
+  %w|column|
+
+module LocalManifest
+  module ProfilerModule
+    class ExtendSetting < ManifestBase::NameValues
+      include ExtendSettingModule
+      attr :columns, :column_names
+      
+      def set_default
+        super
+        @values['columns'] ||= {}
+        @values['column_names'] ||= []
+      end
+      
+      def init
+        super
+        @columns =  ManifestBase.load_type_name_args self, @values, 'columns', ColumnFactory
+        @column_names = @values['column_names']
+      end
+      
+    end
+  end
+end
diff --git a/lib/local_manifest/profiler/extend_setting/column.rb b/lib/local_manifest/profiler/extend_setting/column.rb
new file mode 100644 (file)
index 0000000..2d90e90
--- /dev/null
@@ -0,0 +1,24 @@
+ManifestBase.require_modules "local_manifest/profiler/column/", 
+  %w|base default|
+
+module LocalManifest
+  module ProfilerModule
+    module ExtendSettingModule
+      class ColumnFactory < ManifestBase::Factory
+        include ColumnModule
+        
+        def self.types
+          {
+            'default' => DefaultColumn
+          }
+        end
+        
+        def self.default_type
+          'default'
+        end
+        
+      end
+    end
+  end
+end
+
diff --git a/lib/local_manifest/profiler/extend_setting/column/base.rb b/lib/local_manifest/profiler/extend_setting/column/base.rb
new file mode 100644 (file)
index 0000000..2ed8e72
--- /dev/null
@@ -0,0 +1,27 @@
+module LocalManifest
+  module ProfilerModule
+    module ExtendSettingModule
+      module ColumnModule
+        class Base < ManifestBase::TypeNameArgs
+          
+          def set_default
+            super
+          end
+          
+          def init
+            super
+          end
+          
+          def item_name
+            @parent.item_name
+          end
+          
+          def profiler
+            @parent
+          end
+          
+        end
+      end
+    end
+  end
+end
diff --git a/lib/local_manifest/profiler/extend_setting/column/default.rb b/lib/local_manifest/profiler/extend_setting/column/default.rb
new file mode 100644 (file)
index 0000000..3e24c40
--- /dev/null
@@ -0,0 +1,20 @@
+module LocalManifest
+  module ProfilerModule
+    module ExtendSettingModule
+      module ColumnModule
+        class DefaultColumn < Base
+          
+          def set_default
+            super
+          end
+          
+          def init
+            super
+          end
+          
+        end
+        
+      end
+    end
+  end
+end
index 8fc8fcc..5b9c0a5 100644 (file)
@@ -1,33 +1,24 @@
 module LocalManifest
   module ProfilerModule
-    class List
-      attr :profiler, :my_name, :list_manifest, 
-        :model_name, :list_name
-      
-      def initialize profiler, my_name, list_manifest
-        @profiler = profiler
-        @my_name = my_name
-        @list_manifest = list_manifest
-        self.set_default
-        self.init
-      end
+    class List < ManifestBase::NameValues
+      attr :model_name, :list_name
       
       def set_default
-        raise "undefined model_name for profilers > #{self.profiler_name} > lists > #{@my_name}\n" unless @list_manifest['model_name']
-        raise "undefined list_name for profilers > #{self.profiler_name} > lists > #{@my_name}\n" unless @list_manifest['list_name']
+        ManifestBase::alert_undefined_message "model_name", self.module_message unless @json['model_name']
+        ManifestBase::alert_undefined_message "list_name", self.module_message unless @json['list_name']
       end
       
       def init
-        @model_name = list_manifest['model_name']
-        @list_name = list_manifest['list_name']
+        @model_name = @json['model_name']
+        @list_name = @json['list_name']
       end
       
       def profiler_name
-        @profiler.item_name
+        @parent.item_name
       end
       
       def profiler_manifest
-        @profiler.profiler_manifest
+        @parent.manifest
       end
       
     end
index 8399bf3..e86bf6d 100644 (file)
@@ -5,18 +5,12 @@ module Locmare
     def initialize manifest, item
       @manifest = manifest
       @item = item
-      raise 'blank foreign_key' + @manifest.name unless self.check_resource
       # no check
       # return false unless self.resource.enable?
-      if extendable?
+      if self.extendable?
         @item.extend self.engine_extend_module
         @item.__send__ @manifest.setter_method_name, self.parsed_settings
       end
-      @boosted = true
-    end
-    
-    def boosted?
-      @boosted
     end
     
     # get engine resource from system resource manifest
@@ -54,7 +48,7 @@ module Locmare
     end
     
     def extendable?
-      self.engine_module.constants.include? @manifest.extend_module_name
+      self.engine_module.constants.include? @manifest.extend_module_name.to_sym
     end
     
     # extend module in engine
@@ -75,11 +69,17 @@ module Locmare
     
     # get system resource instance
     def resource
+      raise 'blank foreign_key ' + @manifest.name unless self.check_resource
       r = @item.__send__ @manifest.resource_name
       raise 'resource not found' + @manifest.resource_name unless r
       r
     end
     
+    # get extend instance
+    def extend_item
+      @item.__send__ @manifest.getter_method_name
+    end
+    
     def parsed_settings
       if self.settings.blank?
         {}
index 7e71f68..9855fd8 100644 (file)
@@ -91,6 +91,21 @@ module Locmare
         Kaminari.paginate_array(Array.new(c, nil)).page(offset).per(page_size)
       end
       
+      def boost_manifests
+        @model.my_peta.boost.select do |boost_name, boost_manifest|
+          boost_manifest.level == 'show'
+        end
+      end
+      
+      def boost items
+        manifests = self.boost_manifests
+        items.each do |item|
+          manifests.each do |boost_manifest|
+            item.boost_manifest
+          end
+        end
+      end
+      
       def open operators, options
         page = self.page_number(options[:page]) 
         page_size = self.page_size options[:page_size]
@@ -98,6 +113,7 @@ module Locmare
         items = self.items operators, options, offset, page_size
         count = self.count operators, options
         pg = self.paginate count, offset, page_size
+        self.boost items
         ListResult.new items, pg
       end
       
index 1542627..6f1c738 100644 (file)
@@ -11,17 +11,28 @@ module Locmare
       @item = item
       @operators = operators
       # feasible show parsed extend data
-      @item.boost 'post'
+      @item.boosts 'post'
       
       @profiler_manifest = LocalManifest.manifest.profilers[@item_name]
       @template_dir = 'templates/r/profiler/'
       @header = Header.new self
-      @columns = @profiler_manifest.column_names.map {|column_name|
-        Column.new self, column_name
+      @columns = {}
+      @profiler_manifest.columns.each {|name, column|
+        @columns[name] = Column.factory self, column
       }
       @associations = Association.new self, @profiler_manifest.associations
     end
     
+    def each_column
+      @profiler_manifest.column_names.each {|column_name|
+        yield @columns[column_name]
+      }
+    end
+    
+    def peta
+      Manifest.manifest.items[@item_name]
+    end
+    
     def model
       ::Manifest::item_name_to_model @item_name
     end
index f56e8ce..c876e84 100644 (file)
+require_dependency "locmare/profiler/column/base"
+require_dependency "locmare/profiler/column/default"
+require_dependency "locmare/profiler/column/date"
+require_dependency "locmare/profiler/column/source"
+require_dependency "locmare/profiler/column/extend"
 module Locmare
   module ProfilerModule
     class Column
-      attr :profiler, :column_name
-      def initialize profiler, column_name
-        @profiler = profiler
-        @column_name = column_name
-      end
-      
-      def label
-        self.item.class.human_attribute_name(@column_name)
-      end
-      
-      def value
-        if self.item.extend_column?(@column_name)
-          
-        else
-          self.item.attributes[@column_name]
-        end
-      end
-      
-      def note
-      end
-      
-      def date?
-        case model_attribute_manifest.type
-        when 'datetime'
-          if self.value
-            true
-          else
-            false
-          end
-        else
-          false
-        end
-      end
-      
-      def note?
-        if self.model_attribute_source_manifest
-          case self.model_attribute_source_manifest.type
-          when 'magic_number'
-            true
-          when 'model'
-            false
-          else
-            false
-          end
-        else
-          false
-        end
-      end
-      
-      def select_item_name
-        self.model_attribute_source_manifest.select_item_name
-      end
-      
-      def item
-        @profiler.item
-      end
-      
-      def model_manifest
-        ::Manifest.manifest.models[@profiler.item_name]
-      end
-      
-      def model_attribute_manifest
-        self.model_manifest.attributes[@column_name]
-      end
-      
-      def model_attribute_source_manifest
-        self.model_attribute_manifest.source
-      end
-      
-      def template_dir 
-        @profiler.template_dir
-      end
-      
-      def template_file_name
-        "column"
-      end
-      
-      def template_name
-        self.template_dir + self.template_file_name
-      end
-      
-      def value_template_dir 
-        @profiler.template_dir + "column_value/"
-      end
-      
-      def value_template_file_name
-        if self.date?
-          'date'
-        else
-          'default'
-        end
-      end
-      
-      def value_template_name
-        self.value_template_dir + self.value_template_file_name
-      end
-      
-      def note_template_dir 
-        @profiler.template_dir + "column_note/"
-      end
-      
-      def note_template_file_name
-        if self.note?
-          'default'
-        else
-          'none'
-        end
-      end
-      
-      def note_template_name
-        self.note_template_dir + self.note_template_file_name
+      include ColumnModule
+      @@types = {
+        'default' => Default, 'date' => Date, 'source' => Source, 'extend' => Extend
+      }
+      def self.factory profiler, my_manifest
+        type = my_manifest.type
+        raise "undefined type for local view filers > #{profiler.item_name} > edit\n" unless type
+        my_class = @@types[type]
+        raise "undefined class for local view filers > #{profiler.item_name} > edit > #{type}\n" unless my_class
+        my_class.new(profiler,  my_manifest)
       end
       
     end
diff --git a/lib/locmare/profiler/column/base.rb b/lib/locmare/profiler/column/base.rb
new file mode 100644 (file)
index 0000000..7178640
--- /dev/null
@@ -0,0 +1,51 @@
+module Locmare
+  module ProfilerModule
+    module ColumnModule
+      class Base
+        attr :profiler, :column_name
+        def initialize profiler, column
+          @profiler = profiler
+          @column = column
+          @column_name = @column.name
+        end
+        
+        def label
+          self.item.class.human_attribute_name(@column_name)
+        end
+        
+        def value
+          self.item.attributes[@column_name]
+        end
+        
+        def item
+          @profiler.item
+        end
+        
+        def template_dir 
+          @profiler.template_dir + "column/"
+        end
+        
+        def template_file_name
+          "default"
+        end
+        
+        def template_name
+          self.template_dir + self.template_file_name
+        end
+        
+        def value_template_dir 
+          @profiler.template_dir + "column_value/"
+        end
+        
+        def value_template_file_name
+          'default'
+        end
+        
+        def value_template_name
+          self.value_template_dir + self.value_template_file_name
+        end
+        
+      end
+    end
+  end
+end
diff --git a/lib/locmare/profiler/column/date.rb b/lib/locmare/profiler/column/date.rb
new file mode 100644 (file)
index 0000000..fcd866e
--- /dev/null
@@ -0,0 +1,22 @@
+module Locmare
+  module ProfilerModule
+    module ColumnModule
+      class Date < Base
+        
+        def template_file_name
+          "date"
+        end
+        
+        def value_template_file_name
+          if self.value
+            'date'
+          else
+            # nil value can't localize for datetime
+            'default'
+          end
+        end
+        
+      end
+    end
+  end
+end
diff --git a/lib/locmare/profiler/column/default.rb b/lib/locmare/profiler/column/default.rb
new file mode 100644 (file)
index 0000000..c6ec53d
--- /dev/null
@@ -0,0 +1,9 @@
+module Locmare
+  module ProfilerModule
+    module ColumnModule
+      class Default < Base
+        
+      end
+    end
+  end
+end
diff --git a/lib/locmare/profiler/column/extend.rb b/lib/locmare/profiler/column/extend.rb
new file mode 100644 (file)
index 0000000..72637c0
--- /dev/null
@@ -0,0 +1,21 @@
+module Locmare
+  module ProfilerModule
+    module ColumnModule
+      class Extend < Base
+        
+        def value
+          self.extend_model_name
+        end
+        
+        def extend_model_name
+          self.item.boosters[@column.boost_name].model_name
+        end
+        
+        def extend_item
+          self.item.boosters[@column.boost_name].extend_item
+        end
+        
+      end
+    end
+  end
+end
diff --git a/lib/locmare/profiler/column/source.rb b/lib/locmare/profiler/column/source.rb
new file mode 100644 (file)
index 0000000..dace381
--- /dev/null
@@ -0,0 +1,41 @@
+module Locmare
+  module ProfilerModule
+    module ColumnModule
+      class Source < Base
+        
+        def select_item_name
+          self.model_attribute_source_manifest.select_item_name
+        end
+        
+        def model_manifest
+          ::Manifest.manifest.models[@profiler.item_name]
+        end
+        
+        def model_attribute_manifest
+          self.model_manifest.attributes[@column_name]
+        end
+        
+        def model_attribute_source_manifest
+          self.model_attribute_manifest.source
+        end
+        
+        def template_file_name
+          "source"
+        end
+        
+        def note_template_dir 
+          @profiler.template_dir + "column_note/"
+        end
+        
+        def note_template_file_name
+          'default'
+        end
+        
+        def note_template_name
+          self.note_template_dir + self.note_template_file_name
+        end
+        
+      end
+    end
+  end
+end
index 31599eb..10b6783 100644 (file)
@@ -12,9 +12,9 @@ module ManifestBase
       module_message = ManifestBase.module_message(parent.module_names, [module_name, name])
       json['type'] ||= self.default_type
       type = json['type']
-      alert_undefined_message 'type', module_message unless type
+      ManifestBase.alert_undefined_message 'type', module_message unless type
       my_class = self.types[type]
-      alert_undefined_message 'class', module_message unless my_class
+      ManifestBase.alert_undefined_message 'class', module_message unless my_class
       my_class.new(parent, name, json, module_name)
     end
     
@@ -22,9 +22,9 @@ module ManifestBase
       module_message = ManifestBase.module_message(parent.module_names, [module_name])
       json['type'] ||= self.default_type
       type = json['type']
-      alert_undefined_message 'type', module_message unless type
+      ManifestBase.alert_undefined_message 'type', module_message unless type
       my_class = self.types[type]
-      alert_undefined_message 'class', module_message unless my_class
+      ManifestBase.alert_undefined_message 'class', module_message unless my_class
       my_class.new(parent, json, module_name)
     end
     
index 7cdead1..91bee15 100644 (file)
@@ -1,6 +1,7 @@
 module Peta
   class Item < ActiveRecord::Base
     self.abstract_class = true
+    attr :boosters
     
     # Dynamic ClassMethods
     
@@ -75,6 +76,10 @@ module Peta
       self.plural.underscore
     end
     
+    def self.extend_column? column_name
+      self.my_peta.extend_column? column_name
+    end
+    
     def self.visible_count_options
       nil
     end
@@ -99,7 +104,7 @@ module Peta
       opt = {}
       opt.merge!(self.show_opt)
       item = self.find(item_id, opt)
-      item.boost 'show'
+      item.boosts 'read'
       raise ActiveRecord::Forbidden unless item.visible?(operators)
       item
     end
@@ -157,15 +162,20 @@ module Peta
       end
     end
     
-    def boost level
+    def boosts level
       self.class.my_peta.boost.each do |boost_name, boost_manifest|
         next unless boost_manifest.level == level
-        Locmare::Booster.new(boost_manifest, self)
+        self.boost boost_manifest
       end
     end
     
+    def boost boost_manifest
+      @boosters ||= {}
+      @boosters[boost_manifest.name] = Locmare::Booster.new(boost_manifest, self)
+    end
+    
     def extend_column? column_name
-      self.class.my_peta.extend_column? column_name
+      self.class.extend_column? column_name
     end
     
     def supply_default
index 40dce60..63ad5af 100644 (file)
@@ -1,8 +1,8 @@
 class BoostValidator < ActiveModel::EachValidator\r
   def validate_each(record, attribute, value)\r
-    resource = record.boosters[options[:resource_name].to_s].resource\r
+    rec = record.boosters[options[:resource_name].to_s].extend_item\r
     msg = options[:message] || I18n.t('activerecord.errors.messages.extend_settings')\r
-    record.errors[attribute] << msg unless resource.valid?\r
+    record.errors[attribute] << msg unless rec.valid?\r
   end\r
 end\r
 \r
index d43cfb5..cad51c5 100644 (file)
   },\r
   "profilers": {\r
     "scroll": {\r
+      "columns": {\r
+        "visible": {\r
+          "type": "source"\r
+        }\r
+      },\r
       "column_names": [\r
         "title",\r
         "description",\r
         "url"\r
       ],\r
       "extend_settings": {\r
-        "pettanr_pettan_commons_v01_licenses": {\r
+        "pettanr_pettan_commons_v01_licenses_license": {\r
           "columns": {\r
             "open": {},\r
             "commercial": {},\r
             "sync_vh",\r
             "overlap"\r
           ]\r
+        },\r
+        "pettanr_pettan_commons_v01_licenses_credit_picture": {\r
+          "columns": {},\r
+          "column_names": [\r
+            "source_url_btn_id",\r
+            "source_url_off_btn_id"\r
+          ]\r
         }\r
       },\r
       "associations": {\r
         "system_picture_id": {},\r
         "url": {},\r
         "license_group_settings": {\r
-          "type": "extend"\r
+          "type": "extend",\r
+          "args": {\r
+            "parent_model_name": "panel"\r
+          }\r
+        },\r
+        "credit_picture_settings": {\r
+          "type": "extend",\r
+          "args": {\r
+            "boost_name": "credit_picture"\r
+          }\r
         }\r
       },\r
       "column_names": [\r
         "system_picture_id",\r
         "url",\r
         "license_group_settings",\r
-        "credit_pictures"\r
+        "credit_picture_settings"\r
       ],\r
       "associations": {\r
         "belongs_to": [\r
           "caption",\r
           "system_picture_id",\r
           "url",\r
-          "icense_group_settings",\r
+          "license_group_settings",\r
           "credit_picture_settings"\r
         ]\r
       },\r
index 4a484de..ea69885 100644 (file)
     "picture": {\r
       "args": {\r
         "boost": {\r
+          "license_group": {},\r
           "license": {\r
             "extend_item_name": "attribute"\r
+          },\r
+          "credit_picture": {\r
+            "level": "read",\r
+            "extend_model_class_name": "CreditPicture",\r
+            "extend_item_name": "credit_picture",\r
+            "extend_column_name": "license_group_classname"\r
           }\r
         }\r
       }\r
     "resource_picture": {\r
       "args": {\r
         "boost": {\r
+          "license_group": {},\r
           "license": {\r
             "extend_item_name": "attribute"\r
+          },\r
+          "credit_picture": {\r
+            "level": "read",\r
+            "extend_model_class_name": "CreditPicture",\r
+            "extend_item_name": "credit_picture",\r
+            "extend_column_name": "license_group_classname"\r
           }\r
         }\r
       }\r
         "boost": {\r
           "license_group": {},\r
           "credit_picture": {\r
+            "level": "read",\r
+            "extend_model_class_name": "CreditPicture",\r
             "extend_item_name": "credit_picture",\r
             "extend_column_name": "license_group_classname"\r
           }\r
             "required": true\r
           }\r
         },\r
-        "credit": {\r
+        "license_group_settings": {\r
+          "type": "text",\r
+          "rules": {}\r
+        },\r
+        "credit_picture_settings": {\r
           "type": "text",\r
           "rules": {}\r
         },\r
             "required": true\r
           }\r
         },\r
-        "credit": {\r
+        "license_group_settings": {\r
+          "type": "text",\r
+          "rules": {}\r
+        },\r
+        "credit_picture_settings": {\r
           "type": "text",\r
           "rules": {}\r
         },\r
           "type": "text",\r
           "rules": {}\r
         },\r
-        "credit_pictures": {\r
+        "credit_picture_settings": {\r
           "type": "text",\r
           "rules": {}\r
         }\r
         }\r
       }\r
     },\r
+    "pettanr_pettan_commons_v01_licenses_credit_picture": {\r
+      "attributes": {\r
+        "source_url_btn_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
+        },\r
+        "source_url_off_btn_id": {\r
+          "type": "number",\r
+          "rules": {\r
+            "required": true,\r
+            "number": true\r
+          }\r
+        }\r
+      }\r
+    },\r
     "pettanr_pettan_commons_v01_licenses_attribute": {\r
       "attributes": {\r
         "license_id": {\r
index b181fc4..df63671 100644 (file)
@@ -24,7 +24,6 @@ lg.each do |k, g|
     l['license_group_classname'] = g['classname']\r
     if l['license_group_settings']\r
       puts 'license_group_settings to json'\r
-      l['license_group_settings'] = l['license_group_settings'].to_json.to_s\r
     end\r
     if l['system_picture_file']\r
       fn = File.expand_path(wd + '/' + l['system_picture_file'])\r
@@ -34,16 +33,16 @@ lg.each do |k, g|
       l['system_picture_id'] = {"text" => b}\r
       l.delete 'system_picture_file'\r
     end\r
-    if l['credit_pictures']\r
-      credit_pictures = {}\r
-      l['credit_pictures'].each do |n, v|\r
+    if l['credit_picture_settings']\r
+      credit_picture_settings = {}\r
+      l['credit_picture_settings'].each do |n, v|\r
         fn = File.expand_path(wd + '/' + v)\r
         puts 'open system picture file ' + fn\r
         d = File.open(fn, 'rb').read\r
         b = Base64.encode64(d).gsub(/\r/, '').gsub(/\n/, '')\r
-        credit_pictures[n] = {"text" => b}\r
+        credit_picture_settings[n] = {"text" => b}\r
       end\r
-      l['credit_pictures'] = credit_pictures\r
+      l['credit_picture_settings'] = credit_picture_settings\r
     end\r
   end\r
 end\r