datetime_helper 1.0.0

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 ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ OTU5ZmUzODhlYmM0ZThmNjI0NGUxMTQ2YmIzZmZkZDY1NWQyZWViOA==
5
+ data.tar.gz: !binary |-
6
+ YTM0ZWE3MmEyZjljOTg2YzY4NTE0ODY1NWI3MTE5MWM5OWQyYWExNQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ YjQ0NWIzNGE3ODk5MzA5ZTQ5NmE1M2I0NTJmNWE2YTM3OGVlOWMxNzU1ZDM1
10
+ MDc2YzQzZmI2YTdiNGQ2NzNjNWJiOGVjMTk4Mzg2MGMxNzM2YWJkZjFhZmY0
11
+ ZGMzMDk5NGViNmUyMmQzYzI5OWRlNTY0MmQ3Y2E0MzEyYWRjZjM=
12
+ data.tar.gz: !binary |-
13
+ ZjFhOTZjMzU5ZTA0N2Q2MGYzZmY3NTRmZmIxOTA1NTU0YjAwOTI2NzYxMjA4
14
+ ZGZkZmE1ZGMxYjllNTFlNzNhOWY3MzAwYzZiMDM4YWY1NzU2ODRhZGRiMWQ3
15
+ OWZkN2JjNTFmYWEwNmQzMjJiYmIwNGU2MzgxOGM5ODczZGY3ODE=
data/.gitignore ADDED
@@ -0,0 +1,43 @@
1
+ *.gem
2
+ *.rbc
3
+ *.bundle
4
+ *.so
5
+ *.o
6
+ *.a
7
+ mkmf.log
8
+ /.config
9
+ /coverage/
10
+ /InstalledFiles
11
+ /pkg/
12
+ /spec/reports/
13
+ /test/tmp/
14
+ /test/version_tmp/
15
+ /tmp/
16
+
17
+ ## Specific to RubyMotion:
18
+ .dat*
19
+ .repl_history
20
+ build/
21
+
22
+ ## Documentation cache and generated files:
23
+ /.yardoc/
24
+ /_yardoc/
25
+ /doc/
26
+ /rdoc/
27
+
28
+ ## Environment normalisation:
29
+ /.bundle/
30
+ /vendor/bundle
31
+ /lib/bundler/man/
32
+
33
+ # for a library or gem, you might want to ignore these files since the code is
34
+ # intended to run in multiple environments; otherwise, check them in:
35
+ Gemfile.lock
36
+ .ruby-version
37
+ .ruby-gemset
38
+
39
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
40
+ .rvmrc
41
+
42
+ # We develop on Macs
43
+ .DS_Store
data/.travis.yml ADDED
@@ -0,0 +1,19 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0-p598
4
+ - 2.1.0
5
+ - 2.1.1
6
+ - 2.1.2
7
+ - 2.1.4
8
+ - 2.2.0
9
+ - 2.2.1
10
+ - 2.2.2
11
+ before_install:
12
+ - gem install bundler
13
+ - export TZ=Australia/Canberra
14
+ deploy:
15
+ provider: rubygems
16
+ api_key:
17
+ secure: FZVmAZ6QMTUCZU4Iogf3J+ DgVyqZMi353GaG1wecIejOgsZd5mcZu7j0AS2OFcU9gvoq28DG3v0aM70KoFqGIgcxPoP2Y84B6USK3rpVxGxudcj6yXuVLqvLWv2l47oUTVU5Z71GL42m6UchYub23eVkZoyVTuzKUzxQ3P9nMNg=
18
+ on:
19
+ tags: true
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in datetime_helpers.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,13 @@
1
+ Copyright (c) 2015 Westfield Labs
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
data/README.md ADDED
@@ -0,0 +1,130 @@
1
+ # The Datetime Helper
2
+
3
+ A collection of useful utilities for projects that have to deal with dates, times, and time zones, with particular utility for Rails projects that enforce the use of Zulu Time.
4
+
5
+ ## Features
6
+
7
+ 1. A base method called `is_zulu_time?`,
8
+ 2. An `rspec` matcher called `be_zulu_time`,
9
+ 3. An `ActiveModel` validator called `zulu_time`, and
10
+ 4. An `ActiveModel::Serializer` helper method called `in_zulu_time`.
11
+
12
+ Each feature can be required individually so you can use the `rspec` matcher, `ActiveModel` validator, or `ActiveModel::Serializer` helper in isolation.
13
+
14
+ [![Build Status](https://travis-ci.org/westfieldlabs/datetime_helper.svg?branch=master)](https://travis-ci.org/westfieldlabs/datetime_helper)
15
+
16
+ ## Requirements
17
+
18
+ 1. `Ruby`, `Bundler`, etc. The usual suspects. (Tested against Ruby 2.0.0 and up)
19
+ 2. `rspec` if you `require 'datetime_helper/rspec'`
20
+ 3. `active_model` if you `require 'datetime_helper/active_model'`
21
+ 4. `active_model_serializers` if you `require 'datetime_helper/active_model_serialiser'`
22
+
23
+ ## TL;DR
24
+
25
+ Zulu Time is an ISO 8601 formatted string representing a `datetime` but in the time zone UTC+0. This makes it trivial for client applications to display dates and times correctly in their local, or other nominated time zones.
26
+
27
+ Enforcing Zulu Time across a range of projects requires a common approach to validating incoming strings, representing the data internally, serialising the data back out into strings, and testing date and time fields.
28
+
29
+ The `Datetime Helper` was developed to provide that common approach, and it is available as an open source project because we believe it is generically useful.
30
+
31
+ ## To use
32
+
33
+ Put this in your `Gemfile`
34
+
35
+ ```ruby
36
+ gem 'datetime_helper'
37
+ ```
38
+
39
+ ### Testing a string to see if it is a Zulu Time formatted string
40
+
41
+ ```ruby
42
+ DatetimeHelper.is_zulu_time? "some_string"
43
+ ```
44
+
45
+ ### Using the `be_zulu_time` matcher in your `RSpec` tests
46
+
47
+ Put this in your `spec_helper.rb` or equivalent
48
+
49
+ ```ruby
50
+ require 'datetime_helper/rspec'
51
+
52
+ RSpec.configure do |config|
53
+ config.include DatetimeHelper::Matchers
54
+ end
55
+ ```
56
+
57
+ And put this in your `rspec` tests.
58
+
59
+ ```ruby
60
+ it {expect(subject[:deleted_at]).to be_zulu_time}
61
+ ```
62
+
63
+ ### Validating `ActiveModel` fields to ensure they hold UTC+0 `datetime` data
64
+
65
+ First be sure you `require 'datetime_helper/active_model'`
66
+
67
+ Then your model class can add:
68
+
69
+ ```ruby
70
+ include DatetimeHelper::Validators
71
+
72
+ validates :updated_at, zulu_time: true
73
+ ```
74
+
75
+ This will verify that a `Time` is supplied at `UTC+0`, or that a `DateTime` has `.zone == "+00:00"`.
76
+
77
+ ### Enforcing `ActiveModel::Serializer` Zulu Time string formats
78
+
79
+ First be sure you `require 'datetime_helper/active_model_serialisers'`
80
+
81
+ Then you can put this in your serialisers:
82
+
83
+ ```ruby
84
+ extend DatetimeHelper::Serialisers
85
+
86
+ in_zulu_time :updated_at
87
+ ```
88
+
89
+ or if you have a bunch of 'em
90
+
91
+ ```ruby
92
+ extend DatetimeHelper::Serialisers
93
+
94
+ %w(updated_at deleted_at).each { |attribute| in_zulu_time attribute }
95
+ ```
96
+
97
+ This will ensure that the serialised output is a proper Zulu Time formatted string.
98
+
99
+ ## To build
100
+
101
+ ```sh
102
+ bundle install
103
+ gem build datetime_helper.gemspec
104
+ ```
105
+
106
+ ## To test
107
+
108
+ ```sh
109
+ bundle install
110
+ rake
111
+ ```
112
+
113
+ The tests offer insight into how to use these utilities.
114
+
115
+ ## To contribute
116
+
117
+ Contributions are encouraged. See the [contribution instructions](contributing.md) for the preferred contribution process.
118
+
119
+ ## License
120
+
121
+ The `Datetime Helper` is © 2015 Westfield Labs and is available for use under the [Apache 2.0](LICENSE) license.
122
+
123
+ ## Version history
124
+
125
+ |Version| Comments |
126
+ |:------|:-------------------------------------------|
127
+ |`0.0.1`| First draft — only the rspec matcher |
128
+ |`0.0.2`| Added the `ActiveModel` validator |
129
+ |`0.0.3`| Added the `ActiveModel::Serializer` helper |
130
+ |`1.0.0`| Cleaned up for first official release |
data/Rakefile ADDED
@@ -0,0 +1,12 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rspec/core/rake_task'
3
+
4
+ task :default => [:spec]
5
+
6
+ desc "Validate the gemspec"
7
+ task :gemspec do
8
+ gemspec = eval(File.read(Dir["*.gemspec"].first))
9
+ gemspec.validate && puts('gemspec valid')
10
+ end
11
+
12
+ RSpec::Core::RakeTask.new(:spec)
data/contributing.md ADDED
@@ -0,0 +1,15 @@
1
+ ## Contributing
2
+
3
+ "Brother I got a 12 step plan for you…" - The Alabama Three
4
+
5
+ 0. Raise an issue in this project outling the change you'd like to make. You'll need the `issue_number`
6
+ 1. Fork this project into your own Github account
7
+ 2. Create your feature branch (`git checkout -b {issue_number}_my-new-feature`)
8
+ 4. Push to the branch (`git push -u origin {issue_number}_my-new-feature`)
9
+ 5. Write rspec tests to formalise the outcomes of your change
10
+ 6. write the code to implement the changes, ensuring that the tests eventually pass
11
+ 7. Commit your changes (`git commit -am '{issue_number} Added some feature'`)
12
+ 8. Push to the branch (`git push -u origin my-new-feature`)
13
+ 9. Create a new Pull Request using Github's built-in mechanisms.
14
+ 10. Wait for a code review to come back, or an approval.
15
+ 11. Either go back and fix whatever the reviewers recommend, or watch and smile as your PR gets merged in and you become part of sotware development history.
@@ -0,0 +1,29 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'datetime_helper/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "datetime_helper"
8
+ spec.version = DatetimeHelper::VERSION
9
+ spec.authors = ["davesag"]
10
+ spec.email = ["davesag@gmail.com"]
11
+ spec.summary = "A collection of useful helpers for projects which have to deal with dates, times, and time zones."
12
+ spec.description = "The `Datetime Helper` was developed to provide a common approach to validating incoming datetime data, representing that data internally, serialising it back out into strings, and testing of date and time fields."
13
+ spec.homepage = "https://github.com/westfieldlabs/datetime_helper"
14
+ spec.license = "Apache 2.0"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_runtime_dependency 'rspec', '~> 3'
22
+ spec.add_runtime_dependency 'activemodel', '~> 4'
23
+ spec.add_runtime_dependency 'active_model_serializers'
24
+
25
+ spec.add_development_dependency "bundler", "~> 1.9"
26
+ spec.add_development_dependency "rake", "~> 10.4"
27
+ spec.add_development_dependency "pry"
28
+
29
+ end
@@ -0,0 +1,2 @@
1
+ require_relative "../datetime_helper"
2
+ require_relative "validators/zulu_time_active_model_validator"
@@ -0,0 +1,3 @@
1
+ require 'active_model_serializers'
2
+ require_relative "../datetime_helper"
3
+ require_relative "serialisers/zulu_time_active_model_serialiser_helper"
@@ -0,0 +1,8 @@
1
+ module DatetimeHelper
2
+ module Matchers
3
+
4
+ RSpec::Matchers.define :be_zulu_time do |expected|
5
+ match { |datetime| DatetimeHelper.is_zulu_time?(datetime) }
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,2 @@
1
+ require_relative "../datetime_helper"
2
+ require_relative "matchers/zulu_time_rspec_matcher"
@@ -0,0 +1,13 @@
1
+ # Enforces that a DateTime is serialised as zulu time
2
+
3
+ module DatetimeHelper
4
+ module Serialisers
5
+
6
+ def enforce_zulu_time(attribute)
7
+ define_method(attribute) do
8
+ object.send(attribute).utc.iso8601 unless object.send(attribute).nil?
9
+ end
10
+ end
11
+
12
+ end
13
+ end
@@ -0,0 +1,29 @@
1
+ # Validates that a supplied value is in fact
2
+ # a DateTime, and is in timezone UTC+0
3
+ require 'time'
4
+ require 'active_model'
5
+
6
+ module DatetimeHelper
7
+ module Validators
8
+ class ZuluTimeValidator < ActiveModel::EachValidator
9
+
10
+ def validate_each(record, attribute, value)
11
+ return if value.is_a? DateTime and utc_datetime? value
12
+ return if value.is_a? Time and utc_time? value
13
+
14
+ record.errors[attribute] << (options[:message] || 'is not in UTC+0 (Zulu Time)')
15
+ end
16
+
17
+ private
18
+
19
+ def utc_datetime?(value)
20
+ value.zone == "+00:00"
21
+ end
22
+
23
+ def utc_time?(value)
24
+ value.utc?
25
+ end
26
+
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,3 @@
1
+ module DatetimeHelper
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,11 @@
1
+ require "datetime_helper/version"
2
+
3
+ module DatetimeHelper
4
+
5
+ ZULU_TIME_PATTERN = /^\d{4}-[0-1][0-9]-[0-3]\d{1}T[0-2]\d{1}:[0-5]\d{1}:[0-5]\d{1}Z$/
6
+
7
+ def self.is_zulu_time?(time_string)
8
+ !(time_string =~ ZULU_TIME_PATTERN).nil?
9
+ end
10
+
11
+ end
@@ -0,0 +1,23 @@
1
+ require_relative 'spec_helper'
2
+
3
+ describe DatetimeHelper do
4
+ describe '#is_zulu_time?' do
5
+ context "given a valid Zulu Time string" do
6
+ let(:valid_string) { Time.now.utc.iso8601 }
7
+ it { expect{ Time.parse(valid_string)}.to_not raise_error }
8
+ it { expect(DatetimeHelper.is_zulu_time?(valid_string)).to eq true }
9
+ end
10
+
11
+ context "given a valid ISO 8601 string that's not Zulu Time" do
12
+ let(:invalid_string) { Time.now.iso8601 }
13
+ it { expect{ Time.parse(invalid_string)}.to_not raise_error }
14
+ it { expect(DatetimeHelper.is_zulu_time?(invalid_string)).to eq false }
15
+ end
16
+
17
+ context "given nonsense" do
18
+ let(:nonsense) { "not really a zulu time string" }
19
+ it { expect{ Time.parse(nonsense)}.to raise_error }
20
+ it { expect(DatetimeHelper.is_zulu_time?(nonsense)).to eq false }
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,13 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe 'be_zulu_time' do
4
+ context 'given a valid zulu time string' do
5
+ let(:valid_time_string) { Time.now.utc.iso8601 }
6
+ it { expect(valid_time_string).to be_zulu_time }
7
+ end
8
+
9
+ context 'given an invalid zulu time string' do
10
+ let(:invalid_time_string) { "This is not a zulu time string" }
11
+ it { expect(invalid_time_string).to_not be_zulu_time }
12
+ end
13
+ end
@@ -0,0 +1,44 @@
1
+ require_relative '../spec_helper'
2
+ require "datetime_helper/active_model_serialiser"
3
+
4
+ class TestSerialiser < ActiveModel::Serializer
5
+ extend DatetimeHelper::Serialisers
6
+ attributes :updated_at
7
+
8
+ enforce_zulu_time :updated_at
9
+ end
10
+
11
+ class TestItemNoTime
12
+ include ActiveModel::SerializerSupport
13
+ attr_reader :updated_at
14
+ def initialize(options = {})
15
+ @updated_at = nil
16
+ end
17
+ end
18
+
19
+ class TestItem < TestItemNoTime
20
+ def initialize(options = {})
21
+ @updated_at = options[:updated_at] || Time.now.utc
22
+ end
23
+ end
24
+
25
+ describe DatetimeHelper::Serialisers do
26
+ let(:serialiser) { TestSerialiser.new(item) }
27
+ subject { serialiser.attributes }
28
+
29
+ context 'with a UTC time' do
30
+ let(:item) { TestItem.new }
31
+ it { expect(subject[:updated_at]).to be_zulu_time}
32
+ end
33
+
34
+ context 'with a local time' do
35
+ let(:item) { TestItem.new updated_at: Time.now.getlocal }
36
+ it { expect(subject[:updated_at]).to be_zulu_time}
37
+ end
38
+
39
+ context 'with a nil time' do
40
+ let(:item) { TestItemNoTime.new }
41
+ it { expect(subject[:updated_at]).to be_nil}
42
+ end
43
+
44
+ end
@@ -0,0 +1,26 @@
1
+ require 'datetime_helper/rspec'
2
+ require 'pry' # for debugging
3
+ require 'time' # used all over the place
4
+
5
+ RSpec.configure do |config|
6
+
7
+ # If no example or groups contains the filter symbol below, then run all
8
+ config.run_all_when_everything_filtered = true
9
+ # If supplied, run only those examples and groups with the symbol below
10
+ # i.e. it "some text", :focus do
11
+ config.filter_run_including :focus
12
+
13
+ # Run specs in random order to surface order dependencies. If you find an
14
+ # order dependency and want to debug it, you can fix the order by providing
15
+ # the seed, which is printed after each run.
16
+ # --seed 1234
17
+ config.order = 'random'
18
+
19
+ # Hi I'm Dave I like pretty colours.
20
+ config.color = true
21
+ config.tty = true
22
+ config.formatter = :documentation
23
+
24
+ config.include DatetimeHelper::Matchers
25
+
26
+ end
@@ -0,0 +1,60 @@
1
+ require_relative '../spec_helper'
2
+ require "datetime_helper/active_model"
3
+
4
+ describe DatetimeHelper::Validators::ZuluTimeValidator do
5
+ let(:validator) { described_class.new({attributes: [:updated_at]})}
6
+ let(:model) { double('model') }
7
+
8
+ # if, by chance, you happen to be running these tests
9
+ # on a machine set to UTC+0 then the local time tests
10
+ # won't really be a valid test.
11
+ let(:already_in_utc) { Time.now.utc == Time.now.getlocal }
12
+
13
+ before :each do
14
+ allow(model).to receive_message_chain('errors').and_return([])
15
+ allow(model.errors).to receive_message_chain('[]').and_return({})
16
+ allow(model.errors[]).to receive_message_chain('<<')
17
+ end
18
+
19
+ context "given a UTC+0 Time" do
20
+ let(:valid_time) { Time.now.utc }
21
+ it "is accepted as valid" do
22
+ expect(model.errors[]).to_not receive('<<')
23
+ validator.validate_each(model, 'updated_at', valid_time)
24
+ end
25
+ end
26
+
27
+ context "given a local Time" do
28
+ let(:invalid_time) { Time.now.getlocal }
29
+ it "is not accepted as valid" do
30
+ pending "Local Time is UTC so skipping test" if already_in_utc
31
+ expect(model.errors[]).to receive('<<')
32
+ validator.validate_each(model, 'updated_at', invalid_time)
33
+ end
34
+ end
35
+
36
+ context "given a UTC+0 DateTime" do
37
+ let(:valid_time) { DateTime.now.new_offset(0) }
38
+ it "is accepted as valid" do
39
+ expect(model.errors[]).to_not receive('<<')
40
+ validator.validate_each(model, 'updated_at', valid_time)
41
+ end
42
+ end
43
+
44
+ context "given a local DateTime" do
45
+ let(:invalid_time) { DateTime.now }
46
+ it "is not accepted as valid" do
47
+ pending "Local Time is UTC so skipping test" if already_in_utc
48
+ expect(model.errors[]).to receive('<<')
49
+ validator.validate_each(model, 'updated_at', invalid_time)
50
+ end
51
+ end
52
+
53
+ context "given a String instead of a Time or DateTime" do
54
+ let(:nonsense) { "this makes no sense" }
55
+ it "is not accepted as valid" do
56
+ expect(model.errors[]).to receive('<<')
57
+ validator.validate_each(model, 'updated_at', nonsense)
58
+ end
59
+ end
60
+ end
metadata ADDED
@@ -0,0 +1,157 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: datetime_helper
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - davesag
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-05-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activemodel
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '4'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '4'
41
+ - !ruby/object:Gem::Dependency
42
+ name: active_model_serializers
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '1.9'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '1.9'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '10.4'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '10.4'
83
+ - !ruby/object:Gem::Dependency
84
+ name: pry
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: The `Datetime Helper` was developed to provide a common approach to validating
98
+ incoming datetime data, representing that data internally, serialising it back out
99
+ into strings, and testing of date and time fields.
100
+ email:
101
+ - davesag@gmail.com
102
+ executables: []
103
+ extensions: []
104
+ extra_rdoc_files: []
105
+ files:
106
+ - .gitignore
107
+ - .travis.yml
108
+ - Gemfile
109
+ - LICENSE
110
+ - README.md
111
+ - Rakefile
112
+ - contributing.md
113
+ - datetime_helper.gemspec
114
+ - lib/datetime_helper.rb
115
+ - lib/datetime_helper/active_model.rb
116
+ - lib/datetime_helper/active_model_serialiser.rb
117
+ - lib/datetime_helper/matchers/zulu_time_rspec_matcher.rb
118
+ - lib/datetime_helper/rspec.rb
119
+ - lib/datetime_helper/serialisers/zulu_time_active_model_serialiser_helper.rb
120
+ - lib/datetime_helper/validators/zulu_time_active_model_validator.rb
121
+ - lib/datetime_helper/version.rb
122
+ - spec/datetime_helper_spec.rb
123
+ - spec/matchers/zulu_time_rspec_matcher_spec.rb
124
+ - spec/serialisers/zulu_time_active_model_serialiser_helper_spec.rb
125
+ - spec/spec_helper.rb
126
+ - spec/validators/zulu_time_active_model_validator_spec.rb
127
+ homepage: https://github.com/westfieldlabs/datetime_helper
128
+ licenses:
129
+ - Apache 2.0
130
+ metadata: {}
131
+ post_install_message:
132
+ rdoc_options: []
133
+ require_paths:
134
+ - lib
135
+ required_ruby_version: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ! '>='
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ required_rubygems_version: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ! '>='
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ requirements: []
146
+ rubyforge_project:
147
+ rubygems_version: 2.4.5
148
+ signing_key:
149
+ specification_version: 4
150
+ summary: A collection of useful helpers for projects which have to deal with dates,
151
+ times, and time zones.
152
+ test_files:
153
+ - spec/datetime_helper_spec.rb
154
+ - spec/matchers/zulu_time_rspec_matcher_spec.rb
155
+ - spec/serialisers/zulu_time_active_model_serialiser_helper_spec.rb
156
+ - spec/spec_helper.rb
157
+ - spec/validators/zulu_time_active_model_validator_spec.rb