chupakabra_tools 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in chupakabra_tools.gemspec
4
+
5
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Mitrofanov Dmitry
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # ChupakabraTools
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'chupakabra_tools'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install chupakabra_tools
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'chupakabra_tools/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "chupakabra_tools"
8
+ gem.version = ChupakabraTools::VERSION
9
+ gem.authors = ["Mitrofanov Dmitry"]
10
+ gem.email = ["mdima@it-guru.biz"]
11
+ gem.description = %q{Chupakbara Tools Set for Easy Life}
12
+ gem.summary = %q{Chupakabara Tools}
13
+ gem.homepage = ""
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib"]
19
+
20
+ gem.add_dependency "active_support"
21
+ gem.add_dependency "activerecord"
22
+
23
+ end
@@ -0,0 +1,6 @@
1
+ require "chupakabra_tools/version"
2
+
3
+ require "chupakabra_tools/time_interval"
4
+
5
+
6
+
@@ -0,0 +1,364 @@
1
+ require "active_support/all"
2
+
3
+ class ChupakabraTools::TimeInterval
4
+ attr_accessor :beginning, :ending
5
+
6
+ def initialize (hash={})
7
+ hash ||= {}
8
+ hash.stringify_keys!
9
+ self.beginning = hash['beginning']
10
+ self.ending = hash['ending']
11
+ end
12
+
13
+ def beginning
14
+ @beginning
15
+ end
16
+
17
+ def beginning= val
18
+ @beginning = val
19
+ end
20
+
21
+ def ending
22
+ @ending
23
+ end
24
+
25
+ def ending= val
26
+ @ending = val
27
+ end
28
+
29
+
30
+ def to_s
31
+ "#{beginning} - #{ending}"
32
+ end
33
+
34
+ def to_hash
35
+ {beginning: self.beginning, ending: self.ending}
36
+ end
37
+
38
+ def to_json
39
+ to_hash.to_json
40
+ end
41
+
42
+ def add_days!(days_number)
43
+ @beginning += days_number.days if @beginning
44
+ @ending += days_number.days if @ending
45
+ to_s
46
+ end
47
+
48
+ def add_weeks!(weeks_number)
49
+ @beginning += weeks_number.weeks if @beginning
50
+ @ending += weeks_number.weeks if @ending
51
+ to_s
52
+ end
53
+
54
+ def add_years!(years_number)
55
+ @beginning += years_number.years if @beginning
56
+ @ending += years_number.years if @ending
57
+ to_s
58
+ end
59
+
60
+ def subtract_days!(days_number)
61
+ @beginning.ago(days_number.days) if @beginning
62
+ @ending.ago(days_number.days) if @ending
63
+ to_s
64
+ end
65
+
66
+ def subtract_weeks!(weeks_number)
67
+ @beginning.ago(weeks_number.weeks) if @beginning
68
+ @ending.ago(weeks_number.weeks) if @ending
69
+ to_s
70
+ end
71
+
72
+ def subtract_years!(years_number)
73
+ @beginning.ago(years_number.years) if @beginning
74
+ @ending.ago(years_number.years) if @ending
75
+ to_s
76
+ end
77
+
78
+ def add_days(days_number)
79
+ @beginning += days_number.days if @beginning
80
+ @ending += days_number.days if @ending
81
+ ChupakabraTools::TimeInterval.new(beginning: @beginning, ending: @ending)
82
+ end
83
+
84
+ def add_weeks(weeks_number)
85
+ @beginning += weeks_number.weeks if @beginning
86
+ @ending += weeks_number.weeks if @ending
87
+ ChupakabraTools::TimeInterval.new(beginning: @beginning, ending: @ending)
88
+ end
89
+
90
+ def add_years(years_number)
91
+ @beginning += years_number.years if @beginning
92
+ @ending += years_number.years if @ending
93
+ ChupakabraTools::TimeInterval.new(beginning: @beginning, ending: @ending)
94
+ end
95
+
96
+ def subtract_days(days_number)
97
+ @beginning.ago(days_number.days) if @beginning
98
+ @ending.ago(days_number.days) if @ending
99
+ ChupakabraTools::TimeInterval.new(beginning: @beginning, ending: @ending)
100
+ end
101
+
102
+ def subtract_weeks(weeks_number)
103
+ @beginning.ago(weeks_number.weeks) if @beginning
104
+ @ending.ago(weeks_number.weeks) if @ending
105
+ ChupakabraTools::TimeInterval.new(beginning: @beginning, ending: @ending)
106
+ end
107
+
108
+ def subtract_years(years_number)
109
+ @beginning.ago(years_number.years) if @beginning
110
+ @ending.ago(years_number.years) if @ending
111
+ ChupakabraTools::TimeInterval.new(beginning: @beginning, ending: @ending)
112
+ end
113
+
114
+
115
+ # ************************************* DAYS *****************************************
116
+
117
+ def self.tomorrow(time_zone = nil)
118
+ time = Time.now.tomorrow
119
+ ChupakabraTools::TimeInterval.new(beginning: time.beginning_of_day, ending: time.end_of_day)
120
+ end
121
+
122
+ def self.today(time_zone = nil)
123
+ time = Time.now
124
+ ChupakabraTools::TimeInterval.new(beginning: time.beginning_of_day, ending: time.end_of_day)
125
+ end
126
+
127
+ def self.yesterday(time_zone = nil)
128
+ time = Time.now.yesterday
129
+ ChupakabraTools::TimeInterval.new(beginning: time.beginning_of_day, ending: time.end_of_day)
130
+ end
131
+
132
+ def self.day(val = nil, time_zone = nil)
133
+ if val.nil?
134
+ time = Time.now
135
+ elsif val.is_a?(Date)
136
+ time = val.today.to_time
137
+ elsif val.is_a?(Time)
138
+ time = val
139
+ elsif val.is_a?(String)
140
+ day_of_year = val.to_i
141
+ day_of_year -= 1 if day_of_year > 0
142
+ time = Time.now.beginning_of_year + day_of_year.days
143
+ elsif val.is_a?(Integer)
144
+ day_of_year = val
145
+ day_of_year -= 1 if day_of_year > 0
146
+ time = Time.now.beginning_of_year + day_of_year.days
147
+ elsif val.is_a?(Float)
148
+ day_of_year = val.to_i
149
+ day_of_year -= 1 if day_of_year > 0
150
+ time = Time.now.beginning_of_year + day_of_year.days
151
+ end
152
+ time ||= Time.now
153
+ ChupakabraTools::TimeInterval.new(beginning: time.beginning_of_day, ending: time.end_of_day)
154
+ end
155
+
156
+ def self.day_of_year(day, year, time_zone = nil)
157
+ day_of_year = day.to_i.days
158
+ day_of_year -= 1 if day_of_year > 0
159
+ time = Time.new(year, 1, 1) + day_of_year
160
+ ChupakabraTools::TimeInterval.new(beginning: time.beginning_of_day, ending: time.end_of_day)
161
+ end
162
+
163
+
164
+ # ************************************** WEEKS **********************************
165
+
166
+ def self.this_week(time_zone = nil)
167
+ week(Time.now, time_zone)
168
+ end
169
+
170
+ def self.last_week(time_zone = nil)
171
+ previous_week(Time.now, time_zone)
172
+ end
173
+
174
+ def self.previous_week(definite_time = nil, time_zone = nil)
175
+ if definite_time
176
+ definite_time = definite_time.to_time if definite_time.is_a?(Date)
177
+ end
178
+ time = (definite_time.nil? || !definite_time.is_a?(Time) ? Time.now : definite_time).ago(1.week)
179
+ ChupakabraTools::TimeInterval.new(beginning: time.beginning_of_week, ending: time.end_of_week)
180
+ end
181
+
182
+ def self.next_week(definite_time = nil, time_zone = nil)
183
+ if definite_time
184
+ definite_time = definite_time.to_time if definite_time.is_a?(Date)
185
+ end
186
+ time = (definite_time.nil? || !definite_time.is_a?(Time) ? Time.now : definite_time) + 1.week
187
+
188
+ ChupakabraTools::TimeInterval.new(beginning: time.beginning_of_week, ending: time.end_of_week)
189
+ end
190
+
191
+ def self.week(definite_time = nil, time_zone = nil)
192
+ if definite_time
193
+ definite_time = definite_time.to_time if definite_time.is_a?(Date)
194
+ end
195
+ time = (definite_time.nil? || !definite_time.is_a?(Time) ? Time.now : definite_time)
196
+
197
+ ChupakabraTools::TimeInterval.new(beginning: time.beginning_of_week, ending: time.end_of_week)
198
+ end
199
+
200
+ # ************************************** MONTHS **********************************
201
+
202
+ def self.this_month(time_zone = nil)
203
+ month(Time.now, time_zone)
204
+ end
205
+
206
+ def self.last_month(time_zone = nil)
207
+ month(Time.now.ago(1.month), time_zone)
208
+ end
209
+
210
+ def self.previous_month(definite_time = nil, time_zone = nil)
211
+ if definite_time
212
+ definite_time = definite_time.to_time if definite_time.is_a?(Date)
213
+ definite_time = Time.new(Time.now.year, definite_time, 1) if definite_time.is_a?(Integer)
214
+ end
215
+ time = (definite_time.nil? || !definite_time.is_a?(Time) ? Time.now : definite_time).ago(1.month)
216
+
217
+ ChupakabraTools::TimeInterval.new(beginning: time.beginning_of_month, ending: time.end_of_month)
218
+ end
219
+
220
+ def self.next_month(definite_time = nil, time_zone = nil)
221
+ if definite_time
222
+ definite_time = definite_time.to_time if definite_time.is_a?(Date)
223
+ definite_time = Time.new(Time.now.year, definite_time, 1) if definite_time.is_a?(Integer)
224
+ end
225
+ time = (definite_time.nil? || !definite_time.is_a?(Time) ? Time.now : definite_time) + 1.month
226
+
227
+ ChupakabraTools::TimeInterval.new(beginning: time.beginning_of_month, ending: time.end_of_month)
228
+ end
229
+
230
+ def self.month(definite_time = nil, time_zone = nil)
231
+ if definite_time
232
+ definite_time = definite_time.to_time if definite_time.is_a?(Date)
233
+ definite_time = Time.new(Time.now.year, definite_time, 1) if definite_time.is_a?(Integer)
234
+ end
235
+ time = (definite_time.nil? || !definite_time.is_a?(Time) ? Time.now : definite_time)
236
+
237
+ ChupakabraTools::TimeInterval.new(beginning: time.beginning_of_month, ending: time.end_of_month)
238
+ end
239
+
240
+ def self.month_of_year(month, year, time_zone = nil)
241
+ time = Time.new(year, month, 1)
242
+ ChupakabraTools::TimeInterval.new(beginning: time.beginning_of_month, ending: time.end_of_month)
243
+ end
244
+
245
+
246
+ # ************************************** YEARS **********************************
247
+
248
+ def self.last_year(time_zone = nil)
249
+ previous_year(Time.now, time_zone)
250
+ end
251
+
252
+ def self.this_year(time_zone = nil)
253
+ year(Time.now, time_zone)
254
+ end
255
+
256
+
257
+ def self.previous_year(definite_time = nil, time_zone = nil)
258
+ if definite_time
259
+ definite_time = definite_time.to_time if definite_time.is_a?(Date)
260
+ definite_time = Time.new(definite_time, 1, 1, 0, 0) if definite_time.is_a?(Integer)
261
+ end
262
+ time = (definite_time.nil? || !definite_time.is_a?(Time) ? Time.now : definite_time).ago(1.year)
263
+
264
+ ChupakabraTools::TimeInterval.new(beginning: time.beginning_of_year, ending: time.end_of_year)
265
+ end
266
+
267
+ def self.next_year(definite_time = nil, time_zone = nil)
268
+ if definite_time
269
+ definite_time = definite_time.to_time if definite_time.is_a?(Date)
270
+ definite_time = Time.new(definite_time, 1, 1, 0, 0) if definite_time.is_a?(Integer)
271
+ end
272
+ time = (definite_time.nil? || !definite_time.is_a?(Time) ? Time.now : definite_time) + 1.year
273
+ ChupakabraTools::TimeInterval.new(beginning: time.beginning_of_year, ending: time.end_of_year)
274
+ end
275
+
276
+ def self.year(definite_time = nil, time_zone = nil)
277
+ if definite_time
278
+ definite_time = definite_time.to_time if definite_time.is_a?(Date)
279
+ definite_time = Time.new(definite_time, 1, 1, 0, 0) if definite_time.is_a?(Integer)
280
+ end
281
+ time = (definite_time.nil? || !definite_time.is_a?(Time) ? Time.now : definite_time)
282
+
283
+ ChupakabraTools::TimeInterval.new(beginning: time.beginning_of_year, ending: time.end_of_year)
284
+ end
285
+
286
+
287
+ # ChupakabraTools::TimeInterval.new(beginning: , ending: )
288
+
289
+ def self.get_time_interval(interval_request, time = nil)
290
+ interval = nil
291
+ if interval_request
292
+ if time.nil?
293
+
294
+ interval_request = interval_request.to_s.strip.downcase
295
+
296
+ if ['today', 'this_day', 'this-day', 'this day'].include?(interval_request)
297
+ interval = ChupakabraTools::TimeInterval.today
298
+ elsif ['yesterday', 'previous_day', 'previous_day', 'previous_day'].include?(interval_request)
299
+ interval = ChupakabraTools::TimeInterval.yesterday
300
+ elsif ['tomorrow', 'next_day', 'next-day', 'next day'].include?(interval_request)
301
+ interval = ChupakabraTools::TimeInterval.tomorrow
302
+ elsif ['this_week', 'this-week', 'this week'].include?(interval_request)
303
+ interval = ChupakabraTools::TimeInterval.this_week
304
+ elsif ['last_week', 'last-week', 'last week'].include?(interval_request)
305
+ interval = ChupakabraTools::TimeInterval.last_week
306
+ elsif ['next_week', 'next-week', 'next week'].include?(interval_request)
307
+ interval = ChupakabraTools::TimeInterval.next_week
308
+ elsif ['this_month', 'this-month', 'this month'].include?(interval_request)
309
+ interval = ChupakabraTools::TimeInterval.this_month
310
+ elsif ['last_month', 'last-month', 'last month', 'previous_month', 'previous-month', 'previous month'].include?(interval_request)
311
+ interval = ChupakabraTools::TimeInterval.last_month
312
+ elsif ['next_month', 'next-month', 'next month'].include?(interval_request)
313
+ interval = ChupakabraTools::TimeInterval.next_month
314
+ elsif ['this_year', 'this-year', 'this year'].include?(interval_request)
315
+ interval = ChupakabraTools::TimeInterval.this_year
316
+ elsif ['last_year', 'last-year', 'last year', 'previous_year', 'previous-year', 'previous year'].include?(interval_request)
317
+ interval = ChupakabraTools::TimeInterval.last_year
318
+ elsif ['next_year', 'next-year', 'next year'].include?(interval_request)
319
+ interval = ChupakabraTools::TimeInterval.next_year
320
+ end
321
+ else
322
+ if time.is_a?(Date)
323
+ time = time.to_time
324
+ end
325
+
326
+
327
+ interval_request = interval_request.to_s.strip.downcase
328
+
329
+ if ['this_day', 'this-day', 'this day'].include?(interval_request)
330
+ interval = ChupakabraTools::TimeInterval.this_day
331
+ elsif ['previous_day', 'previous_day', 'previous_day'].include?(interval_request)
332
+ interval = ChupakabraTools::TimeInterval.yesterday
333
+ elsif ['next_day', 'next-day', 'next day'].include?(interval_request)
334
+ interval = ChupakabraTools::TimeInterval.tomorrow
335
+ elsif ['this_week', 'this-week', 'this week'].include?(interval_request)
336
+ interval = ChupakabraTools::TimeInterval.this_week
337
+ elsif ['last_week', 'last-week', 'last week'].include?(interval_request)
338
+ interval = ChupakabraTools::TimeInterval.last_week
339
+ elsif ['next_week', 'next-week', 'next week'].include?(interval_request)
340
+ interval = ChupakabraTools::TimeInterval.next_week
341
+ elsif ['this_month', 'this-month', 'this month'].include?(interval_request)
342
+ interval = ChupakabraTools::TimeInterval.this_month
343
+ elsif ['last_month', 'last-month', 'last month', 'previous_month', 'previous-month', 'previous month'].include?(interval_request)
344
+ interval = ChupakabraTools::TimeInterval.last_month
345
+ elsif ['next_month', 'next-month', 'next month'].include?(interval_request)
346
+ interval = ChupakabraTools::TimeInterval.next_month
347
+ elsif ['this_year', 'this-year', 'this year'].include?(interval_request)
348
+ interval[:start] = ChupakabraTools::TimeInterval.this_year
349
+ elsif ['last_year', 'last-year', 'last year', 'previous_year', 'previous-year', 'previous year'].include?(interval_request)
350
+ interval = ChupakabraTools::TimeInterval.last_year
351
+ elsif ['next_year', 'next-year', 'next year'].include?(interval_request)
352
+ interval = ChupakabraTools::TimeInterval.next_year
353
+ end
354
+
355
+ end
356
+
357
+
358
+ else
359
+ nil
360
+ end
361
+ interval
362
+ end
363
+
364
+ end
@@ -0,0 +1,3 @@
1
+ module ChupakabraTools
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,86 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: chupakabra_tools
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Mitrofanov Dmitry
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-02-22 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: active_support
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: activerecord
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ description: Chupakbara Tools Set for Easy Life
47
+ email:
48
+ - mdima@it-guru.biz
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - .gitignore
54
+ - Gemfile
55
+ - LICENSE.txt
56
+ - README.md
57
+ - Rakefile
58
+ - chupakabra_tools.gemspec
59
+ - lib/chupakabra_tools.rb
60
+ - lib/chupakabra_tools/time_interval.rb
61
+ - lib/chupakabra_tools/version.rb
62
+ homepage: ''
63
+ licenses: []
64
+ post_install_message:
65
+ rdoc_options: []
66
+ require_paths:
67
+ - lib
68
+ required_ruby_version: !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ! '>='
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ required_rubygems_version: !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ! '>='
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ requirements: []
81
+ rubyforge_project:
82
+ rubygems_version: 1.8.23
83
+ signing_key:
84
+ specification_version: 3
85
+ summary: Chupakabara Tools
86
+ test_files: []