time_array 0.5.1 → 0.5.7.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ad5a748553784421e97b4911badf2b763d310f51
4
- data.tar.gz: 2d48f7f257bcb85d1f2bd46aaa6eb48a2dbbb572
3
+ metadata.gz: d5965e94e2612aaf9f33334ec98289aea593c762
4
+ data.tar.gz: 679f503a720a0fb2e5bce7d8246e4de9e8476539
5
5
  SHA512:
6
- metadata.gz: ca3b5ea83272254b1797bb1b7214e0a306ed433ba41a81c700a39f4c922ea69b361c38d0699d61cb16ef42a3c5d0a90ad3361cfaf3165b800798d3bc0ddbddc5
7
- data.tar.gz: fd69fb50dbd4309ad9d3c825368e4d35e103ea7d82c78ace777b4e2188528266d9498d59fc04707898413d3f0cc75f36273bcea4f84cef9c4e77652529fe1e0e
6
+ metadata.gz: 3944a04e10b519709ebaae2d6c216c06a51e3b41a08879e93409d201414ff97c0bb395cf163c3fe6ad6528e54f2ff6e8b2f6027c7fd5694e4e8e6314ba83855a
7
+ data.tar.gz: aaf432f844f63690dae1e57d66084d42363f0525114500532d0f5bc67c158f26c317f028bba6721d61e0eed0d60ccf8882bbaacb3722da4e901875b9878a7bc7
@@ -0,0 +1,79 @@
1
+ module TimeArray
2
+
3
+
4
+ class CompactorTime
5
+ attr_reader :time
6
+ def initialize(t)
7
+ @time = t
8
+ # @time = Time.new(t.year, t.month, t.day, t.hour, 0, 0)
9
+ end
10
+
11
+ def change(step=:hour)
12
+ nxt = @time+1.send(step)
13
+ [:year, :month, :day, :hour].each do |st|
14
+ return st if nxt.send(st)!=@time.send(st)
15
+ end
16
+ end
17
+
18
+ def increment(step=:hour)
19
+ @time+1.send(step)
20
+ end
21
+
22
+ def increment!(step=:hour)
23
+ @time = increment(step)
24
+ end
25
+ end
26
+
27
+
28
+ class GreatestUnit
29
+ H = {eternity: 5, year: 4, month: 3, day: 2, hour: 1}
30
+ attr_reader :c
31
+
32
+ def initialize(initial_interval=:eternity)
33
+ @c = initial_interval
34
+ end
35
+
36
+ def set(interval)
37
+ @c = interval if H[interval]<H[@c]
38
+ end
39
+
40
+ def smallest
41
+ H.keys.last
42
+ end
43
+ end
44
+
45
+
46
+ class Compact
47
+ attr_reader :v, :unit
48
+ def initialize(v, unit)
49
+ @v = v
50
+ @unit = unit
51
+ end
52
+ alias :values :v
53
+ alias :array :v
54
+
55
+ end
56
+
57
+ class Unit
58
+ ETERNITY = 4
59
+ YEAR = 3
60
+ MONTH = 2
61
+ DAY = 1
62
+ HOUR = 0
63
+
64
+ def self.name(num)
65
+ case num
66
+ when ETERNITY
67
+ :eternity
68
+ when YEAR
69
+ :year
70
+ when MONTH
71
+ :month
72
+ when DAY
73
+ :day
74
+ else
75
+ :hour
76
+ end
77
+ end
78
+ end
79
+ end
@@ -6,4 +6,9 @@ module TimeArray
6
6
  class NilVectorError < RuntimeError
7
7
 
8
8
  end
9
+
10
+
11
+ class DateTimeOutRangeError < RuntimeError
12
+
13
+ end
9
14
  end
@@ -8,8 +8,20 @@ module TimeArray
8
8
  class TimeArray
9
9
  attr_reader :start_time, :v, :unit
10
10
 
11
+ # Used by each method
12
+ class TimeAndValue
13
+ attr_reader :time, :value
14
+ def initialize(time, value)
15
+ @time = time
16
+ @value = value
17
+ end
18
+
19
+ alias_method :datetime, :time
20
+ alias_method :v, :value
21
+ end
22
+
11
23
  def initialize(start_time, values=Vector.new, options={})
12
- manage_options(options)
24
+ manage_options options
13
25
  set_start_time start_time
14
26
  set_values values
15
27
  end
