coltrane 1.0.21 → 1.0.22
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/Gemfile.lock +1 -1
- data/lib/coltrane.rb +12 -7
- data/lib/coltrane/cache.rb +9 -1
- data/lib/coltrane/chord.rb +1 -1
- data/lib/coltrane/progression.rb +1 -5
- data/lib/coltrane/roman_chord.rb +32 -19
- data/lib/coltrane/scale.rb +10 -7
- data/lib/coltrane/version.rb +1 -1
- metadata +2 -3
- data/lib/coltrane/interval_set.rb +0 -24
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 57dabf818555a71744bf6fb434099d6c33e1b9b33aa3fdaa475c38433b42554f
         | 
| 4 | 
            +
              data.tar.gz: 0c405a62ff1eaf8fc94f0f819d4c3eac4158565ca83ba8374c21964d4c68c0e5
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 9e86b4fbad7d9961eddf2f1a6d3eb15b86f280e963322a67d4e1ae1d469f7234f632be0d1a0abaaa0d1ee1a3a9409a804e6e44ceefdad45852a402ee9b00ced4
         | 
| 7 | 
            +
              data.tar.gz: 7dba69b15767ff2d1aac5262075e40eca9548d0aabc244fc018801876c22a4917a54815293e295e048c1c7a7b1d6a706b91010f4783551810410b24c6f2c333e
         | 
    
        data/Gemfile.lock
    CHANGED
    
    
    
        data/lib/coltrane.rb
    CHANGED
    
    | @@ -9,22 +9,27 @@ require 'coltrane/version' | |
| 9 9 | 
             
            require 'coltrane/errors'
         | 
| 10 10 |  | 
| 11 11 | 
             
            require 'coltrane/cache'
         | 
| 12 | 
            +
            # Coltrane::Cache.disable
         | 
| 13 | 
            +
             | 
| 12 14 | 
             
            require 'coltrane/cadence'
         | 
| 13 15 |  | 
| 14 | 
            -
            require 'coltrane/ | 
| 15 | 
            -
            require 'coltrane/ | 
| 16 | 
            +
            require 'coltrane/note'
         | 
| 17 | 
            +
            require 'coltrane/pitch'
         | 
| 18 | 
            +
            require 'coltrane/note_set'
         | 
| 19 | 
            +
             | 
| 16 20 | 
             
            require 'coltrane/interval'
         | 
| 21 | 
            +
            require 'coltrane/interval_sequence'
         | 
| 22 | 
            +
             | 
| 17 23 | 
             
            require 'coltrane/qualities'
         | 
| 18 24 | 
             
            require 'coltrane/chord_quality'
         | 
| 19 | 
            -
             | 
| 25 | 
            +
             | 
| 20 26 | 
             
            require 'coltrane/chord'
         | 
| 21 27 | 
             
            require 'coltrane/roman_chord'
         | 
| 22 28 |  | 
| 23 29 | 
             
            require 'coltrane/classic_scales'
         | 
| 24 | 
            -
            require 'coltrane/ | 
| 30 | 
            +
            require 'coltrane/scale'
         | 
| 25 31 |  | 
| 26 | 
            -
            require 'coltrane/ | 
| 27 | 
            -
            require 'coltrane/pitch'
         | 
| 32 | 
            +
            require 'coltrane/classic_progressions'
         | 
| 28 33 | 
             
            require 'coltrane/progression'
         | 
| 29 | 
            -
             | 
| 34 | 
            +
             | 
| 30 35 | 
             
            require 'coltrane/mode'
         | 
    
        data/lib/coltrane/cache.rb
    CHANGED
    
    | @@ -6,13 +6,21 @@ module Coltrane | |
| 6 6 | 
             
              class Cache
         | 
| 7 7 | 
             
                class << self
         | 
| 8 8 | 
             
                  def find_or_record(key, &block)
         | 
| 9 | 
            -
                     | 
| 9 | 
            +
                    if @disabled || !(cached = fetch(key))
         | 
| 10 10 | 
             
                      cached = yield block
         | 
| 11 11 | 
             
                      record(key, cached)
         | 
| 12 12 | 
             
                    end
         | 
| 13 13 | 
             
                    cached
         | 
| 14 14 | 
             
                  end
         | 
| 15 15 |  | 
| 16 | 
            +
                  def disable
         | 
| 17 | 
            +
                    @disabled = true
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  def enable
         | 
