dtg 3.0.2 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +49 -0
- data/Rakefile +4 -27
- data/dtg.gemspec +47 -0
- data/lib/dtg.rb +10 -30
- data/lib/dtg/active_support/time_with_zone_ext.rb +3 -2
- data/lib/dtg/date_time_ext.rb +5 -2
- data/lib/dtg/date_time_group.rb +31 -0
- data/lib/dtg/time_ext.rb +3 -2
- data/lib/dtg/version.rb +1 -1
- data/spec/lib/dtg/active_support/time_with_zone_ext_spec.rb +164 -0
- data/spec/lib/dtg/date_time_ext_spec.rb +163 -0
- data/spec/lib/dtg/date_time_group_spec.rb +30 -0
- data/spec/lib/dtg/time_ext_spec.rb +163 -0
- data/spec/lib/dtg/zones_spec.rb +109 -0
- data/spec/lib/dtg_spec.rb +18 -0
- data/spec/spec_helper.rb +109 -0
- metadata +21 -50
- data/MIT-LICENSE +0 -20
- data/README.md +0 -183
- data/lib/dtg/railtie.rb +0 -5
- data/lib/tasks/dtg_tasks.rake +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9baca4fefe520ca79708b64acb9ff54caa9dc5f5e4757af1da08040afe1310cd
|
4
|
+
data.tar.gz: 366d56c174427106189bfcbf316b1b366bdb47de0f7319a5fb7685d907e17cbb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2d90ad0ef678fe647a554bb38ad1f1b4ccfe7acd4b4005855422259f1d4c5ae8690ff385c949109bf8f0480dbf37d8c5ffd4d647e897f9313f7f3886988e07b5
|
7
|
+
data.tar.gz: c228294640713a51dcc3c1d5f63af0106643b29b38afe0e8e1c1c3cc07aa2f796caacfa4543077782cc4f738212b06792cf5cada51cc9cfd3ab22f1b92c62eaa
|
data/Gemfile
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
|
3
|
+
|
4
|
+
# Declare your gem's dependencies in dtg.gemspec.
|
5
|
+
# Bundler will treat runtime dependencies like base dependencies, and
|
6
|
+
# development dependencies will be added by default to the :development group.
|
7
|
+
gemspec
|
8
|
+
|
9
|
+
# Declare any dependencies that are still in development here instead of in
|
10
|
+
# your gemspec. These might include edge Rails or gems from your path or
|
11
|
+
# Git. Remember to move these dependencies to your gemspec before releasing
|
12
|
+
# your gem to rubygems.org.
|
13
|
+
|
14
|
+
# Used to test this gem for compatability and functionality
|
15
|
+
group :development, :test do
|
16
|
+
gem "cadre"
|
17
|
+
|
18
|
+
# Used for test suite reporting
|
19
|
+
gem 'coveralls', require: false
|
20
|
+
|
21
|
+
# Find places where code can be sped up
|
22
|
+
gem "fasterer"
|
23
|
+
|
24
|
+
# Code quality
|
25
|
+
gem "guard"
|
26
|
+
gem "guard-reek"
|
27
|
+
gem "guard-rspec"
|
28
|
+
gem "guard-rubocop"
|
29
|
+
|
30
|
+
# Check code quality extensions on git actions
|
31
|
+
gem "overcommit"
|
32
|
+
|
33
|
+
# Detect code smells for bad/strage code
|
34
|
+
gem "reek"
|
35
|
+
|
36
|
+
# RSpec for testing suite
|
37
|
+
gem "rspec"
|
38
|
+
gem "rspec-core"
|
39
|
+
gem "rspec-expectations"
|
40
|
+
gem "rspec-mocks"
|
41
|
+
gem "rspec-support"
|
42
|
+
|
43
|
+
# Code quality enforcer
|
44
|
+
gem "rubocop", "0.65.0"
|
45
|
+
gem "rubocop-rspec"
|
46
|
+
|
47
|
+
# StandardRB checks for consistent ruby conventions
|
48
|
+
gem "standard"
|
49
|
+
end
|
data/Rakefile
CHANGED
@@ -1,27 +1,4 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
end
|
6
|
-
|
7
|
-
require 'rdoc/task'
|
8
|
-
|
9
|
-
RDoc::Task.new(:rdoc) do |rdoc|
|
10
|
-
rdoc.rdoc_dir = 'rdoc'
|
11
|
-
rdoc.title = 'Dtg'
|
12
|
-
rdoc.options << '--line-numbers'
|
13
|
-
rdoc.rdoc_files.include('README.md')
|
14
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
|
-
end
|
16
|
-
|
17
|
-
require 'bundler/gem_tasks'
|
18
|
-
|
19
|
-
# RSpec rake task to run rspec on default - needed by travis
|
20
|
-
begin
|
21
|
-
require 'rspec/core/rake_task'
|
22
|
-
RSpec::Core::RakeTask.new(:spec)
|
23
|
-
|
24
|
-
task :default => :spec
|
25
|
-
rescue LoadError
|
26
|
-
# no rspec available
|
27
|
-
end
|
1
|
+
# desc "Explaining what the task does"
|
2
|
+
# task :dtg do
|
3
|
+
# # Task goes here
|
4
|
+
# end
|
data/dtg.gemspec
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# Ensure all of library added to gem
|
2
|
+
$:.push File.expand_path("lib", __dir__)
|
3
|
+
|
4
|
+
# Maintain your gem's version:
|
5
|
+
require "dtg/version"
|
6
|
+
|
7
|
+
# Describe your gem and declare its dependencies:
|
8
|
+
Gem::Specification.new do |spec|
|
9
|
+
spec.name = "dtg"
|
10
|
+
spec.version = Dtg::VERSION
|
11
|
+
spec.authors = ["SolarisFlare"]
|
12
|
+
spec.email = ["shadowbomb20@gmail.com"]
|
13
|
+
spec.homepage = "https://github.com/SolarisFlare/dtg/"
|
14
|
+
spec.summary = "DTG converts from a DateTime to a DTG"
|
15
|
+
spec.description = "A DTG is a DateTimeGroup which is used in the military to save time. DTG
|
16
|
+
are saved in the format DDHHMML MMM YY, where D is day, H is hour, L is
|
17
|
+
letter, M is month, and Y is year. The Month is the 3 character
|
18
|
+
representation such as JAN for January, MAY for May, DEC for December and so
|
19
|
+
on. Year is only the last two digits of the year e.g. 2019 is just 19. The
|
20
|
+
letter is the zone code such as W for whiskey which is HST, Z for zulu which
|
21
|
+
is GMT, A-Z are the zones used."
|
22
|
+
spec.license = "MIT"
|
23
|
+
spec.required_rubygems_version = Gem::Requirement.new(">= 0") if spec.respond_to? \
|
24
|
+
:required_rubygems_version=
|
25
|
+
spec.files = Dir["Gemfile", "dtg.gemspec", "Rakefile", "lib/**/*"]
|
26
|
+
spec.test_files = Dir["spec/**/*"]
|
27
|
+
spec.rubygems_version = %q{1.6.2}
|
28
|
+
|
29
|
+
# Active support is necessary for ActiveSupport::TimeWithZone integration
|
30
|
+
spec.add_dependency "activesupport"
|
31
|
+
|
32
|
+
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
33
|
+
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
34
|
+
if spec.respond_to?(:metadata)
|
35
|
+
spec.metadata["allowed_push_host"] = "TODO: Set to 'http://mygemserver.com'"
|
36
|
+
else
|
37
|
+
raise "RubyGems 2.0 or newer is required to protect against " \
|
38
|
+
"public gem pushes."
|
39
|
+
end
|
40
|
+
|
41
|
+
if spec.respond_to? :specification_version then
|
42
|
+
spec.specification_version = 3
|
43
|
+
|
44
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/dtg.rb
CHANGED
@@ -1,35 +1,15 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
require_relative "dtg/version"
|
2
|
+
require_relative "dtg/date_time_group"
|
3
|
+
require_relative "dtg/zones"
|
4
|
+
require_relative "dtg/time_ext"
|
5
|
+
require_relative "dtg/date_time_ext"
|
6
|
+
require_relative "dtg/active_support/time_with_zone_ext"
|
6
7
|
|
7
8
|
module Dtg
|
8
|
-
#
|
9
|
-
|
9
|
+
# Time zone safety setting
|
10
|
+
Time.zone ||= 'UTC'
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
"DTG gem is natively integrated with this class: #{self.class}"
|
14
|
-
end
|
15
|
-
|
16
|
-
# Convert the object to the proper zone and then format as dtg in zone
|
17
|
-
def to_dtg(zone = :z)
|
18
|
-
convert(zone).format(zone)
|
19
|
-
end
|
20
|
-
|
21
|
-
# Format the object into specified zone (as dtg)
|
22
|
-
def format(zone = :z)
|
23
|
-
key = zone.downcase.to_sym
|
24
|
-
raise "Error: #{zone} is not a valid zone" unless UTC_ZONES.key?(key)
|
25
|
-
dtg = "%d%H%M#{key.upcase.to_s} %b %y"
|
26
|
-
strftime(dtg)
|
27
|
-
end
|
28
|
-
|
29
|
-
# Convert the object into the proper zone specified
|
30
|
-
def convert(zone = :z)
|
31
|
-
key = zone.downcase.to_sym
|
32
|
-
raise "Error: #{zone} is not a valid zone" unless UTC_ZONES.key?(key)
|
33
|
-
key == :j ? self.dup : self.in_time_zone(UTC_ZONES[key])
|
12
|
+
def self.dtg
|
13
|
+
"DTG gem is active"
|
34
14
|
end
|
35
15
|
end
|
data/lib/dtg/date_time_ext.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
|
-
|
1
|
+
require_relative "date_time_group"
|
2
|
+
require "date"
|
3
|
+
require "active_support/core_ext/date"
|
4
|
+
# require "active_support/core_ext/date_and_time"
|
2
5
|
|
3
6
|
class DateTime
|
4
7
|
# Insert DTG Methods into this class
|
5
|
-
include
|
8
|
+
include DateTimeGroup
|
6
9
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require_relative "zones"
|
2
|
+
|
3
|
+
module DateTimeGroup
|
4
|
+
# Zones module has timezones (UTC_Zones) as dtg listings
|
5
|
+
include Zones
|
6
|
+
|
7
|
+
# Convert the object to the proper zone and then format as dtg in zone
|
8
|
+
def to_dtg(zone = :z)
|
9
|
+
convert(zone).format(zone)
|
10
|
+
end
|
11
|
+
|
12
|
+
# DTG Test to determine if was injected properly into class
|
13
|
+
def dtg
|
14
|
+
"DTG gem is natively integrated with this class: #{self.class}"
|
15
|
+
end
|
16
|
+
|
17
|
+
# Format the object into specified zone (as dtg)
|
18
|
+
def format(zone = :z)
|
19
|
+
key = zone.downcase.to_sym
|
20
|
+
raise "Error: #{zone} is not a valid zone" unless UTC_ZONES.key?(key)
|
21
|
+
dtg = "%d%H%M#{key.upcase.to_s} %b %y"
|
22
|
+
strftime(dtg)
|
23
|
+
end
|
24
|
+
|
25
|
+
# Convert the object into the proper zone specified
|
26
|
+
def convert(zone = :z)
|
27
|
+
key = zone.downcase.to_sym
|
28
|
+
raise "Error: #{zone} is not a valid zone" unless UTC_ZONES.key?(key)
|
29
|
+
key == :j ? self.dup : self.in_time_zone(UTC_ZONES[key])
|
30
|
+
end
|
31
|
+
end
|
data/lib/dtg/time_ext.rb
CHANGED
data/lib/dtg/version.rb
CHANGED
@@ -0,0 +1,164 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
RSpec.describe ActiveSupport::TimeWithZone do
|
4
|
+
# ActiveSupport::TimeWithZone preferred method of instantiation is with Time.zone.now, not new
|
5
|
+
let(:time) { Time.zone.now { include DateTimeGroup }}
|
6
|
+
|
7
|
+
describe "#to_dtg" do
|
8
|
+
context "when zone is a symbol" do
|
9
|
+
context "when symbol is lowercase" do
|
10
|
+
it "converts and formats as dtg" do
|
11
|
+
(:a..:z).to_set.delete(:j).each do |zone|
|
12
|
+
expect(time.to_dtg(zone)).to eq(time.in_time_zone(
|
13
|
+
Zones::UTC_ZONES[zone])
|
14
|
+
.strftime(
|
15
|
+
"%d%H%M#{zone.upcase.to_s} %b %y"))
|
16
|
+
end
|
17
|
+
# :j is separate because there is no local timezone identifier,
|
18
|
+
# it just gets returned and formatted
|
19
|
+
expect(time.to_dtg(:j)).to eq(time.format(:j))
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "when symbol is uppercase" do
|
24
|
+
it "converts and formats as dtg" do
|
25
|
+
(:A..:Z).to_set.delete(:J).each do |zone|
|
26
|
+
expect(time.to_dtg(zone)).to eq(time.in_time_zone(
|
27
|
+
Zones::UTC_ZONES[zone.downcase])
|
28
|
+
.strftime(
|
29
|
+
"%d%H%M#{zone.to_s} %b %y"))
|
30
|
+
end
|
31
|
+
# :J is separate because there is no local timezone identifier,
|
32
|
+
# it just gets returned and formatted
|
33
|
+
expect(time.to_dtg(:J)).to eq(time.format(:j))
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context "when zone is a single character string" do
|
39
|
+
context "when string is lowercase" do
|
40
|
+
it "converts and formats as dtg" do
|
41
|
+
('a'..'z').to_set.delete('j').each do |zone|
|
42
|
+
expect(time.to_dtg(zone)).to eq(time.in_time_zone(
|
43
|
+
Zones::UTC_ZONES[zone.to_sym])
|
44
|
+
.strftime(
|
45
|
+
"%d%H%M#{zone.upcase} %b %y"))
|
46
|
+
end
|
47
|
+
# 'j' is separate because there is no local timezone identifier
|
48
|
+
# it just gets returned and formatted
|
49
|
+
expect(time.to_dtg('j')).to eq(time.format(:j))
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context "when string is uppercase" do
|
54
|
+
it "converts and formats as dtg" do
|
55
|
+
('A'..'Z').to_set.delete('J').each do |zone|
|
56
|
+
expect(time.to_dtg(zone)).to eq(time.in_time_zone(
|
57
|
+
Zones::UTC_ZONES[zone.downcase.to_sym])
|
58
|
+
.strftime(
|
59
|
+
"%d%H%M#{zone} %b %y"))
|
60
|
+
end
|
61
|
+
# 'J' is separate because there is no local timezone identifier,
|
62
|
+
# it just gets returned and formatted
|
63
|
+
expect(time.to_dtg('J')).to eq(time.format(:j))
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe "#format" do
|
70
|
+
context "when zone is a symbol" do
|
71
|
+
context "when symbol is lowercase" do
|
72
|
+
it "formats to dtg standard" do
|
73
|
+
(:a..:z).each do |zone|
|
74
|
+
expect(time.format(zone)).to eq(time.strftime(
|
75
|
+
"%d%H%M#{zone.upcase.to_s} %b %y"))
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
context "when symbol is uppercase" do
|
81
|
+
it "formats to dtg standard" do
|
82
|
+
(:A..:Z).each do |zone|
|
83
|
+
expect(time.format(zone)).to eq(time.strftime(
|
84
|
+
"%d%H%M#{zone.to_s} %b %y"))
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
context "when zone is a single character string" do
|
91
|
+
context "when string is lowercase" do
|
92
|
+
it "formats to dtg standard" do
|
93
|
+
('a'..'z').each do |zone|
|
94
|
+
expect(time.format(zone)).to eq(time.strftime(
|
95
|
+
"%d%H%M#{zone.upcase} %b %y"))
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
context "when string is uppercase" do
|
101
|
+
it "formats to dtg standard" do
|
102
|
+
('A'..'Z').each do |zone|
|
103
|
+
expect(time.format(zone)).to eq(time.strftime(
|
104
|
+
"%d%H%M#{zone} %b %y"))
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
describe "#convert" do
|
112
|
+
context "when zone is a symbol" do
|
113
|
+
context "when symbol is lowercase" do
|
114
|
+
it "returns converted time to new zone" do
|
115
|
+
(:a..:z).to_set.delete(:j).each do |zone|
|
116
|
+
expect(time.convert(zone)).to eq(time.in_time_zone(
|
117
|
+
Zones::UTC_ZONES[zone]))
|
118
|
+
end
|
119
|
+
# :j is separate because there is no local timezone identifier,
|
120
|
+
# it just gets returned and formatted
|
121
|
+
expect(time.convert(:j)).to eq(time)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
context "when symbol is uppercase" do
|
126
|
+
it "returns converted time to new zone" do
|
127
|
+
(:A..:Z).to_set.delete(:J).each do |zone|
|
128
|
+
expect(time.convert(zone)).to eq(time.in_time_zone(
|
129
|
+
Zones::UTC_ZONES[zone.downcase]))
|
130
|
+
end
|
131
|
+
# :J is separate because there is no local timezone identifier,
|
132
|
+
# it just gets returned and formatted
|
133
|
+
expect(time.convert(:J)).to eq(time)
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
context "when zone is a single character string" do
|
139
|
+
context "when string is lowercase" do
|
140
|
+
it "returns converted time to new zone" do
|
141
|
+
('a'..'z').to_set.delete('j').each do |zone|
|
142
|
+
expect(time.convert(zone)).to eq(time.in_time_zone(
|
143
|
+
Zones::UTC_ZONES[zone.to_sym]))
|
144
|
+
end
|
145
|
+
# 'j' is separate because there is no local timezone identifier,
|
146
|
+
# it just gets returned and formatted
|
147
|
+
expect(time.convert('j')).to eq(time)
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
context "when string is uppercase" do
|
152
|
+
it "returns converted time to new zone" do
|
153
|
+
('A'..'Z').to_set.delete('J').each do |zone|
|
154
|
+
expect(time.convert(zone)).to eq(time.in_time_zone(
|
155
|
+
Zones::UTC_ZONES[zone.downcase.to_sym]))
|
156
|
+
end
|
157
|
+
# 'J' is separate because there is no local timezone identifier,
|
158
|
+
# it just gets returned and formatted
|
159
|
+
expect(time.convert('J')).to eq(time)
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
@@ -0,0 +1,163 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
RSpec.describe DateTime do
|
4
|
+
let(:time) { described_class.now { include DateTimeGroup } }
|
5
|
+
|
6
|
+
describe "#to_dtg" do
|
7
|
+
context "when zone is a symbol" do
|
8
|
+
context "when symbol is lowercase" do
|
9
|
+
it "converts and formats as dtg" do
|
10
|
+
(:a..:z).to_set.delete(:j).each do |zone|
|
11
|
+
expect(time.to_dtg(zone)).to eq(time.in_time_zone(
|
12
|
+
Zones::UTC_ZONES[zone])
|
13
|
+
.strftime(
|
14
|
+
"%d%H%M#{zone.upcase.to_s} %b %y"))
|
15
|
+
end
|
16
|
+
# :j is separate because there is no local timezone identifier,
|
17
|
+
# it just gets returned and formatted
|
18
|
+
expect(time.to_dtg(:j)).to eq(time.format(:j))
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context "when symbol is uppercase" do
|
23
|
+
it "converts and formats as dtg" do
|
24
|
+
(:A..:Z).to_set.delete(:J).each do |zone|
|
25
|
+
expect(time.to_dtg(zone)).to eq(time.in_time_zone(
|
26
|
+
Zones::UTC_ZONES[zone.downcase])
|
27
|
+
.strftime(
|
28
|
+
"%d%H%M#{zone.to_s} %b %y"))
|
29
|
+
end
|
30
|
+
# :J is separate because there is no local timezone identifier,
|
31
|
+
# it just gets returned and formatted
|
32
|
+
expect(time.to_dtg(:J)).to eq(time.format(:j))
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context "when zone is a single character string" do
|
38
|
+
context "when string is lowercase" do
|
39
|
+
it "converts and formats as dtg" do
|
40
|
+
('a'..'z').to_set.delete('j').each do |zone|
|
41
|
+
expect(time.to_dtg(zone)).to eq(time.in_time_zone(
|
42
|
+
Zones::UTC_ZONES[zone.to_sym])
|
43
|
+
.strftime(
|
44
|
+
"%d%H%M#{zone.upcase} %b %y"))
|
45
|
+
end
|
46
|
+
# 'j' is separate because there is no local timezone identifier
|
47
|
+
# it just gets returned and formatted
|
48
|
+
expect(time.to_dtg('j')).to eq(time.format(:j))
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context "when string is uppercase" do
|
53
|
+
it "converts and formats as dtg" do
|
54
|
+
('A'..'Z').to_set.delete('J').each do |zone|
|
55
|
+
expect(time.to_dtg(zone)).to eq(time.in_time_zone(
|
56
|
+
Zones::UTC_ZONES[zone.downcase.to_sym])
|
57
|
+
.strftime(
|
58
|
+
"%d%H%M#{zone} %b %y"))
|
59
|
+
end
|
60
|
+
# 'J' is separate because there is no local timezone identifier,
|
61
|
+
# it just gets returned and formatted
|
62
|
+
expect(time.to_dtg('J')).to eq(time.format(:j))
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "#format" do
|
69
|
+
context "when zone is a symbol" do
|
70
|
+
context "when symbol is lowercase" do
|
71
|
+
it "formats to dtg standard" do
|
72
|
+
(:a..:z).each do |zone|
|
73
|
+
expect(time.format(zone)).to eq(time.strftime(
|
74
|
+
"%d%H%M#{zone.upcase.to_s} %b %y"))
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
context "when symbol is uppercase" do
|
80
|
+
it "formats to dtg standard" do
|
81
|
+
(:A..:Z).each do |zone|
|
82
|
+
expect(time.format(zone)).to eq(time.strftime(
|
83
|
+
"%d%H%M#{zone.to_s} %b %y"))
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
context "when zone is a single character string" do
|
90
|
+
context "when string is lowercase" do
|
91
|
+
it "formats to dtg standard" do
|
92
|
+
('a'..'z').each do |zone|
|
93
|
+
expect(time.format(zone)).to eq(time.strftime(
|
94
|
+
"%d%H%M#{zone.upcase} %b %y"))
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
context "when string is uppercase" do
|
100
|
+
it "formats to dtg standard" do
|
101
|
+
('A'..'Z').each do |zone|
|
102
|
+
expect(time.format(zone)).to eq(time.strftime(
|
103
|
+
"%d%H%M#{zone} %b %y"))
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
describe "#convert" do
|
111
|
+
context "when zone is a symbol" do
|
112
|
+
context "when symbol is lowercase" do
|
113
|
+
it "returns converted time to new zone" do
|
114
|
+
(:a..:z).to_set.delete(:j).each do |zone|
|
115
|
+
expect(time.convert(zone)).to eq(time.in_time_zone(
|
116
|
+
Zones::UTC_ZONES[zone]))
|
117
|
+
end
|
118
|
+
# :j is separate because there is no local timezone identifier,
|
119
|
+
# it just gets returned and formatted
|
120
|
+
expect(time.convert(:j)).to eq(time)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
context "when symbol is uppercase" do
|
125
|
+
it "returns converted time to new zone" do
|
126
|
+
(:A..:Z).to_set.delete(:J).each do |zone|
|
127
|
+
expect(time.convert(zone)).to eq(time.in_time_zone(
|
128
|
+
Zones::UTC_ZONES[zone.downcase]))
|
129
|
+
end
|
130
|
+
# :J is separate because there is no local timezone identifier,
|
131
|
+
# it just gets returned and formatted
|
132
|
+
expect(time.convert(:J)).to eq(time)
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
context "when zone is a single character string" do
|
138
|
+
context "when string is lowercase" do
|
139
|
+
it "returns converted time to new zone" do
|
140
|
+
('a'..'z').to_set.delete('j').each do |zone|
|
141
|
+
expect(time.convert(zone)).to eq(time.in_time_zone(
|
142
|
+
Zones::UTC_ZONES[zone.to_sym]))
|
143
|
+
end
|
144
|
+
# 'j' is separate because there is no local timezone identifier,
|
145
|
+
# it just gets returned and formatted
|
146
|
+
expect(time.convert('j')).to eq(time)
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
context "when string is uppercase" do
|
151
|
+
it "returns converted time to new zone" do
|
152
|
+
('A'..'Z').to_set.delete('J').each do |zone|
|
153
|
+
expect(time.convert(zone)).to eq(time.in_time_zone(
|
154
|
+
Zones::UTC_ZONES[zone.downcase.to_sym]))
|
155
|
+
end
|
156
|
+
# 'J' is separate because there is no local timezone identifier,
|
157
|
+
# it just gets returned and formatted
|
158
|
+
expect(time.convert('J')).to eq(time)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|