timely 0.3.0 → 0.3.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.
- checksums.yaml +4 -4
- data/.rubocop.yml +8 -0
- data/.ruby-version +1 -0
- data/.travis.yml +6 -0
- data/CHANGELOG.md +6 -0
- data/lib/timely/version.rb +1 -1
- data/lib/timely/week_days.rb +43 -33
- data/timely.gemspec +1 -0
- metadata +19 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: e269e83cabcd6ebf62cc0e79c35dd7b4c91dc7da
         | 
| 4 | 
            +
              data.tar.gz: d4a795800ff6fdf86b2a5d7e3e479f64148172e4
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: c4d7a6dc25c00a7ae5db203a787eb1ebfdaa9768cb7283118182dec200621d4bb8660701d6f8a64d9186493237f785e4573f4b1caff234e226aef3653a1da86b
         | 
| 7 | 
            +
              data.tar.gz: 9831dec21982816e62f8b301c8ff2c49696c9df083c87c827ebc6b54f9a150e6e5217dd8c9c89616b8c5eca22fb7cde5da50407b2d9bb52bd54a45b527ec8380
         | 
    
        data/.rubocop.yml
    ADDED
    
    
    
        data/.ruby-version
    ADDED
    
    | @@ -0,0 +1 @@ | |
| 1 | 
            +
            2.4.4
         | 
    
        data/.travis.yml
    CHANGED
    
    
    
        data/CHANGELOG.md
    CHANGED
    
    
    
        data/lib/timely/version.rb
    CHANGED
    
    
    
        data/lib/timely/week_days.rb
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            module Timely
         | 
| 2 2 | 
             
              class WeekDays
         | 
| 3 | 
            -
                WEEKDAY_KEYS = [ | 
| 3 | 
            +
                WEEKDAY_KEYS = %i[sun mon tue wed thu fri sat]
         | 
| 4 4 |  | 
| 5 5 | 
             
                # Create a new Weekdays object
         | 
| 6 6 | 
             
                # weekdays can be in three formats
         | 
| @@ -13,20 +13,20 @@ module Timely | |
| 13 13 | 
             
                #   e.g. [1, 0, 1, 0, 0, 0, 0] is Sunday and Tuesday
         | 
| 14 14 | 
             
                def initialize(weekdays)
         | 
| 15 15 | 
             
                  @weekdays = {
         | 
| 16 | 
            -
                    : | 
| 17 | 
            -
                    : | 
| 18 | 
            -
                    : | 
| 19 | 
            -
                    : | 
| 20 | 
            -
                    : | 
| 21 | 
            -
                    : | 
| 22 | 
            -
                    : | 
| 16 | 
            +
                    sun: false,
         | 
| 17 | 
            +
                    mon: false,
         | 
| 18 | 
            +
                    tue: false,
         | 
| 19 | 
            +
                    wed: false,
         | 
| 20 | 
            +
                    thu: false,
         | 
| 21 | 
            +
                    fri: false,
         | 
| 22 | 
            +
                    sat: false
         | 
| 23 23 | 
             
                  }
         | 
| 24 24 |  | 
| 25 25 | 
             
                  case weekdays
         | 
| 26 | 
            -
                  when  | 
| 26 | 
            +
                  when Integer
         | 
| 27 27 | 
             
                    # 4 -> 0000100 (binary) -> "0010000" (reversed string) -> {:tue => true}
         | 
| 28 28 | 
             
                    weekdays.to_s(2).reverse.each_char.with_index do |char, index|
         | 
| 29 | 
            -
                      set_day(index, char ==  | 
| 29 | 
            +
                      set_day(index, char == "1")
         | 
| 30 30 | 
             
                    end
         | 
| 31 31 | 
             
                  when Hash
         | 
| 32 32 | 
             
                    weekdays.each_pair do |day, value|
         | 
| @@ -38,16 +38,17 @@ module Timely | |
| 38 38 | 
             
                    end
         | 
| 39 39 | 
             
                  when NilClass
         | 
| 40 40 | 
             
                    @weekdays = {
         | 
| 41 | 
            -
                      : | 
| 42 | 
            -
                      : | 
| 43 | 
            -
                      : | 
| 44 | 
            -
                      : | 
| 45 | 
            -
                      : | 
| 46 | 
            -
                      : | 
| 47 | 
            -
                      : | 
| 41 | 
            +
                      sun: true,
         | 
| 42 | 
            +
                      mon: true,
         | 
| 43 | 
            +
                      tue: true,
         | 
| 44 | 
            +
                      wed: true,
         | 
| 45 | 
            +
                      thu: true,
         | 
| 46 | 
            +
                      fri: true,
         | 
| 47 | 
            +
                      sat: true
         | 
| 48 48 | 
             
                    }
         | 
| 49 49 | 
             
                  else
         | 
| 50 | 
            -
                    raise ArgumentError, | 
| 50 | 
            +
                    raise ArgumentError,
         | 
| 51 | 
            +
                          "You must initialize with an Integer, Hash or Array"
         | 
| 51 52 | 
             
                  end
         | 
| 52 53 | 
             
                end
         | 
| 53 54 |  | 
| @@ -61,15 +62,11 @@ module Timely | |
| 61 62 | 
             
                end
         | 
| 62 63 |  | 
| 63 64 | 
             
                def set_day(day, set)
         | 
| 64 | 
            -
                  key =  | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 67 | 
            -
                    day.to_sym
         | 
| 68 | 
            -
                  else
         | 
| 69 | 
            -
                    day
         | 
| 65 | 
            +
                  key = day_to_index(day)
         | 
| 66 | 
            +
                  unless WEEKDAY_KEYS.include?(key)
         | 
| 67 | 
            +
                    raise ArgumentError, "Invalid week day index #{key}"
         | 
| 70 68 | 
             
                  end
         | 
| 71 | 
            -
                   | 
| 72 | 
            -
                  @weekdays[key] = [true, 'true', 1, '1'].include?(set)
         | 
| 69 | 
            +
                  @weekdays[key] = [true, "true", 1, "1"].include?(set)
         | 
| 73 70 | 
             
                end
         | 
| 74 71 |  | 
| 75 72 | 
             
                def applies_for_date?(date)
         | 
| @@ -80,33 +77,34 @@ module Timely | |
| 80 77 | 
             
                # Accepts either symbol or integer
         | 
| 81 78 | 
             
                # e.g. :sun or 0 = Sunday, :sat or 6 = Saturday
         | 
| 82 79 | 
             
                def has_day?(weekday)
         | 
| 83 | 
            -
                  weekday = WEEKDAY_KEYS[weekday] if weekday.is_a?( | 
| 80 | 
            +
                  weekday = WEEKDAY_KEYS[weekday] if weekday.is_a?(Integer)
         | 
| 84 81 | 
             
                  @weekdays[weekday]
         | 
| 85 82 | 
             
                end
         | 
| 86 83 |  | 
| 87 84 | 
             
                def number_of_occurances_in(range)
         | 
| 88 85 | 
             
                  range.inject(0) do |count, date|
         | 
| 89 | 
            -
                    applies_for_date?(date) ? count+1 : count
         | 
| 86 | 
            +
                    applies_for_date?(date) ? count + 1 : count
         | 
| 90 87 | 
             
                  end
         | 
| 91 88 | 
             
                end
         | 
| 92 89 |  | 
| 93 90 | 
             
                # Returns true if all days are selected
         | 
| 94 91 | 
             
                def all_days?
         | 
| 95 | 
            -
                  @weekdays.all?{| | 
| 92 | 
            +
                  @weekdays.all? { |_day, day_selected| day_selected }
         | 
| 96 93 | 
             
                end
         | 
| 97 94 |  | 
| 98 95 | 
             
                # Returns array of weekday selected
         | 
| 99 96 | 
             
                # e.g. [:sun, :sat]
         | 
| 100 97 | 
             
                def weekdays
         | 
| 101 | 
            -
                  selected = @weekdays.select{| | 
| 98 | 
            +
                  selected = @weekdays.select { |_day, day_selected| day_selected }
         | 
| 102 99 | 
             
                  # Ruby 1.8 returns an array for Hash#select and loses order
         | 
| 103 | 
            -
                   | 
| 100 | 
            +
                  return selected.keys if selected.is_a?(Hash)
         | 
| 101 | 
            +
                  selected.map(&:first).sort_by { |v| WEEKDAY_KEYS.index(v) }
         | 
| 104 102 | 
             
                end
         | 
| 105 103 |  | 
| 106 104 | 
             
                # Returns comma separated and capitalized in Sun-Sat order
         | 
| 107 105 | 
             
                # e.g. 'Mon, Tue, Wed' or 'Sat' or 'Sun, Sat'
         | 
| 108 106 | 
             
                def to_s
         | 
| 109 | 
            -
                  days = weekdays.map{|day| day.to_s.capitalize}
         | 
| 107 | 
            +
                  days = weekdays.map { |day| day.to_s.capitalize }
         | 
| 110 108 | 
             
                  last_day = days.pop
         | 
| 111 109 |  | 
| 112 110 | 
             
                  days.empty? ? last_day : days.join(", ") + ", and " + last_day
         | 
| @@ -123,6 +121,18 @@ module Timely | |
| 123 121 | 
             
                  int
         | 
| 124 122 | 
             
                end
         | 
| 125 123 |  | 
| 126 | 
            -
                 | 
| 124 | 
            +
                private
         | 
| 125 | 
            +
             | 
| 126 | 
            +
                def day_to_index(day)
         | 
| 127 | 
            +
                  if day.is_a?(Integer)
         | 
| 128 | 
            +
                    WEEKDAY_KEYS[day]
         | 
| 129 | 
            +
                  elsif day.is_a?(String)
         | 
| 130 | 
            +
                    day.to_sym
         | 
| 131 | 
            +
                  else
         | 
| 132 | 
            +
                    day
         | 
| 133 | 
            +
                  end
         | 
| 134 | 
            +
                end
         | 
| 135 | 
            +
             | 
| 136 | 
            +
                ALL_WEEKDAYS = WeekDays.new(%w[1 1 1 1 1 1 1])
         | 
| 127 137 | 
             
              end
         | 
| 128 138 | 
             
            end
         | 
    
        data/timely.gemspec
    CHANGED
    
    | @@ -26,6 +26,7 @@ Gem::Specification.new do |spec| | |
| 26 26 | 
             
              spec.add_development_dependency 'coverage-kit'
         | 
| 27 27 | 
             
              spec.add_development_dependency 'simplecov-rcov'
         | 
| 28 28 | 
             
              spec.add_development_dependency 'coveralls'
         | 
| 29 | 
            +
              spec.add_development_dependency 'rubocop'
         | 
| 29 30 | 
             
              spec.add_development_dependency 'sqlite3'
         | 
| 30 31 | 
             
              spec.add_development_dependency 'activesupport'
         | 
| 31 32 | 
             
              spec.add_development_dependency 'activerecord'
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: timely
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.3. | 
| 4 | 
            +
              version: 0.3.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Michael Noack
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2018-05-18 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         | 
| @@ -108,6 +108,20 @@ dependencies: | |
| 108 108 | 
             
                - - ">="
         | 
| 109 109 | 
             
                  - !ruby/object:Gem::Version
         | 
| 110 110 | 
             
                    version: '0'
         | 
| 111 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 112 | 
            +
              name: rubocop
         | 
| 113 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 114 | 
            +
                requirements:
         | 
| 115 | 
            +
                - - ">="
         | 
| 116 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 117 | 
            +
                    version: '0'
         | 
| 118 | 
            +
              type: :development
         | 
| 119 | 
            +
              prerelease: false
         | 
| 120 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 121 | 
            +
                requirements:
         | 
| 122 | 
            +
                - - ">="
         | 
| 123 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 124 | 
            +
                    version: '0'
         | 
| 111 125 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 112 126 | 
             
              name: sqlite3
         | 
| 113 127 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -201,6 +215,8 @@ extra_rdoc_files: [] | |
| 201 215 | 
             
            files:
         | 
| 202 216 | 
             
            - ".gitignore"
         | 
| 203 217 | 
             
            - ".rspec"
         | 
| 218 | 
            +
            - ".rubocop.yml"
         | 
| 219 | 
            +
            - ".ruby-version"
         | 
| 204 220 | 
             
            - ".travis.yml"
         | 
| 205 221 | 
             
            - CHANGELOG.md
         | 
| 206 222 | 
             
            - Gemfile
         | 
| @@ -280,7 +296,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 280 296 | 
             
                  version: '0'
         | 
| 281 297 | 
             
            requirements: []
         | 
| 282 298 | 
             
            rubyforge_project: 
         | 
| 283 | 
            -
            rubygems_version: 2. | 
| 299 | 
            +
            rubygems_version: 2.6.14.1
         | 
| 284 300 | 
             
            signing_key: 
         | 
| 285 301 | 
             
            specification_version: 4
         | 
| 286 302 | 
             
            summary: Set of time, date, weekday related methods.
         |