@@ -27,10 +39,9 @@ module TimeArray
27
39
  TimeArray.new(@start_time, (@v.clone rescue Vector.new), zone: Time.zone.name)
28
40
  end
29
41
 
30
- # Set all vector values to a new value
42
+ # Set array values to the given new value
31
43
  def all_to(new_value)
32
44
  @v = Vector.new(@v.size, new_value)
33
- # @v.map!{|e| e=new_value}
34
45
  self
35
46
  end
36
47
 
@@ -199,6 +210,153 @@ module TimeArray
199
210
  h
200
211
  end
201
212
 
213
+
214
+ # Will return a Compact object, a compacted version of values
215
+ # compact.gu gives the greatest_unit, compact.v gives the values array
216
+ def compact
217
+ gu = greatest_unit
218
+ puts "gu: #{gu.inspect}"
219
+ return Compact.new(@v, gu) if gu==:hour
220
+ i, st, v = 0, @start_time, []
221
+ while i<@v.size
222
+ v << @v[i]
223
+ next_st = st+1.send(gu)
224
+ h = (next_st-st)/3600
225
+ i = i+h.to_i
226
+ st = next_st
227
+ end
228
+ Compact.new(v, gu)
229
+ end
230
+
231
+
232
+ # Find the greatest unit time.
233
+ # If the values are contant along the month, the
234
+ # greatest unit is :month
235
+ def greatest_unit
236
+ v = @v.first
237
+ unit = Unit::YEAR # Unit::ETERNITY
238
+ each_with_time do |el|
239
+
240
+ # el.time
241
+ # el.value
242
+ if v!=el.value
243
+ if el.time.year_changed? and unit>Unit::YEAR
244
+ unit = Unit::YEAR
245
+ else
246
+ if el.time.month_changed? and unit>Unit::MONTH
247
+ unit = Unit::MONTH
248
+ else
249
+ if el.time.day_changed? and unit>Unit::DAY
250
+ unit = Unit::DAY
251
+ else
252
+ unit = Unit::HOUR
253
+ break
254
+ end
255
+ end
256
+ end
257
+ end
258
+ v = el.value
259
+ end
260
+ return Unit.name(unit)
261
+ end
262
+
263
+
264
+
265
+ def if_zero_then(other_array)
266
+ return self if other_array.nil?
267
+ raise NilVectorError if @v.nil? || (other_array.is_a?(TimeArray) && other_array.v.nil?)
268
+
269
+ c = self.clone
270
+ if other_array.is_a? Numeric
271
+ default_value = other_array
272
+ else
273
+ c.align_with(other_array)
274
+ end
275
+
276
+ c.size.times do |i|
277
+ c.set_value(i, default_value || other_array.value(i) || 0.0) if c.value(i).zero?
278
+ end
279
+ c
280
+ end
281
+ alias_method :if_zero, :if_zero_then
282
+
283
+
284
+ def month_sum
285
+ h = {}
286
+ @v.each_with_index do |value, i|
287
+ time = @start_time + i.hours
288
+ h[time.month] ||= 0.0
289
+ h[time.month] += value
290
+ end
291
+ c = self.clone
292
+ c.size.times do |i|
293
+ time = @start_time + i.hours
294
+ c.set_value(i, h[time.month])
295
+ end
296
+ c
297
+ end
298
+
299
+ # get the count of month hours
300
+ def month_count
301
+ h = {}
302
+ @v.size.times do |i|
303
+ time = @start_time + i.hours
304
+ h[time.month] ||= 0.0
305
+ h[time.month] += 1
306
+ end
307
+
308
+ # @v.each_with_index do |value, i|
309
+ # time = @start_time + i.hours
310
+ # h[time.month] ||= 0.0
311
+ # h[time.month] += 1
312
+ # end
313
+
314
+ c = self.clone
315
+ c.size.times do |i|
316
+ time = @start_time + i.hours
317
+ c.set_value(i, h[time.month])
318
+ end
319
+ c
320
+ end
321
+
322
+ # execute the block (likely a calculation) on each vector element.
323
+ # and return a new time_array obj
324
+ def execute(&block)
325
+ v = @v.map &block
326
+ TimeArray.new(@start_time, v, zone: Time.zone.name)
327
+ end
328
+
329
+ # Iterates each hour, the elements are the values of array
330
+ # time_array.each do |value|
331
+ # value
332
+ # end
333
+ def each(&block)
334
+ @v.each &block
335
+ end
336
+
337
+
338
+ # Get value associated to a date
339
+ def value_at(datetime_or_year, month=nil, day=nil, hour=nil)
340
+ if datetime_or_year.is_a? Time
341
+ dt = datetime_or_year
342
+ else
343
+ dt = Time.zone.parse("#{datetime_or_year}-#{month}-#{day} #{hour}:00")
344
+ end
345
+ i = ((dt - @start_time)/3600.0).to_i
346
+ raise DateTimeOutRangeError if i<0 || i>(size-1)
347
+ value(i)
348
+ end
349
+
350
+
351
+ # Iterates each hour, the elements are TimeAndValue objects
352
+ # time_array.each_with_time do |el|
353
+ # e.time
354
+ # e.value
355
+ # end
356
+ def each_with_time(&block)
357
+ arr = @v.map.with_index{|v, i| TimeAndValue.new(@start_time+i.hours, v)}
358
+ arr.each(&block)
359
+ end
202
360
  # ===========================================================
