impromptu 1.2.0 → 1.2.1
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.
- data/CHANGELOG +4 -0
- data/VERSION +1 -1
- data/impromptu.gemspec +3 -1
- data/lib/impromptu/autoload.rb +31 -39
- data/lib/impromptu/file.rb +4 -1
- data/lib/impromptu/resource.rb +0 -1
- data/test/framework/folder_namespace/two_names.rb +4 -0
- data/test/test_integration.rb +12 -3
- metadata +4 -2
    
        data/CHANGELOG
    CHANGED
    
    | @@ -1,3 +1,7 @@ | |
| 1 | 
            +
            1.2.1 - Fix bug where namespaces were not removed after camelcasing a file name
         | 
| 2 | 
            +
                  - Simplify autoloading behaviour and fix a bug which affected autoloading
         | 
| 3 | 
            +
                    constants while in the middle of an existing autoload.
         | 
| 4 | 
            +
             | 
| 1 5 | 
             
            1.2.0 - New method 'root?' which tests is symbols are prefixed with two colons
         | 
| 2 6 | 
             
                  - New 'namespace' option for folders allows you to override a components
         | 
| 3 7 | 
             
                    namespace with a namespace specific to a folder.
         | 
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            1.2. | 
| 1 | 
            +
            1.2.1
         | 
    
        data/impromptu.gemspec
    CHANGED
    
    | @@ -5,7 +5,7 @@ | |
| 5 5 |  | 
| 6 6 | 
             
            Gem::Specification.new do |s|
         | 
| 7 7 | 
             
              s.name = %q{impromptu}
         | 
| 8 | 
            -
              s.version = "1.2. | 
| 8 | 
            +
              s.version = "1.2.1"
         | 
| 9 9 |  | 
| 10 10 | 
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         | 
| 11 11 | 
             
              s.authors = ["Will Cannings"]
         | 
| @@ -41,6 +41,7 @@ Gem::Specification.new do |s| | |
| 41 41 | 
             
                "test/framework/ext/extensions.rb",
         | 
| 42 42 | 
             
                "test/framework/ext/extensions/blog.rb",
         | 
| 43 43 | 
             
                "test/framework/folder_namespace/stream.rb",
         | 
| 44 | 
            +
                "test/framework/folder_namespace/two_names.rb",
         | 
| 44 45 | 
             
                "test/framework/lib/group/klass2.rb",
         | 
| 45 46 | 
             
                "test/framework/lib/klass.rb",
         | 
| 46 47 | 
             
                "test/framework/other/also.rb",
         | 
| @@ -77,6 +78,7 @@ Gem::Specification.new do |s| | |
| 77 78 | 
             
                "test/framework/ext/extensions.rb",
         | 
| 78 79 | 
             
                "test/framework/ext/extensions/blog.rb",
         | 
| 79 80 | 
             
                "test/framework/folder_namespace/stream.rb",
         | 
| 81 | 
            +
                "test/framework/folder_namespace/two_names.rb",
         | 
| 80 82 | 
             
                "test/framework/lib/group/klass2.rb",
         | 
| 81 83 | 
             
                "test/framework/lib/klass.rb",
         | 
| 82 84 | 
             
                "test/framework/other/also.rb",
         | 
    
        data/lib/impromptu/autoload.rb
    CHANGED
    
    | @@ -1,41 +1,33 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
             | 
| 3 | 
            -
             | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
                    namespaced_symbol = "#{self.name}::#{symbol}".to_sym
         | 
| 19 | 
            -
                  end
         | 
| 20 | 
            -
                  
         | 
| 21 | 
            -
                  # walk the resource tree and get a reference to the
         | 
| 22 | 
            -
                  # resource or nil if we're not tracking it
         | 
| 23 | 
            -
                  resource = Impromptu.root_resource.child(namespaced_symbol)
         | 
| 24 | 
            -
                  
         | 
| 25 | 
            -
                  # if we don't know about the symbol, send the method to
         | 
| 26 | 
            -
                  # Object which will raise an exception
         | 
| 27 | 
            -
                  super(symbol) if resource.nil?
         | 
