'z',\r
't',\r
]\r
- 'icense_group_settings',\r
+ },\r
+ speech_balloon_template: {\r
+ fields: {\r
+ id: {\r
+ args: {\r
+ label: {\r
+ type: 'none',\r
+ },\r
+ tag: {\r
+ type: 'hidden',\r
+ },\r
+ },\r
+ },\r
+ name: {\r
+ args: {\r
+ tag: {\r
+ type: 'text',\r
+ },\r
+ row_break: true,\r
+ },\r
+ },\r
+ classname: {\r
+ args: {\r
+ tag: {\r
+ type: 'text',\r
+ },\r
+ row_break: true,\r
+ },\r
+ },\r
+ caption: {\r
+ args: {\r
+ tag: {\r
+ type: 'text',\r
+ },\r
+ row_break: true,\r
+ },\r
+ },\r
+ t: {\r
+ args: {\r
+ tag: {\r
+ type: 'number',\r
+ },\r
+ row_break: true,\r
+ },\r
+ },\r
+ system_picture_id: {\r
+ args: {\r
+ tag: {\r
+ type: 'number',\r
+ },\r
+ row_break: true,\r
+ },\r
+ },\r
+ settings: {\r
+ args: {\r
+ tag: {\r
+ type: 'text',\r
+ },\r
+ row_break: true,\r
+ },\r
+ },\r
+ },\r
+ field_names: [\r
+ 'id',\r
+ 'name',\r
+ 'classname',\r
+ 'caption',\r
+ 't',\r
+ 'system_picture_id',\r
+ 'settings',\r
+ ]\r
+ },\r
+ writing_format: {\r
+ fields: {\r
+ id: {\r
+ args: {\r
+ label: {\r
+ type: 'none',\r
+ },\r
+ tag: {\r
+ type: 'hidden',\r
+ },\r
+ },\r
+ },\r
+ name: {\r
+ args: {\r
+ tag: {\r
+ type: 'text',\r
+ },\r
+ row_break: true,\r
+ },\r
+ },\r
+ classname: {\r
+ args: {\r
+ tag: {\r
+ type: 'text',\r
+ },\r
+ row_break: true,\r
+ },\r
+ },\r
+ caption: {\r
+ args: {\r
+ tag: {\r
+ type: 'text',\r
+ },\r
+ row_break: true,\r
+ },\r
+ },\r
+ system_picture_id: {\r
+ args: {\r
+ tag: {\r
+ type: 'number',\r
+ },\r
+ row_break: true,\r
+ },\r
+ },\r
+ settings: {\r
+ args: {\r
+ tag: {\r
+ type: 'text',\r
+ },\r
+ row_break: true,\r
+ },\r
+ },\r
+ },\r
+ field_names: [\r
+ 'id',\r
+ 'name',\r
+ 'classname',\r
+ 'caption',\r
+ 'system_picture_id',\r
+ 'settings',\r
+ ]\r
+ },\r
+ license_group: {\r
+ fields: {\r
+ id: {\r
+ args: {\r
+ label: {\r
+ type: 'none',\r
+ },\r
+ tag: {\r
+ type: 'hidden',\r
+ },\r
+ },\r
+ },\r
+ name: {\r
+ args: {\r
+ tag: {\r
+ type: 'text',\r
+ },\r
+ row_break: true,\r
+ },\r
+ },\r
+ classname: {\r
+ args: {\r
+ tag: {\r
+ type: 'text',\r
+ },\r
+ row_break: true,\r
+ },\r
+ },\r
+ caption: {\r
+ args: {\r
+ tag: {\r
+ type: 'text',\r
+ },\r
+ row_break: true,\r
+ },\r
+ },\r
+ url: {\r
+ args: {\r
+ tag: {\r
+ type: 'text',\r
+ },\r
+ row_break: true,\r
+ },\r
+ },\r
+ },\r
+ field_names: [\r
+ 'id',\r
+ 'name',\r
+ 'classname',\r
+ 'caption',\r
+ 'url',\r
+ ]\r
+ },\r
+ license: {\r
+ fields: {\r
+ id: {\r
+ args: {\r
+ label: {\r
+ type: 'none',\r
+ },\r
+ tag: {\r
+ type: 'hidden',\r
+ },\r
+ },\r
+ },\r
+ license_group_id: {\r
+ args: {\r
+ label: {\r
+ type: 'none',\r
+ },\r
+ tag: {\r
+ type: 'hidden',\r
+ },\r
+ },\r
+ },\r
+ license_group_classname: {\r
+ args: {\r
+ tag: {\r
+ type: 'text',\r
+ },\r
+ row_break: true,\r
+ },\r
+ },\r
+ name: {\r
+ args: {\r
+ tag: {\r
+ type: 'text',\r
+ },\r
+ row_break: true,\r
+ },\r
+ },\r
+ caption: {\r
+ args: {\r
+ tag: {\r
+ type: 'text',\r
+ },\r
+ row_break: true,\r
+ },\r
+ },\r
+ system_picture_id: {\r
+ args: {\r
+ tag: {\r
+ type: 'number',\r
+ },\r
+ row_break: true,\r
+ },\r
+ },\r
+ url: {\r
+ args: {\r
+ tag: {\r
+ type: 'text',\r
+ },\r
+ row_break: true,\r
+ },\r
+ },\r
+ license_group_settings: {\r
+ args: {\r
+ tag: {\r
+ type: 'text',\r
+ },\r
+ row_break: true,\r
+ },\r
+ },\r
+ credit_picture_settings: {\r
+ args: {\r
+ tag: {\r
+ type: 'text',\r
+ },\r
+ row_break: true,\r
+ },\r
+ },\r
+ },\r
+ field_names: [\r
+ 'id',\r
+ 'license_group_id',\r
+ 'license_group_classname',\r
+ 'name',\r
+ 'caption',\r
+ 'system_picture_id',\r
+ 'url',\r
++ 'license_group_settings',\r
+ 'credit_picture_settings',\r
+ ]\r
}\r
author: {\r
fields: {\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
#マニフェスト\r
@profilers = {\r
scroll: {\r
++ columns: {\r
++ visible: {\r
++ type: 'source',\r
++ }, \r
++ },\r
column_names: [\r
'title', \r
'description', \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
writing_formats: {\r
has_route: 0,\r
resource_items: {\r
-- SimpleFormat: 'pettanr_simple_format',\r
++ PettanrSimpleFormat: 'pettanr_simple_format',\r
},\r
},\r
},\r
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
+ authenticate_admin! unless @operators.admin?
+ end
+
def authenticate_author
if @operators.author
true
<div class="columns">
-- <% profiler.columns.each do |column| %>
++ <% profiler.each_column do |column| %>
<%= render column.template_name, :column => column %>
<% end %>
</div>
--- /dev/null
--- /dev/null
++<div class="column">
++ <%= column.label %>
++ <%= render column.value_template_name, :column => column %>
++</div>
--- /dev/null
--- /dev/null
++<div class="column">
++ <%= column.label %>
++ <%= render column.value_template_name, :column => column %>
++</div>
url: URL
system_picture_id: マーク
license_group_settings: ライセンス拡張データ
-- credit_pictures: クレジット内画像
++ credit_picture_settings: クレジット内画像
created_at: 作成
updated_at: 更新
author:
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
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
--- /dev/null
--- /dev/null
++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
++
--- /dev/null
--- /dev/null
++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
--- /dev/null
--- /dev/null
++module LocalManifest
++ module ProfilerModule
++ module ColumnModule
++ class DateColumn < Base
++
++ def set_default
++ super
++ end
++
++ def init
++ super
++ end
++
++ end
++
++ end
++ end
++end
--- /dev/null
--- /dev/null
++module LocalManifest
++ module ProfilerModule
++ module ColumnModule
++ class DefaultColumn < Base
++
++ def set_default
++ super
++ end
++
++ def init
++ super
++ end
++
++ end
++
++ end
++ end
++end
--- /dev/null
--- /dev/null
++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
--- /dev/null
--- /dev/null
++module LocalManifest
++ module ProfilerModule
++ module ColumnModule
++ class SourceColumn < Base
++
++ def set_default
++ super
++ end
++
++ def init
++ super
++ end
++
++ end
++
++ end
++ end
++end
--- /dev/null
--- /dev/null
++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
--- /dev/null
--- /dev/null
++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
++
--- /dev/null
--- /dev/null
++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
--- /dev/null
--- /dev/null
++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
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
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?
- @item.extend self.engine_extend_module
- @item.__send__ @manifest.setter_method_name, self.parsed_settings
++ 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
Object.const_get self.class_name
end
- self.engine_module.constants.include? @manifest.extend_module_name
+ def extendable?
++ self.engine_module.constants.include? @manifest.extend_module_name.to_sym
+ end
+
# extend module in engine
# ex) CircleSpeechBalloon::SpeechBalloonModule
def engine_extend_module
self.engine_module.const_get @manifest.extend_model_name
end
+ def check_resource
+ @item.attributes[@manifest.foreign_key].blank? == false
+ end
+
# get system resource instance
def resource
- r = @item.__send__ @manifest.name
- raise 'resource not found' unless r
++ 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?
{}
@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
++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
--- /dev/null
--- /dev/null
++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
--- /dev/null
--- /dev/null
++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
--- /dev/null
--- /dev/null
++module Locmare
++ module ProfilerModule
++ module ColumnModule
++ class Default < Base
++
++ end
++ end
++ end
++end
--- /dev/null
--- /dev/null
++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
--- /dev/null
--- /dev/null
++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
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
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
module Peta
class Item < ActiveRecord::Base
self.abstract_class = true
++ attr :boosters
# Dynamic ClassMethods
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
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
--- /dev/null
- resource = record.boosters[options[:resource_name].to_s].resource\r
+class BoostValidator < ActiveModel::EachValidator\r
+ def validate_each(record, attribute, value)\r
- record.errors[attribute] << msg unless resource.valid?\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 rec.valid?\r
+ end\r
+end\r
+\r
},\r
"profilers": {\r
"scroll": {\r
++ "columns": {\r
++ "visible": {\r
++ "type": "source"\r
++ }\r
++ },\r
"column_names": [\r
"title",\r
"description",\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
++ "type": "extend",\r
++ "args": {\r
++ "boost_name": "credit_picture"\r
++ }\r
}\r
},\r
"column_names": [\r
"t"\r
]\r
},\r
- "icense_group_settings",\r
+ "speech_balloon_template": {\r
+ "fields": {\r
+ "id": {\r
+ "args": {\r
+ "label": {\r
+ "type": "none"\r
+ },\r
+ "tag": {\r
+ "type": "hidden"\r
+ }\r
+ }\r
+ },\r
+ "name": {\r
+ "args": {\r
+ "tag": {\r
+ "type": "text"\r
+ },\r
+ "row_break": true\r
+ }\r
+ },\r
+ "classname": {\r
+ "args": {\r
+ "tag": {\r
+ "type": "text"\r
+ },\r
+ "row_break": true\r
+ }\r
+ },\r
+ "caption": {\r
+ "args": {\r
+ "tag": {\r
+ "type": "text"\r
+ },\r
+ "row_break": true\r
+ }\r
+ },\r
+ "t": {\r
+ "args": {\r
+ "tag": {\r
+ "type": "number"\r
+ },\r
+ "row_break": true\r
+ }\r
+ },\r
+ "system_picture_id": {\r
+ "args": {\r
+ "tag": {\r
+ "type": "number"\r
+ },\r
+ "row_break": true\r
+ }\r
+ },\r
+ "settings": {\r
+ "args": {\r
+ "tag": {\r
+ "type": "text"\r
+ },\r
+ "row_break": true\r
+ }\r
+ }\r
+ },\r
+ "field_names": [\r
+ "id",\r
+ "name",\r
+ "classname",\r
+ "caption",\r
+ "t",\r
+ "system_picture_id",\r
+ "settings"\r
+ ]\r
+ },\r
+ "writing_format": {\r
+ "fields": {\r
+ "id": {\r
+ "args": {\r
+ "label": {\r
+ "type": "none"\r
+ },\r
+ "tag": {\r
+ "type": "hidden"\r
+ }\r
+ }\r
+ },\r
+ "name": {\r
+ "args": {\r
+ "tag": {\r
+ "type": "text"\r
+ },\r
+ "row_break": true\r
+ }\r
+ },\r
+ "classname": {\r
+ "args": {\r
+ "tag": {\r
+ "type": "text"\r
+ },\r
+ "row_break": true\r
+ }\r
+ },\r
+ "caption": {\r
+ "args": {\r
+ "tag": {\r
+ "type": "text"\r
+ },\r
+ "row_break": true\r
+ }\r
+ },\r
+ "system_picture_id": {\r
+ "args": {\r
+ "tag": {\r
+ "type": "number"\r
+ },\r
+ "row_break": true\r
+ }\r
+ },\r
+ "settings": {\r
+ "args": {\r
+ "tag": {\r
+ "type": "text"\r
+ },\r
+ "row_break": true\r
+ }\r
+ }\r
+ },\r
+ "field_names": [\r
+ "id",\r
+ "name",\r
+ "classname",\r
+ "caption",\r
+ "system_picture_id",\r
+ "settings"\r
+ ]\r
+ },\r
+ "license_group": {\r
+ "fields": {\r
+ "id": {\r
+ "args": {\r
+ "label": {\r
+ "type": "none"\r
+ },\r
+ "tag": {\r
+ "type": "hidden"\r
+ }\r
+ }\r
+ },\r
+ "name": {\r
+ "args": {\r
+ "tag": {\r
+ "type": "text"\r
+ },\r
+ "row_break": true\r
+ }\r
+ },\r
+ "classname": {\r
+ "args": {\r
+ "tag": {\r
+ "type": "text"\r
+ },\r
+ "row_break": true\r
+ }\r
+ },\r
+ "caption": {\r
+ "args": {\r
+ "tag": {\r
+ "type": "text"\r
+ },\r
+ "row_break": true\r
+ }\r
+ },\r
+ "url": {\r
+ "args": {\r
+ "tag": {\r
+ "type": "text"\r
+ },\r
+ "row_break": true\r
+ }\r
+ }\r
+ },\r
+ "field_names": [\r
+ "id",\r
+ "name",\r
+ "classname",\r
+ "caption",\r
+ "url"\r
+ ]\r
+ },\r
+ "license": {\r
+ "fields": {\r
+ "id": {\r
+ "args": {\r
+ "label": {\r
+ "type": "none"\r
+ },\r
+ "tag": {\r
+ "type": "hidden"\r
+ }\r
+ }\r
+ },\r
+ "license_group_id": {\r
+ "args": {\r
+ "label": {\r
+ "type": "none"\r
+ },\r
+ "tag": {\r
+ "type": "hidden"\r
+ }\r
+ }\r
+ },\r
+ "license_group_classname": {\r
+ "args": {\r
+ "tag": {\r
+ "type": "text"\r
+ },\r
+ "row_break": true\r
+ }\r
+ },\r
+ "name": {\r
+ "args": {\r
+ "tag": {\r
+ "type": "text"\r
+ },\r
+ "row_break": true\r
+ }\r
+ },\r
+ "caption": {\r
+ "args": {\r
+ "tag": {\r
+ "type": "text"\r
+ },\r
+ "row_break": true\r
+ }\r
+ },\r
+ "system_picture_id": {\r
+ "args": {\r
+ "tag": {\r
+ "type": "number"\r
+ },\r
+ "row_break": true\r
+ }\r
+ },\r
+ "url": {\r
+ "args": {\r
+ "tag": {\r
+ "type": "text"\r
+ },\r
+ "row_break": true\r
+ }\r
+ },\r
+ "license_group_settings": {\r
+ "args": {\r
+ "tag": {\r
+ "type": "text"\r
+ },\r
+ "row_break": true\r
+ }\r
+ },\r
+ "credit_picture_settings": {\r
+ "args": {\r
+ "tag": {\r
+ "type": "text"\r
+ },\r
+ "row_break": true\r
+ }\r
+ }\r
+ },\r
+ "field_names": [\r
+ "id",\r
+ "license_group_id",\r
+ "license_group_classname",\r
+ "name",\r
+ "caption",\r
+ "system_picture_id",\r
+ "url",\r
++ "license_group_settings",\r
+ "credit_picture_settings"\r
+ ]\r
+ },\r
"author": {\r
"fields": {\r
"id": {\r