203
361
 
204
362
  private
@@ -244,6 +402,7 @@ module TimeArray
244
402
  vector
245
403
  end
246
404
 
405
+
247
406
  def set_start_time(start_time)
248
407
  st = read_start_time(start_time)
249
408
  @start_time = floor_start_time(st, @unit)
@@ -0,0 +1,27 @@
1
+ require 'active_support/core_ext/time/zones'
2
+
3
+ module TimeArray
4
+ module TimeExt
5
+
6
+ module InstanceMethods
7
+ # has year changed in last hour?
8
+ def year_changed?
9
+ self.year != (self-1.hour).year
10
+ end
11
+
12
+ # has year changed in last month?
13
+ def month_changed?
14
+ self.month != (self-1.hour).month
15
+ end
16
+
17
+ # has year changed in last day?
18
+ def day_changed?
19
+ self.day != (self-1.hour).day
20
+ end
21
+ end
22
+
23
+ def self.included(receiver)
24
+ receiver.send :include, InstanceMethods
25
+ end
26
+ end
27
+ end
@@ -1,3 +1,3 @@
1
1
  module TimeArray
2
- VERSION = "0.5.1"
2
+ VERSION = "0.5.7.4"
3
3
  end
data/lib/time_array.rb CHANGED
@@ -7,6 +7,8 @@
7
7
  array_ext
8
8
  units
9
9
  group_hash
10
+ compactor
11
+ time_ext
10
12
  ).each { |file| require File.join(File.dirname(__FILE__), 'time_array', file) }
11
13
 
12
14
 
@@ -14,3 +16,6 @@ class Array
14
16
  include TimeArray::ArrayExt
15
17
  end
16
18
 