| 28 | 
            -
                  
         | 
| 29 | 
            -
                  # ensure the resource hasn't already been loaded
         | 
| 30 | 
            -
                  raise "Illegal condition: const_missing called after a resource has been loaded" if resource.loaded?
         | 
| 31 | 
            -
                  
         | 
| 32 | 
            -
                  # load the resource and return a reference to it. this
         | 
| 33 | 
            -
                  # assumes that the source files will correctly define
         | 
| 34 | 
            -
                  # the resource. otherwise nil will be returned.
         | 
| 35 | 
            -
                  resource.reload
         | 
| 36 | 
            -
                  resource.reference
         | 
| 37 | 
            -
                end
         | 
| 1 | 
            +
            # Impromptu implements the autoloading behaviour using const_missing.
         | 
| 2 | 
            +
            # Module's const_missing definition is replaced with the one below to
         | 
| 3 | 
            +
            # catch references to objects which don't exist. It first tries
         | 
| 4 | 
            +
            # to determine if we know about the resource corresponding to name
         | 
| 5 | 
            +
            # and if so loads and returns a reference to it. Otherwise, the usual
         | 
| 6 | 
            +
            # NameError exception will be raised. We also test to make sure a
         | 
| 7 | 
            +
            # resource isn't already loaded before returning a reference to it. If
         | 
| 8 | 
            +
            # it is, then something very screwy has gone on and Ruby cannot locate
         | 
| 9 | 
            +
            # an already loaded resource.
         | 
| 10 | 
            +
            Module.send(:remove_method, :const_missing)
         | 
| 11 | 
            +
            Module.send(:define_method, :const_missing) do |symbol|
         | 
| 12 | 
            +
              # namespace the missing resource with the name of the
         | 
| 13 | 
            +
              # current class or module
         | 
| 14 | 
            +
              if self == Object
         | 
| 15 | 
            +
                namespaced_symbol = symbol
         | 
| 16 | 
            +
              else
         | 
| 17 | 
            +
                namespaced_symbol = "#{self.name}::#{symbol}".to_sym
         | 
| 38 18 | 
             
              end
         | 
| 19 | 
            +
              
         | 
| 20 | 
            +
              # walk the resource tree and get a reference to the
         | 
| 21 | 
            +
              # resource or nil if we're not tracking it
         | 
| 22 | 
            +
              resource = Impromptu.root_resource.child(namespaced_symbol)
         | 
| 23 | 
            +
              raise NameError if resource.nil?
         | 
| 24 | 
            +
              
         | 
| 25 | 
            +
              # ensure the resource hasn't already been loaded
         | 
| 26 | 
            +
              raise "Illegal condition: const_missing called after a resource has been loaded" if resource.loaded?
         | 
| 27 | 
            +
              
         | 
| 28 | 
            +
              # load the resource and return a reference to it. this
         | 
| 29 | 
            +
              # assumes that the source files will correctly define
         | 
| 30 | 
            +
              # the resource. otherwise nil will be returned.
         | 
| 31 | 
            +
              resource.reload
         | 
| 32 | 
            +
              resource.reference
         | 
| 39 33 | 
             
            end
         | 
| 40 | 
            -
             | 
| 41 | 
            -
            Object.extend(Impromptu::Autoload)
         | 
    
        data/lib/impromptu/file.rb
    CHANGED
    
    | @@ -206,7 +206,10 @@ module Impromptu | |
| 206 206 | 
             
                    name.gsub!(/\/(.?)/) {|character| "::#{character[1].upcase}" }
         | 
| 207 207 |  | 
| 208 208 | 
             
                    # upcase the first character, and any characters following an underscore
         | 
| 209 | 
            -
                    name.gsub(/(?:^|_)(.)/) {|character| character.upcase} | 
| 209 | 
            +
                    name.gsub!(/(?:^|_)(.)/) {|character| character.upcase}
         | 
| 210 | 
            +
                    
         | 
| 211 | 
            +
                    # remove underscores
         | 
| 212 | 
            +
                    name.gsub('_', '').to_sym
         | 
