dotiw 4.0.1 → 5.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +45 -0
  3. data/.rspec +2 -0
  4. data/Appraisals +19 -0
  5. data/CHANGELOG.md +42 -6
  6. data/Gemfile +2 -0
  7. data/MIT-LICENSE +1 -1
  8. data/README.markdown +151 -63
  9. data/Rakefile +3 -1
  10. data/benchmarks/time_hash_bench.rb +19 -0
  11. data/dotiw.gemspec +17 -19
  12. data/gemfiles/rails_4.gemfile +5 -3
  13. data/gemfiles/rails_5.0.gemfile +5 -3
  14. data/gemfiles/rails_5.1.gemfile +5 -3
  15. data/gemfiles/rails_5.2.gemfile +9 -0
  16. data/gemfiles/rails_6.0.gemfile +9 -0
  17. data/lib/dotiw.rb +33 -14
  18. data/lib/dotiw/action_view/helpers/date_helper.rb +32 -0
  19. data/lib/dotiw/locale/ar.yml +84 -26
  20. data/lib/dotiw/locale/da.yml +35 -0
  21. data/lib/dotiw/locale/de.yml +36 -1
  22. data/lib/dotiw/locale/en.yml +35 -0
  23. data/lib/dotiw/locale/es.yml +36 -1
  24. data/lib/dotiw/locale/fr.yml +35 -0
  25. data/lib/dotiw/locale/id.yml +35 -0
  26. data/lib/dotiw/locale/it.yml +35 -0
  27. data/lib/dotiw/locale/ja.yml +35 -0
  28. data/lib/dotiw/locale/ko.yml +23 -0
  29. data/lib/dotiw/locale/nb.yml +36 -1
  30. data/lib/dotiw/locale/nl.yml +35 -0
  31. data/lib/dotiw/locale/pl.yml +42 -0
  32. data/lib/dotiw/locale/pt-BR.yml +35 -0
  33. data/lib/dotiw/locale/ru.yml +37 -0
  34. data/lib/dotiw/locale/sv.yml +48 -0
  35. data/lib/dotiw/locale/vi.yml +48 -0
  36. data/lib/dotiw/locale/zh-CN.yml +23 -0
  37. data/lib/dotiw/locale/zh-TW.yml +60 -0
  38. data/lib/dotiw/methods.rb +108 -0
  39. data/lib/dotiw/time_hash.rb +52 -40
  40. data/lib/dotiw/version.rb +2 -2
  41. data/spec/lib/dotiw_spec.rb +304 -159
  42. data/spec/lib/i18n/ar.yml +2 -0
  43. data/spec/lib/i18n/da.yml +2 -0
  44. data/spec/lib/i18n/de.yml +2 -0
  45. data/spec/lib/i18n/en.yml +2 -0
  46. data/spec/lib/i18n/es.yml +3 -0
  47. data/spec/lib/i18n/fr.yml +2 -0
  48. data/spec/lib/i18n/id.yml +2 -0
  49. data/spec/lib/i18n/it.yml +3 -0
  50. data/spec/lib/i18n/ja.yml +2 -0
  51. data/spec/lib/i18n/ko.yml +2 -0
  52. data/spec/lib/i18n/nb.yml +2 -0
  53. data/spec/lib/i18n/nl.yml +2 -0
  54. data/spec/lib/i18n/pl.yml +2 -0
  55. data/spec/lib/i18n/pt-BR.yml +2 -0
  56. data/spec/lib/i18n/ru.yml +5 -0
  57. data/spec/lib/i18n/sv.yml +2 -0
  58. data/spec/lib/i18n/vi.yml +22 -0
  59. data/spec/lib/i18n/zh-CN.yml +2 -0
  60. data/spec/lib/i18n/zh-TW.yml +2 -0
  61. data/spec/spec_helper.rb +2 -9
  62. metadata +76 -30
  63. data/.travis.yml +0 -27
  64. data/lib/dotiw/action_view_ext/helpers/date_helper.rb +0 -103
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rubygems'
2
4
  require 'rake'