19
+ class Time
20
+ include TimeArray::TimeExt
21
+ end
@@ -0,0 +1,112 @@
1
+ require 'spec_helper'
2
+ require 'active_support/core_ext/time/zones'
3
+
4
+ RSpec.describe 'compactor' do
5
+ subject(:year) { "2013" }
6
+ subject(:y_arr) { [3.14] }
7
+ subject(:m_arr) { (1..12).to_a.map{|e| e%2==0 ? 1.2 : 2.98} }
8
+ subject(:d_arr) { (1..365).to_a.map{|e| e%2==0 ? 1.2 : 2.98} }
9
+ subject(:h_arr) { (1..8760).to_a.map{|e| e%2==0 ? 1.2 : 2.98} }
10
+
11
+ def build_flat_array(year, step)
12
+ Time.zone = "Rome"
13
+ t0 = Time.zone.parse("#{year}-01-01")
14
+ t1 = t0+1.year
15
+ size = (t1-t0)/3600
16
+ Array.new(size){|i| (t0+i.hours).send(step) }
17
+ end
18
+
19
+ context 'initial unit is hour' do
20
+ it "compact month to hour" do
21
+ arr = build_flat_array(2013, :month)
22
+ ta = TimeArray::TimeArray.new(year, arr)
23
+ expect(ta.greatest_unit).to eq(:month)
24
+
25
+ arr[2] = -1.0 # dirty, degrade to :hour
26
+ ta = TimeArray::TimeArray.new(year, arr)
27
+ expect(ta.greatest_unit).to eq(:hour)
28
+ end
29
+
30
+ it "compact day to hour" do
31
+ arr = build_flat_array(2013, :day)
32
+ ta = TimeArray::TimeArray.new(year, arr)
33
+ expect(ta.greatest_unit).to eq(:day)
34
+
35
+ arr[2] = -1.0 # dirty, degrade to :hour
36
+ ta = TimeArray::TimeArray.new(year, arr)
37
+ expect(ta.greatest_unit).to eq(:hour)
38
+ end
39
+
40
+ it "cannot compact" do
41
+ ta = TimeArray::TimeArray.new(year, h_arr)
42
+ expect(ta.greatest_unit).to eq(:hour)
43
+ end
44
+
45
+ it "compact an array shorten than year" do
46
+ arr = Array.new(24, 1.4)
47
+ ta = TimeArray::TimeArray.new(year, arr)
48
+ expect(ta.greatest_unit).to eq(:day)
49
+
50
+ arr = Array.new(24*31, 1.4)
51
+ ta = TimeArray::TimeArray.new(year, arr)
52
+ expect(ta.greatest_unit).to eq(:month)
53
+ end
54
+ end
55
+
56
+ context 'initial unit is not hour' do
57
+
58
+ it "compact to year" do
59
+ ta = TimeArray::TimeArray.new(year, y_arr, unit: :year)
60
+ expect(ta.greatest_unit).to eq(:year)
61
+
62
+ arr = Array.new(8760, 4.1)
63
+ ta = TimeArray::TimeArray.new(year, arr)
64
+ end
65
+
66
+ it "compact to month" do
67
+ ta = TimeArray::TimeArray.new(year, m_arr, unit: :month)
68
+ st = ta.start_time.clone
69
+ expect(ta.greatest_unit).to eq(:month)
70
+ expect(ta.start_time).to eq(st)
71
+ end
72
+
73
+ it "compact to day" do
74
+ ta = TimeArray::TimeArray.new(year, d_arr, unit: :day)
75
+ expect(ta.greatest_unit).to eq(:day)
76
+ end
77
+ end
78
+
79
+
80
+ context 'compact method' do
81
+ it "compact to year" do
82
+ ta = TimeArray::TimeArray.new(year, y_arr, unit: :year)
83
+ compact = ta.compact
84
+ expect(compact.unit).to eq(:year)
85
+ expect(compact).to respond_to(:v)
86
+ expect(compact).to respond_to(:values)
87
+ expect(compact).to respond_to(:array)
88
+ expect(compact.v).to eq(y_arr)
89
+ end
90
+
91
+ it "compact to month" do
92
+ ta = TimeArray::TimeArray.new(year, m_arr, unit: :month)
93
+ compact = ta.compact
94
+ expect(compact.unit).to eq(:month)
95
+ expect(compact.v).to eq(m_arr)
96
+ end
97
+
98
+ it "compact to day" do
99
+ ta = TimeArray::TimeArray.new(year, d_arr, unit: :day)
100
+ compact = ta.compact
101
+ expect(compact.unit).to eq(:day)
102
+ expect(compact.v).to eq(d_arr)
103
+ end
104
+
105
+ it "compact to hour" do
106
+ ta = TimeArray::TimeArray.new(year, h_arr, unit: :hour)
107
+ compact = ta.compact
108
+ expect(compact.unit).to eq(:hour)
109
+ expect(compact.v).to eq(h_arr)
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'hour array counts' do
4
+ # subject(:v1) { Array.new([0,1,-2,5,-7,11,-13]) }
5
+ # subject(:v2) { Array.new([1,7,19,31,-13,5,-2]) }
6
+ v1 = [0,1,-2,5,-7,11,-13]
7
+ v2 = [1,7,19,31,-13,5,-2]
8
+ v12 = v1.map.with_index{|e,i| v1[i]+v2[i]}
9
+ ta1 = TimeArray::TimeArray.new("2013", v1)
10
+ ta2 = TimeArray::TimeArray.new("2013", v2)
11
+ ta12 = TimeArray::TimeArray.new("2013", v12)
12
+
13
+ it 'sum all elements' do
14
+ # expect((ta1.sum(ta2)).v).to eq(ta12.v)
15
+ # expect(ta1.v).to eq(v1)
16
+ end
17
+ end
@@ -50,4 +50,98 @@ RSpec.describe 'operations' do
50
50
  expect(c.size).to eq(8760)
51
51
  expect(c.sum).to eq(Float::INFINITY)
52
52
  end