| 210 213 | 
             
                  end
         | 
| 211 214 |  | 
| 212 215 | 
             
                  def combine_symbol_with_namespace(symbol)
         | 
    
        data/lib/impromptu/resource.rb
    CHANGED
    
    
    
        data/test/test_integration.rb
    CHANGED
    
    | @@ -35,15 +35,15 @@ class TestIntegration < Test::Unit::TestCase | |
| 35 35 | 
             
                  assert_equal nil, Impromptu.components['other'].namespace
         | 
| 36 36 | 
             
                end
         | 
| 37 37 |  | 
| 38 | 
            -
                should "05 start tracking  | 
| 38 | 
            +
                should "05 start tracking 11 files" do
         | 
| 39 39 | 
             
                  assert_equal 2, Impromptu.components['framework'].folders.first.files.size
         | 
| 40 40 | 
             
                  assert_equal 2, Impromptu.components['framework.extensions'].folders.first.files.size
         | 
| 41 41 | 
             
                  assert_equal 3, Impromptu.components['other'].folders.first.files.size
         | 
| 42 42 | 
             
                  assert_equal 2, Impromptu.components['private'].folders.first.files.size
         | 
| 43 | 
            -
                  assert_equal  | 
| 43 | 
            +
                  assert_equal 2, Impromptu.components['folder_namespace'].folders.first.files.size
         | 
| 44 44 | 
             
                end
         | 
| 45 45 |  | 
| 46 | 
            -
                should "06 load definitions for  | 
| 46 | 
            +
                should "06 load definitions for 13 resources" do
         | 
| 47 47 | 
             
                  assert Impromptu.root_resource.child?(:Framework)
         | 
| 48 48 | 
             
                  assert Impromptu.root_resource.child(:Framework).child?(:Extensions)
         | 
| 49 49 | 
             
                  assert Impromptu.root_resource.child(:Framework).child(:Extensions).child?(:Blog)
         | 
| @@ -56,6 +56,7 @@ class TestIntegration < Test::Unit::TestCase | |
| 56 56 | 
             
                  assert Impromptu.root_resource.child?(:Another)
         | 
| 57 57 | 
             
                  assert Impromptu.root_resource.child(:Namespace)
         | 
| 58 58 | 
             
                  assert Impromptu.root_resource.child(:Namespace).child?(:Stream)
         | 
| 59 | 
            +
                  assert Impromptu.root_resource.child(:Namespace).child?(:TwoNames)
         | 
| 59 60 | 
             
                end
         | 
| 60 61 |  | 
| 61 62 | 
             
                should "07 correctly mark namespace resources" do
         | 
| @@ -71,6 +72,7 @@ class TestIntegration < Test::Unit::TestCase | |
| 71 72 | 
             
                  assert_equal false, Impromptu.root_resource.child(:Another).namespace?
         | 
| 72 73 | 
             
                  assert_equal true, Impromptu.root_resource.child(:Namespace).namespace?
         | 
| 73 74 | 
             
                  assert_equal false, Impromptu.root_resource.child(:Namespace).child(:Stream).namespace?
         | 
| 75 | 
            +
                  assert_equal false, Impromptu.root_resource.child(:Namespace).child(:TwoNames).namespace?
         | 
| 74 76 | 
             
                end
         | 
| 75 77 |  | 
| 76 78 | 
             
                should "08 keep all resources unloaded to start with" do
         | 
| @@ -86,6 +88,7 @@ class TestIntegration < Test::Unit::TestCase | |
| 86 88 | 
             
                  assert_equal false, Impromptu.root_resource.child(:'Another').loaded?
         | 
| 87 89 | 
             
                  assert_equal false, Impromptu.root_resource.child(:'Namespace').loaded?
         | 
| 88 90 | 
             
                  assert_equal false, Impromptu.root_resource.child(:'Namespace::Stream').loaded?
         | 
| 91 | 
            +
                  assert_equal false, Impromptu.root_resource.child(:'Namespace::TwoNames').loaded?
         | 
| 89 92 | 
             
                end
         | 
