ice_cube_model 0.0.3 → 0.0.4
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 +9 -9
- data/README.md +0 -1
- data/ice_cube_model.gemspec +13 -13
- data/lib/ice_cube_model/base.rb +41 -6
- data/lib/ice_cube_model/version.rb +1 -1
- data/spec/lib/ice_cube_model/base_spec.rb +92 -3
- metadata +22 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: edf86a2a7d7d80588e3965e382facda1e36284f5
|
4
|
+
data.tar.gz: 567a5ff73291f7ef031072d47b95f0d1303fd096
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bbd4dc7514a93379baf57c39891eded3f3eb7f27d8b93faeaa998794117f86cc0d57b0d6566c0a5d2a8f557471e0c0062e13f57ef6c7036ce86a22c31c4b21c4
|
7
|
+
data.tar.gz: 290d0270530a2467df0c4c2ecafde88d3ed4763e818a62709f909afd551941ff1bcf376ca9a1cbe73a3a05b5b0fe13798b485453381ebc6db7121a15d3c66a27
|
data/Gemfile.lock
CHANGED
@@ -2,7 +2,7 @@ PATH
|
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
4
|
ice_cube_model (0.0.3)
|
5
|
-
ice_cube_cron (
|
5
|
+
ice_cube_cron (~> 0.0)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
@@ -20,16 +20,16 @@ GEM
|
|
20
20
|
diff-lcs (1.2.5)
|
21
21
|
i18n (0.7.0)
|
22
22
|
ice_cube (0.13.0)
|
23
|
-
ice_cube_cron (0.0.
|
24
|
-
activesupport (
|
25
|
-
ice_cube (
|
23
|
+
ice_cube_cron (0.0.4)
|
24
|
+
activesupport (~> 4)
|
25
|
+
ice_cube (~> 0.13)
|
26
26
|
json (1.8.3)
|
27
27
|
method_source (0.8.2)
|
28
28
|
minitest (5.8.2)
|
29
29
|
parser (2.2.3.0)
|
30
30
|
ast (>= 1.1, < 3.0)
|
31
31
|
powerpack (0.1.1)
|
32
|
-
pry (0.10.
|
32
|
+
pry (0.10.3)
|
33
33
|
coderay (~> 1.1.0)
|
34
34
|
method_source (~> 0.8.1)
|
35
35
|
slop (~> 3.4)
|
@@ -65,10 +65,10 @@ PLATFORMS
|
|
65
65
|
|
66
66
|
DEPENDENCIES
|
67
67
|
ice_cube_model!
|
68
|
-
pry
|
69
|
-
rake
|
70
|
-
rspec
|
71
|
-
rubocop
|
68
|
+
pry (~> 0)
|
69
|
+
rake (~> 10)
|
70
|
+
rspec (~> 3.3)
|
71
|
+
rubocop (~> 0.34)
|
72
72
|
|
73
73
|
BUNDLED WITH
|
74
74
|
1.10.6
|
data/README.md
CHANGED
@@ -115,7 +115,6 @@ end
|
|
115
115
|
|
116
116
|
## notes
|
117
117
|
- This gem is a work-in-progress.
|
118
|
-
- `occurrences_between` is the only method currently supported.
|
119
118
|
- Does not yet support all recurrence options. More coming.
|
120
119
|
- Supports inheritance but will not pick up dynamic changes in parent class parameter mappings.
|
121
120
|
|
data/ice_cube_model.gemspec
CHANGED
@@ -3,14 +3,14 @@ $LOAD_PATH.push File.expand_path('../lib', __FILE__)
|
|
3
3
|
require 'ice_cube_model/version'
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
|
-
s.name
|
7
|
-
s.version
|
8
|
-
s.authors
|
9
|
-
s.email
|
10
|
-
s.homepage
|
11
|
-
s.summary
|
12
|
-
s.description
|
13
|
-
|
6
|
+
s.name = 'ice_cube_model'
|
7
|
+
s.version = IceCubeModel::VERSION
|
8
|
+
s.authors = ['Matt Nichols']
|
9
|
+
s.email = ['matt@nichols.name']
|
10
|
+
s.homepage = 'https://github.com/mattnichols/ice_cube_model'
|
11
|
+
s.summary = 'Extend any class with ice_cube (calendar repeating events) capabilities.'
|
12
|
+
s.description = 'Add ice_cube methods to classes (e.g. active_record, active_model).'
|
13
|
+
s.license = 'MIT'
|
14
14
|
s.files = `git ls-files`.split("\n")
|
15
15
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
16
|
s.require_paths = ['lib']
|
@@ -18,13 +18,13 @@ Gem::Specification.new do |s|
|
|
18
18
|
##
|
19
19
|
# Dependencies
|
20
20
|
#
|
21
|
-
s.
|
21
|
+
s.add_runtime_dependency 'ice_cube_cron', '~> 0.0'
|
22
22
|
|
23
23
|
##
|
24
24
|
# Development Dependencies
|
25
25
|
#
|
26
|
-
s.add_development_dependency 'rake'
|
27
|
-
s.add_development_dependency 'pry'
|
28
|
-
s.add_development_dependency 'rspec'
|
29
|
-
s.add_development_dependency 'rubocop'
|
26
|
+
s.add_development_dependency 'rake', '~> 10'
|
27
|
+
s.add_development_dependency 'pry', '~> 0'
|
28
|
+
s.add_development_dependency 'rspec', '~> 3.3'
|
29
|
+
s.add_development_dependency 'rubocop', '~> 0.34'
|
30
30
|
end
|
data/lib/ice_cube_model/base.rb
CHANGED
@@ -1,22 +1,57 @@
|
|
1
1
|
module IceCubeModel
|
2
2
|
module Base
|
3
|
+
DELEGATED_METHODS = [
|
4
|
+
:occurrences,
|
5
|
+
:all_occurrences,
|
6
|
+
:all_occurrences_enumerator,
|
7
|
+
:next_occurrences,
|
8
|
+
:next_occurrence,
|
9
|
+
:previous_occurrences,
|
10
|
+
:previous_occurrence,
|
11
|
+
:remaining_occurrences,
|
12
|
+
:remaining_occurrences_enumerator,
|
13
|
+
:occurrences_between,
|
14
|
+
:occurs_between?,
|
15
|
+
:occurring_between?,
|
16
|
+
:occurs_on?,
|
17
|
+
:first,
|
18
|
+
:last
|
19
|
+
]
|
20
|
+
|
3
21
|
def self.included(base)
|
4
22
|
base.extend(::IceCubeModel::Base::ClassMethods)
|
5
23
|
end
|
6
24
|
|
7
|
-
def
|
8
|
-
|
9
|
-
schedule = ::IceCube::Schedule.from_cron(read_repeat_parameter(:repeat_start_date), params)
|
10
|
-
|
11
|
-
schedule.occurrences_between(::IceCubeModel::Util.sanitize_date_param(start), ::IceCubeModel::Util.sanitize_date_param(through))
|
25
|
+
def schedule
|
26
|
+
::IceCube::Schedule.from_cron(read_repeat_parameter(:repeat_start_date), read_repeat_params)
|
12
27
|
end
|
13
|
-
alias_method :occurrences_between, :events_between
|
14
28
|
|
15
29
|
def respond_to?(name, include_private = false)
|
30
|
+
## Does respond to delegated methods. method_missing will lazy define them as they are used.
|
31
|
+
return true if DELEGATED_METHODS.include?(name.to_sym)
|
16
32
|
return true if self.class.repeat_parameter_mappings.values.include?(name.to_sym)
|
17
33
|
super
|
18
34
|
end
|
19
35
|
|
36
|
+
# TODO: For backward compatibility. Remove before prod ready release.
|
37
|
+
delegate :occurrences_between, :to => :schedule
|
38
|
+
alias_method :events_between, :occurrences_between
|
39
|
+
|
40
|
+
##
|
41
|
+
# Implementing method_missing as a *lazy* delegator. Doing this to prevent overwriting
|
42
|
+
# target class' methods.
|
43
|
+
#
|
44
|
+
def method_missing(name, *args, &block)
|
45
|
+
if DELEGATED_METHODS.include?(name.to_sym)
|
46
|
+
self.class.send(:define_method, name.to_sym) do |*method_args|
|
47
|
+
schedule.send(name, *method_args, &block)
|
48
|
+
end
|
49
|
+
send(name, *args)
|
50
|
+
else
|
51
|
+
super
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
20
55
|
private
|
21
56
|
|
22
57
|
def read_repeat_parameter(param_name)
|
@@ -27,7 +27,9 @@ describe ::IceCubeModel do
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def respond_to?(name, _include_private = false)
|
30
|
-
@attributes.key?(name)
|
30
|
+
return true if @attributes.key?(name)
|
31
|
+
|
32
|
+
super
|
31
33
|
end
|
32
34
|
end
|
33
35
|
|
@@ -283,12 +285,12 @@ describe ::IceCubeModel do
|
|
283
285
|
end
|
284
286
|
|
285
287
|
it 'handles ::DateTime as input' do
|
286
|
-
expect(ice_cube_model.events_between(::
|
288
|
+
expect(ice_cube_model.events_between(::Date.new(2015, 7, 1), ::Date.new(2015, 7, 31))).to eq([::Date.new(2015, 7, 1)])
|
287
289
|
end
|
288
290
|
|
289
291
|
it 'handles integer (epoch) as input' do
|
290
292
|
ice_cube_model.repeat_start_date = 1_430_438_400 # Fri, 01 May 2015 00:00:00 GMT
|
291
|
-
expect(ice_cube_model.events_between(::
|
293
|
+
expect(ice_cube_model.events_between(::Date.new(2015, 7, 1), ::Date.new(2015, 7, 31))).to eq([::DateTime.new(2015, 7, 1)])
|
292
294
|
end
|
293
295
|
end
|
294
296
|
|
@@ -391,4 +393,91 @@ describe ::IceCubeModel do
|
|
391
393
|
end
|
392
394
|
end
|
393
395
|
end
|
396
|
+
|
397
|
+
describe 'delagated methods' do
|
398
|
+
let(:ice_cube_model) do
|
399
|
+
::IceCubeObj.new(
|
400
|
+
:repeat_start_date => ::Date.new(2015, 6, 1),
|
401
|
+
:repeat_day => 5
|
402
|
+
)
|
403
|
+
end
|
404
|
+
|
405
|
+
it '#occurrences' do
|
406
|
+
expect(ice_cube_model.occurrences(::Date.new(2015, 8, 1))).to eq([::Date.new(2015, 6, 5), ::Date.new(2015, 7, 5)])
|
407
|
+
end
|
408
|
+
|
409
|
+
it '#all_occurrences' do
|
410
|
+
ice_cube_model.repeat_until = ::Date.new(2015, 8, 1)
|
411
|
+
expect(ice_cube_model.all_occurrences).to eq([::Date.new(2015, 6, 5), ::Date.new(2015, 7, 5)])
|
412
|
+
end
|
413
|
+
|
414
|
+
it '#all_occurrences_enumerator' do
|
415
|
+
ice_cube_model.repeat_until = ::Date.new(2015, 8, 1)
|
416
|
+
expect(ice_cube_model.all_occurrences_enumerator.map { |occurrence| occurrence }).to eq([::Date.new(2015, 6, 5), ::Date.new(2015, 7, 5)])
|
417
|
+
end
|
418
|
+
|
419
|
+
it '#next_occurrences' do
|
420
|
+
expect(ice_cube_model.next_occurrences(2, ::Date.new(2015, 6, 1))).to eq([::Date.new(2015, 6, 5), ::Date.new(2015, 7, 5)])
|
421
|
+
end
|
422
|
+
|
423
|
+
it '#next_occurrence' do
|
424
|
+
expect(ice_cube_model.next_occurrence(::Date.new(2015, 6, 1))).to eq(::Date.new(2015, 6, 5))
|
425
|
+
end
|
426
|
+
|
427
|
+
it '#previous_occurrences' do
|
428
|
+
expect(ice_cube_model.previous_occurrences(2, ::Date.new(2015, 8, 1))).to eq([::Date.new(2015, 6, 5), ::Date.new(2015, 7, 5)])
|
429
|
+
end
|
430
|
+
|
431
|
+
it '#previous_occurrence' do
|
432
|
+
expect(ice_cube_model.previous_occurrence(::Date.new(2015, 8, 1))).to eq(::Date.new(2015, 7, 5))
|
433
|
+
end
|
434
|
+
|
435
|
+
it '#remaining_occurrences' do
|
436
|
+
ice_cube_model.repeat_until = ::Date.new(2015, 8, 1)
|
437
|
+
expect(ice_cube_model.remaining_occurrences(::Date.new(2015, 6, 1))).to eq([::Date.new(2015, 6, 5), ::Date.new(2015, 7, 5)])
|
438
|
+
end
|
439
|
+
|
440
|
+
it '#remaining_occurrences_enumerator' do
|
441
|
+
ice_cube_model.repeat_until = ::Date.new(2015, 8, 1)
|
442
|
+
expect(ice_cube_model.remaining_occurrences_enumerator(::Date.new(2015, 6, 1)).map { |occurrence| occurrence }).to eq([::Date.new(2015, 6, 5), ::Date.new(2015, 7, 5)])
|
443
|
+
end
|
444
|
+
|
445
|
+
it '#occurrences_between' do
|
446
|
+
expect(ice_cube_model.occurrences_between(::Date.new(2015, 6, 1), ::Date.new(2015, 8, 1))).to eq([::Date.new(2015, 6, 5), ::Date.new(2015, 7, 5)])
|
447
|
+
expect(ice_cube_model.events_between(::Date.new(2015, 6, 1), ::Date.new(2015, 8, 1))).to eq([::Date.new(2015, 6, 5), ::Date.new(2015, 7, 5)])
|
448
|
+
end
|
449
|
+
|
450
|
+
it '#occurs_between?' do
|
451
|
+
expect(ice_cube_model.occurs_between?(::Date.new(2015, 7, 1), ::Date.new(2015, 8, 1))).to be(true)
|
452
|
+
end
|
453
|
+
|
454
|
+
it '#occurring_between?' do
|
455
|
+
expect(ice_cube_model.occurring_between?(::Date.new(2015, 6, 1), ::Date.new(2015, 8, 1))).to be(true)
|
456
|
+
end
|
457
|
+
|
458
|
+
it '#occurs_on?' do
|
459
|
+
expect(ice_cube_model.occurs_on?(::Date.new(2015, 6, 5))).to be(true)
|
460
|
+
end
|
461
|
+
|
462
|
+
it '#occurring_at?' do
|
463
|
+
skip 'Time options not implemented yet'
|
464
|
+
end
|
465
|
+
|
466
|
+
it '#conflicts_with?' do
|
467
|
+
skip 'Time options not implemented yet'
|
468
|
+
end
|
469
|
+
|
470
|
+
it '#occurs_at?' do
|
471
|
+
skip 'Time options not implemented yet'
|
472
|
+
end
|
473
|
+
|
474
|
+
it '#first' do
|
475
|
+
expect(ice_cube_model.first(2)).to eq([::Date.new(2015, 6, 5), ::Date.new(2015, 7, 5)])
|
476
|
+
end
|
477
|
+
|
478
|
+
it '#last' do
|
479
|
+
ice_cube_model.repeat_until = ::Date.new(2015, 8, 1)
|
480
|
+
expect(ice_cube_model.last(2)).to eq([::Date.new(2015, 6, 5), ::Date.new(2015, 7, 5)])
|
481
|
+
end
|
482
|
+
end
|
394
483
|
end
|
metadata
CHANGED
@@ -1,85 +1,85 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ice_cube_model
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Nichols
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-10-
|
11
|
+
date: 2015-10-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ice_cube_cron
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.0
|
19
|
+
version: '0.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.0
|
26
|
+
version: '0.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '10'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '10'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: pry
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '3.3'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '3.3'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rubocop
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
75
|
+
version: '0.34'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
82
|
+
version: '0.34'
|
83
83
|
description: Add ice_cube methods to classes (e.g. active_record, active_model).
|
84
84
|
email:
|
85
85
|
- matt@nichols.name
|
@@ -102,7 +102,8 @@ files:
|
|
102
102
|
- spec/lib/ice_cube_model/util_spec.rb
|
103
103
|
- spec/spec_helper.rb
|
104
104
|
homepage: https://github.com/mattnichols/ice_cube_model
|
105
|
-
licenses:
|
105
|
+
licenses:
|
106
|
+
- MIT
|
106
107
|
metadata: {}
|
107
108
|
post_install_message:
|
108
109
|
rdoc_options: []
|