hijri_date 1.1.0 → 1.2.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 CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- MzM5YzdhMWJjNjlmZTM2N2Q2NTIzOGUxMjhkNWQxMjIyY2IzZGI2MA==
5
- data.tar.gz: !binary |-
6
- MDA2NWI5MmU3ODMxNjQ4YWFmYTY3ZGU1N2IxNTEwMTRhYmIxMjllMA==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- N2FhNTQwMDdkZGU3MGU0MWFiMjkyMDcwZmYwZmUxNmZmZmFjNmEwMDZmYWI3
10
- YTQxYzMwYWEyOWE2YzNlM2VkMDZhYjU0MjlhZDg2YTE2NGE2NTlhYWQzYWQ4
11
- NDQ5NTNhOTNhYzBmMThlNzEzNzY4YzkzNWVkMTBhMGM4NDJlOWY=
12
- data.tar.gz: !binary |-
13
- NjJjMDUyMzk4YTIxZTdmNDY1MjE5NjZkMzY0Yjc1Nzk0YmRmN2Q1YWE1NTQ5
14
- NDlmYmEzOGNmMDgwMzM4YzM0NDNiYjdhN2MxMjg4YzFlZDU5NWZkYTk2Yjc2
15
- NWNjODZlMGFiNDJlYzNiMTVjNTY0NTNiZGQ3Y2IzMjk0ODllMjU=
2
+ SHA1:
3
+ metadata.gz: baac7a18ca7221ae583e13eb36201724c65c2be7
4
+ data.tar.gz: b9d39db18168dea4e2663b14ae2e1e45f3f31c1a
5
+ SHA512:
6
+ metadata.gz: 949186c69da3ec5e7402be1f75b0a1681967633830c4afb2ce02fb11b64890400f23cf55cb3fbb94ad4173e0e0441c2fb8f0febb4480fa321cd917a8a166dd6e
7
+ data.tar.gz: a7633b925b136465906ff0182284d88122e21cf6c9a589beee9c52ce3f42703d5d266423deb0c17c855fb95edb16e2b3b011b413ad883c2f674e214b381b9709
data/.rubocop.yml ADDED
@@ -0,0 +1,7 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
3
+ Style/Documentation:
4
+ Enabled: false
5
+
6
+ Style/NumericLiterals:
7
+ Enabled: false
data/.rubocop_todo.yml ADDED
@@ -0,0 +1,21 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2015-09-28 23:38:18 +0100 using RuboCop version 0.34.2.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 4
10
+ Metrics/AbcSize:
11
+ Max: 30
12
+
13
+ # Offense count: 1
14
+ # Configuration parameters: CountComments.
15
+ Metrics/MethodLength:
16
+ Max: 12
17
+
18
+ # Offense count: 2
19
+ Style/OpMethod:
20
+ Exclude:
21
+ - 'lib/hijri_date.rb'
data/Rakefile CHANGED
@@ -1,9 +1,12 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+ require 'rubocop/rake_task'
3
4
 
4
- Rake::TestTask.new do |t|
5
- t.libs << 'lib/hijri_date'
6
- t.test_files = FileList['test/*_test.rb']
5
+ Rake::TestTask.new do |task|
6
+ task.libs << 'lib/hijri_date'
7
+ task.test_files = FileList['test/*_test.rb']
7
8
  end
9
+ task default: [:test]
8
10
 
9
- task :default => :test
11
+ RuboCop::RakeTask.new(:rubocop)
12
+ task default: [:rubocop]
data/hijri_date.gemspec CHANGED
@@ -4,20 +4,22 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'hijri_date/version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
- spec.name = "hijri_date"
7
+ spec.name = 'hijri_date'
8
8
  spec.version = HijriDate::VERSION