| 90 93 |  | 
| 91 94 | 
             
                should "09 have all resources specified by the correct number of files" do
         | 
| @@ -101,6 +104,7 @@ class TestIntegration < Test::Unit::TestCase | |
| 101 104 | 
             
                  assert_equal 1, Impromptu.root_resource.child(:'ModTwo').files.size
         | 
| 102 105 | 
             
                  assert_equal 1, Impromptu.root_resource.child(:'Another').files.size
         | 
| 103 106 | 
             
                  assert_equal 1, Impromptu.root_resource.child(:'Namespace::Stream').files.size
         | 
| 107 | 
            +
                  assert_equal 1, Impromptu.root_resource.child(:'Namespace::TwoNames').files.size
         | 
| 104 108 | 
             
                  assert_equal true, Impromptu.root_resource.child(:'Framework').implicitly_defined?
         | 
| 105 109 | 
             
                  assert_equal true, Impromptu.root_resource.child(:'Namespace').implicitly_defined?
         | 
| 106 110 | 
             
                end
         | 
| @@ -180,10 +184,15 @@ class TestIntegration < Test::Unit::TestCase | |
| 180 184 |  | 
| 181 185 | 
             
                  # folder namespace
         | 
| 182 186 | 
             
                  Impromptu.root_resource.child(:'Namespace::Stream').reload
         | 
| 187 | 
            +
                  Impromptu.root_resource.child(:'Namespace::TwoNames').reload
         | 
| 183 188 | 
             
                  assert_equal true, Impromptu.root_resource.child(:'Namespace::Stream').loaded?
         | 
| 189 | 
            +
                  assert_equal true, Impromptu.root_resource.child(:'Namespace::TwoNames').loaded?
         | 
| 184 190 | 
             
                  assert_nothing_raised do
         | 
| 185 191 | 
             
                    Namespace::Stream
         | 
| 186 192 | 
             
                  end
         | 
| 193 | 
            +
                  assert_nothing_raised do
         | 
| 194 | 
            +
                    Namespace::TwoNames
         | 
| 195 | 
            +
                  end
         | 
| 187 196 | 
             
                end
         | 
| 188 197 |  | 
| 189 198 | 
             
                should "12 load multiple files for a resource when required" do
         | 
    
        metadata
    CHANGED
    
    | @@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version | |
| 5 5 | 
             
              segments: 
         | 
| 6 6 | 
             
              - 1
         | 
| 7 7 | 
             
              - 2
         | 
| 8 | 
            -
              -  | 
| 9 | 
            -
              version: 1.2. | 
| 8 | 
            +
              - 1
         | 
| 9 | 
            +
              version: 1.2.1
         | 
| 10 10 | 
             
            platform: ruby
         | 
| 11 11 | 
             
            authors: 
         | 
| 12 12 | 
             
            - Will Cannings
         | 
| @@ -64,6 +64,7 @@ files: | |
| 64 64 | 
             
            - test/framework/ext/extensions.rb
         | 
| 65 65 | 
             
            - test/framework/ext/extensions/blog.rb
         | 
| 66 66 | 
             
            - test/framework/folder_namespace/stream.rb
         | 
| 67 | 
            +
            - test/framework/folder_namespace/two_names.rb
         | 
| 67 68 | 
             
            - test/framework/lib/group/klass2.rb
         | 
| 68 69 | 
             
            - test/framework/lib/klass.rb
         | 
| 69 70 | 
             
            - test/framework/other/also.rb
         | 
| @@ -127,6 +128,7 @@ test_files: | |
| 127 128 | 
             
            - test/framework/ext/extensions.rb
         | 
| 128 129 | 
             
            - test/framework/ext/extensions/blog.rb
         | 
| 129 130 | 
             
            - test/framework/folder_namespace/stream.rb
         | 
| 131 | 
            +
            - test/framework/folder_namespace/two_names.rb
         | 
| 130 132 | 
             
            - test/framework/lib/group/klass2.rb
         | 
| 131 133 | 
             
            - test/framework/lib/klass.rb
         | 
| 132 134 | 
             
            - test/framework/other/also.rb
         |