sus 0.4.0 → 0.5.0
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/sus/describe.rb +5 -5
- data/lib/sus/file.rb +34 -0
- data/lib/sus/filter.rb +7 -1
- data/lib/sus/identity.rb +11 -4
- data/lib/sus/it.rb +1 -1
- data/lib/sus/it_behaves_like.rb +4 -4
- data/lib/sus/registry.rb +2 -6
- data/lib/sus/version.rb +1 -1
- data/lib/sus/with.rb +2 -2
- metadata +3 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: fd31357ac07052a2e6c93a7dc674d2245a567644434eaf8e1983dedd7f594be7
         | 
| 4 | 
            +
              data.tar.gz: c33ba038edd7f9c22896a6e3c4b8fe7f8880d4c0e8361c3d44cbd74bba35939f
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: bfcd742a489b8ec128cd79ab6d631b1ba6bc45421563eeec51acb476648bc5bb821dc5fccbf0530032e5075879c8271a1be0981825e444d0893a407ca6ebb6fa
         | 
| 7 | 
            +
              data.tar.gz: 6014eff61f90083dbf9210faf64d2c7fec25c67cc8e0afa1721f20d3d730f7d8feea22c36e0db308b5712fea9b5a75433bd01785c0bea5eeb20bdb9a3ac5d7e4
         | 
    
        data/lib/sus/describe.rb
    CHANGED
    
    | @@ -11,12 +11,12 @@ module Sus | |
| 11 11 | 
             
            			base.children = Hash.new
         | 
| 12 12 | 
             
            		end
         | 
| 13 13 |  | 
| 14 | 
            -
            		def self.build(parent, subject,  | 
| 14 | 
            +
            		def self.build(parent, subject, unique: true, &block)
         | 
| 15 15 | 
             
            			base = Class.new(parent)
         | 
| 16 16 | 
             
            			base.extend(Describe)
         | 
| 17 17 | 
             
            			base.subject = subject
         | 
| 18 | 
            -
            			base.description = subject. | 
| 19 | 
            -
            			base.identity =  | 
| 18 | 
            +
            			base.description = subject.to_s
         | 
| 19 | 
            +
            			base.identity = Identity.nested(parent.identity, base.description, unique: unique)
         | 
| 20 20 | 
             
            			base.define_method(:subject, ->{subject})
         | 
| 21 21 |  | 
| 22 22 | 
             
            			if block_given?
         | 
| @@ -35,8 +35,8 @@ module Sus | |
| 35 35 | 
             
            	end
         | 
| 36 36 |  | 
| 37 37 | 
             
            	module Context
         | 
| 38 | 
            -
            		def describe( | 
| 39 | 
            -
            			add Describe.build(self,  | 
| 38 | 
            +
            		def describe(subject, **options, &block)
         | 
| 39 | 
            +
            			add Describe.build(self, subject, **options, &block)
         | 
| 40 40 | 
             
            		end
         | 
| 41 41 | 
             
            	end
         | 
| 42 42 | 
             
            end
         | 
    
        data/lib/sus/file.rb
    ADDED
    
    | @@ -0,0 +1,34 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            require_relative 'context'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            # This has to be done at the top level. It allows us to define constants within the given class while still retaining top-level constant resolution.
         | 
| 5 | 
            +
            Sus::TOPLEVEL_CLASS_EVAL = ->(klass, path){klass.class_eval(::File.read(path), path)}
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            module Sus
         | 
| 8 | 
            +
            	module File
         | 
| 9 | 
            +
            		extend Context
         | 
| 10 | 
            +
            		
         | 
| 11 | 
            +
            		attr_accessor :path
         | 
| 12 | 
            +
            		
         | 
| 13 | 
            +
            		def self.extended(base)
         | 
| 14 | 
            +
            			base.children = Hash.new
         | 
| 15 | 
            +
            		end
         | 
| 16 | 
            +
            		
         | 
| 17 | 
            +
            		def self.build(parent, path)
         | 
| 18 | 
            +
            			base = Class.new(parent)
         | 
| 19 | 
            +
            			base.extend(File)
         | 
| 20 | 
            +
            			base.description = path
         | 
| 21 | 
            +
            			base.identity = Identity.new(path)
         | 
| 22 | 
            +
            			
         | 
| 23 | 
            +
            			TOPLEVEL_CLASS_EVAL.call(base, path)
         | 
| 24 | 
            +
            			
         | 
| 25 | 
            +
            			return base
         | 
| 26 | 
            +
            		end
         | 
| 27 | 
            +
            	end
         | 
| 28 | 
            +
            	
         | 
| 29 | 
            +
            	module Context
         | 
| 30 | 
            +
            		def file(path)
         | 
| 31 | 
            +
            			add File.build(self, path)
         | 
| 32 | 
            +
            		end
         | 
| 33 | 
            +
            	end
         | 
| 34 | 
            +
            end
         | 
    
        data/lib/sus/filter.rb
    CHANGED
    
    | @@ -16,7 +16,13 @@ module Sus | |
| 16 16 | 
             
            			end
         | 
| 17 17 |  | 
| 18 18 | 
             
            			def insert(identity, context)
         | 
| 19 | 
            -
            				 | 
| 19 | 
            +
            				key = identity.key
         | 
| 20 | 
            +
            				
         | 
| 21 | 
            +
            				if @contexts[key]
         | 
| 22 | 
            +
            					raise KeyError, "Assigning context to existing key: #{key.inspect}!"
         | 
| 23 | 
            +
            				else
         | 
| 24 | 
            +
            					@contexts[key] = context
         | 
| 25 | 
            +
            				end
         | 
| 20 26 | 
             
            			end
         | 
| 21 27 |  | 
| 22 28 | 
             
            			def [] key
         | 
    
        data/lib/sus/identity.rb
    CHANGED
    
    | @@ -7,6 +7,7 @@ module Sus | |
| 7 7 | 
             
            			self.new(location.path, name, location.lineno, parent, **options)
         | 
| 8 8 | 
             
            		end
         | 
| 9 9 |  | 
| 10 | 
            +
            		# @parameter unique [Boolean | Symbol] Whether this identity is unique or needs a unique key/line number suffix.
         | 
| 10 11 | 
             
            		def initialize(path, name = nil, line = nil, parent = nil, unique: true)
         | 
| 11 12 | 
             
            			@path = path
         | 
| 12 13 | 
             
            			@name = name
         | 
| @@ -55,7 +56,7 @@ module Sus | |
| 55 56 | 
             
            			unless @key
         | 
| 56 57 | 
             
            				key = Array.new
         | 
| 57 58 |  | 
| 58 | 
            -
            				append_unique_key(key | 
| 59 | 
            +
            				append_unique_key(key)
         | 
| 59 60 |  | 
| 60 61 | 
             
            				@key = key.join(':')
         | 
| 61 62 | 
             
            			end
         | 
| @@ -65,15 +66,21 @@ module Sus | |
| 65 66 |  | 
| 66 67 | 
             
            		protected
         | 
| 67 68 |  | 
| 68 | 
            -
            		def append_unique_key(key | 
| 69 | 
            +
            		def append_unique_key(key)
         | 
| 69 70 | 
             
            			if @parent
         | 
| 70 71 | 
             
            				@parent.append_unique_key(key)
         | 
| 71 72 | 
             
            			else
         | 
| 72 73 | 
             
            				key << @path
         | 
| 73 74 | 
             
            			end
         | 
| 74 75 |  | 
| 75 | 
            -
            			if @ | 
| 76 | 
            -
            				key  | 
| 76 | 
            +
            			if @unique == true
         | 
| 77 | 
            +
            				# No key is needed because this identity is unique.
         | 
| 78 | 
            +
            			else
         | 
| 79 | 
            +
            				if @unique
         | 
| 80 | 
            +
            					key << @unique
         | 
| 81 | 
            +
            				elsif @line
         | 
| 82 | 
            +
            					key << @line
         | 
| 83 | 
            +
            				end
         | 
| 77 84 | 
             
            			end
         | 
| 78 85 | 
             
            		end
         | 
| 79 86 | 
             
            	end
         | 
    
        data/lib/sus/it.rb
    CHANGED
    
    | @@ -7,7 +7,7 @@ module Sus | |
| 7 7 | 
             
            			base = Class.new(parent)
         | 
| 8 8 | 
             
            			base.extend(It)
         | 
| 9 9 | 
             
            			base.description = description
         | 
| 10 | 
            -
            			base.identity = Identity.nested(parent.identity, base.description)
         | 
| 10 | 
            +
            			base.identity = Identity.nested(parent.identity, base.description, unique: false)
         | 
| 11 11 |  | 
| 12 12 | 
             
            			if block_given?
         | 
| 13 13 | 
             
            				base.define_method(:call, &block)
         | 
    
        data/lib/sus/it_behaves_like.rb
    CHANGED
    
    | @@ -11,11 +11,11 @@ module Sus | |
| 11 11 | 
             
            			base.children = Hash.new
         | 
| 12 12 | 
             
            		end
         | 
| 13 13 |  | 
| 14 | 
            -
            		def self.build(parent, shared)
         | 
| 14 | 
            +
            		def self.build(parent, shared, unique: false)
         | 
| 15 15 | 
             
            			base = Class.new(parent)
         | 
| 16 16 | 
             
            			base.extend(ItBehavesLike)
         | 
| 17 17 | 
             
            			base.description = shared.name
         | 
| 18 | 
            -
            			base.identity = Identity.nested(parent.identity, base.description, unique:  | 
| 18 | 
            +
            			base.identity = Identity.nested(parent.identity, base.description, unique: unique)
         | 
| 19 19 | 
             
            			base.class_exec(&shared.block)
         | 
| 20 20 | 
             
            			return base
         | 
| 21 21 | 
             
            		end
         | 
| @@ -27,8 +27,8 @@ module Sus | |
| 27 27 | 
             
            	end
         | 
| 28 28 |  | 
| 29 29 | 
             
            	module Context
         | 
| 30 | 
            -
            		def it_behaves_like(shared)
         | 
| 31 | 
            -
            			add ItBehavesLike.build(self, shared)
         | 
| 30 | 
            +
            		def it_behaves_like(shared, **options)
         | 
| 31 | 
            +
            			add ItBehavesLike.build(self, shared, **options)
         | 
| 32 32 | 
             
            		end
         | 
| 33 33 | 
             
            	end
         | 
| 34 34 | 
             
            end
         | 
    
        data/lib/sus/registry.rb
    CHANGED
    
    | @@ -1,6 +1,7 @@ | |
| 1 1 |  | 
| 2 2 | 
             
            require_relative 'base'
         | 
| 3 3 |  | 
| 4 | 
            +
            require_relative 'file'
         | 
| 4 5 | 
             
            require_relative 'describe'
         | 
| 5 6 | 
             
            require_relative 'with'
         | 
| 6 7 |  | 
| @@ -12,9 +13,6 @@ require_relative 'include_context' | |
| 12 13 |  | 
| 13 14 | 
             
            require_relative 'let'
         | 
| 14 15 |  | 
| 15 | 
            -
            # This has to be done at the top level. It allows us to define constants within the given class while still retaining top-level constant resolution.
         | 
| 16 | 
            -
            TOPLEVEL_CLASS_EVAL = ->(klass, path){klass.class_eval(File.read(path), path)}
         | 
| 17 | 
            -
             | 
| 18 16 | 
             
            module Sus
         | 
| 19 17 | 
             
            	class Registry
         | 
| 20 18 | 
             
            		# Create a top level scope with self as the instance:
         | 
| @@ -25,9 +23,7 @@ module Sus | |
| 25 23 | 
             
            		attr :base
         | 
| 26 24 |  | 
| 27 25 | 
             
            		def load(path)
         | 
| 28 | 
            -
            			@base. | 
| 29 | 
            -
            				TOPLEVEL_CLASS_EVAL.call(self, path)
         | 
| 30 | 
            -
            			end
         | 
| 26 | 
            +
            			@base.file(path)
         | 
| 31 27 | 
             
            		end
         | 
| 32 28 |  | 
| 33 29 | 
             
            		def call(assertions = Assertions.default)
         | 
    
        data/lib/sus/version.rb
    CHANGED
    
    
    
        data/lib/sus/with.rb
    CHANGED
    
    | @@ -12,12 +12,12 @@ module Sus | |
| 12 12 | 
             
            			base.children = Hash.new
         | 
| 13 13 | 
             
            		end
         | 
| 14 14 |  | 
| 15 | 
            -
            		def self.build(parent, subject, variables, &block)
         | 
| 15 | 
            +
            		def self.build(parent, subject, variables, unique: true, &block)
         | 
| 16 16 | 
             
            			base = Class.new(parent)
         | 
| 17 17 | 
             
            			base.extend(With)
         | 
| 18 18 | 
             
            			base.subject = subject
         | 
| 19 19 | 
             
            			base.description = subject
         | 
| 20 | 
            -
            			base.identity = Identity.nested(parent.identity, base.description)
         | 
| 20 | 
            +
            			base.identity = Identity.nested(parent.identity, base.description, unique: unique)
         | 
| 21 21 | 
             
            			base.variables = variables
         | 
| 22 22 |  | 
| 23 23 | 
             
            			variables.each do |key, value|
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: sus
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.5.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Samuel Williams
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2021-12- | 
| 11 | 
            +
            date: 2021-12-09 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies: []
         | 
| 13 13 | 
             
            description:
         | 
| 14 14 | 
             
            email:
         | 
| @@ -28,6 +28,7 @@ files: | |
| 28 28 | 
             
            - lib/sus/context.rb
         | 
| 29 29 | 
             
            - lib/sus/describe.rb
         | 
| 30 30 | 
             
            - lib/sus/expect.rb
         | 
| 31 | 
            +
            - lib/sus/file.rb
         | 
| 31 32 | 
             
            - lib/sus/filter.rb
         | 
| 32 33 | 
             
            - lib/sus/have_duration.rb
         | 
| 33 34 | 
             
            - lib/sus/identity.rb
         |