53
+
54
+ it "sum month values" do
55
+ year = 2013
56
+ b = TimeArray::TimeArray.new(year.to_s, [1], unit: :year)
57
+ b = b.month_sum
58
+ h = {}
59
+ Time.zone = "Rome"
60
+ 12.times do |m|
61
+ t1 = Time.zone.parse("#{year}-#{m+1}-01 00:00")
62
+ t2 = t1+1.month
63
+ t3 = (t2-t1)/3600
64
+ hours = t3.to_i
65
+ h[m+1] = hours
66
+ end
67
+ h.each_pair do |month, count|
68
+ expect(b.value_at(year,month,1,0)).to eq(count)
69
+ end
70
+ end
71
+
72
+ describe "#value_at" do
73
+ context 'date as datetime' do
74
+ context 'correct date' do
75
+ it "return the correct first value" do
76
+ Time.zone = "Rome"
77
+ dt = Time.zone.parse("2013-01-01 00:00")
78
+ expect(a1.value_at(dt)).to eq(2.1)
79
+ end
80
+ it "return the correct last value" do
81
+ Time.zone = "Rome"
82
+ dt = Time.zone.parse("2013-12-31 23:00")
83
+ expect(a1.value_at(dt)).to eq(2.1)
84
+ end
85
+ it "return the correct inner value" do
86
+ Time.zone = "Rome"
87
+ dt = Time.zone.parse("2013-05-21 05:00")
88
+ expect(a1.value_at(dt)).to eq(2.1)
89
+ end
90
+ end
91
+ context 'date not correct' do
92
+ it "raise error with a date before" do
93
+ Time.zone = "Rome"
94
+ dt = Time.zone.parse("2012-12-31 23:00")
95
+ expect{ a1.value_at(dt)}.to raise_error(RuntimeError)
96
+ end
97
+ it "raise error with a date after" do
98
+ Time.zone = "Rome"
99
+ dt = Time.zone.parse("2014-01-01 00:00")
100
+ expect{ a1.value_at(dt)}.to raise_error(RuntimeError)
101
+ end
102
+ end
103
+
104
+ end
105
+
106
+ context 'date as numbers' do
107
+ context 'correct date' do
108
+ it "return the correct first value" do
109
+ expect(a1.value_at(2013,1,1,0)).to eq(2.1)
110
+ end
111
+ it "return the correct last value" do
112
+ expect(a1.value_at(2013,12,31,23)).to eq(2.1)
113
+ end
114
+ it "return the correct inner value" do
115
+ expect(a1.value_at(2013,5,21,5)).to eq(2.1)
116
+ end
117
+ end
118
+ context 'date not correct' do
119
+ it "raise error with a date before" do
120
+ expect{ a1.value_at(2012,12,31,23)}.to raise_error(RuntimeError)
121
+ end
122
+ it "raise error with a date after" do
123
+ expect{ a1.value_at(2014,1,1,0)}.to raise_error(RuntimeError)
124
+ end
125
+ end
126
+
127
+ end
128
+
129
+ it "#month_count" do
130
+ a = a1.month_count
131
+ expect(a.value(0)).to eq(24*31)
132
+ expect(a.value(1)).to eq(24*31)
133
+ expect(a.value(24*31)).to eq(24*28)
134
+ expect(a.value(24*31+24*28)).to eq(24*31-1) # because of daylight saving time
135
+ expect(a.value(a.size-1)).to eq(24*31)
136
+ end
137
+
138
+ it '#execute' do
139
+ b = a1.execute do |v|
140
+ 2 * v + 1
141
+ end
142
+ expect(b.value(0)).to eq(2*2.1+1)
143
+ expect(b.value(1000)).to eq(2*2.1+1)
144
+ expect(b.value(b.size-1)).to eq(2*2.1+1)
145
+ end
146
+ end
53
147
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- RSpec.describe 'time array' do
3
+ describe TimeArray do
4
4
  subject(:a1) { TimeArray::TimeArray.new("2013", [1,2,3], zone: "Rome", unit: :hour) }
5
5
  values = [1,2,3]
6
6
  subject(:v1) { [0,1,2,-3,0,2,-1] }
@@ -209,4 +209,58 @@ RSpec.describe 'time array' do
209
209
  a = TimeArray::TimeArray.new("2013", arr, zone: "Rome", unit: :hour)
210
210
  expect(a.first_values(23)).to eq(arr[0...23])
211
211
  end
