tagful 1.0.1 → 1.0.4
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/lib/tagful/version.rb +1 -1
- data/lib/tagful.rb +34 -21
- data/spec/tagful_spec.rb +106 -0
- metadata +1 -1
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: a5b681c48a71c6e5cc302881cb7f8b837142d26b
         | 
| 4 | 
            +
              data.tar.gz: cae00f8965dbf63edb5a5d2490e3a01b27e302c2
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 20687a579bb972a1a8390b965c5b5dd2e9770d5a1448c654e8a55e30cc48d7b07f38244262601a51043a953aa73286f9005c79d67ccb14eb9901278c17f9aa84
         | 
| 7 | 
            +
              data.tar.gz: a94463b8039c9dd4950e0aef6bfb24199d0ec607bef6d6bcde5474942de1dab92eae4904e38308ebe2e377b138a62450fa9cff6f835d834d61e663282f87a1f4
         | 
    
        data/lib/tagful/version.rb
    CHANGED
    
    
    
        data/lib/tagful.rb
    CHANGED
    
    | @@ -1,6 +1,8 @@ | |
| 1 1 | 
             
            require "tagful/version"
         | 
| 2 2 |  | 
| 3 3 | 
             
            module Tagful
         | 
| 4 | 
            +
              DEFAULT_ERROR_MODULE_NAME = 'Error'
         | 
| 5 | 
            +
             | 
| 4 6 | 
             
              class NotFound < ArgumentError; end
         | 
| 5 7 |  | 
| 6 8 | 
             
              def self.included(base)
         | 
| @@ -30,7 +32,7 @@ module Tagful | |
| 30 32 | 
             
                      error_class = @tagful_error_module_or_class
         | 
| 31 33 | 
             
                    else
         | 
| 32 34 | 
             
                      error_module = @tagful_error_module_or_class
         | 
| 33 | 
            -
                      error_module ||=  | 
| 35 | 
            +
                      error_module ||= DEFAULT_ERROR_MODULE_NAME
         | 
| 34 36 | 
             
                    end
         | 
| 35 37 | 
             
                  else
         | 
| 36 38 | 
             
                    if error_module_or_class.is_a?(Class)
         | 
| @@ -41,35 +43,46 @@ module Tagful | |
| 41 43 | 
             
                  end
         | 
| 42 44 |  | 
| 43 45 | 
             
                  if error_class
         | 
| 44 | 
            -
                    class_eval( | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 46 | 
            +
                    m = class_eval('module TagfulMethods; end; TagfulMethods')
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                    m.module_eval do
         | 
| 49 | 
            +
                      define_method(method_id) do |*args, &block|
         | 
| 50 | 
            +
                        begin
         | 
| 51 | 
            +
                          super(*args, &block)
         | 
| 49 52 | 
             
                        rescue => e
         | 
| 50 | 
            -
                          raise  | 
| 53 | 
            +
                          raise error_class, e.message
         | 
| 51 54 | 
             
                        end
         | 
| 52 55 | 
             
                      end
         | 
| 56 | 
            +
                      send visibility, method_id
         | 
| 57 | 
            +
                    end
         | 
| 53 58 |  | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 59 | 
            +
                    class_eval do
         | 
| 60 | 
            +
                      prepend(m)
         | 
| 61 | 
            +
                    end
         | 
| 56 62 | 
             
                  else
         | 
| 57 | 
            -
                     | 
| 58 | 
            -
                       | 
| 59 | 
            -
                         | 
| 60 | 
            -
             | 
| 63 | 
            +
                    if error_module == DEFAULT_ERROR_MODULE_NAME
         | 
| 64 | 
            +
                      error_module = class_eval(<<-CODE)
         | 
| 65 | 
            +
                        unless defined?(#{error_module})
         | 
| 66 | 
            +
                          module #{error_module}; end
         | 
| 67 | 
            +
                        end
         | 
| 68 | 
            +
                        #{error_module}
         | 
| 69 | 
            +
                      CODE
         | 
| 70 | 
            +
                    end
         | 
| 61 71 |  | 
| 62 | 
            -
             | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 72 | 
            +
                    m = class_eval('module TagfulMethods; end; TagfulMethods')
         | 
| 73 | 
            +
                    m.module_eval do
         | 
| 74 | 
            +
                      define_method(method_id) do |*args, &block|
         | 
| 75 | 
            +
                        begin
         | 
| 76 | 
            +
                          super(*args, &block)
         | 
| 66 77 | 
             
                        rescue => e
         | 
| 67 | 
            -
                          e.extend( | 
| 78 | 
            +
                          e.extend(error_module) and raise
         | 
| 68 79 | 
             
                        end
         | 
| 69 80 | 
             
                      end
         | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 72 | 
            -
                     | 
| 81 | 
            +
                      send visibility, method_id
         | 
| 82 | 
            +
                    end
         | 
| 83 | 
            +
                    class_eval do
         | 
| 84 | 
            +
                      prepend(m)
         | 
| 85 | 
            +
                    end
         | 
| 73 86 | 
             
                  end
         | 
| 74 87 | 
             
                  method_id
         | 
| 75 88 | 
             
                end
         | 
    
        data/spec/tagful_spec.rb
    CHANGED
    
    | @@ -97,6 +97,78 @@ RSpec.describe Tagful do | |
| 97 97 | 
             
                tagful :take_cheese!, NotFound
         | 
| 98 98 | 
             
              end
         | 
| 99 99 |  | 
| 100 | 
            +
              module Bar
         | 
| 101 | 
            +
                def bar
         | 
| 102 | 
            +
                  'top bar'
         | 
| 103 | 
            +
                end
         | 
| 104 | 
            +
              end
         | 
| 105 | 
            +
             | 
| 106 | 
            +
              class Foo
         | 
| 107 | 
            +
                module Bar
         | 
| 108 | 
            +
                  def self.to_s
         | 
| 109 | 
            +
                    'Bug!'
         | 
| 110 | 
            +
                  end
         | 
| 111 | 
            +
             | 
| 112 | 
            +
                  def bar
         | 
| 113 | 
            +
                    'Foo::Bar'
         | 
| 114 | 
            +
                  end
         | 
| 115 | 
            +
                end
         | 
| 116 | 
            +
             | 
| 117 | 
            +
                include Tagful
         | 
| 118 | 
            +
             | 
| 119 | 
            +
                tagful_with ::Bar
         | 
| 120 | 
            +
             | 
| 121 | 
            +
                tagful\
         | 
| 122 | 
            +
                def bug
         | 
| 123 | 
            +
                  raise 'bug'
         | 
| 124 | 
            +
                end
         | 
| 125 | 
            +
              end
         | 
| 126 | 
            +
             | 
| 127 | 
            +
              class Buzz < StandardError
         | 
| 128 | 
            +
                def buzz
         | 
| 129 | 
            +
                  'top buzz'
         | 
| 130 | 
            +
                end
         | 
| 131 | 
            +
              end
         | 
| 132 | 
            +
             | 
| 133 | 
            +
              class Fizz
         | 
| 134 | 
            +
                class Buzz < StandardError
         | 
| 135 | 
            +
                  def buzz
         | 
| 136 | 
            +
                    'Buzz::buzz'
         | 
| 137 | 
            +
                  end
         | 
| 138 | 
            +
                end
         | 
| 139 | 
            +
             | 
| 140 | 
            +
                include Tagful
         | 
| 141 | 
            +
             | 
| 142 | 
            +
                tagful_with ::Buzz
         | 
| 143 | 
            +
             | 
| 144 | 
            +
                tagful\
         | 
| 145 | 
            +
                def fizz
         | 
| 146 | 
            +
                  raise 'buzz'
         | 
| 147 | 
            +
                end
         | 
| 148 | 
            +
              end
         | 
| 149 | 
            +
             | 
| 150 | 
            +
              class Anonymous
         | 
| 151 | 
            +
                include Tagful
         | 
| 152 | 
            +
             | 
| 153 | 
            +
                def anonymous_module
         | 
| 154 | 
            +
                  raise 'anonymouse module'
         | 
| 155 | 
            +
                end
         | 
| 156 | 
            +
                tagful :anonymous_module, Module.new {
         | 
| 157 | 
            +
                  def anonymous
         | 
| 158 | 
            +
                    'anonymous module'
         | 
| 159 | 
            +
                  end
         | 
| 160 | 
            +
                }
         | 
| 161 | 
            +
             | 
| 162 | 
            +
                def anonymous_class
         | 
| 163 | 
            +
                  raise 'anonymouse class'
         | 
| 164 | 
            +
                end
         | 
| 165 | 
            +
                tagful :anonymous_class, Class.new(StandardError) {
         | 
| 166 | 
            +
                  def anonymous
         | 
| 167 | 
            +
                    'anonymous class'
         | 
| 168 | 
            +
                  end
         | 
| 169 | 
            +
                }
         | 
| 170 | 
            +
              end
         | 
| 171 | 
            +
             | 
| 100 172 | 
             
              describe '.tagful_with' do
         | 
| 101 173 | 
             
                it 'tagged method with specified Module' do
         | 
| 102 174 | 
             
                  expect { Robot.new.to_evil }.to raise_error(Robot::Broken, ':(')
         | 
| @@ -113,6 +185,24 @@ RSpec.describe Tagful do | |
| 113 185 | 
             
                    expect { Pizza.new('bug') }.to raise_error(Pizza::Dirty, 'something wrong in pizza factory: bug')
         | 
| 114 186 | 
             
                  end
         | 
| 115 187 | 
             
                end
         | 
| 188 | 
            +
             | 
| 189 | 
            +
                context 'tagged with top level module, but the same name module exists in class' do
         | 
| 190 | 
            +
                  it 'tagged by top level module' do
         | 
| 191 | 
            +
                    expect { Foo.new.bug }.to raise_error do |error|
         | 
| 192 | 
            +
                      expect(error).to be_an(::Bar)
         | 
| 193 | 
            +
                      expect(error.bar).to eq 'top bar'
         | 
| 194 | 
            +
                    end
         | 
| 195 | 
            +
                  end
         | 
| 196 | 
            +
                end
         | 
| 197 | 
            +
             | 
| 198 | 
            +
                context 'tagged with top level class, but the same name class exists in class' do
         | 
| 199 | 
            +
                  it 'tagged by top level class' do
         | 
| 200 | 
            +
                    expect { Fizz.new.fizz }.to raise_error do |error|
         | 
| 201 | 
            +
                      expect(error).to be_an(::Buzz)
         | 
| 202 | 
            +
                      expect(error.buzz).to eq 'top buzz'
         | 
| 203 | 
            +
                    end
         | 
| 204 | 
            +
                  end
         | 
| 205 | 
            +
                end
         | 
| 116 206 | 
             
              end
         | 
| 117 207 |  | 
| 118 208 | 
             
              describe '.tagful' do
         | 
| @@ -149,5 +239,21 @@ RSpec.describe Tagful do | |
| 149 239 | 
             
                    expect { Pizza.new.take_cheese! }.to raise_error(Pizza::NotFound, 'not found: cheese')
         | 
| 150 240 | 
             
                  end
         | 
| 151 241 | 
             
                end
         | 
| 242 | 
            +
             | 
| 243 | 
            +
                context 'tagged with anonymouse class' do
         | 
| 244 | 
            +
                  it 'raise tagged error class' do
         | 
| 245 | 
            +
                    expect { Anonymous.new.anonymous_class }.to raise_error do |error|
         | 
| 246 | 
            +
                      expect(error.anonymous).to eq 'anonymous class'
         | 
| 247 | 
            +
                    end
         | 
| 248 | 
            +
                  end
         | 
| 249 | 
            +
                end
         | 
| 250 | 
            +
             | 
| 251 | 
            +
                context 'tagged with anonymouse module' do
         | 
| 252 | 
            +
                  it 'raise tagged error module' do
         | 
| 253 | 
            +
                    expect { Anonymous.new.anonymous_module }.to raise_error do |error|
         | 
| 254 | 
            +
                      expect(error.anonymous).to eq 'anonymous module'
         | 
| 255 | 
            +
                    end
         | 
| 256 | 
            +
                  end
         | 
| 257 | 
            +
                end
         | 
| 152 258 | 
             
              end
         | 
| 153 259 | 
             
            end
         |