| 21 | 
            +
                    @disabled = false
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
             | 
| 16 24 | 
             
                  private
         | 
| 17 25 |  | 
| 18 26 | 
             
                  def dir
         | 
    
        data/lib/coltrane/chord.rb
    CHANGED
    
    
    
        data/lib/coltrane/progression.rb
    CHANGED
    
    | @@ -7,14 +7,10 @@ module Coltrane | |
| 7 7 |  | 
| 8 8 | 
             
                attr_reader :scale
         | 
| 9 9 |  | 
| 10 | 
            -
                def initialize( | 
| 10 | 
            +
                def initialize(roman_notation, key: nil, scale: nil)
         | 
| 11 11 | 
             
                  @scale = Scale.from_key(key) unless key.nil?
         | 
| 12 12 | 
             
                end
         | 
| 13 13 |  | 
| 14 | 
            -
                # def chords
         | 
| 15 | 
            -
             | 
| 16 | 
            -
                # end
         | 
| 17 | 
            -
             | 
| 18 14 | 
             
                private
         | 
| 19 15 |  | 
| 20 16 | 
             
                def chord_indexes
         | 
    
        data/lib/coltrane/roman_chord.rb
    CHANGED
    
    | @@ -1,39 +1,52 @@ | |
| 1 1 | 
             
            # frozen_string_literal: true
         | 
| 2 2 |  | 
| 3 3 | 
             
            module Coltrane
         | 
| 4 | 
            +
              attr_reader :degree, :quality
         | 
| 5 | 
            +
             | 
| 4 6 | 
             
              # It deals with chords in roman notation
         | 
| 5 7 | 
             
              class RomanChord
         | 
| 6 | 
            -
                DIGITS =  | 
| 7 | 
            -
             | 
| 8 | 
            -
                   | 
| 9 | 
            -
             | 
| 8 | 
            +
                DIGITS = %w[I II III IV V VI VII].freeze
         | 
| 9 | 
            +
                NOTATION_REGEX = %r{
         | 
| 10 | 
            +
                  (?<degree>[ivIV]*)
         | 
| 11 | 
            +
                  (?<quality>.*)
         | 
| 12 | 
            +
                }x
         | 
| 10 13 |  | 
| 11 | 
            -
                def initialize(scale,  | 
| 12 | 
            -
                  @scale | 
| 13 | 
            -
                  @ | 
| 14 | 
            +
                def initialize(scale, notation)
         | 
| 15 | 
            +
                  @scale    = scale
         | 
| 16 | 
            +
                  @notation = notation.match(NOTATION_REGEX).named_captures
         | 
| 14 17 | 
             
                end
         | 
| 15 18 |  | 
| 16 | 
            -
                def  | 
| 17 | 
            -
                   | 
| 18 | 
            -
                            quality: quality
         | 
| 19 | 
            +
                def degree
         | 
| 20 | 
            +
                  DIGITS.index(@notation['degree'].upcase) + 1
         | 
| 19 21 | 
             
                end
         | 
| 20 22 |  | 
| 21 | 
            -
                def  | 
| 22 | 
            -
                   | 
| 23 | 
            +
                def quality_name
         | 
| 24 | 
            +
                  [
         | 
| 25 | 
            +
                    minor_notation,
         | 
| 26 | 
            +
                    @notation['quality'].gsub('o', 'dim').gsub('ø', 'm7b5')
         | 
| 27 | 
            +
                  ].join
         | 
| 23 28 | 
             
                end
         | 
| 24 29 |  | 
| 25 | 
            -
                def  | 
| 26 | 
            -
                   | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 30 | 
            +
                def minor_notation
         | 
| 31 | 
            +
                  return 'm' if !@notation['quality'].match?((/dim|m7b5/)) && !upcase?
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                def upcase?
         | 
| 35 | 
            +
                  !!(@notation['degree'][0].match /[[:upper:]]/)
         | 
| 36 | 
            +
                end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                def chord
         | 
| 39 | 
            +
                  Chord.new root_note: root_note,
         | 
| 40 | 
            +
                            quality: quality
         | 
| 29 41 | 
             
                end
         | 
| 30 42 |  | 
| 31 43 | 
             
                def quality
         | 
| 32 | 
            -
                   | 
| 44 | 
            +
                  q = quality_name
         | 
| 45 | 
            +
                  ChordQuality.new(name: (q.size.zero? ? 'M' : q))
         | 
| 33 46 | 
             
                end
         | 
| 34 47 |  | 
| 35 | 
            -
                def  | 
| 36 | 
            -
                  @ | 
| 48 | 
            +
                def root_note
         | 
| 49 | 
            +
                  @scale[@degree]
         | 
| 37 50 | 
             
                end
         | 
| 38 51 | 
             
              end
         | 
| 39 52 | 
             
            end
         | 
    
        data/lib/coltrane/scale.rb
    CHANGED
    
    | @@ -124,13 +124,16 @@ module Coltrane | |
| 124 124 | 
             
                def chords(size)
         | 
| 125 125 | 
             
                  Coltrane::Cache.find_or_record(cache_key("chords-#{size}")) do
         | 
| 126 126 | 
             
                    included_names = []
         | 
| 127 | 
            -
                     | 
| 128 | 
            -
             | 
| 129 | 
            -
                      if  | 
| 130 | 
            -
             | 
| 131 | 
            -
                         | 
| 132 | 
            -
             | 
| 133 | 
            -
             | 
| 127 | 
            +
                    scale_rotations = interval_sequence.inversions.map(&:intervals_semitones)
         | 
| 128 | 
            +
                    ChordQuality::CHORD_QUALITIES.reduce([]) do |memo1, (qname, qintervals)|
         | 
| 129 | 
            +
                      next memo1 if qintervals.size != size
         | 
| 130 | 
            +
                      memo1 + scale_rotations.each_with_index.reduce([]) do |memo2, (rot, index)|
         | 
| 131 | 
            +
                        if (rot & qintervals).size == size
         | 
| 132 | 
            +
                          memo2 + [ Chord.new(root_note: degree(index+1),
         | 
| 133 | 
            +
                                              quality: ChordQuality.new(name: qname)) ]
         | 
| 134 | 
            +
                        else
         | 
| 135 | 
            +
                          memo2
         | 
| 136 | 
            +
                        end
         | 
| 134 137 | 
             
                      end
         | 
| 135 138 | 
             
                    end
         | 
| 136 139 | 
             
                  end
         | 
    
        data/lib/coltrane/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: coltrane
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.0. | 
| 4 | 
            +
              version: 1.0.22
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Pedro Maciel
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2018-01- | 
| 11 | 
            +
            date: 2018-01-30 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: facets
         | 
| @@ -180,7 +180,6 @@ files: | |
| 180 180 | 
             
            - lib/coltrane/errors.rb
         | 
| 181 181 | 
             
            - lib/coltrane/interval.rb
         | 
| 182 182 | 
             
            - lib/coltrane/interval_sequence.rb
         | 
| 183 | 
            -
            - lib/coltrane/interval_set.rb
         | 
| 184 183 | 
             
            - lib/coltrane/mode.rb
         | 
| 185 184 | 
             
            - lib/coltrane/note.rb
         | 
| 186 185 | 
             
            - lib/coltrane/note_set.rb
         | 
| @@ -1,24 +0,0 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
            # frozen_string_literal: true
         | 
| 3 | 
            -
            # class IntervalSet
         | 
| 4 | 
            -
            #   def initialize(*intervals)
         | 
| 5 | 
            -
            #     @intervals = intervals
         | 
| 6 | 
            -
            #     @number_of_frets = 24
         | 
| 7 | 
            -
            #     sum = @intervals.reduce(:+)
         | 
| 8 | 
            -
            #     sum < 12 && @intervals << 12 - sum
         | 
| 9 | 
            -
            #   end
         | 
| 10 | 
            -
             | 
| 11 | 
            -
            #   def to_s
         | 
| 12 | 
            -
            #     @intervals.to_s
         | 
| 13 | 
            -
            #   end
         | 
| 14 | 
            -
             | 
| 15 | 
            -
            #   def to_frets(offset = 0)
         | 
| 16 | 
            -
            #     frets = [-offset]
         | 
| 17 | 
            -
            #     i = 0
         | 
| 18 | 
            -
            #     while frets.last < @number_of_frets
         | 
| 19 | 
            -
            #       frets << frets.last + @intervals[i % @intervals.length]
         | 
| 20 | 
            -
            #       i += 1
         | 
| 21 | 
            -
            #     end
         | 
| 22 | 
            -
            #     frets
         | 
| 23 | 
            -
            #   end
         | 
| 24 | 
            -
            # end
         |