212
+
213
+
214
+ describe "#if_zero_then" do
215
+ it "compare to another timearray" do
216
+ a = TimeArray::TimeArray.new("2013", [1,2,0,4,5,0,7,0,0], zone: "Rome", unit: :hour)
217
+ b = TimeArray::TimeArray.new("2013", [9,0,7,6,5,4,3,0,1], zone: "Rome", unit: :hour)
218
+
219
+ expect(a.if_zero_then(b).v).to eq([1,2,7,4,5,4,7,0,1])
220
+ expect(b.if_zero_then(a).v).to eq([9,2,7,6,5,4,3,0,1])
221
+ end
222
+
223
+ it "compare to a number" do
224
+ a = TimeArray::TimeArray.new("2013", [1,2,0,4,5,0,7,0,0], zone: "Rome", unit: :hour)
225
+ expect(a.if_zero_then(10).v).to eq([1,2,10,4,5,10,7,10,10])
226
+ end
227
+
228
+ end
229
+
230
+ describe "#each" do
231
+ it "get values" do
232
+ a = TimeArray::TimeArray.new("2013", [1,2,3,4], zone: "Rome", unit: :hour)
233
+ a.each.with_index do |el, i|
234
+ expect(el).to eq(i+1)
235
+ end
236
+ end
237
+ end
238
+
239
+ describe "#each_with_time" do
240
+ it "get values" do
241
+ a = TimeArray::TimeArray.new("2013", [1,2,3,4], zone: "Rome", unit: :hour)
242
+ a.each_with_time.with_index do |el, i|
243
+ expect(el.value).to eq(i+1)
244
+ expect(el.v).to eq(i+1) # alias
245
+ end
246
+ end
247
+
248
+ it "get datetimes" do
249
+ a = TimeArray::TimeArray.new("2013", [1,2,3,4], zone: "Rome", unit: :hour)
250
+
251
+ a.each_with_time.with_index do |el, i|
252
+ expect(el.datetime).to eq(a.start_time+i.hours)
253
+ expect(el.time).to eq(a.start_time+i.hours) # alias
254
+ end
255
+ end
256
+ end
257
+
258
+ it "get other if zero" do
259
+ a = TimeArray::TimeArray.new("2013", [1,2,0,4,5,0,7,0,0], zone: "Rome", unit: :hour)
260
+ b = TimeArray::TimeArray.new("2013", [9,0,7,6,5,4,3,0,1], zone: "Rome", unit: :hour)
261
+
262
+ c = a.if_zero(b)
263
+ expect(a.if_zero(b).v).to eq([1,2,7,4,5,4,7,0,1])
264
+ expect(b.if_zero(a).v).to eq([9,2,7,6,5,4,3,0,1])
265
+ end
212
266
  end
data/spec/time_spec.rb ADDED
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe 'time' do
4
+ subject(:a1) { [1,2,3].timed("2014") }
5
+
6
+ describe 'year_changed?' do
7
+ it "is true" do
8
+ expect(Time.new(2015,1,1,0,20).year_changed?).to be true
9
+ end
10
+
11
+ it "is false" do
12
+ expect(Time.new(2015,1,1,1,0).year_changed?).to be false
13
+ expect(Time.new(2015,1,2,0,20).year_changed?).to be false
14
+ expect(Time.new(2015,2,1,0,20).year_changed?).to be false
15
+ end
16
+ end
17
+
18
+ describe 'month_changed?' do
19
+ it "is true" do
20
+ expect(Time.new(2015,1,1,0,20).month_changed?).to be true
21
+ expect(Time.new(2015,2,1,0,20).month_changed?).to be true
22
+ end
23
+
24
+ it "is false" do
25
+ expect(Time.new(2015,1,1,1,0).month_changed?).to be false
26
+ expect(Time.new(2015,1,2,0,20).month_changed?).to be false
27
+ end
28
+ end
29
+
30
+ describe 'day_changed?' do
31
+ it "is true" do
32
+ expect(Time.new(2015,1,1,0,20).day_changed?).to be true
33
+ expect(Time.new(2015,1,2,0,20).day_changed?).to be true
34
+ expect(Time.new(2015,2,1,0,20).day_changed?).to be true
35
+ end
36
+
37
+ it "is false" do
38
+ expect(Time.new(2015,1,1,1,0).day_changed?).to be false
39
+ end
40
+ end
41
+ end
data/usage/usage_01.rb CHANGED
@@ -1,20 +1,46 @@
1
1
  require_relative '../lib/time_array'