3
5
  require 'bundler'
@@ -9,4 +11,4 @@ Bundler::GemHelper.install_tasks
9
11
 
10
12
  RSpec::Core::RakeTask.new(:spec)
11
13
 
12
- task :default => :spec
14
+ task default: :spec
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'benchmark/ips'
4
+ require 'benchmark/memory'
5
+ require 'active_support/core_ext/numeric'
6
+ require 'active_support/core_ext/integer'
7
+
8
+ require_relative '../lib/dotiw/time_hash'
9
+
10
+ from = Time.now
11
+ to = Time.now + 1.year + 2.months + 3.weeks + 4.days + 5.hours + 6.minutes + 7.seconds
12
+
13
+ %i[ips memory].each do |type|
14
+ Benchmark.public_send(type) do |x|
15
+ x.report('master') { DOTIW::TimeHash.new(nil, from, to) }
16
+
17
+ x.compare!
18
+ end
19
+ end
data/dotiw.gemspec CHANGED
@@ -1,37 +1,35 @@
1
- # dotiw.gemspec
2
- # -*- encoding: utf-8 -*-
1
+ # frozen_string_literal: true
3
2
 
4
- $:.push File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.push File.expand_path('lib', __dir__)
5
4
  require 'dotiw/version'
6
5
 
7
6
  Gem::Specification.new do |s|
8
7
  s.name = 'dotiw'
9
8
  s.version = DOTIW::VERSION
10
- s.licenses = ["MIT"]
9
+ s.licenses = ['MIT']
11
10
 
12
- s.authors = ["Ryan Bigg", "Lauran Jansen"]
13
- s.date = %q{2016-03-08}
11
+ s.authors = ['Ryan Bigg', 'Lauran Jansen']
14
12
  s.description = "dotiw is a gem for Rails that overrides the
15
13
  default distance_of_time_in_words and provides
16
14
  a more accurate output. Do you crave accuracy
17
15
  down to the second? So do I. That's why I made
18
16
  this gem. - Ryan"
19
- s.summary = "Better distance_of_time_in_words for Rails"
20
- s.email = ["radarlistener@gmail.com", "github@lauranjansen.com"]
21
- s.homepage = "https://github.com/radar/dotiw"
17
+ s.summary = 'Better distance_of_time_in_words for Rails'
18
+ s.email = ['radarlistener@gmail.com', 'github@lauranjansen.com']
19
+ s.homepage = 'https://github.com/radar/distance_of_time_in_words'
22
20
 
23
- s.add_dependency "actionpack", ">= 4"
24
- s.add_dependency "i18n"
21
+ s.add_dependency 'activesupport'
22
+ s.add_dependency 'i18n'
25
23
 
26
- s.add_development_dependency "rake"
27
- s.add_development_dependency "bundler"
28
- s.add_development_dependency "rspec", "~> 3.0"
29
- s.add_development_dependency "tzinfo"
30
- s.add_development_dependency "appraisal"
31
- s.add_development_dependency "pry"
24
+ s.add_development_dependency 'appraisal'
25
+ s.add_development_dependency 'bundler'
26
+ s.add_development_dependency 'pry'
27
+ s.add_development_dependency 'rake'
28
+ s.add_development_dependency 'rspec', '~> 3.0'
29
+ s.add_development_dependency 'tzinfo', '~> 1.2.7'
32
30
 
33
31
  s.files = `git ls-files`.split("\n")
34
32
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
35
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
36
- s.require_paths = ["lib"]
33
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
34
+ s.require_paths = ['lib']
37
35
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # This file was generated by Appraisal
2
4
 
3
- source "http://rubygems.org"
5
+ source 'http://rubygems.org'
4
6
 
5
- gem "rails", "~> 4.0"
7
+ gem 'rails', '~> 4.0'
6
8
 
7
- gemspec path: "../"
9
+ gemspec path: '../'
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # This file was generated by Appraisal
2
4
 
