timeboss 0.2.4 → 1.0.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 +5 -5
- data/.github/workflows/ruby.yml +33 -0
- data/.replit +1 -1
- data/.travis.yml +0 -9
- data/README.md +20 -6
- data/bin/tbsh +2 -2
- data/lib/tasks/calendars.rake +2 -2
- data/lib/timeboss/calendar.rb +6 -0
- data/lib/timeboss/calendar/parser.rb +2 -1
- data/lib/timeboss/calendar/period.rb +82 -7
- data/lib/timeboss/calendar/support/month_basis.rb +2 -0
- data/lib/timeboss/calendar/support/unit.rb +4 -0
- data/lib/timeboss/calendars.rb +14 -7
- data/lib/timeboss/calendars/broadcast.rb +2 -0
- data/lib/timeboss/calendars/gregorian.rb +2 -0
- data/lib/timeboss/version.rb +1 -1
- data/spec/calendars/broadcast_spec.rb +3 -4
- data/spec/calendars/gregorian_spec.rb +3 -4
- data/spec/calendars_spec.rb +8 -6
- data/timeboss.gemspec +1 -0
- metadata +22 -7
- data/lib/timeboss/support/shellable.rb +0 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 847be3292a921e4222074f98d62271bfbea96b9b
|
4
|
+
data.tar.gz: 40866d6a468f3dddc282af7ef893637a8e323b9f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e06fb2e4b8d023d3725a2db5fb98a427cf4b705be7f34e5ca7a52a4c8e3aca9a142868d0f5e01529727c46fa86513daf8a27cdb20fabca5b783b4d74145691a1
|
7
|
+
data.tar.gz: ef5d7f72b7f26469cc5c34d3628faae0a75cdcc91b0d41c84cb2d81c9767abcf3729269a453fe352dbe69d09e4a719f24688d2495e735f17faf3bc0d4e5bb512
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# This workflow uses actions that are not certified by GitHub.
|
2
|
+
# They are provided by a third-party and are governed by
|
3
|
+
# separate terms of service, privacy policy, and support
|
4
|
+
# documentation.
|
5
|
+
# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
|
6
|
+
# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
|
7
|
+
|
8
|
+
name: Ruby
|
9
|
+
|
10
|
+
on:
|
11
|
+
push:
|
12
|
+
branches: [ master ]
|
13
|
+
pull_request:
|
14
|
+
branches: [ master ]
|
15
|
+
|
16
|
+
jobs:
|
17
|
+
test:
|
18
|
+
|
19
|
+
runs-on: ubuntu-latest
|
20
|
+
|
21
|
+
steps:
|
22
|
+
- uses: actions/checkout@v2
|
23
|
+
- name: Set up Ruby
|
24
|
+
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
|
25
|
+
# change this to (see https://github.com/ruby/setup-ruby#versioning):
|
26
|
+
# uses: ruby/setup-ruby@v1
|
27
|
+
uses: ruby/setup-ruby@ec106b438a1ff6ff109590de34ddc62c540232e0
|
28
|
+
with:
|
29
|
+
ruby-version: 2.6
|
30
|
+
- name: Install dependencies
|
31
|
+
run: bundle install
|
32
|
+
- name: Run tests
|
33
|
+
run: bundle exec rspec
|
data/.replit
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
language = "ruby"
|
2
|
-
run = "rake timeboss:calendars:broadcast:repl"
|
2
|
+
run = "bundle exec rake timeboss:calendars:broadcast:repl"
|
data/.travis.yml
CHANGED
@@ -5,12 +5,3 @@ rvm:
|
|
5
5
|
- 2.6
|
6
6
|
script:
|
7
7
|
- bundle exec rspec
|
8
|
-
deploy:
|
9
|
-
provider: rubygems
|
10
|
-
api_key:
|
11
|
-
secure: jUWa2Jx0HRVv7Dl0zYPTskHQ+RJGy2TUcBWOjyFbBUbeDKiRh8J/NnbMuCOvmL94htSaFk5lcs6k74Itu6jW12+KyT98OAnOardFPFuI0cHHhIMEhF6ms8EhyOCZ0vvR9zav11gfNzyF716qO09DQSDuoKWWNdhrYj8a5paLdbHuRqQiw3YUmnjVQ/v9SPYaZ7ziXC4X4tBxQhK2ujNsNfztSVrpYb6pnsXnt+hFQOnskzi0+er4854iymykeyNVgB71KgivrE3T55ZTXPPglshsZQE7M7FlYA5L3bwzR7SlA202yFYHB3hUN3obwO3BjO4OiAdKQnSosBHaXI13ZvCOz02AfEJhwoxkBXw1/2CvSQ12QQPVgqkpxWY03h+URk+gGHCV+JaqZPCV9excmVWg/IOQou0IJ6h84VFViyVc2aFVN2AIdoaG3NsppbV3j4VuLG6J2VVpNmUzN3pGgi5YSjVq9Hp+huXZFfWpnUgAxc680hKgcFajE3JNANG+NbNEeoDmITvZyV5kvJklgUKPsl2wNk+wY/GGrSBgNOVlyXqTWLZb/8Z/cSrN5DEc6D5BIS/SG95wlCRT8jUqbyEPjT+H77TH2ySfwWZzblLqbIxaLiZr3hX16oMdUx7Cya5LKLFgQBpU6cFUxvZX7SqHwjk1vnuG592Kxd9GkX4=
|
12
|
-
gem: timeboss
|
13
|
-
on:
|
14
|
-
tags: true
|
15
|
-
repo: kevinstuffandthings/timeboss
|
16
|
-
skip_cleanup: 'true'
|
data/README.md
CHANGED
@@ -40,7 +40,7 @@ You can ask simple questions of the calendar:
|
|
40
40
|
|
41
41
|
```ruby
|
42
42
|
period = calendar.parse('2019Q4') # or '2018', or '2019-12-21', or '2020W32', or '2020M3W2'
|
43
|
-
# => #<TimeBoss::Calendar::Quarter
|
43
|
+
# => #<TimeBoss::Calendar::Quarter start_date=2019-09-30, end_date=2019-12-29>
|
44
44
|
period.to_s
|
45
45
|
# => "2019Q4: 2019-09-30 thru 2019-12-29"
|
46
46
|
period.next.start_date.to_s # try previous, too!
|
@@ -117,6 +117,9 @@ week = calendar.parse('2014W29').this_week
|
|
117
117
|
|
118
118
|
calendar.this_week.next_year.to_s # run 2020W29
|
119
119
|
# => "2021W29: 2021-07-12 thru 2021-07-18"
|
120
|
+
|
121
|
+
calendar.week(2016, this_week.in_year) # run 2020-07-22
|
122
|
+
# => #<TimeBoss::Calendar::Week start_date=2016-07-18, end_date=2016-07-24>
|
120
123
|
```
|
121
124
|
|
122
125
|
Complicated range expressions can be parsed using the `..` range operator, or evaluated with `thru`:
|
@@ -136,7 +139,7 @@ period = calendar.parse('2020W3..2020Q1')
|
|
136
139
|
The examples above are just samples. Try different periods, operators, etc. All of the non-week-based operations will work similarly on the `TimeBoss::Calendars::Gregorian` calendar.
|
137
140
|
|
138
141
|
### REPL
|
139
|
-
To open a REPL for the broadcast calendar, use the `tbsh` executable, or the `timeboss:calendars:broadcast:repl` rake task.
|
142
|
+
To open a [REPL](https://repl.it/github/kevinstuffandthings/timeboss) locally for the broadcast calendar, use the `tbsh` executable, or the `timeboss:calendars:broadcast:repl` rake task.
|
140
143
|
|
141
144
|
For the Gregorian calendar (or any other implemented calendars), supply the name on the command line.
|
142
145
|
- `tbsh gregorian`
|
@@ -147,13 +150,19 @@ You will find yourself in the context of an instantiated `TimeBoss::Calendar` ob
|
|
147
150
|
```bash
|
148
151
|
$ tbsh
|
149
152
|
2.4.1 :001 > next_quarter
|
150
|
-
=> #<TimeBoss::Calendar::Quarter
|
153
|
+
=> #<TimeBoss::Calendar::Quarter start_date=2020-09-28, end_date=2020-12-27>
|
151
154
|
2.4.1 :002 > last_year
|
152
|
-
=> #<TimeBoss::Calendar::Year
|
155
|
+
=> #<TimeBoss::Calendar::Year start_date=2018-12-31, end_date=2019-12-29>
|
153
156
|
2.4.1 :003 > parse('this_quarter .. this_quarter+4').months.map(&:name)
|
154
157
|
=> ["2020M7", "2020M8", "2020M9", "2020M10", "2020M11", "2020M12", "2021M1", "2021M2", "2021M3", "2021M4", "2021M5", "2021M6", "2021M7", "2021M8", "2021M9"]
|
155
158
|
```
|
156
159
|
|
160
|
+
If you want to try things out locally without installing the gem or updating your ruby environment, you can use [Docker](https://docker.com):
|
161
|
+
|
162
|
+
```bash
|
163
|
+
$ docker run --rm -it ruby:2.6.6-slim /bin/bash -c "gem install timeboss >/dev/null && tbsh"
|
164
|
+
```
|
165
|
+
|
157
166
|
_Having trouble with the REPL? If you are using the examples from the [Usage](#Usage) section, keep in mind that the REPL is already in the context of the calendar -- so you don't need to specify the receiver!_
|
158
167
|
|
159
168
|
## Creating new calendars
|
@@ -221,9 +230,14 @@ With the new calendar implemented, it can be accessed in one of 2 ways:
|
|
221
230
|
|
222
231
|
```ruby
|
223
232
|
require 'timeboss/calendars'
|
233
|
+
TimeBoss::Calendars.register(:august_fiscal, MyCalendars::AugustFiscal)
|
234
|
+
|
235
|
+
# You'll get a cached instance of your calendar here.
|
236
|
+
# Handy when switching back and forth between different calendar implementations.
|
224
237
|
calendar = TimeBoss::Calendars[:august_fiscal]
|
225
238
|
calendar.this_year
|
226
239
|
```
|
227
240
|
|
228
|
-
|
229
|
-
|
241
|
+
# Problems?
|
242
|
+
Please submit an [issue](https://github.com/kevinstuffandthings/timeboss/issues).
|
243
|
+
We'll figure out how to get you up and running with TimeBoss as smoothly as possible.
|
data/bin/tbsh
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
require 'timeboss/calendars'
|
4
|
-
require '
|
4
|
+
require 'shellable'
|
5
5
|
|
6
6
|
calendar = if ARGV.length == 1
|
7
7
|
TimeBoss::Calendars[ARGV.first]
|
@@ -12,4 +12,4 @@ calendar = if ARGV.length == 1
|
|
12
12
|
abort "Unknown calendar" if calendar.nil?
|
13
13
|
|
14
14
|
puts "Active calendar: #{calendar.title}"
|
15
|
-
|
15
|
+
Shellable.open(calendar)
|
data/lib/tasks/calendars.rake
CHANGED
@@ -11,8 +11,8 @@ namespace :timeboss do
|
|
11
11
|
|
12
12
|
desc "Open a REPL with the #{entry.name} calendar"
|
13
13
|
task repl: ['timeboss:init'] do
|
14
|
-
require '
|
15
|
-
|
14
|
+
require 'shellable'
|
15
|
+
Shellable.open(entry.calendar)
|
16
16
|
end
|
17
17
|
|
18
18
|
task shell: ["timeboss:calendars:#{entry.name}:repl"]
|
data/lib/timeboss/calendar.rb
CHANGED
@@ -41,6 +41,12 @@ module TimeBoss
|
|
41
41
|
true
|
42
42
|
end
|
43
43
|
|
44
|
+
def self.register!
|
45
|
+
return unless TimeBoss::Calendars.method_defined?(:register)
|
46
|
+
TimeBoss::Calendars.register(self.name.to_s.demodulize.underscore, self)
|
47
|
+
end
|
48
|
+
private_class_method :register!
|
49
|
+
|
44
50
|
protected
|
45
51
|
|
46
52
|
attr_reader :basis
|
@@ -11,7 +11,8 @@ module TimeBoss
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def parse(identifier = nil)
|
14
|
-
return
|
14
|
+
return nil unless (identifier || '').strip.length > 0
|
15
|
+
return parse_identifier(identifier) unless identifier&.include?(RANGE_DELIMITER)
|
15
16
|
bases = identifier.split(RANGE_DELIMITER).map { |i| parse_identifier(i.strip) } unless identifier.nil?
|
16
17
|
bases ||= [parse_identifier(nil)]
|
17
18
|
Period.new(calendar, *bases)
|
@@ -34,31 +34,106 @@ module TimeBoss
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
+
#
|
38
|
+
# i hate this
|
39
|
+
#
|
40
|
+
|
41
|
+
### Days
|
42
|
+
|
43
|
+
# @!method days
|
44
|
+
# Get a list of days that fall within this period.
|
45
|
+
# @return [Array<Calendar::Day>]
|
46
|
+
|
47
|
+
# @!method day(index = nil)
|
48
|
+
# Get the day this period represents.
|
49
|
+
# Returns nil if no single day can be identified.
|
50
|
+
# @return [Array<Calendar::Day>, nil]
|
51
|
+
|
52
|
+
### Weeks
|
53
|
+
|
54
|
+
# @!method weeks
|
55
|
+
# Get a list of weeks that fall within this period.
|
56
|
+
# @return [Array<Calendar::Week>]
|
57
|
+
|
58
|
+
# @!method week(index = nil)
|
59
|
+
# Get the week this period represents.
|
60
|
+
# Returns nil if no single week can be identified.
|
61
|
+
# @return [Array<Calendar::Week>, nil]
|
62
|
+
|
63
|
+
### Months
|
64
|
+
|
65
|
+
# @!method months
|
66
|
+
# Get a list of months that fall within this period.
|
67
|
+
# @return [Array<Calendar::Month>]
|
68
|
+
|
69
|
+
# @!method month(index = nil)
|
70
|
+
# Get the month this period represents.
|
71
|
+
# Returns nil if no single month can be identified.
|
72
|
+
# @return [Array<Calendar::Month>, nil]
|
73
|
+
|
74
|
+
### Quarters
|
75
|
+
|
76
|
+
# @!method quarters
|
77
|
+
# Get a list of quarters that fall within this period.
|
78
|
+
# @return [Array<Calendar::Quarter>]
|
79
|
+
|
80
|
+
# @!method quarter(index = nil)
|
81
|
+
# Get the quarter this period represents.
|
82
|
+
# Returns nil if no single quarter can be identified.
|
83
|
+
# @return [Array<Calendar::Quarter>, nil]
|
84
|
+
|
85
|
+
### Halves
|
86
|
+
|
87
|
+
# @!method halves
|
88
|
+
# Get a list of halves that fall within this period.
|
89
|
+
# @return [Array<Calendar::Half>]
|
90
|
+
|
91
|
+
# @!method half(index = nil)
|
92
|
+
# Get the half this period represents.
|
93
|
+
# Returns nil if no single half can be identified.
|
94
|
+
# @return [Array<Calendar::Half>, nil]
|
95
|
+
|
96
|
+
### Years
|
97
|
+
|
98
|
+
# @!method years
|
99
|
+
# Get a list of years that fall within this period.
|
100
|
+
# @return [Array<Calendar::Year>]
|
101
|
+
|
102
|
+
# @!method year(index = nil)
|
103
|
+
# Get the year this period represents.
|
104
|
+
# Returns nil if no single year can be identified.
|
105
|
+
# @return [Array<Calendar::Year>, nil]
|
106
|
+
|
107
|
+
# Does this period cover the current date?
|
108
|
+
# @return [Boolean]
|
109
|
+
def current?
|
110
|
+
to_range.include?(Date.today)
|
111
|
+
end
|
112
|
+
|
37
113
|
%w[day week month quarter half year].each do |size|
|
38
114
|
define_method(size.pluralize) do
|
39
115
|
entry = calendar.send("#{size}_for", self.begin.start_date)
|
40
116
|
build_entries entry
|
41
117
|
end
|
42
118
|
|
43
|
-
define_method(size) do
|
119
|
+
define_method(size) do |index = nil|
|
44
120
|
entries = send(size.pluralize)
|
121
|
+
return entries[index - 1] unless index.nil?
|
45
122
|
return nil unless entries.length == 1
|
46
123
|
entries.first
|
47
124
|
end
|
48
125
|
end
|
49
126
|
|
50
|
-
# Does this period cover the current date?
|
51
|
-
# @return [Boolean]
|
52
|
-
def current?
|
53
|
-
to_range.include?(Date.today)
|
54
|
-
end
|
55
|
-
|
56
127
|
# Express this period as a date range.
|
57
128
|
# @return [Range<Date, Date>]
|
58
129
|
def to_range
|
59
130
|
@_to_range ||= start_date .. end_date
|
60
131
|
end
|
61
132
|
|
133
|
+
def inspect
|
134
|
+
"#<#{self.class.name}[#{self.begin.inspect}..#{self.end.inspect}] start_date=#{start_date}, end_date=#{end_date}>"
|
135
|
+
end
|
136
|
+
|
62
137
|
private
|
63
138
|
|
64
139
|
attr_reader :calendar
|
@@ -2,6 +2,8 @@ module TimeBoss
|
|
2
2
|
class Calendar
|
3
3
|
module Support
|
4
4
|
# @abstract
|
5
|
+
# A MonthBasis must define a `#start_date` and `#end_date` method.
|
6
|
+
# These methods should be calculated based on the incoming `#year` and `#month` values.
|
5
7
|
class MonthBasis
|
6
8
|
attr_reader :year, :month
|
7
9
|
|
data/lib/timeboss/calendars.rb
CHANGED
@@ -1,28 +1,33 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require 'active_support/core_ext/class/subclasses'
|
3
2
|
require_relative 'calendar'
|
4
3
|
|
5
|
-
Dir[File.expand_path('../calendars/*.rb', __FILE__)].each { |f| require f }
|
6
|
-
|
7
4
|
module TimeBoss
|
8
5
|
module Calendars
|
9
6
|
extend self
|
10
7
|
extend Enumerable
|
11
8
|
delegate :each, :length, to: :all
|
12
9
|
|
10
|
+
# Register a new calendar
|
11
|
+
# @return [Entry]
|
12
|
+
def register(name, klass)
|
13
|
+
Entry.new(name.to_sym, klass).tap do |entry|
|
14
|
+
(@entries ||= {})[name.to_sym] = entry
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
13
18
|
# Retrieve a list of all registered calendars.
|
14
19
|
# @return [Array<Entry>]
|
15
20
|
def all
|
16
|
-
|
17
|
-
|
18
|
-
end
|
21
|
+
return if @entries.nil?
|
22
|
+
@entries.values.sort_by { |e| e.name.to_s }
|
19
23
|
end
|
20
24
|
|
21
25
|
# Retrieve an instance of the specified named calendar.
|
22
26
|
# @param name [String, Symbol] the name of the calendar to retrieve.
|
23
27
|
# @return [Calendar]
|
24
28
|
def [](name)
|
25
|
-
|
29
|
+
return if @entries.nil?
|
30
|
+
@entries[name&.to_sym]&.calendar
|
26
31
|
end
|
27
32
|
|
28
33
|
private
|
@@ -44,3 +49,5 @@ module TimeBoss
|
|
44
49
|
end
|
45
50
|
end
|
46
51
|
end
|
52
|
+
|
53
|
+
Dir[File.expand_path('../calendars/*.rb', __FILE__)].each { |f| require f }
|
data/lib/timeboss/version.rb
CHANGED
@@ -493,10 +493,9 @@ module TimeBoss
|
|
493
493
|
expect(date.end_date).to eq Date.parse('2017-04-08')
|
494
494
|
end
|
495
495
|
|
496
|
-
it 'gives you
|
497
|
-
|
498
|
-
expect(subject.parse(
|
499
|
-
expect(subject.parse('')).to eq year
|
496
|
+
it 'gives you nothing if you give it nothing' do
|
497
|
+
expect(subject.parse(nil)).to be nil
|
498
|
+
expect(subject.parse('')).to be nil
|
500
499
|
end
|
501
500
|
end
|
502
501
|
|
@@ -475,10 +475,9 @@ module TimeBoss
|
|
475
475
|
expect(date.end_date).to eq Date.parse('2017-04-08')
|
476
476
|
end
|
477
477
|
|
478
|
-
it 'gives you
|
479
|
-
|
480
|
-
expect(subject.parse(
|
481
|
-
expect(subject.parse('')).to eq year
|
478
|
+
it 'gives you nothing if you give it nothing' do
|
479
|
+
expect(subject.parse(nil)).to be nil
|
480
|
+
expect(subject.parse('')).to be nil
|
482
481
|
end
|
483
482
|
end
|
484
483
|
|
data/spec/calendars_spec.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
module TimeBoss
|
2
2
|
describe Calendars do
|
3
|
-
class
|
3
|
+
class MyCal < TimeBoss::Calendar
|
4
4
|
def initialize
|
5
5
|
super(basis: nil)
|
6
6
|
end
|
7
7
|
end
|
8
8
|
|
9
|
+
TimeBoss::Calendars.register(:my_amazing_calendar, MyCal)
|
10
|
+
|
9
11
|
describe '#all' do
|
10
12
|
let(:all) { described_class.all }
|
11
13
|
|
@@ -17,7 +19,7 @@ module TimeBoss
|
|
17
19
|
|
18
20
|
context 'enumerability' do
|
19
21
|
it 'can get a list of names' do
|
20
|
-
expect(described_class.map(&:name)).to include(:broadcast, :
|
22
|
+
expect(described_class.map(&:name)).to include(:broadcast, :my_amazing_calendar)
|
21
23
|
end
|
22
24
|
end
|
23
25
|
end
|
@@ -34,10 +36,10 @@ module TimeBoss
|
|
34
36
|
end
|
35
37
|
|
36
38
|
it 'can return a new calendar' do
|
37
|
-
c1 = described_class[:
|
38
|
-
expect(c1).to be_instance_of
|
39
|
-
expect(c1.name).to eq '
|
40
|
-
expect(c1.title).to eq 'My
|
39
|
+
c1 = described_class[:my_amazing_calendar]
|
40
|
+
expect(c1).to be_instance_of MyCal
|
41
|
+
expect(c1.name).to eq 'my_cal'
|
42
|
+
expect(c1.title).to eq 'My Cal'
|
41
43
|
end
|
42
44
|
|
43
45
|
it 'can graceully give you nothing' do
|
data/timeboss.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: timeboss
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kevin McDonald
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-08-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: shellable
|
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: yard
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -132,6 +146,7 @@ extra_rdoc_files: []
|
|
132
146
|
files:
|
133
147
|
- ".github/ISSUE_TEMPLATE/bug_report.md"
|
134
148
|
- ".github/ISSUE_TEMPLATE/feature_request.md"
|
149
|
+
- ".github/workflows/ruby.yml"
|
135
150
|
- ".gitignore"
|
136
151
|
- ".replit"
|
137
152
|
- ".rspec"
|
@@ -168,7 +183,6 @@ files:
|
|
168
183
|
- lib/timeboss/calendars.rb
|
169
184
|
- lib/timeboss/calendars/broadcast.rb
|
170
185
|
- lib/timeboss/calendars/gregorian.rb
|
171
|
-
- lib/timeboss/support/shellable.rb
|
172
186
|
- lib/timeboss/version.rb
|
173
187
|
- spec/calendar/day_spec.rb
|
174
188
|
- spec/calendar/quarter_spec.rb
|
@@ -184,7 +198,7 @@ homepage: https://github.com/kevinstuffandthings/timeboss
|
|
184
198
|
licenses:
|
185
199
|
- MIT
|
186
200
|
metadata: {}
|
187
|
-
post_install_message:
|
201
|
+
post_install_message:
|
188
202
|
rdoc_options: []
|
189
203
|
require_paths:
|
190
204
|
- lib
|
@@ -199,8 +213,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
199
213
|
- !ruby/object:Gem::Version
|
200
214
|
version: '0'
|
201
215
|
requirements: []
|
202
|
-
|
203
|
-
|
216
|
+
rubyforge_project:
|
217
|
+
rubygems_version: 2.6.14
|
218
|
+
signing_key:
|
204
219
|
specification_version: 4
|
205
220
|
summary: Broadcast Calendar navigation in Ruby made simple
|
206
221
|
test_files:
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module TimeBoss
|
2
|
-
module Support
|
3
|
-
module Shellable
|
4
|
-
def self.open(context)
|
5
|
-
context.extend(self).open_shell
|
6
|
-
end
|
7
|
-
|
8
|
-
def open_shell
|
9
|
-
require 'irb'
|
10
|
-
IRB.setup nil
|
11
|
-
IRB.conf[:MAIN_CONTEXT] = IRB::Irb.new.context
|
12
|
-
require 'irb/ext/multi-irb'
|
13
|
-
IRB.irb nil, self
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|