2
2
 
3
+ if false
4
+ arr = TimeArray::TimeArray.new("2016-03", [1,2,3])
5
+ puts arr.start_time.to_s
6
+ puts arr.start_time.class
7
+ puts arr.start_time.inspect
3
8
 
4
- arr = TimeArray::TimeArray.new("2016-03", [1,2,3])
5
- puts arr.start_time.to_s
6
- puts arr.start_time.class
7
- puts arr.start_time.inspect
9
+ # puts Time.zone.parse("2014")
10
+ # puts Time.zone.parse("2020-01-02")
8
11
 
9
- # puts Time.zone.parse("2014")
10
- # puts Time.zone.parse("2020-01-02")
12
+ a = [2,3,4].timed("2012", unit: :day)
13
+ puts a.size
14
+ puts a.v.inspect
11
15
 
12
- a = [2,3,4].timed("2012", unit: :day)
13
- puts a.size
14
- puts a.v.inspect
15
16
 
17
+ puts [1,2,3].timed("2014", unit: :day).size
16
18
 
17
- puts [1,2,3].timed("2014", unit: :day).size
19
+ puts arr.group_by(:day)
20
+ puts arr.group_by(:hour)
21
+
22
+
23
+ puts arr.start_time.strftime("%Y-%m-%d %H:%M")
24
+
25
+ end
26
+
27
+ if true
28
+ ta = TimeArray::TimeArray.new("2015", [1,2,2,2,2,2,2,2,2,2,2,2], unit: :month)
29
+ # puts ta.v.inspect
30
+ ta2 = ta.compact
31
+ puts ta2.v.inspect
32
+ puts ta2.inspect # TimeArray::Compact
33
+
34
+ end
35
+
36
+ if true
37
+ interval = :month
38
+ start_time = Time.new(2015,1,1)
39
+ array = [1,2,2,2,2,2,2,2,2,2,2,2]
40
+ ta1 = array.timed(start_time, unit: interval)
41
+ # puts ta1
42
+ ta2 = ta1.compact
43
+ puts ta2.inspect
44
+ puts ta2
45
+ end
18
46
 
19
- puts arr.group_by(:day)
20
- puts arr.group_by(:hour)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: time_array
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.5.7.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Iwan Buetti
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-06 00:00:00.000000000 Z
11
+ date: 2016-01-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -181,18 +181,23 @@ files:
181
181
  - Rakefile
182
182
  - lib/time_array.rb
183
183
  - lib/time_array/array_ext.rb
184
+ - lib/time_array/compactor.rb
184
185
  - lib/time_array/exceptions.rb
185
186
  - lib/time_array/group_hash.rb
186
187
  - lib/time_array/hour_array.rb
187
188
  - lib/time_array/time_array.rb
189
+ - lib/time_array/time_ext.rb
188
190
  - lib/time_array/units.rb
189
191
  - lib/time_array/vector.rb
190
192
  - lib/time_array/version.rb
191
193
  - spec/array_spec.rb
192
194
  - spec/hour_array_spec.rb
193
195
  - spec/spec_helper.rb
196
+ - spec/time_array_compact_spec.rb
197
+ - spec/time_array_counts_spec.rb
194
198
  - spec/time_array_operations_spec.rb
195
199
  - spec/time_array_spec.rb
200
+ - spec/time_spec.rb
196
201
  - spec/units_spec.rb
197
202
  - spec/vector_spec.rb
198
203
  - time_array.gemspec
@@ -217,7 +222,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
217
222
  version: '0'
218
223
  requirements: []
219
224
  rubyforge_project:
220
- rubygems_version: 2.0.3
225
+ rubygems_version: 2.4.5.1
221
226
  signing_key:
222
227
  specification_version: 4
223
228
  summary: Some tools to deal with time based arrays
@@ -225,8 +230,10 @@ test_files:
225
230
  - spec/array_spec.rb
226
231
  - spec/hour_array_spec.rb
227
232
  - spec/spec_helper.rb
233
+ - spec/time_array_compact_spec.rb
234
+ - spec/time_array_counts_spec.rb
228
235
  - spec/time_array_operations_spec.rb
229
236
  - spec/time_array_spec.rb
237
+ - spec/time_spec.rb
230
238
  - spec/units_spec.rb
231
239
  - spec/vector_spec.rb
232
- has_rdoc: