temporal-rails 0.2.1 → 0.2.2
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/LICENSE +1 -1
- data/lib/temporal/controller_additions.rb +1 -1
- data/lib/temporal/engine.rb +1 -1
- data/lib/temporal/version.rb +1 -1
- data/spec/controllers/application_controller_spec.rb +22 -0
- data/spec/dummy/config/application.rb +5 -3
- data/spec/dummy/config/environments/development.rb +2 -2
- data/spec/dummy/config/environments/test.rb +2 -2
- data/spec/dummy/config/routes.rb +1 -1
- data/spec/dummy/db/schema.rb +16 -0
- data/spec/engine/temporal_spec.rb +21 -0
- data/spec/javascripts/temporal_spec.js.coffee +72 -0
- data/spec/spec_helper.rb +39 -0
- data/vendor/assets/javascripts/temporal.js.coffee +67 -47
- metadata +28 -4
data/LICENSE
CHANGED
@@ -4,7 +4,7 @@ Rails to use.
|
|
4
4
|
Documentation and other useful information can be found at
|
5
5
|
https://github.com/jejacks0n/temporal
|
6
6
|
|
7
|
-
Copyright (c)
|
7
|
+
Copyright (c) 2012 Jeremy Jackson
|
8
8
|
|
9
9
|
Permission is hereby granted, free of charge, to any person obtaining
|
10
10
|
a copy of this software and associated documentation files (the
|
@@ -5,7 +5,7 @@ module Temporal
|
|
5
5
|
end
|
6
6
|
|
7
7
|
def set_time_zone
|
8
|
-
Time.zone = ActiveSupport::TimeZone.new(cookies[:timezone])
|
8
|
+
Time.zone = cookies[:timezone] ? ActiveSupport::TimeZone.new(cookies[:timezone]) : Rails.application.config.time_zone
|
9
9
|
end
|
10
10
|
end
|
11
11
|
end
|
data/lib/temporal/engine.rb
CHANGED
@@ -2,7 +2,7 @@ require 'temporal/controller_additions'
|
|
2
2
|
|
3
3
|
module Temporal
|
4
4
|
class Engine < ::Rails::Engine
|
5
|
-
initializer
|
5
|
+
initializer "temporal.controller_additions" do
|
6
6
|
ActiveSupport.on_load(:action_controller) do
|
7
7
|
include Temporal::ControllerAdditions
|
8
8
|
end
|
data/lib/temporal/version.rb
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ApplicationController, type: :controller do
|
4
|
+
|
5
|
+
before do
|
6
|
+
Rails.application.config.time_zone = 'Central Time (US & Canada)'
|
7
|
+
end
|
8
|
+
|
9
|
+
it "set the timezone to the configured default if the cookie isn't set" do
|
10
|
+
get :welcome
|
11
|
+
Time.zone.to_s.should =~ /Central Time/
|
12
|
+
response.code.should == "200"
|
13
|
+
end
|
14
|
+
|
15
|
+
it "set the timezone based on the cookie" do
|
16
|
+
@request.cookies[:timezone] = 'America/Denver'
|
17
|
+
get :welcome
|
18
|
+
Time.zone.to_s.should =~ /Denver/
|
19
|
+
response.code.should == "200"
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
require File.expand_path('../boot', __FILE__)
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'action_controller/railtie'
|
4
|
+
require 'sprockets/railtie'
|
5
|
+
|
4
6
|
require 'evergreen/rails'
|
5
7
|
|
6
8
|
if defined?(Bundler)
|
@@ -46,13 +48,13 @@ module Dummy
|
|
46
48
|
# Use SQL instead of Active Record's schema dumper when creating the database.
|
47
49
|
# This is necessary if your schema can't be completely dumped by the schema dumper,
|
48
50
|
# like if you have constraints or database-specific column types
|
49
|
-
config.active_record.schema_format = :sql
|
51
|
+
#config.active_record.schema_format = :sql
|
50
52
|
|
51
53
|
# Enforce whitelist mode for mass assignment.
|
52
54
|
# This will create an empty whitelist of attributes available for mass-assignment for all models
|
53
55
|
# in your app. As such, your models will need to explicitly whitelist or blacklist accessible
|
54
56
|
# parameters by using an attr_accessible or attr_protected declaration.
|
55
|
-
config.active_record.whitelist_attributes = true
|
57
|
+
#config.active_record.whitelist_attributes = true
|
56
58
|
|
57
59
|
# Enable the asset pipeline
|
58
60
|
config.assets.enabled = true
|
@@ -23,11 +23,11 @@ Dummy::Application.configure do
|
|
23
23
|
config.action_dispatch.best_standards_support = :builtin
|
24
24
|
|
25
25
|
# Raise exception on mass assignment protection for Active Record models
|
26
|
-
config.active_record.mass_assignment_sanitizer = :strict
|
26
|
+
#config.active_record.mass_assignment_sanitizer = :strict
|
27
27
|
|
28
28
|
# Log the query plan for queries taking more than this (works
|
29
29
|
# with SQLite, MySQL, and PostgreSQL)
|
30
|
-
config.active_record.auto_explain_threshold_in_seconds = 0.5
|
30
|
+
#config.active_record.auto_explain_threshold_in_seconds = 0.5
|
31
31
|
|
32
32
|
# Do not compress assets
|
33
33
|
config.assets.compress = false
|
@@ -27,10 +27,10 @@ Dummy::Application.configure do
|
|
27
27
|
# Tell Action Mailer not to deliver emails to the real world.
|
28
28
|
# The :test delivery method accumulates sent emails in the
|
29
29
|
# ActionMailer::Base.deliveries array.
|
30
|
-
config.action_mailer.delivery_method = :test
|
30
|
+
#config.action_mailer.delivery_method = :test
|
31
31
|
|
32
32
|
# Raise exception on mass assignment protection for Active Record models
|
33
|
-
config.active_record.mass_assignment_sanitizer = :strict
|
33
|
+
#config.active_record.mass_assignment_sanitizer = :strict
|
34
34
|
|
35
35
|
# Print deprecation notices to the stderr
|
36
36
|
config.active_support.deprecation = :stderr
|
data/spec/dummy/config/routes.rb
CHANGED
@@ -0,0 +1,16 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# This file is auto-generated from the current state of the database. Instead
|
3
|
+
# of editing this file, please use the migrations feature of Active Record to
|
4
|
+
# incrementally modify your database, and then regenerate this schema definition.
|
5
|
+
#
|
6
|
+
# Note that this schema.rb definition is the authoritative source for your
|
7
|
+
# database schema. If you need to create the application database on another
|
8
|
+
# system, you should be using db:schema:load, not running all the migrations
|
9
|
+
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
|
10
|
+
# you'll amass, the slower it'll run and the greater likelihood for issues).
|
11
|
+
#
|
12
|
+
# It's strongly recommended to check this file into your version control system.
|
13
|
+
|
14
|
+
ActiveRecord::Schema.define(:version => 0) do
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Temporal do
|
4
|
+
|
5
|
+
it "is a module" do
|
6
|
+
Temporal.should be_a(Module)
|
7
|
+
end
|
8
|
+
|
9
|
+
it "has a version" do
|
10
|
+
Temporal::VERSION.should be_a(String)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "defines ControllerAdditions" do
|
14
|
+
Temporal::ControllerAdditions.should be_a(Module)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "includes ControllerAdditions in ActionController::Base" do
|
18
|
+
ActionController::Base.new.methods.should include(:set_time_zone)
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -2,3 +2,75 @@ require '/assets/temporal.js'
|
|
2
2
|
|
3
3
|
describe "Temporal", ->
|
4
4
|
|
5
|
+
beforeEach ->
|
6
|
+
document.cookie = 'timezone='
|
7
|
+
document.cookie = 'timezone_offset='
|
8
|
+
@timezoneStub = {name: 'foo', offset: 0} # 0 here ensure the jsonp request isn't made
|
9
|
+
|
10
|
+
describe "signature", ->
|
11
|
+
|
12
|
+
it "has a detect and reference method", ->
|
13
|
+
expect(Object.keys(Temporal).length).toBe 2
|
14
|
+
expect(Object.keys(Temporal)).toEqual ['detect', 'reference']
|
15
|
+
expect(typeof(Temporal.detect)).toBe 'function'
|
16
|
+
expect(typeof(Temporal.reference)).toBe 'function'
|
17
|
+
|
18
|
+
|
19
|
+
describe ".detect", ->
|
20
|
+
|
21
|
+
beforeEach ->
|
22
|
+
window.Temporal = Temporal.reference() if Temporal.reference
|
23
|
+
@spy = spyOn(Temporal.prototype, 'detectLocally').andReturn @timezoneStub
|
24
|
+
@callback = ->
|
25
|
+
|
26
|
+
it "instantiates an instance and passes arguments", ->
|
27
|
+
instance = Temporal.detect('username', @callback)
|
28
|
+
expect(@spy).toHaveBeenCalled()
|
29
|
+
expect(instance.username).toBe 'username'
|
30
|
+
expect(instance.callback).toBe @callback
|
31
|
+
|
32
|
+
|
33
|
+
describe "constructor", ->
|
34
|
+
|
35
|
+
it "calls #detectLocally", ->
|
36
|
+
spy = spyOn(Temporal.prototype, 'detectLocally').andReturn @timezoneStub
|
37
|
+
new Temporal()
|
38
|
+
expect(spy.callCount).toBe 1
|
39
|
+
|
40
|
+
it "calls #geoLocate if there's a username for the GeoName API", ->
|
41
|
+
spyOn(Temporal.prototype, 'detectLocally').andReturn name: 'foo', offset: 1
|
42
|
+
spy = spyOn(Temporal.prototype, 'geoLocate')
|
43
|
+
new Temporal('username')
|
44
|
+
expect(spy.callCount).toBe 1
|
45
|
+
|
46
|
+
it "doesn't call #geoLocate if there isn't a username", ->
|
47
|
+
spyOn(Temporal.prototype, 'detectLocally').andReturn name: 'foo', offset: 1
|
48
|
+
spy = spyOn(Temporal.prototype, 'geoLocate')
|
49
|
+
new Temporal()
|
50
|
+
expect(spy.callCount).toBe 0
|
51
|
+
|
52
|
+
it "calls #set", ->
|
53
|
+
spyOn(Temporal.prototype, 'detectLocally').andReturn @timezoneStub
|
54
|
+
spy = spyOn(Temporal.prototype, 'set')
|
55
|
+
new Temporal()
|
56
|
+
expect(spy.callCount).toBe 1
|
57
|
+
expect(spy).toHaveBeenCalledWith name: 'foo', offset: 0
|
58
|
+
|
59
|
+
|
60
|
+
describe "#detectLocally", ->
|
61
|
+
|
62
|
+
beforeEach ->
|
63
|
+
spyOn(Temporal.prototype, 'detect')
|
64
|
+
@temporal = new Temporal()
|
65
|
+
|
66
|
+
it "returns a quickly determined time zone", ->
|
67
|
+
spyOn(Temporal.prototype, 'januaryOffset').andReturn -420
|
68
|
+
spyOn(Temporal.prototype, 'juneOffset').andReturn -360
|
69
|
+
timezone = @temporal.detectLocally()
|
70
|
+
expect(timezone).toEqual name: 'America/Denver', offset: -7
|
71
|
+
|
72
|
+
it "handles other locations than denver", ->
|
73
|
+
spyOn(Temporal.prototype, 'januaryOffset').andReturn 120
|
74
|
+
spyOn(Temporal.prototype, 'juneOffset').andReturn 120
|
75
|
+
timezone = @temporal.detectLocally()
|
76
|
+
expect(timezone).toEqual name: 'Africa/Johannesburg', offset: 2
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
ENV['RAILS_ENV'] ||= 'test'
|
2
|
+
ENV['RAILS_ROOT'] = File.expand_path('../dummy', __FILE__)
|
3
|
+
require File.expand_path('../dummy/config/environment', __FILE__)
|
4
|
+
|
5
|
+
require 'rspec/rails'
|
6
|
+
require 'rspec/autorun'
|
7
|
+
|
8
|
+
# Requires supporting ruby files with custom matchers and macros, etc,
|
9
|
+
# in spec/support/ and its subdirectories.
|
10
|
+
Dir[Temporal::Engine.root.join('spec/support/**/*.rb')].each { |f| require f }
|
11
|
+
|
12
|
+
RSpec.configure do |config|
|
13
|
+
# ## Mock Framework
|
14
|
+
#
|
15
|
+
# If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
|
16
|
+
#
|
17
|
+
# config.mock_with :mocha
|
18
|
+
# config.mock_with :flexmock
|
19
|
+
# config.mock_with :rr
|
20
|
+
|
21
|
+
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
|
22
|
+
#config.fixture_path = "#{::Temporal::Engine.root}/spec/fixtures"
|
23
|
+
|
24
|
+
# If you're not using ActiveRecord, or you'd prefer not to run each of your
|
25
|
+
# examples within a transaction, remove the following line or assign false
|
26
|
+
# instead of true.
|
27
|
+
#config.use_transactional_fixtures = true
|
28
|
+
|
29
|
+
# If true, the base class of anonymous controllers will be inferred
|
30
|
+
# automatically. This will be the default behavior in future versions of
|
31
|
+
# rspec-rails.
|
32
|
+
config.infer_base_class_for_anonymous_controllers = false
|
33
|
+
|
34
|
+
# Run specs in random order to surface order dependencies. If you find an
|
35
|
+
# order dependency and want to debug it, you can fix the order by providing
|
36
|
+
# the seed, which is printed after each run.
|
37
|
+
# --seed 1234
|
38
|
+
config.order = "random"
|
39
|
+
end
|
@@ -1,41 +1,22 @@
|
|
1
|
-
|
1
|
+
# Temporal -- use detect() to detect, and reference() if you need a reference
|
2
|
+
# to the class so you can use it.
|
3
|
+
# -----------------------------------------------------------------------------
|
4
|
+
class Temporal
|
2
5
|
|
3
|
-
|
4
|
-
if typeof(keyOrProperties) == 'string'
|
5
|
-
zone = TIMEZONES[keyOrProperties]
|
6
|
-
@[property] = value for own property, value of zone
|
7
|
-
@resolveAmbiguity()
|
8
|
-
else
|
9
|
-
@[property] = value for own property, value of keyOrProperties
|
10
|
-
|
11
|
-
resolveAmbiguity: ->
|
12
|
-
ambiguous = AMBIGIOUS_ZONES[@name]
|
13
|
-
return if typeof(ambiguous) is 'undefined'
|
14
|
-
for key, value of ambiguous
|
15
|
-
if Temporal.dateIsDst(DST_START_DATES[value])
|
16
|
-
@name = value
|
17
|
-
return
|
6
|
+
jsonpCallback = "geoSuccessCallback#{parseInt(Math.random() * 10000)}"
|
18
7
|
|
8
|
+
@detect: (username = null, callback = null) =>
|
9
|
+
new Temporal(username, callback)
|
19
10
|
|
20
|
-
|
11
|
+
constructor: (@username = null, @callback = null) ->
|
12
|
+
@detect()
|
21
13
|
|
22
|
-
|
23
|
-
timezone = @
|
24
|
-
if timezone.offset != @get().offset
|
25
|
-
navigator.geolocation.getCurrentPosition(@geoSuccess, ->) if @username and navigator.geolocation
|
14
|
+
detect: ->
|
15
|
+
timezone = @detectLocally()
|
16
|
+
@geoLocate() if @username and navigator.geolocation and timezone.offset != @get().offset
|
26
17
|
@set(timezone)
|
27
18
|
|
28
|
-
|
29
|
-
window[JSONP_CALLBACK] = @parseGeoResponse
|
30
|
-
script = document.createElement('script')
|
31
|
-
script.setAttribute('src', "http://api.geonames.org/timezoneJSON?lat=#{position.coords.latitude}&lng=#{position.coords.longitude}&username=#{@username}&callback=#{JSONP_CALLBACK}")
|
32
|
-
document.getElementsByTagName('head')[0].appendChild(script)
|
33
|
-
|
34
|
-
@parseGeoResponse: (response) =>
|
35
|
-
delete(window[JSONP_CALLBACK])
|
36
|
-
@set(new TimeZone(name: response.timezoneId, offset: response.rawOffset)) if response.timezoneId
|
37
|
-
|
38
|
-
@quick: =>
|
19
|
+
detectLocally: ->
|
39
20
|
januaryOffset = @januaryOffset()
|
40
21
|
juneOffset = @juneOffset()
|
41
22
|
key = {offset: januaryOffset, dst: 0, hemisphere: HEMISPHERE_UNKNOWN}
|
@@ -45,35 +26,76 @@ class Temporal
|
|
45
26
|
key = {offset: juneOffset, dst: 1, hemisphere: HEMISPHERE_SOUTH}
|
46
27
|
new TimeZone("#{([key.offset, key.dst].join(','))}#{if key.hemisphere is HEMISPHERE_SOUTH then ',s' else ''}")
|
47
28
|
|
48
|
-
|
49
|
-
|
29
|
+
geoLocate: ->
|
30
|
+
navigator.geolocation.getCurrentPosition(@geoSuccess, ->)
|
31
|
+
|
32
|
+
geoSuccess: (position) =>
|
33
|
+
window[jsonpCallback] = @parseGeoResponse
|
34
|
+
script = document.createElement('script')
|
35
|
+
script.setAttribute('src', "http://api.geonames.org/timezoneJSON?lat=#{position.coords.latitude}&lng=#{position.coords.longitude}&username=#{@username}&callback=#{jsonpCallback}")
|
36
|
+
document.getElementsByTagName('head')[0].appendChild(script)
|
37
|
+
|
38
|
+
parseGeoResponse: (response) =>
|
39
|
+
delete(window[jsonpCallback])
|
40
|
+
@set(new TimeZone(name: response.timezoneId, offset: response.rawOffset)) if response.timezoneId
|
41
|
+
|
42
|
+
set: (@timezone) ->
|
43
|
+
window.timezone = @timezone
|
50
44
|
expiration = new Date()
|
51
45
|
expiration.setMonth(expiration.getMonth() + 1)
|
52
|
-
document.cookie = "timezone=#{timezone.name}; expires=#{expiration.toGMTString()}"
|
53
|
-
document.cookie = "timezone_offset=#{timezone.offset}; expires=#{expiration.toGMTString()}"
|
54
|
-
@callback?(timezone)
|
46
|
+
document.cookie = "timezone=#{@timezone.name}; expires=#{expiration.toGMTString()}"
|
47
|
+
document.cookie = "timezone_offset=#{@timezone.offset}; expires=#{expiration.toGMTString()}"
|
48
|
+
@callback?(@timezone)
|
55
49
|
|
56
|
-
|
50
|
+
get: ->
|
57
51
|
name: @getCookie('timezone')
|
58
|
-
offset: parseFloat(@getCookie('timezone_offset'))
|
52
|
+
offset: parseFloat(@getCookie('timezone_offset')) || 0
|
59
53
|
|
60
|
-
|
54
|
+
getCookie: (name) ->
|
61
55
|
match = document.cookie.match(new RegExp("(?:^|;)\\s?#{name}=(.*?)(?:;|$)", 'i'))
|
62
56
|
match && unescape(match[1])
|
63
57
|
|
64
|
-
|
58
|
+
januaryOffset: ->
|
65
59
|
@dateOffset(new Date(2011, 0, 1, 0, 0, 0, 0))
|
66
60
|
|
67
|
-
|
61
|
+
juneOffset: ->
|
68
62
|
@dateOffset(new Date(2011, 5, 1, 0, 0, 0, 0))
|
69
63
|
|
70
|
-
|
64
|
+
dateOffset: (date) ->
|
71
65
|
-date.getTimezoneOffset()
|
72
66
|
|
73
|
-
|
67
|
+
|
68
|
+
# Timezone -- contains offset and timezone name
|
69
|
+
# -----------------------------------------------------------------------------
|
70
|
+
class TimeZone
|
71
|
+
|
72
|
+
dateIsDst = (date) ->
|
74
73
|
(((if date.getMonth() > 5 then @juneOffset() else @januaryOffset())) - @dateOffset(date)) isnt 0
|
75
74
|
|
76
|
-
|
75
|
+
resolveAmbiguity = ->
|
76
|
+
ambiguous = AMBIGIOUS_ZONES[@name]
|
77
|
+
return if typeof(ambiguous) is 'undefined'
|
78
|
+
for key, value of ambiguous
|
79
|
+
if dateIsDst(DST_START_DATES[value])
|
80
|
+
@name = value
|
81
|
+
return
|
82
|
+
|
83
|
+
constructor: (keyOrProperties) ->
|
84
|
+
if typeof(keyOrProperties) == 'string'
|
85
|
+
zone = TIMEZONES[keyOrProperties]
|
86
|
+
@[property] = value for own property, value of zone
|
87
|
+
resolveAmbiguity()
|
88
|
+
else
|
89
|
+
@[property] = value for own property, value of keyOrProperties
|
90
|
+
|
91
|
+
|
92
|
+
# Expose Temporal to the global scope
|
93
|
+
# -----------------------------------------------------------------------------
|
94
|
+
@Temporal = {detect: Temporal.detect, reference: -> Temporal}
|
95
|
+
|
96
|
+
|
97
|
+
# Data
|
98
|
+
# -----------------------------------------------------------------------------
|
77
99
|
HEMISPHERE_SOUTH = 'SOUTH'
|
78
100
|
HEMISPHERE_NORTH = 'NORTH'
|
79
101
|
HEMISPHERE_UNKNOWN = 'N/A'
|
@@ -191,5 +213,3 @@ TIMEZONES =
|
|
191
213
|
'765,1,s': {offset: 12.75, name: 'Pacific/Chatham'}
|
192
214
|
'780,0': {offset: 13, name: 'Pacific/Tongatapu'}
|
193
215
|
'840,0': {offset: 14, name: 'Pacific/Kiritimati'}
|
194
|
-
|
195
|
-
@Temporal = {detect: Temporal.detect}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: temporal-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-10-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: railties
|
@@ -107,6 +107,22 @@ dependencies:
|
|
107
107
|
- - ! '>='
|
108
108
|
- !ruby/object:Gem::Version
|
109
109
|
version: 1.0.0
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: rspec-rails
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
110
126
|
description: Javascript timezone detection that also sets Time.zone for Rails to use
|
111
127
|
email:
|
112
128
|
- jejacks0n@gmail.com
|
@@ -122,6 +138,7 @@ files:
|
|
122
138
|
- lib/temporal-rails.rb
|
123
139
|
- vendor/assets/javascripts/temporal.js.coffee
|
124
140
|
- LICENSE
|
141
|
+
- spec/controllers/application_controller_spec.rb
|
125
142
|
- spec/dummy/Rakefile
|
126
143
|
- spec/dummy/app/assets/javascripts/application.js
|
127
144
|
- spec/dummy/app/controllers/application_controller.rb
|
@@ -142,10 +159,13 @@ files:
|
|
142
159
|
- spec/dummy/config/initializers/wrap_parameters.rb
|
143
160
|
- spec/dummy/config/locales/en.yml
|
144
161
|
- spec/dummy/config/routes.rb
|
162
|
+
- spec/dummy/db/schema.rb
|
145
163
|
- spec/dummy/public/favicon.ico
|
146
164
|
- spec/dummy/script/rails
|
165
|
+
- spec/engine/temporal_spec.rb
|
147
166
|
- spec/javascripts/spec_helper.js
|
148
167
|
- spec/javascripts/temporal_spec.js.coffee
|
168
|
+
- spec/spec_helper.rb
|
149
169
|
homepage: http://github.com/jejacks0n/temporal
|
150
170
|
licenses:
|
151
171
|
- MIT
|
@@ -161,7 +181,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
161
181
|
version: '0'
|
162
182
|
segments:
|
163
183
|
- 0
|
164
|
-
hash:
|
184
|
+
hash: -492844622740408129
|
165
185
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
166
186
|
none: false
|
167
187
|
requirements:
|
@@ -170,7 +190,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
170
190
|
version: '0'
|
171
191
|
segments:
|
172
192
|
- 0
|
173
|
-
hash:
|
193
|
+
hash: -492844622740408129
|
174
194
|
requirements: []
|
175
195
|
rubyforge_project:
|
176
196
|
rubygems_version: 1.8.24
|
@@ -178,6 +198,7 @@ signing_key:
|
|
178
198
|
specification_version: 3
|
179
199
|
summary: ! 'Temporal: Javascript timezone detection for Rails'
|
180
200
|
test_files:
|
201
|
+
- spec/controllers/application_controller_spec.rb
|
181
202
|
- spec/dummy/Rakefile
|
182
203
|
- spec/dummy/app/assets/javascripts/application.js
|
183
204
|
- spec/dummy/app/controllers/application_controller.rb
|
@@ -198,7 +219,10 @@ test_files:
|
|
198
219
|
- spec/dummy/config/initializers/wrap_parameters.rb
|
199
220
|
- spec/dummy/config/locales/en.yml
|
200
221
|
- spec/dummy/config/routes.rb
|
222
|
+
- spec/dummy/db/schema.rb
|
201
223
|
- spec/dummy/public/favicon.ico
|
202
224
|
- spec/dummy/script/rails
|
225
|
+
- spec/engine/temporal_spec.rb
|
203
226
|
- spec/javascripts/spec_helper.js
|
204
227
|
- spec/javascripts/temporal_spec.js.coffee
|
228
|
+
- spec/spec_helper.rb
|