module ContentPackRails
Constants
- VERSION
Public Class Methods
init(configs = { pack_name: 'content_pack' })
click to toggle source
# File lib/content_pack_rails.rb, line 4 def self.init(configs = { pack_name: 'content_pack' }) Module.new do silent = proc { |&block| v = $VERBOSE; $VERBOSE = nil; res = block.call; $VERBOSE = v; res } to_content_id = -> (id) { "_id_#{configs[:pack_name]}_#{id}".to_sym } define_method configs[:pack_name] do |id, content=nil, options={}, &block| _id = to_content_id.call(id) _block = proc { block.call(id) } if block options[:append] || options[:flush] || content_for?(_id) && return content_for(_id, content, options.slice(:flush), &_block) (silent.call { instance_variable_get(:"@_#{configs[:pack_name]}_ids") } || instance_variable_set(:"@_#{configs[:pack_name]}_ids", Set.new)).add(_id) end define_method "provide_#{configs[:pack_name]}" do return unless (ids = silent.call { instance_variable_get(:"@_#{configs[:pack_name]}_ids") }) ids.inject(nil) do |acc, id| return acc unless (content = content_for(id)) acc ? acc.safe_concat(content) : content end end define_method "#{configs[:pack_name]}_get" do |id| content_for(to_content_id.call(id)) end end end