chupakabra_tools 0.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.
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: []