CANONICAL_ACTIONS holds all actions that does not need a prefix or a path appended since they fit properly in their scope level.
# File lib/action_dispatch/routing/mapper.rb, line 611
611: def collection
612: unless @scope[:scope_level] == :resources
613: raise ArgumentError, "can't use collection outside resources scope"
614: end
615:
616: collection_scope do
617: yield
618: end
619: end
# File lib/action_dispatch/routing/mapper.rb, line 681
681: def match(*args)
682: options = args.extract_options!.dup
683: options[:anchor] = true unless options.key?(:anchor)
684:
685: if args.length > 1
686: args.each { |path| match(path, options.dup) }
687: return self
688: end
689:
690: on = options.delete(:on)
691: if VALID_ON_OPTIONS.include?(on)
692: args.push(options)
693: return send(on){ match(*args) }
694: elsif on
695: raise ArgumentError, "Unknown scope #{on.inspect} given to :on"
696: end
697:
698: if @scope[:scope_level] == :resources
699: args.push(options)
700: return nested { match(*args) }
701: elsif @scope[:scope_level] == :resource
702: args.push(options)
703: return member { match(*args) }
704: end
705:
706: action = args.first
707: path = path_for_action(action, options.delete(:path))
708:
709: if action.to_s =~ /^[\w\/]+$/
710: options[:action] ||= action unless action.to_s.include?("/")
711: options[:as] = name_for_action(action, options[:as])
712: else
713: options[:as] = name_for_action(options[:as])
714: end
715:
716: super(path, options)
717: end
# File lib/action_dispatch/routing/mapper.rb, line 621
621: def member
622: unless resource_scope?
623: raise ArgumentError, "can't use member outside resource(s) scope"
624: end
625:
626: member_scope do
627: yield
628: end
629: end
# File lib/action_dispatch/routing/mapper.rb, line 663
663: def namespace(path, options = {})
664: if resource_scope?
665: nested { super }
666: else
667: super
668: end
669: end
# File lib/action_dispatch/routing/mapper.rb, line 641
641: def nested
642: unless resource_scope?
643: raise ArgumentError, "can't use nested outside resource(s) scope"
644: end
645:
646: with_scope_level(:nested) do
647: if shallow?
648: with_exclusive_scope do
649: if @scope[:shallow_path].blank?
650: scope(parent_resource.nested_scope, nested_options) { yield }
651: else
652: scope(@scope[:shallow_path], :as => @scope[:shallow_prefix]) do
653: scope(parent_resource.nested_scope, nested_options) { yield }
654: end
655: end
656: end
657: else
658: scope(parent_resource.nested_scope, nested_options) { yield }
659: end
660: end
661: end
# File lib/action_dispatch/routing/mapper.rb, line 631
631: def new
632: unless resource_scope?
633: raise ArgumentError, "can't use new outside resource(s) scope"
634: end
635:
636: new_scope do
637: yield
638: end
639: end
# File lib/action_dispatch/routing/mapper.rb, line 552
552: def resource(*resources, &block)
553: options = resources.extract_options!
554:
555: if apply_common_behavior_for(:resource, resources, options, &block)
556: return self
557: end
558:
559: resource_scope(SingletonResource.new(resources.pop, options)) do
560: yield if block_given?
561:
562: collection_scope do
563: post :create
564: end if parent_resource.actions.include?(:create)
565:
566: new_scope do
567: get :new
568: end if parent_resource.actions.include?(:new)
569:
570: member_scope do
571: get :edit if parent_resource.actions.include?(:edit)
572: get :show if parent_resource.actions.include?(:show)
573: put :update if parent_resource.actions.include?(:update)
574: delete :destroy if parent_resource.actions.include?(:destroy)
575: end
576: end
577:
578: self
579: end
# File lib/action_dispatch/routing/mapper.rb, line 581
581: def resources(*resources, &block)
582: options = resources.extract_options!
583:
584: if apply_common_behavior_for(:resources, resources, options, &block)
585: return self
586: end
587:
588: resource_scope(Resource.new(resources.pop, options)) do
589: yield if block_given?
590:
591: collection_scope do
592: get :index if parent_resource.actions.include?(:index)
593: post :create if parent_resource.actions.include?(:create)
594: end
595:
596: new_scope do
597: get :new
598: end if parent_resource.actions.include?(:new)
599:
600: member_scope do
601: get :edit if parent_resource.actions.include?(:edit)
602: get :show if parent_resource.actions.include?(:show)
603: put :update if parent_resource.actions.include?(:update)
604: delete :destroy if parent_resource.actions.include?(:destroy)
605: end
606: end
607:
608: self
609: end
# File lib/action_dispatch/routing/mapper.rb, line 548
548: def resources_path_names(options)
549: @scope[:path_names].merge!(options)
550: end
# File lib/action_dispatch/routing/mapper.rb, line 719
719: def root(options={})
720: if @scope[:scope_level] == :resources
721: with_scope_level(:root) do
722: scope(parent_resource.path) do
723: super(options)
724: end
725: end
726: else
727: super(options)
728: end
729: end
# File lib/action_dispatch/routing/mapper.rb, line 769
769: def action_options?(options)
770: options[:only] || options[:except]
771: end
# File lib/action_dispatch/routing/mapper.rb, line 877
877: def action_path(name, path = nil)
878: path || @scope[:path_names][name.to_sym] || name.to_s
879: end
# File lib/action_dispatch/routing/mapper.rb, line 737
737: def apply_common_behavior_for(method, resources, options, &block)
738: if resources.length > 1
739: resources.each { |r| send(method, r, options, &block) }
740: return true
741: end
742:
743: options.keys.each do |k|
744: (options[:constraints] ||= {})[k] = options.delete(k) if options[k].is_a?(Regexp)
745: end
746:
747: scope_options = options.slice!(*RESOURCE_OPTIONS)
748: unless scope_options.empty?
749: scope(scope_options) do
750: send(method, resources.pop, options, &block)
751: end
752: return true
753: end
754:
755: unless action_options?(options)
756: options.merge!(scope_action_options) if scope_action_options?
757: end
758:
759: if resource_scope?
760: nested do
761: send(method, resources.pop, options, &block)
762: end
763: return true
764: end
765:
766: false
767: end
# File lib/action_dispatch/routing/mapper.rb, line 858
858: def canonical_action?(action, flag)
859: flag && resource_method_scope? && CANONICAL_ACTIONS.include?(action.to_s)
860: end
# File lib/action_dispatch/routing/mapper.rb, line 827
827: def collection_scope
828: with_scope_level(:collection) do
829: scope(parent_resource.collection_scope) do
830: yield
831: end
832: end
833: end
# File lib/action_dispatch/routing/mapper.rb, line 854
854: def id_constraint
855: @scope[:id] || @scope[:constraints][:id]
856: end
# File lib/action_dispatch/routing/mapper.rb, line 850
850: def id_constraint?
851: @scope[:id].is_a?(Regexp) || (@scope[:constraints] && @scope[:constraints][:id].is_a?(Regexp))
852: end
# File lib/action_dispatch/routing/mapper.rb, line 835
835: def member_scope
836: with_scope_level(:member) do
837: scope(parent_resource.member_scope) do
838: yield
839: end
840: end
841: end
# File lib/action_dispatch/routing/mapper.rb, line 891
891: def name_for_action(action, as=nil)
892: prefix = prefix_name_for_action(action, as)
893: prefix = Mapper.normalize_name(prefix) if prefix
894: name_prefix = @scope[:as]
895:
896: if parent_resource
897: collection_name = parent_resource.collection_name
898: member_name = parent_resource.member_name
899: end
900:
901: name = case @scope[:scope_level]
902: when :nested
903: [member_name, prefix]
904: when :collection
905: [prefix, name_prefix, collection_name]
906: when :new
907: [prefix, :new, name_prefix, member_name]
908: when :member
909: [prefix, shallow_scoping? ? @scope[:shallow_prefix] : name_prefix, member_name]
910: when :root
911: [name_prefix, collection_name, prefix]
912: else
913: [name_prefix, member_name, prefix]
914: end
915:
916: name.select(&:present?).join("_").presence
917: end
# File lib/action_dispatch/routing/mapper.rb, line 843
843: def nested_options
844: {}.tap do |options|
845: options[:as] = parent_resource.member_name
846: options[:constraints] = { "#{parent_resource.singular}_id".to_sym => id_constraint } if id_constraint?
847: end
848: end
# File lib/action_dispatch/routing/mapper.rb, line 819
819: def new_scope
820: with_scope_level(:new) do
821: scope(parent_resource.new_scope(action_path(:new))) do
822: yield
823: end
824: end
825: end
# File lib/action_dispatch/routing/mapper.rb, line 866
866: def path_for_action(action, path)
867: prefix = shallow_scoping? ?
868: "#{@scope[:shallow_path]}/#{parent_resource.path}/:id" : @scope[:path]
869:
870: path = if canonical_action?(action, path.blank?)
871: prefix.to_s
872: else
873: "#{prefix}/#{action_path(action, path)}"
874: end
875: end
# File lib/action_dispatch/routing/mapper.rb, line 881
881: def prefix_name_for_action(action, as)
882: if as.present?
883: as.to_s
884: elsif as
885: nil
886: elsif !canonical_action?(action, @scope[:scope_level])
887: action.to_s
888: end
889: end
# File lib/action_dispatch/routing/mapper.rb, line 785
785: def resource_method_scope?
786: [:collection, :member, :new].include?(@scope[:scope_level])
787: end
# File lib/action_dispatch/routing/mapper.rb, line 811
811: def resource_scope(resource)
812: with_scope_level(resource.is_a?(SingletonResource) ? :resource : :resources, resource) do
813: scope(parent_resource.resource_scope) do
814: yield
815: end
816: end
817: end
# File lib/action_dispatch/routing/mapper.rb, line 781
781: def resource_scope?
782: [:resource, :resources].include?(@scope[:scope_level])
783: end
# File lib/action_dispatch/routing/mapper.rb, line 777
777: def scope_action_options
778: @scope[:options].slice(:only, :except)
779: end
# File lib/action_dispatch/routing/mapper.rb, line 773
773: def scope_action_options?
774: @scope[:options].is_a?(Hash) && (@scope[:options][:only] || @scope[:options][:except])
775: end
# File lib/action_dispatch/routing/mapper.rb, line 862
862: def shallow_scoping?
863: shallow? && @scope[:scope_level] == :member
864: end
# File lib/action_dispatch/routing/mapper.rb, line 789
789: def with_exclusive_scope
790: begin
791: old_name_prefix, old_path = @scope[:as], @scope[:path]
792: @scope[:as], @scope[:path] = nil, nil
793:
794: with_scope_level(:exclusive) do
795: yield
796: end
797: ensure
798: @scope[:as], @scope[:path] = old_name_prefix, old_path
799: end
800: end
# File lib/action_dispatch/routing/mapper.rb, line 802
802: def with_scope_level(kind, resource = parent_resource)
803: old, @scope[:scope_level] = @scope[:scope_level], kind
804: old_resource, @scope[:scope_level_resource] = @scope[:scope_level_resource], resource
805: yield
806: ensure
807: @scope[:scope_level] = old
808: @scope[:scope_level_resource] = old_resource
809: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.