9
- spec.authors = ["Murtaza Gulamali"]
10
- spec.email = ["mygulamali@gmail.com"]
11
- spec.description = %q{Class to store Hijri dates and convert them to/from Astronomical Julian Date.}
12
- spec.summary = %q{Hijri date object}
13
- spec.homepage = "https://github.com/mygulamali/hijri_date"
14
- spec.license = "MIT"
9
+ spec.authors = ['Murtaza Gulamali']
10
+ spec.email = ['mygulamali@gmail.com']
11
+ spec.description = 'Manage Islamic Hijri dates.'
12
+ spec.summary = 'Hijri date object'
13
+ spec.homepage = 'https://github.com/mygulamali/hijri_date'
14
+ spec.license = 'MIT'
15
15
 
16
- spec.files = `git ls-files`.split($/)
16
+ spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
- spec.require_paths = ["lib"]
19
+ spec.require_paths = ['lib']
20
20
 
21
- spec.add_development_dependency "bundler", "~> 1.3"
22
- spec.add_development_dependency "rake"
21
+ spec.add_development_dependency 'bundler', '~> 1.3'
22
+ spec.add_development_dependency 'minitest'
23
+ spec.add_development_dependency 'rake'
24
+ spec.add_development_dependency 'rubocop'
23
25
  end
@@ -1,9 +1,13 @@
1
1
  module HijriDate
2
2
  # number of days in the year per month
3
- DAYSINYEAR = [30, 59, 89, 118, 148, 177, 207, 236, 266, 295, 325, 355]
4
-
3
+ DAYS_IN_YEAR = [30, 59, 89, 118, 148, 177, 207, 236, 266, 295, 325, 355]
4
+
5
5
  # number of days in 30-years per year
6
- DAYSIN30YEARS = [ 354, 708, 1063, 1417, 1771, 2126, 2480, 2834, 3189, 3543,
7
- 3898, 4252, 4606, 4961, 5315, 5669, 6024, 6378, 6732, 7087,
8
- 7441, 7796, 8150, 8504, 8859, 9213, 9567, 9922, 10276, 10631]
6
+ DAYS_IN_30_YEARS = [
7
+ 354, 708, 1063, 1417, 1771, 2126, 2480, 2834, 3189, 3543,
8
+ 3898, 4252, 4606, 4961, 5315, 5669, 6024, 6378, 6732, 7087,
9
+ 7441, 7796, 8150, 8504, 8859, 9213, 9567, 9922, 10276, 10631
10
+ ]
11
+
12
+ KABISA_YEAR_REMAINDERS = [2, 5, 8, 10, 13, 16, 19, 21, 24, 27, 29]
9
13
  end
@@ -1,51 +1,59 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module HijriDate
4
- MONTHNAMES_AR = [
5
- nil,
6
- 'محرم الحرام',
7
- 'صفر المظفر',
8
- 'ربيع الاول',
9
- 'ربيع الآخر',
10
- 'جمادى الاولى',
11
- 'جمادى الاُخرى',
12
- 'رجب الاصب',
13
- 'شعبان الكريم',
14
- 'رمضان المعظم',
15
- 'شوال المكرم',
16
- 'ذي القعدة الحرام',
17
- 'ذي الحجة الحرام'
18
- ]
4
+ MONTH_NAMES = {
5
+ ar: [
6
+ nil,
7
+ 'محرم الحرام',
8
+ 'صفر المظفر',
9
+ 'ربيع الاول',
10
+ 'ربيع الآخر',
11
+ 'جمادى الاولى',
12
+ 'جمادى الاُخرى',
13
+ 'رجب الاصب',
14
+ 'شعبان الكريم',
15
+ 'رمضان المعظم',
16
+ 'شوال المكرم',
17
+ 'ذي القعدة الحرام',
18
+ 'ذي الحجة الحرام'
19
+ ],
20
+ en: [
21
+ nil,
22
+ 'Moharram al-Haraam',
23
+ 'Safar al-Muzaffar',
24
+ 'Rabi al-Awwal',
25
+ 'Rabi al-Aakhar',
26
+ 'Jumada al-Ula',
27
+ 'Jumada al-Ukhra',
28
+ 'Rajab al-Asab',
29
+ 'Shabaan al-Karim',
30
+ 'Ramadaan al-Moazzam',
31
+ 'Shawwal al-Mukarram',
32
+ 'Zilqadah al-Haraam',
33
+ 'Zilhaj al-Haraam'
34
+ ]
35
+ }
19
36
 
20
- MONTHNAMES_EN = [
21
- nil,
22
- 'Moharram al-Haraam',
23
- 'Safar al-Muzaffar',
24
- 'Rabi al-Awwal',
25
- 'Rabi al-Aakhar',
26
- 'Jumada al-Ula',
27
- 'Jumada al-Ukhra',
28
- 'Rajab al-Asab',
29
- 'Shabaan al-Karim',
30
- 'Ramadaan al-Moazzam',
31
- 'Shawwal al-Mukarram',
32
- 'Zilqadah al-Haraam',
33
- 'Zilhaj al-Haraam'
34
- ]
35
-
36
- SHORT_MONTHNAMES_EN = [
37
- nil,
38
- 'Moharram',
39
- 'Safar',
40
- 'Rabi I',
41
- 'Rabi II',
42
- 'Jumada I',
43
- 'Jumada II',
44
- 'Rajab',
45
- 'Shabaan',
46
- 'Ramadaan',
47
- 'Shawwal',
48
- 'Zilqadah',
49
- 'Zilhaj'
50
- ]
37
+ MONTHNAMES_AR = MONTH_NAMES[:ar]
38
+ MONTHNAMES_EN = MONTH_NAMES[:en]
39
+
40
+ SHORT_MONTH_NAMES = {
41
+ en: [
42
+ nil,
43
+ 'Moharram',
44
+ 'Safar',
45
+ 'Rabi I',
46
+ 'Rabi II',
47
+ 'Jumada I',
48
+ 'Jumada II',
49
+ 'Rajab',
50
+ 'Shabaan',
51
+ 'Ramadaan',
52
+ 'Shawwal',
53
+ 'Zilqadah',
54
+ 'Zilhaj'
55
+ ]
56
+ }
57
+
58
+ SHORT_MONTHNAMES_EN = SHORT_MONTH_NAMES[:en]
51
59
  end
@@ -1,3 +1,3 @@
1
1
  module HijriDate
2
- VERSION = "1.1.0"
2
+ VERSION = '1.2.0'
3
3
  end
data/lib/hijri_date.rb CHANGED
@@ -1,6 +1,6 @@
1
- require "hijri_date/version"
2
- require "hijri_date/month_names"
3
- require "hijri_date/constants"
1
+ require 'hijri_date/constants'
2
+ require 'hijri_date/month_names'
3
+ require 'hijri_date/version'
4
4
 
5
5
  module HijriDate
6
6
  class Date
@@ -8,114 +8,94 @@ module HijriDate
8
8
  attr_accessor :year, :month, :day
9
9
 
10
10
  # constructor
11
- def initialize(year = 1432, month = 4 , day = 20)
11
+ def initialize(year = 1432, month = 4, day = 20)
12
12
  @year = year
13
13
  @month = month
14
14
  @day = day
15
15
  end
16
-
16
+
17
17
  # convert to string object
18
18
  def to_s(date = self)
19
- return "#{date.day} #{HijriDate::MONTHNAMES_EN[date.month]} #{date.year}H"
19
+ "#{date.day} #{MONTH_NAMES[:en][date.month]} #{date.year}H"
20
20
  end
21
-
21
+
22
22
  # is this (or the specified) year a Kabisa year?
23
- def is_kabisa?(year = self.year)
24
- for i in [2, 5, 8, 10, 13, 16, 19, 21, 24, 27, 29]
25
- if year % 30 == i
26
- return true
27
- end
28
- end
29
- return false
23
+ def kabisa?(year = self.year)
24
+ KABISA_YEAR_REMAINDERS.any? { |remainder| year % 30 == remainder }
30
25
  end
31
-
26
+
32
27
  # number of days in this (or the specified) month and year
33
28
  def days_in_month(month = self.month, year = self.year)
34
- if (month == 12 and is_kabisa?(year)) or (month % 2 == 1)
35
- return 30
36
- end
37
- return 29
29
+ (month == 12 && kabisa?(year) || month.odd?) ? 30 : 29
38
30
  end
39
31
 
40
- # day of the year corresponding to this (or specified) Hijri date
32
+ # day of the year corresponding to this (or specified) Hijri date
41
33
  def day_of_year(date = self)
42
- if date.month == 1
43
- return date.day
44
- end
45
- return HijriDate::DAYSINYEAR[date.month - 2] + date.day
34
+ date.month == 1 ? date.day : (DAYS_IN_YEAR[date.month - 2] + date.day)
46
35
  end
47
-
36
+
48
37
  # return Julian Day number associated with this (or specified) Hijri date
49
38
  def jd(date = self)
50
39
  y30 = (date.year / 30.0).floor
51
- if (date.year % 30 == 0)
52
- return 1948084 + y30*10631 + day_of_year(date)
40
+ day_number = 1948084 + y30 * 10631 + day_of_year(date)
41
+
42
+ if date.year % 30 == 0
43
+ day_number
53
44
  else
54
- return 1948084 + y30*10631 + HijriDate::DAYSIN30YEARS[date.year-y30*30-1] + day_of_year(date)
45
+ day_number + DAYS_IN_30_YEARS[date.year - y30 * 30 - 1]
55
46
  end
56
47
  end
57
48
 
58
49
  # comparison operator
59
- def == (date)
60
- if date.is_a?(HijriDate::Date)
61
- if date.year == self.year and date.month == self.month and date.day == self.day
62
- return true
63
- end
64
- return false
50
+ def ==(other)
51
+ if other.is_a?(Date)
52
+ return other.year == year && other.month == month && other.day == day
65
53
  end
66
- raise TypeError, 'expected HijriDate::Date'
54
+ fail TypeError, 'expected HijriDate::Date'
67
55
  end
68
56
 
69
57
  # return a new HijriDate object that is n days after the current one.
70
- def + (n)
58
+ def +(n)
71
59
  case n
72
- when Numeric; return HijriDate.jd(self.jd + n)
60
+ when Numeric
61
+ return HijriDate.jd(jd + n)
73
62
  end
74
- raise TypeError, 'expected numeric'
63
+ fail TypeError, 'expected numeric'
75
64
  end
76
65
 
77
66
  # return a new HijriDate object that is n days before the current one.
78
- def - (n)
67
+ def -(n)
79
68
  case n
80
- when Numeric; return HijriDate.jd(self.jd - n)
69
+ when Numeric
70
+ return HijriDate.jd(jd - n)
81
71
  end
82
- raise TypeError, 'expected numeric'
72
+ fail TypeError, 'expected numeric'
83
73
  end
84
74
 
85
75
  # return the day of the week (0-6, Sunday is zero)
86
76
  def wday
87
- Object::Date.jd(self.jd).wday
88
- end
77
+ Object::Date.jd(jd).wday
78
+ end
89
79
  end
90
80
 
91
81
  # return new Hijri Date object associated with specified Julian Day number
92
- def HijriDate.jd(jd = 1948084)
82
+ def self.jd(jd = 1948084)
93
83
  left = (jd - 1948084).to_i
94
84
  y30 = (left / 10631.0).floor
95
85
  left -= y30 * 10631
86
+
96
87
  i = 0
88
+ i += 1 while left > DAYS_IN_30_YEARS[i]
97
89
 
98
- while left > HijriDate::DAYSIN30YEARS[i]
99
- i += 1
100
- end
101
- year = (y30 * 30.0 + i).to_i
90
+ year = (y30 * 30 + i).to_i
91
+ left -= DAYS_IN_30_YEARS[i - 1] if i > 0
102
92
 
103
- if i>0
104
- left -= HijriDate::DAYSIN30YEARS[i - 1]
105
- end
106
93
  i = 0
94
+ i += 1 while left > DAYS_IN_YEAR[i]
107
95
 
108
- while left > HijriDate::DAYSINYEAR[i]
109
- i += 1
110
- end
111
96
  month = (i + 1).to_i
