surrounded 0.7.2 → 0.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +11 -0
- data/lib/surrounded/access_control.rb +1 -11
- data/lib/surrounded/context.rb +27 -22
- data/lib/surrounded/shortcuts.rb +19 -0
- data/lib/surrounded/version.rb +1 -1
- data/test/context_shortcuts_test.rb +26 -0
- data/test/surrounded_context_test.rb +1 -1
- metadata +4 -1
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: c237237d5cefc3b8d15c8c93e1b1835f53b16aa3
         | 
| 4 | 
            +
              data.tar.gz: ffc1902273df1fad262c481b65a804e2eb1b8753
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 5faa7eae255b50a89451a223d92b0e2988a187c8e5925b6a999d615ac07f1a61ff0b0f6d2ba574e46815e16b291b26121f97adaad01417a018c7f766b0c83d8b
         | 
| 7 | 
            +
              data.tar.gz: deb7040f3cb066916086750e32dfe62584759110eba328a242011b5155aba0b070ce7c6533b24729caeb89840950b203b27d51a9f5e3e80c4caf569d5b8cd192
         | 
    
        data/README.md
    CHANGED
    
    | @@ -538,6 +538,17 @@ class ActiviatingAccount | |
| 538 538 | 
             
              def disallow_some_trigger_method?
         | 
| 539 539 | 
             
                # whatever conditional code for the instance of the context
         | 
| 540 540 | 
             
              end
         | 
| 541 | 
            +
              
         | 
| 542 | 
            +
              # Create shortcuts for triggers as class methods
         | 
| 543 | 
            +
              # so you can do ActiviatingAccount.some_trigger_method(activator, account)
         | 
| 544 | 
            +
              # This will make all triggers shortcuts.
         | 
| 545 | 
            +
              shortcut_triggers
         | 
| 546 | 
            +
              # Alterantively, you could implement shortcuts individually:
         | 
| 547 | 
            +
              def self.some_trigger_method(activator, account)
         | 
| 548 | 
            +
                instance = self.new(activator.account)
         | 
| 549 | 
            +
                instance.some_trigger_method
         | 
| 550 | 
            +
              end
         | 
| 551 | 
            +
              
         | 
| 541 552 | 
             
            end
         | 
| 542 553 | 
             
            ```
         | 
| 543 554 |  | 
| @@ -30,12 +30,11 @@ module Surrounded | |
| 30 30 | 
             
                        remove_roles if __apply_role_policy == :trigger
         | 
| 31 31 | 
             
                      end
         | 
| 32 32 | 
             
                    end
         | 
| 33 | 
            -
                  }
         | 
| 33 | 
            +
                  }, __FILE__, __LINE__
         | 
| 34 34 | 
             
                end
         | 
| 35 35 |  | 
| 36 36 | 
             
                def define_access_method(name, &block)
         | 
| 37 37 | 
             
                  class_eval {
         | 
| 38 | 
            -
                    meth = AccessMethods.instance_method(:with_roles)
         | 
| 39 38 | 
             
                    define_method "disallow_#{name}?" do
         | 
| 40 39 | 
             
                      begin
         | 
| 41 40 | 
             
                        apply_roles if __apply_role_policy == :trigger
         | 
| @@ -58,15 +57,6 @@ module Surrounded | |
| 58 57 | 
             
                      !self.respond_to?(method_restrictor, true) || !self.send(method_restrictor)
         | 
| 59 58 | 
             
                    }.to_set
         | 
| 60 59 | 
             
                  end
         | 
| 61 | 
            -
                  
         | 
| 62 | 
            -
                  def with_roles(policy = :trigger)
         | 
| 63 | 
            -
                    begin
         | 
| 64 | 
            -
                      apply_roles if __apply_role_policy == policy
         | 
| 65 | 
            -
                      yield
         | 
| 66 | 
            -
                    ensure
         | 
| 67 | 
            -
                      remove_roles if __apply_role_policy == policy
         | 
| 68 | 
            -
                    end
         | 
| 69 | 
            -
                  end
         | 
| 70 60 | 
             
                end
         | 
| 71 61 | 
             
              end
         | 
| 72 62 | 
             
            end
         | 
    
        data/lib/surrounded/context.rb
    CHANGED
    
    | @@ -1,6 +1,7 @@ | |
| 1 1 | 
             
            require 'set'
         | 
| 2 2 | 
             
            require 'surrounded/context/role_map'
         | 
| 3 3 | 
             
            require 'surrounded/access_control'
         | 
| 4 | 
            +
            require 'surrounded/shortcuts'
         | 
| 4 5 |  | 
| 5 6 | 
             
            # Some features are only available in versions of Ruby
         | 
| 6 7 | 
             
            # where this method is true
         | 
| @@ -21,19 +22,6 @@ module Surrounded | |
| 21 22 | 
             
                    @triggers = Set.new
         | 
| 22 23 | 
             
                    include InstanceMethods
         | 
| 23 24 | 
             
                  }
         | 
| 24 | 
            -
                  base.singleton_class.send(:alias_method, :setup, :initialize)
         | 
| 25 | 
            -
                end
         | 
| 26 | 
            -
             | 
| 27 | 
            -
                def self.default_role_type
         | 
| 28 | 
            -
                  @default_role_type ||= :module
         | 
| 29 | 
            -
                end
         | 
| 30 | 
            -
             | 
| 31 | 
            -
                class << self
         | 
| 32 | 
            -
                  attr_writer :default_role_type
         | 
| 33 | 
            -
                end
         | 
| 34 | 
            -
                
         | 
| 35 | 
            -
                def protect_triggers
         | 
| 36 | 
            -
                  self.extend(::Surrounded::AccessControl)
         | 
| 37 25 | 
             
                end
         | 
| 38 26 |  | 
| 39 27 | 
             
                def new(*args, &block)
         | 
| @@ -50,6 +38,18 @@ module Surrounded | |
| 50 38 |  | 
| 51 39 | 
             
                private
         | 
| 52 40 |  | 
| 41 | 
            +
                def self.default_role_type
         | 
| 42 | 
            +
                  @default_role_type ||= :module
         | 
| 43 | 
            +
                end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                class << self
         | 
| 46 | 
            +
                  attr_writer :default_role_type
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
                
         | 
| 49 | 
            +
                # Additional Features
         | 
| 50 | 
            +
                def protect_triggers;  self.extend(::Surrounded::AccessControl); end
         | 
| 51 | 
            +
                def shortcut_triggers; self.extend(::Surrounded::Shortcuts);     end
         | 
| 52 | 
            +
             | 
| 53 53 | 
             
                def private_const_set(name, const)
         | 
| 54 54 | 
             
                  const = const_set(name, const)
         | 
| 55 55 | 
             
                  private_constant name.to_sym
         | 
| @@ -115,10 +115,11 @@ module Surrounded | |
| 115 115 | 
             
                    def initialize(#{setup_args.join(',')})
         | 
| 116 116 | 
             
                      preinitialize
         | 
| 117 117 | 
             
                      arguments = method(__method__).parameters.map{|arg| eval(arg[1].to_s) }
         | 
| 118 | 
            +
                      @role_map = RoleMap.new
         | 
| 118 119 | 
             
                      map_roles(#{setup_args}.zip(arguments))
         | 
| 119 120 | 
             
                      postinitialize
         | 
| 120 121 | 
             
                    end
         | 
| 121 | 
            -
                  "
         | 
| 122 | 
            +
                  ", __FILE__, __LINE__
         | 
| 122 123 | 
             
                end
         | 
| 123 124 |  | 
| 124 125 | 
             
                def private_attr_reader(*method_names)
         | 
| @@ -129,13 +130,7 @@ module Surrounded | |
| 129 130 | 
             
                def trigger(*names, &block)
         | 
| 130 131 | 
             
                  if block.nil?
         | 
| 131 132 | 
             
                    names.each do |name|
         | 
| 132 | 
            -
                       | 
| 133 | 
            -
                        alias_method :"__trigger_#{name}", :"#{name}"
         | 
| 134 | 
            -
                        private :"__trigger_#{name}"
         | 
| 135 | 
            -
                        remove_method :"#{name}"
         | 
| 136 | 
            -
                        redo_method(name)
         | 
| 137 | 
            -
                        store_trigger(name)
         | 
| 138 | 
            -
                      end
         | 
| 133 | 
            +
                      define_trigger_method(name, &block)
         | 
| 139 134 | 
             
                    end
         | 
| 140 135 | 
             
                  else
         | 
| 141 136 | 
             
                    name = names.first
         | 
| @@ -158,6 +153,16 @@ module Surrounded | |
| 158 153 | 
             
                    const_get(name)
         | 
| 159 154 | 
             
                  end
         | 
| 160 155 | 
             
                end
         | 
| 156 | 
            +
                
         | 
| 157 | 
            +
                def define_trigger_method(name, &block)
         | 
| 158 | 
            +
                  unless triggers.include?(name) || name.nil?
         | 
| 159 | 
            +
                    alias_method :"__trigger_#{name}", :"#{name}"
         | 
| 160 | 
            +
                    private :"__trigger_#{name}"
         | 
| 161 | 
            +
                    remove_method :"#{name}"
         | 
| 162 | 
            +
                    redo_method(name)
         | 
| 163 | 
            +
                    store_trigger(name)
         | 
| 164 | 
            +
                  end
         | 
| 165 | 
            +
                end
         | 
| 161 166 |  | 
| 162 167 | 
             
                def redo_method(name)
         | 
| 163 168 | 
             
                  class_eval %{
         | 
| @@ -171,7 +176,7 @@ module Surrounded | |
| 171 176 | 
             
                        remove_roles if __apply_role_policy == :trigger
         | 
| 172 177 | 
             
                      end
         | 
| 173 178 | 
             
                    end
         | 
| 174 | 
            -
                  }
         | 
| 179 | 
            +
                  }, __FILE__, __LINE__
         | 
| 175 180 | 
             
                end
         | 
| 176 181 |  | 
| 177 182 | 
             
                module InstanceMethods
         | 
| @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            module Surrounded
         | 
| 2 | 
            +
              module Shortcuts
         | 
| 3 | 
            +
                private
         | 
| 4 | 
            +
                
         | 
| 5 | 
            +
                def define_shortcut(name)
         | 
| 6 | 
            +
                  singleton_class.send(:define_method, name) do |*args|
         | 
| 7 | 
            +
                    instance = self.new(*args)
         | 
| 8 | 
            +
                    instance.public_send(name)
         | 
| 9 | 
            +
                  end
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
                
         | 
| 12 | 
            +
                def store_trigger(*names)
         | 
| 13 | 
            +
                  names.each do |name|
         | 
| 14 | 
            +
                    define_shortcut(name)
         | 
| 15 | 
            +
                  end
         | 
| 16 | 
            +
                  @triggers.merge(names)
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
            end
         | 
    
        data/lib/surrounded/version.rb
    CHANGED
    
    
| @@ -0,0 +1,26 @@ | |
| 1 | 
            +
            require 'test_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            class ShortcutContext
         | 
| 4 | 
            +
              extend Surrounded::Context
         | 
| 5 | 
            +
              shortcut_triggers
         | 
| 6 | 
            +
              
         | 
| 7 | 
            +
              initialize :user, :other
         | 
| 8 | 
            +
              
         | 
| 9 | 
            +
              trigger :shorty do
         | 
| 10 | 
            +
                user.speak
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
              
         | 
| 13 | 
            +
              role :user do
         | 
| 14 | 
            +
                def speak
         | 
| 15 | 
            +
                  'it works, shorty!'
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
            end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            describe Surrounded::Context, 'shortcuts' do
         | 
| 21 | 
            +
              let(:user){ User.new("Jim") }
         | 
| 22 | 
            +
              let(:other){ User.new("Guille") }
         | 
| 23 | 
            +
              it 'creates shortcut class methods for triggers' do
         | 
| 24 | 
            +
                assert_equal 'it works, shorty!', ShortcutContext.shorty(user, other)
         | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
            end
         | 
| @@ -124,7 +124,7 @@ class RoleAssignmentContext | |
| 124 124 | 
             
              end
         | 
| 125 125 | 
             
            end
         | 
| 126 126 |  | 
| 127 | 
            -
            describe Surrounded::Context, '. | 
| 127 | 
            +
            describe Surrounded::Context, '.initialize' do
         | 
| 128 128 | 
             
              it 'defines an initialize method accepting the same arguments' do
         | 
| 129 129 | 
             
                assert_equal 2, RoleAssignmentContext.instance_method(:initialize).arity
         | 
| 130 130 | 
             
              end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: surrounded
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.7. | 
| 4 | 
            +
              version: 0.7.3
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - '''Jim Gay'''
         | 
| @@ -73,9 +73,11 @@ files: | |
| 73 73 | 
             
            - lib/surrounded/context/negotiator.rb
         | 
| 74 74 | 
             
            - lib/surrounded/context/role_map.rb
         | 
| 75 75 | 
             
            - lib/surrounded/context_errors.rb
         | 
| 76 | 
            +
            - lib/surrounded/shortcuts.rb
         | 
| 76 77 | 
             
            - lib/surrounded/version.rb
         | 
| 77 78 | 
             
            - surrounded.gemspec
         | 
| 78 79 | 
             
            - test/context_access_test.rb
         | 
| 80 | 
            +
            - test/context_shortcuts_test.rb
         | 
| 79 81 | 
             
            - test/example_proxy_test.rb
         | 
| 80 82 | 
             
            - test/example_threaded_test.rb
         | 
| 81 83 | 
             
            - test/example_wrapper_test.rb
         | 
| @@ -109,6 +111,7 @@ specification_version: 4 | |
| 109 111 | 
             
            summary: Create encapsulated environments for your objects.
         | 
| 110 112 | 
             
            test_files:
         | 
| 111 113 | 
             
            - test/context_access_test.rb
         | 
| 114 | 
            +
            - test/context_shortcuts_test.rb
         | 
| 112 115 | 
             
            - test/example_proxy_test.rb
         | 
| 113 116 | 
             
            - test/example_threaded_test.rb
         | 
| 114 117 | 
             
            - test/example_wrapper_test.rb
         |