3
- source "http://rubygems.org"
5
+ source 'http://rubygems.org'
4
6
 
5
- gem "rails", "~> 5.0.0"
7
+ gem 'rails', '~> 5.0.0'
6
8
 
7
- gemspec path: "../"
9
+ gemspec path: '../'
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # This file was generated by Appraisal
2
4
 
3
- source "http://rubygems.org"
5
+ source 'http://rubygems.org'
4
6
 
5
- gem "rails", "~> 5.1"
7
+ gem 'rails', '~> 5.1.0'
6
8
 
7
- gemspec path: "../"
9
+ gemspec path: '../'
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file was generated by Appraisal
4
+
5
+ source 'http://rubygems.org'
6
+
7
+ gem 'rails', '~> 5.2.0'
8
+
9
+ gemspec path: '../'
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file was generated by Appraisal
4
+
5
+ source 'http://rubygems.org'
6
+
7
+ gem 'rails', '~> 6.0.0'
8
+
9
+ gemspec path: '../'
data/lib/dotiw.rb CHANGED
@@ -1,30 +1,49 @@
1
- # encoding: utf-8
1
+ # frozen_string_literal: true
2
2
 
3
3
  require 'i18n'
4
4
 
5
- # Rails hacks
6
- if defined?(ActionView::Helpers)
7
- require 'dotiw/action_view_ext/helpers/date_helper'
8
- end
5
+ require 'active_support'
6
+ require 'active_support/core_ext'
9
7
 
10
8
  module DOTIW
9
+ extend ActiveSupport::Autoload
10
+
11
+ eager_autoload do
12
+ autoload :VERSION, 'dotiw/version'
13
+ autoload :TimeHash, 'dotiw/time_hash'
14
+ autoload :Methods, 'dotiw/methods'
15
+ end
16
+
11
17
  extend self
12
-
13
- autoload :VERSION, 'dotiw/version'
14
- autoload :TimeHash, 'dotiw/time_hash'
15
18
 
16
19
  DEFAULT_I18N_SCOPE = :'datetime.dotiw'
20
+ DEFAULT_I18N_SCOPE_COMPACT = :'datetime.dotiw_compact'
17
21
 
18
- def init_i18n
22
+ def init_i18n!
19
23
  I18n.load_path.unshift(*locale_files)
20
24
  I18n.reload!
21
25
  end
22
26
 
23
- protected
24
- # Returns all locale files shipped with library
27
+ def languages
28
+ @languages ||= (locale_files.map { |path| path.split(%r{[/.]})[-2].to_sym })
29
+ end
30
+
25
31
  def locale_files
26
- Dir[File.join(File.dirname(__FILE__), 'dotiw', 'locale', '**/*')]
32
+ files 'dotiw/locale', '*.yml'
27
33
  end
28
- end # DOTIW
29
34
 
30
- DOTIW.init_i18n
35
+ protected
36
+
37
+ def files(directory, ext)
38
+ Dir[File.join File.dirname(__FILE__), directory, ext]
39
+ end
40
+ end
41
+
42
+ DOTIW.init_i18n!
43
+
44
+ begin
45
+ require 'action_view'
46
+ require_relative 'dotiw/action_view/helpers/date_helper'
47
+ rescue LoadError
48
+ # TODO: don't rely on exception
49
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ActionView
4
+ module Helpers
5
+ module DateHelper
6
+ alias _distance_of_time_in_words distance_of_time_in_words
7
+ alias _time_ago_in_words time_ago_in_words
8
+
9
+ include DOTIW::Methods
10
+
11
+ def distance_of_time_in_words(from_time, to_time = 0, include_seconds_or_options = {}, options = {})
12
+ return _distance_of_time_in_words(from_time, to_time, options) if options[:vague]
13
+
14
+ DOTIW::Methods.distance_of_time_in_words(from_time, to_time, include_seconds_or_options, options.except(:vague))
15
+ end
16
+
17
+ def distance_of_time_in_words_to_now(to_time = 0, include_seconds_or_options = {}, options = {})
18
+ return _distance_of_time_in_words(Time.now, to_time, options) if options[:vague]
19
+
20
+ DOTIW::Methods.distance_of_time_in_words(Time.now, to_time, include_seconds_or_options, options.except(:vague))
21
+ end
22
+
23
+ def distance_of_time_in_percent(from_time, current_time, to_time, options = {})
24
+ options[:precision] ||= 0
25
+ options = options_with_scope(options)
26
+ distance = to_time - from_time
27
+ result = ((current_time - from_time) / distance) * 100
28
+ number_with_precision(result, options).to_s + '%'
29
+ end
30
+ end
31
+ end
32
+ end
@@ -2,45 +2,103 @@ ar:
2
2
  datetime:
3
3
  dotiw:
4
4
  seconds:
5
- one: ثانية
5
+ zero: ثانية
6
+ one: ثانية واحدة
6
7
  two: ثانيتين
7
- few: "%{count} ثواني"
8
- many: "%{count} ثواني"
9
- other: "%{count} ثواني"
8
+ few: "%{count} توانٍ"
9
+ many: "%{count} ثانية"
10
+ other: "%{count} ثانية"
10
11
  minutes:
11
- one: دقيقة
12
+ zero: دقيقة
13
+ one: دقيقة واحدة
12
14
  two: دقيقتين
13
15
  few: "%{count} دقائق"
14
- many: "%{count} دقائق"
15
- other: "%{count} دقائق"
16
+ many: "%{count} دقيقة"
17
+ other: "%{count} دقيقة"
16
18
  hours:
17
- one: ساعة
19
+ zero: ساعة
20
+ one: ساعة واحدة
18
21
  two: ساعتين
19
22
  few: "%{count} ساعات"
20
- many: "%{count} ساعات"
21
- other: "%{count} ساعات"
23
+ many: "%{count} ساعة"
24
+ other: "%{count} ساعة"
22
25
  days:
23
- one: يوم
24
- two: يومان
26
+ zero: يوم
27
+ one: يوم واحد
28
+ two: يومين
25
29
  few: "%{count} أيام"
26
- many: "%{count} أيام"
27
- other: "%{count} أيام"
30
+ many: "%{count} يومًا"
31
+ other: "%{count} يوم"
28
32
  weeks:
29
- one: أسبوع
30
- two: إسبوعين
33
+ zero: أسبوع
34
+ one: أسبوع واحدة
35
+ two: أسبوعين
31
36
  few: "%{count} أسابيع"
32
37
  many: "%{count} أسابيع"
33
- other: "%{count} أسابيع"
38
+ other: "%{count} أسيوع"
34
39
  months:
35
- one: شهر
40
+ zero: شهر
41
+ one: شهر واحد
36
42
  two: شهرين
37
43
  few: "%{count} أشهر"
38
- many: "%{count} أشهر"
39
- other: "%{count} أشهر"
44
+ many: "%{count} شهراً"
45
+ other: "%{count} شهر"
40
46
  years:
41
- one: سنة
42
- two: سنتان
43
- few: "%{count} سنوات"
44
- many: "%{count} سنوات"
45
- other: "%{count} سنوات"
46
- less_than_x: أقل من %{distance}
47
+ zero: عام
48
+ one: عام واحد
49
+ two: عامين
50
+ few: "%{count} أعوام"
51
+ many: "%{count} عاماً"
52
+ other: "%{count} عام"
53
+ less_than_x: "%{distance} أقل من"
54
+ dotiw_compact:
55
+ seconds:
56
+ zero: ثانية
57
+ one: ثانية واحدة
58
+ two: ثانيتين
59
+ few: "%{count}توانٍ"
60
+ many: "%{count}ثانية"
61
+ other: "%{count}ثانية"
62
+ minutes:
63
+ zero: دقيقة
64
+ one: دقيقة واحدة
65
+ two: دقيقتين
66
+ few: "%{count}دقائق"
67
+ many: "%{count}دقيقة"
68
+ other: "%{count}دقيقة"
69
+ hours:
70
+ zero: ساعة
71
+ one: ساعة واحدة
72
+ two: ساعتين
73
+ few: "%{count}ساعات"
74
+ many: "%{count}ساعة"
75
+ other: "%{count}ساعة"
76
+ days:
77
+ zero: يوم
78
+ one: يوم واحد
79
+ two: يومين
80
+ few: "%{count}أيام"
81
+ many: "%{count}يومًا"
82
+ other: "%{count}يوم"
83
+ weeks:
84
+ zero: أسبوع
85
+ one: أسبوع واحدة
86
+ two: أسبوعين
87
+ few: "%{count}أسابيع"
88
+ many: "%{count}أسابيع"
89
+ other: "%{count}أسيوع"
90
+ months:
91
+ zero: شهر
92
+ one: شهر واحد
93
+ two: شهرين
94
+ few: "%{count}أشهر"
95
+ many: "%{count}شهراً"
96
+ other: "%{count}شهر"
97
+ years:
98
+ zero: عام
99
+ one: عام واحد
100
+ two: عامين
101
+ few: "%{count}أعوام"
102
+ many: "%{count}عاماً"
103
+ other: "%{count}عام"
104
+ less_than_x: "%{distance}>"
@@ -21,3 +21,38 @@ da:
21
21
  other: "%{count} måneder"
22
22
  years: "%{count} år"
23
23
  less_than_x: "mindre end %{distance}"
24
+ dotiw_compact:
25
+ seconds:
26
+ one: 1s
27
+ other: "%{count}s"
28
+ minutes:
29
+ one: 1m
30
+ other: "%{count}m"
31
+ hours:
32
+ one: 1t
33
+ other: "%{count}t"
34
+ days:
35
+ one: 1d
36
+ other: "%{count}d"
37
+ weeks:
38
+ one: 1u
39
+ other: "%{count}u"
40
+ months:
41
+ one: 1må
42
+ other: "%{count}må"
43
+ years:
44
+ one: 1år
45
+ other: "%{count}år"
46
+ less_than_x: "<%{distance}"
47
+ words_connector: ""
48
+ two_words_connector: ""
49
+ last_word_connector: ""
50
+ about_x_years:
51
+ one: ~1y
52
+ any: "~%{count}y"
53
+ over_x_years:
54
+ one: ">1y"
55
+ other: ">%{count}y"
56
+ almost_x_years:
57
+ one: ~1y
58
+ any: "~%{count}y"
@@ -22,4 +22,39 @@ de:
22
22
  years:
23
23
  one: 1 Jahr
24
24
  other: "%{count} Jahre"
25
- less_than_x: "weniger als %{distance}"
25
+ less_than_x: "weniger als %{distance}"
26
+ dotiw_compact:
27
+ seconds:
28
+ one: 1s
29
+ other: "%{count}s"
30
+ minutes:
31
+ one: 1m
32
+ other: "%{count}m"
33
+ hours:
34
+ one: 1std
35
+ other: "%{count}std"
36
+ days:
37
+ one: 1t
38
+ other: "%{count}t"
39
+ weeks:
40
+ one: 1w
41
+ other: "%{count}w"
42
+ months:
43
+ one: 1mo
44
+ other: "%{count}mo"
45
+ years:
46
+ one: 1j
47
+ other: "%{count}j"
48
+ less_than_x: "<%{distance}"
49
+ words_connector: ""
50
+ two_words_connector: ""
51
+ last_word_connector: ""
52
+ about_x_years:
53
+ one: ~1y
54
+ any: "~%{count}y"
55
+ over_x_years:
56
+ one: ">1y"
57
+ other: ">%{count}y"
58
+ almost_x_years:
59
+ one: ~1y
60
+ any: "~%{count}y"