Module: Jbuilder::Jpartial

Defined in:
lib/jbuilder/jpartial.rb,
lib/jbuilder/jpartial/railtie.rb,
lib/jbuilder/jpartial/version.rb

Overview

Jpartial module

Defined Under Namespace

Classes: JbuilderProxy, JpartialHandler, Railtie

Constant Summary collapse

DangerousMethodName =
Class.new(ArgumentError)
Template =

Proxy object that sends all method calls to Jpartial.jpartial

Class.new(begin
                       require 'active_support/proxy_object'
                       ActiveSupport::ProxyObject
                     rescue LoadError
                       require 'active_support/basic_object'
                       ActiveSupport::BasicObject
                     end) do
  def method_missing(name, *args, &block)
    name = name.to_s == 'send' ? args.first.to_sym : name
    Jpartial.jpartial(name, &block)
  end
end
VERSION =
'1.1.0'.freeze

Class Method Summary collapse

Class Method Details

._dangerous_method_name?(name) ⇒ Boolean

Returns:

  • (Boolean)


28
29
30
31
32
# File 'lib/jbuilder/jpartial.rb', line 28

def self._dangerous_method_name?(name)
  !@defined_by_user.include?(name) &&
    Jbuilder.method_defined?(name) ||
    Jbuilder.private_method_defined?(name)
end

._raise_dangerous_method_name_error(name) ⇒ Object



23
24
25
26
# File 'lib/jbuilder/jpartial.rb', line 23

def self._raise_dangerous_method_name_error(name)
  raise DangerousMethodName, "The method `##{name}` is already defined"\
    ' by Jbuilder. Please choose another name to define your partial'
end

.configure {|Template.new| ... } ⇒ Object

Yields:



34
35
36
# File 'lib/jbuilder/jpartial.rb', line 34

def self.configure
  yield Template.new
end

.jpartial(name, &block) ⇒ Object



12
13
14
15
16
17
18
19
20
21
# File 'lib/jbuilder/jpartial.rb', line 12

def self.jpartial(name, &block)
  _raise_dangerous_method_name_error(name) if _dangerous_method_name?(name)
  JbuilderProxy.class_eval { define_method(name, &block) }
  Jbuilder.class_eval do
    define_method(name) do |*args|
      JbuilderProxy.new(self, @context).__send__(name, *args)
    end
  end
  @defined_by_user << name unless @defined_by_user.include?(name)
end