97
+ day = i > 0 ? (left - DAYS_IN_YEAR[i - 1]) : left
112
98
 
113
- if i>0
114
- day = (left - HijriDate::DAYSINYEAR[i - 1]).to_i
115
- else
116
- day = left.to_i
117
- end
118
-
119
- return HijriDate::Date.new(year, month, day)
99
+ Date.new(year, month, day)
120
100
  end
121
101
  end
@@ -3,14 +3,14 @@ require 'hijri_date'
3
3
  require 'minitest/autorun'
4
4
  require 'minitest/pride'
5
5
 
6
- class HijriDateTest < MiniTest::Unit::TestCase
6
+ class HijriDateTest < MiniTest::Test
7
7
  def setup
8
- @date = HijriDate::Date.new # 20/04/1432H = 25/03/2011AD
8
+ @date = HijriDate::Date.new # 20/04/1432H = 25/03/2011AD
9
9
  end
10
10
 
11
11
  def test_kabisa_year
12
- refute @date.is_kabisa?
13
- assert @date.is_kabisa? 1431
12
+ refute @date.kabisa?
13
+ assert @date.kabisa? 1431
14
14
  end
15
15
 
16
16
  def test_days_in_month
@@ -21,7 +21,7 @@ class HijriDateTest < MiniTest::Unit::TestCase
21
21
 
22
22
  def test_day_of_year
23
23
  assert_equal 109, @date.day_of_year
24
- assert_equal 10, HijriDate::Date.new(1432, 1, 10).day_of_year
24
+ assert_equal 10, HijriDate::Date.new(1432, 1, 10).day_of_year
25
25
  assert_equal 355, HijriDate::Date.new(1431, 12, 30).day_of_year
26
26
  assert_equal 354, HijriDate::Date.new(1432, 12, 29).day_of_year
27
27
  end
@@ -72,6 +72,6 @@ class HijriDateTest < MiniTest::Unit::TestCase
72
72
  end
73
73
 
74
74
  def test_day_of_week
75
- assert_equal 5, @date.wday # Friday
75
+ assert_equal 5, @date.wday # Friday
76
76
  end
77
77
  end
metadata CHANGED
@@ -1,52 +1,81 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hijri_date
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Murtaza Gulamali
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-19 00:00:00.000000000 Z
11
+ date: 2015-09-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.3'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: minitest
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - ! '>='
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
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: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
32
60
  - !ruby/object:Gem::Version
33
61
  version: '0'
34
62
  type: :development
35
63
  prerelease: false
36
64
  version_requirements: !ruby/object:Gem::Requirement
37
65
  requirements:
38
- - - ! '>='
66
+ - - ">="
39
67
  - !ruby/object:Gem::Version
40
68
  version: '0'
41
- description: Class to store Hijri dates and convert them to/from Astronomical Julian
42
- Date.
69
+ description: Manage Islamic Hijri dates.
43
70
  email:
44
71
  - mygulamali@gmail.com
45
72
  executables: []
46
73
  extensions: []
47
74
  extra_rdoc_files: []
48
75
  files:
49
- - .gitignore
76
+ - ".gitignore"
77
+ - ".rubocop.yml"
78
+ - ".rubocop_todo.yml"
50
79
  - Gemfile
51
80
  - LICENSE.txt
52
81
  - README.md
@@ -67,17 +96,17 @@ require_paths:
67
96
  - lib
68
97
  required_ruby_version: !ruby/object:Gem::Requirement
69
98
  requirements:
70
- - - ! '>='
99
+ - - ">="
71
100
  - !ruby/object:Gem::Version
72
101
  version: '0'
73
102
  required_rubygems_version: !ruby/object:Gem::Requirement
74
103
  requirements:
75
- - - ! '>='
104
+ - - ">="
76
105
  - !ruby/object:Gem::Version
77
106
  version: '0'
78
107
  requirements: []
79
108
  rubyforge_project:
80
- rubygems_version: 2.0.6
109
+ rubygems_version: 2.4.5.1
81
110
  signing_key:
82
111
  specification_version: 4
83
112
  summary: Hijri date object