jalalidate 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,25 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ jalalidate (0.2.3)
5
+
6
+ GEM
7
+ remote: http://rubygems.org/
8
+ specs:
9
+ diff-lcs (1.1.2)
10
+ rspec (2.1.0)
11
+ rspec-core (~> 2.1.0)
12
+ rspec-expectations (~> 2.1.0)
13
+ rspec-mocks (~> 2.1.0)
14
+ rspec-core (2.1.0)
15
+ rspec-expectations (2.1.0)
16
+ diff-lcs (~> 1.1.2)
17
+ rspec-mocks (2.1.0)
18
+
19
+ PLATFORMS
20
+ ruby
21
+
22
+ DEPENDENCIES
23
+ bundler (~> 1.0.0)
24
+ jalalidate!
25
+ rspec (~> 2.1.0)
data/README.md CHANGED
@@ -5,6 +5,13 @@
5
5
 
6
6
  ## History
7
7
 
8
+ #### 0.3 - 6.JAN.2011
9
+ * JalaiDate could be initialized with Time and DateTime objects
10
+ * more options for strftime method %H,%M,%S,%X,%Z,%I,%p. read docs for more information
11
+ * added jdate and jcal binaries to access jcal from the command-line
12
+ * updated some documentations
13
+ * now using bundler
14
+
8
15
  #### 0.2 - 25.FEB.2010
9
16
  * renamed the gem from JalaliDate to jalalidate
10
17
  * added spec and a full test suite
data/Rakefile CHANGED
@@ -1,2 +1,2 @@
1
1
  require 'bundler'
2
- Bundler::GemHelper.install_tasks
2
+ Bundler::GemHelper.install_tasks
data/TODO CHANGED
@@ -1,3 +1,7 @@
1
1
  =TODO
2
- * jalali_strftime: Add support for localized time zone names(%z) and add week number of the year %W and %U
3
- * Add rails active support date calculation for jalali
2
+ * add week number of the year %W and %U
3
+ * better jcal and jdate with param
4
+ * support afghan month names
5
+ * update read me / talk about the binaries
6
+ * ActiveSupport::CoreExtensions::Date
7
+ * ActionView::Helpers::DateHelper
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'jalalidate'
4
+ require 'jalalidate/cli'
5
+
6
+ Jalalidate::Cli.jcal(*ARGV)
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'jalalidate'
4
+ require 'jalalidate/cli'
5
+
6
+ Jalalidate::Cli.jdate(*ARGV)
@@ -13,10 +13,13 @@ Gem::Specification.new do |s|
13
13
  s.description = %q{A library for working with Jalali Calendar (a.k.a Persian Calendar)}
14
14
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
15
15
  s.rubyforge_project = "jalalidate"
16
+ s.executables = ["jdate"]
16
17
  s.files = `git ls-files`.split("\n")
17
18
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
19
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
20
  s.require_paths = ["lib"]
20
21
  s.extra_rdoc_files = [ "LICENSE", "README.md"]
21
22
  s.rdoc_options = ["--charset=UTF-8"]
23
+ s.add_development_dependency(%q<rspec>, ["~> 2.1.0"])
24
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
22
25
  end
@@ -9,40 +9,53 @@ class JalaliDate
9
9
  GDaysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
10
10
  JDaysInMonth = [31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29]
11
11
  PERSIAN_MONTH_NAMES = [nil, "فروردین","اردیبهشت","خرداد","تیر","مرداد","شهریور","مهر","آبان","آذر","دی","بهمن","اسفند"]
12
+ PERSIAN_MONTH_NAMES_PINGLISH = [nil, "Farvardin", "Ordibehesht", "Khordad", "Tir", "Mordad", "Shahrivar", "Mehr", "Aban", "Azar", "Dey", "Bahman", "Esfand"]
12
13
  PERSIAN_WEEKDAY_NAMES = ["یک‌شنبه","دوشنبه","سه‌شنبه","چهارشنبه","پنج‌شنبه","جمعه","شنبه"]
13
- PERSIAN_ABBR_WEEKDAY_NAMES = ["۱ش","۲ش","۳ش","۴ش","۵ش","ج","ش"]
14
+ PERSIAN_ABBR_WEEKDAY_NAMES = ["۱ش ","۲ش","۳ش","۴ش","۵ش","ج ","ش"]
14
15
  PERSIAN_MERIDIAN_INDICATOR = ["قبل از ظهر","بعد از ظهر"]
15
16
  PERSIAN_ABBR_MERIDIAN_INDICATOR = ["ق.ظ","ب.ظ"]
16
17
  #:startdoc:
17
18
 
18
19
  include Comparable
19
20
 
20
- attr_accessor :year,:month,:day
21
+ attr_accessor :year,:month,:day, :hour, :min, :sec
21
22
  attr_reader :g_year, :g_month, :g_day
22
23
 
23
24
  # Can be initialized in two ways:
24
25
  # - First by feeding 3 arguments for Jalali Date, year,month and day.
25
26
  # - The Second way to initializes is to pass a normal Ruby Date object, it'll be converted to jalali automatically.
26
- #
27
+ #
27
28
  # Example:
28
29
  # jdate = JalaliDate.new(Date.today)
29
30
  # other_jdate = JalaliDate.new(1388,9,17)
30
31
  def initialize *args
31
- if (args.size == 1) && (args.first.is_a? Date)
32
- year,month,day = gregorian_to_jalali(args.first.year, args.first.month, args.first.day)
33
- else
34
- year,month,day = args
32
+ if (args.size == 1) && (args.first.is_a?(Date))
33
+ year,month,day = gregorian_to_jalali(args.first.year, args.first.month, args.first.day)
34
+ elsif (args.size == 1) && (args.first.is_a?(Time) || args.first.is_a?(DateTime))
35
+ year,month,day = gregorian_to_jalali(args.first.year, args.first.month, args.first.day)
36
+ @hour = args.first.hour || 0
37
+ @min = args.first.min || 0
38
+ @sec = args.first.sec || 0
39
+ @zone = args.first.zone || "UTC"
40
+ @utc_offset = args.first.utc_offset || 0
41
+ else
42
+ year,month,day,hour,min,sec,zone,utc_offset = args
35
43
  end
36
-
37
- raise ArgumentError, "invalid arguments or invalid Jalali date" unless self.class.valid?(year,month,day)
38
- @year = year
44
+
45
+ raise ArgumentError, "invalid arguments or invalid Jalali date" unless self.class.valid?(year,month,day)
46
+ @year = year
39
47
  @month = month
40
- @day = day
48
+ @day = day
49
+ @hour ||= hour || 0
50
+ @min ||= min || 0
51
+ @sec ||= sec || 0
52
+ @zone ||= zone || "UTC"
53
+ @utc_offset ||= utc_offset || 0
41
54
  @g_year, @g_month, @g_day = jalali_to_gregorian(year,month,day)
42
55
  end
43
56
 
44
57
  # Class Methods -----------------------------------------------------------
45
- class << self
58
+ class << self
46
59
  # Return a JalaliDate object representing today's date in calendar
47
60
  def today
48
61
  JalaliDate.new(Date.today)
@@ -54,40 +67,40 @@ class JalaliDate
54
67
  end
55
68
 
56
69
  # Return a JalaliDate object representing tomorrow's date in calendar
57
- def tomorrow
70
+ def tomorrow
58
71
  JalaliDate.new(Date.today + 1)
59
72
  end
60
73
 
61
- # Accpets a four digit number as the jalaliyear and returns true if that particular year
74
+ # Accpets a four digit number as the jalaliyear and returns true if that particular year
62
75
  # is a leap year in jalali calendar otherwise it returns false.
63
- def leap?(y)
64
- [6,22,17,13,9,5,1,30].include?(y%33) ? true : false
76
+ def leap?(y)
77
+ [6,22,17,13,9,5,1,30].include?(y%33) ? true : false
65
78
  end
66
79
 
67
- # Accpets three numbers for year (4 digit), month and day in jalali calendar and checks if it's a
80
+ # Accpets three numbers for year (4 digit), month and day in jalali calendar and checks if it's a
68
81
  # valid date according to jalali calendar or not.
69
82
  def valid?(y,m,d)
70
83
  ( y.class == Fixnum && y > 0 &&
71
84
  m.class == Fixnum && (1..12).include?(m) &&
72
85
  d.class == Fixnum &&
73
- (
86
+ (
74
87
  ((1..JDaysInMonth[m-1]).include?(d)) || (d == 30 && m == 12 && leap?(y))
75
- )
88
+ )
76
89
  ) ? true : false
77
90
  end
78
91
  end
79
92
 
80
93
  # Instance Methods --------------------------------------------------------
81
-
94
+
82
95
  # Converts a JalaiDate object to Ruby Date object
83
- def to_gregorian
96
+ def to_gregorian
84
97
  Date.new(@g_year,@g_month,@g_day)
85
98
  end
86
99
  alias :to_g :to_gregorian
87
100
 
88
101
  # Returns a string represtation of the JalaliDate object in format like this: y/m/d
89
- def to_s
90
- [@year,@month,@day].join("/")
102
+ def to_s
103
+ [@year,@month,@day].join("/")
91
104
  end
92
105
 
93
106
  # Returns a hash in a format like this: {:year => @year, :month => @month, :day => @day}
@@ -100,35 +113,35 @@ class JalaliDate
100
113
  [@year,@month,@day]
101
114
  end
102
115
 
103
- # Return internal object state as a programmer-readable string.
116
+ # Return internal object state as a programmer-readable string.
104
117
  def inspect
105
- "#<#{self.class}:#{self.object_id}, :year => #{@year}, :month => #{@month}, :day => #{@day} >"
118
+ "#<#{self.class}:#{self.object_id}, :year => #{@year}, :month => #{@month}, :day => #{@day} >"
106
119
  end
107
120
 
108
121
  # Adds n days to the current JalaliDate object
109
122
  def +(days)
110
123
  self.class.new( to_g + days )
111
124
  end
112
-
125
+
113
126
  # Subtracts n days from the current JalaliDate object
114
127
  def -(days)
115
128
  self.class.new( to_g - days )
116
129
  end
117
-
130
+
118
131
  # Return the next day for the current JalaliDate object
119
132
  def next(n=1)
120
- self + n
133
+ self + n
121
134
  end
122
135
  alias :succ :next
123
-
136
+
124
137
  # Return the previous day for the current JalaliDate object
125
- def previous(n=1)
126
- self - n
127
- end
128
-
138
+ def previous(n=1)
139
+ self - n
140
+ end
141
+
129
142
  # Compares two JalaliDate objects. acts like Date#<=>
130
143
  def <=>(other)
131
- to_g <=> other.to_g
144
+ to_g <=> other.to_g
132
145
  end
133
146
 
134
147
  # Move JalaliDate object forward by n months
@@ -139,13 +152,13 @@ class JalaliDate
139
152
  d -= 1 until self.class.valid?(y, m, d)
140
153
  self.class.new(y,m,d)
141
154
  end
142
-
143
- # Move JalaliDate object backward by n months
155
+
156
+ # Move JalaliDate object backward by n months
144
157
  def <<(months)
145
158
  self >> -months
146
159
  end
147
-
148
- # Step the current date forward +step+ days at a time (or backward, if step is negative) until we reach
160
+
161
+ # Step the current date forward +step+ days at a time (or backward, if step is negative) until we reach
149
162
  # limit (inclusive), yielding the resultant date at each step.
150
163
  #
151
164
  # Example:
@@ -153,7 +166,7 @@ class JalaliDate
153
166
  # jdate.step(Date.today+10, 2) do |jd|
154
167
  # puts jd.to_s
155
168
  # end
156
- def step(limit, step=1)
169
+ def step(limit, step=1)
157
170
  da = self
158
171
  op = %w(- <= >=)[step <=> 0]
159
172
  while da.__send__(op, limit)
@@ -162,7 +175,7 @@ class JalaliDate
162
175
  end
163
176
  self
164
177
  end
165
-
178
+
166
179
  # Step forward one day at a time until we reach max (inclusive), yielding each date as we go.
167
180
  #
168
181
  # Example:
@@ -175,7 +188,7 @@ class JalaliDate
175
188
  step(max, +1, &block)
176
189
  end
177
190
 
178
- # Step backward one day at a time until we reach min (inclusive), yielding each date as we go.
191
+ # Step backward one day at a time until we reach min (inclusive), yielding each date as we go.
179
192
  # See #upto for the example.
180
193
  def downto(min, &block)
181
194
  step(min, -1, &block)
@@ -191,30 +204,44 @@ class JalaliDate
191
204
  to_g.wday
192
205
  end
193
206
 
207
+ # Get the jalali week day of this date. Saturday is day-of-week 0; Friday is day-of-week 6.
208
+ def jwday
209
+ (to_g.wday + 1) % 7
210
+ end
211
+
194
212
  # Get the day-of-the-year of this date.
195
213
  # Farvardin 1 is day-of-the-year 1
196
214
  def yday
197
215
  m = (@month-2 < 0) ? 0 : @month-2
198
- (@month==1) ? @day : @day + JDaysInMonth[0..m].inject(0) {|sum, n| sum + n }
199
- end
200
-
201
- # Formats time according to the directives in the given format string. Any text not listed as a directive will be
216
+ (@month==1) ? @day : @day + JDaysInMonth[0..m].inject(0) {|sum, n| sum + n }
217
+ end
218
+
219
+ # Formats time according to the directives in the given format string. Any text not listed as a directive will be
202
220
  # passed through to the output string.
203
221
  #
204
222
  # Format meanings:
205
223
  #
206
- # [%a] The abbreviated weekday name (۳ش)
207
- # [%A] The full weekday name (یکشنبه)
208
- # [%b or %B] The month name (اردیبهشت)
209
- # [%d] Day of the month (1..31)
224
+ # [%a] The abbreviated weekday name (۳ش)
225
+ # [%A] The full weekday name (یکشنبه)
226
+ # [%b] The month name (اردیبهشت)
227
+ # [%B] The month name in pinglish (Ordibehesht)
228
+ # [%d] Day of the month (01..31)
229
+ # [%e] Day of the month (1..31)
210
230
  # [%j] Day of the year (1..366)
211
231
  # [%m] Month of the year (1..12)
212
232
  # [%w] Day of the week (Sunday is 0, 0..6)
213
233
  # [%x] Preferred representation for the date alone, no time in format YY/M/D
214
234
  # [%y] Year without a century (00..99)
215
235
  # [%Y] Year with century
236
+ # [%H] Hour of the day, 24-hour clock (00..23)
237
+ # [%I] Hour of the day, 12-hour clock (01..12)
238
+ # [%M] Minute of the hour (00..59)
239
+ # [%p] Meridian indicator ("بعد از ظهر" or "قبل از ظهر")
240
+ # [%S] Second of the minute (00..60)
241
+ # [%X] Preferred representation for the time alone, no date
242
+ # [%Z] Time zone name
216
243
  # [%%] Literal %'' character
217
- #
244
+ #
218
245
  # Example:
219
246
  # d = JalaliDate.today
220
247
  # d.strftime("Printed on %Y/%m/%d") #=> "Printed on 87/5/26
@@ -223,21 +250,29 @@ class JalaliDate
223
250
  gsub(/%a/, PERSIAN_ABBR_WEEKDAY_NAMES[wday]).
224
251
  gsub(/%A/, PERSIAN_WEEKDAY_NAMES[wday]).
225
252
  gsub(/%b/, PERSIAN_MONTH_NAMES[@month]).
226
- gsub(/%B/, PERSIAN_MONTH_NAMES[@month]).
227
- gsub(/%d/, @day.to_s).
253
+ gsub(/%B/, PERSIAN_MONTH_NAMES_PINGLISH[@month]).
254
+ gsub(/%d/, ("%02d" % @day).to_s).
255
+ gsub(/%e/, @day.to_s).
228
256
  gsub(/%m/, @month.to_s).
229
257
  gsub(/%Y/, @year.to_s).
230
258
  gsub(/%y/, @year.to_s.slice(2,2)).
231
259
  gsub(/%j/, yday.to_s).
260
+ gsub(/%H/, ("%02d" % @hour).to_s).
261
+ gsub(/%I/, ("%02d" % ((@hour>=12) ? @hour-12 : @hour)).to_s).
262
+ gsub(/%M/, ("%02d" % @min).to_s).
263
+ gsub(/%S/, ("%02d" % @sec).to_s).
264
+ gsub(/%p/, (@hour>=12 ? "بعد از ظهر" : "قبل از ظهر")).
232
265
  gsub(/%w/, wday.to_s).
266
+ gsub(/%Z/, @zone).
267
+ gsub(/%X/, [("%02d" % @hour),("%02d" % @min),("%02d" % @sec)].join(":")).
233
268
  gsub(/%x/, [@year.to_s.slice(2,2),@month,@day].join("/")).
234
269
  gsub(/#{"SUBSTITUTION_MARKER"}/, '%')
235
- end
270
+ end
236
271
  alias :format :strftime
237
-
272
+
238
273
  private #-------------------------------------------------------------------------
239
274
 
240
- def gregorian_to_jalali(year, month, day)
275
+ def gregorian_to_jalali(year, month, day) # :nodoc:
241
276
  gy = year - 1600
242
277
  gm = month - 1
243
278
  gd = day - 1
@@ -245,18 +280,18 @@ class JalaliDate
245
280
  gm.times { |i| g_day_no += GDaysInMonth[i] }
246
281
  g_day_no += 1 if gm > 1 && ((gy%4 == 0 && gy%100 != 0) || (gy%400 == 0))
247
282
  g_day_no += gd
248
-
283
+
249
284
  j_day_no = g_day_no-79
250
285
  j_np = j_day_no/12053
251
286
  j_day_no %= 12053
252
287
  jy = 979 + 33 * j_np + 4*(j_day_no/1461)
253
288
  j_day_no %= 1461
254
-
289
+
255
290
  if (j_day_no >= 366)
256
291
  jy += (j_day_no - 1)/365
257
292
  j_day_no = (j_day_no - 1) % 365
258
293
  end
259
-
294
+
260
295
  11.times do |i|
261
296
  if j_day_no >= JDaysInMonth[i]
262
297
  j_day_no -= JDaysInMonth[i]
@@ -268,33 +303,33 @@ class JalaliDate
268
303
  end
269
304
  jm = $j + 1
270
305
  jd = j_day_no + 1
271
-
306
+
272
307
  [jy, jm, jd]
273
308
  end
274
-
275
- def jalali_to_gregorian(year,month,day)
309
+
310
+ def jalali_to_gregorian(year,month,day) # :nodoc:
276
311
  jy = year - 979
277
312
  jm = month - 1
278
313
  jd = day - 1
279
314
  j_day_no = 365*jy + (jy/33)*8 + (jy % 33 + 3)/4
280
315
  jm.times { |i| j_day_no += JDaysInMonth[i] }
281
316
  j_day_no += jd
282
-
317
+
283
318
  g_day_no = j_day_no + 79
284
319
  gy = 1600 + 400*(g_day_no/146097)
285
320
  g_day_no %= 146097
286
-
321
+
287
322
  leap = true
288
- if g_day_no >= 36525
323
+ if g_day_no >= 36525
289
324
  g_day_no -= 1
290
325
  gy += 100 * (g_day_no/36524)
291
- g_day_no %= 36524
326
+ g_day_no %= 36524
292
327
  (g_day_no >= 365) ? g_day_no += 1 : leap = false
293
328
  end
294
-
329
+
295
330
  gy += 4 * (g_day_no/1461)
296
331
  g_day_no %= 1461
297
-
332
+
298
333
  if g_day_no >= 366
299
334
  leap = false
300
335
  g_day_no -= 1
@@ -312,9 +347,9 @@ class JalaliDate
312
347
  break
313
348
  end
314
349
  end
315
- gm = $g + 1
350
+ gm = $g + 1
316
351
  gd = g_day_no + 1
317
-
352
+
318
353
  [gy,gm,gd]
319
354
  end
320
355
 
@@ -0,0 +1,36 @@
1
+ module Jalalidate
2
+ class Cli
3
+
4
+ # prints today's date in jalali calendar to STDOUT
5
+ #
6
+ def self.jdate(*args)
7
+ jdate = JalaliDate.new(Date.today)
8
+ puts jdate
9
+ end
10
+
11
+ # prints current month calendar in jalali calendar to STDOUT
12
+ #
13
+ def self.jcal(*args)
14
+ today = JalaliDate.new(Date.today)
15
+ jdate = JalaliDate.new(today.year,today.month,1)
16
+ # print month and year
17
+ puts jdate.strftime("%b %Y").center(26)
18
+ # print weekdays
19
+ puts JalaliDate::PERSIAN_ABBR_WEEKDAY_NAMES.reverse[1..6].join(" ") + " " + JalaliDate::PERSIAN_ABBR_WEEKDAY_NAMES.reverse[0] + " "
20
+ # print the month days
21
+ padding = true
22
+ JalaliDate::JDaysInMonth[jdate.month - 1].times do |index|
23
+ if padding
24
+ print " " * (jdate.jwday*4)
25
+ padding = false
26
+ end
27
+ print "%2d" % jdate.day + " "
28
+ print "\n" if jdate.jwday == 6
29
+ jdate = jdate.next
30
+ end
31
+
32
+ puts "\n"
33
+ end
34
+
35
+ end
36
+ end
@@ -1,3 +1,3 @@
1
1
  module Jalalidate
2
- VERSION = "0.2.2"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -1,7 +1,7 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
3
  describe JalaliDate do
4
-
4
+
5
5
  it "should initialize with valid year,month,date values" do
6
6
  jdate = JalaliDate.new(1388,11,22)
7
7
  jdate.should be_instance_of(JalaliDate)
@@ -33,7 +33,7 @@ describe JalaliDate do
33
33
  Date.stub!(:today).and_return(Date.new(2010,1,1))
34
34
  JalaliDate.today.should == JalaliDate.new(1388,10,11)
35
35
  JalaliDate.yesterday.should == JalaliDate.new(1388,10,10)
36
- JalaliDate.tomorrow.should == JalaliDate.new(1388,10,12)
36
+ JalaliDate.tomorrow.should == JalaliDate.new(1388,10,12)
37
37
  end
38
38
 
39
39
  it "should distinguish invalid jalali dates" do
@@ -48,19 +48,19 @@ describe JalaliDate do
48
48
  JalaliDate.leap?(1387).should be_true
49
49
  JalaliDate.leap?(1388).should be_false
50
50
  end
51
-
51
+
52
52
  it "should convert to gregorian date correctly" do
53
53
  jdate = JalaliDate.new(1388,10,11)
54
54
  jdate.to_g.should == Date.new(2010,1,1)
55
55
  end
56
-
56
+
57
57
  it "should convert to string, array and hash correctly" do
58
58
  jdate = JalaliDate.new(1388,10,11)
59
59
  jdate.to_s.should == "1388/10/11"
60
60
  jdate.to_a.should == [1388,10,11]
61
61
  jdate.to_hash.should == {:year => 1388, :month => 10, :day => 11}
62
62
  end
63
-
63
+
64
64
  it "should be able to add and substract days from the currect jalai date object" do
65
65
  jdate = JalaliDate.new(1388,10,11)
66
66
  five_days_later = jdate + 5
@@ -68,7 +68,7 @@ describe JalaliDate do
68
68
  five_days_later.should == JalaliDate.new(1388,10,16)
69
69
  twenty_days_ago.should == JalaliDate.new(1388,9,21)
70
70
  end
71
-
71
+
72
72
  it "should be able to compare two jalali dates" do
73
73
  jdate = JalaliDate.new(1388,10,11)
74
74
  next_month_jdate = JalaliDate.new(1388,11,11)
@@ -76,13 +76,13 @@ describe JalaliDate do
76
76
  jdate.<=>(next_month_jdate).should == -1
77
77
  jdate.<=>(jdate).should == 0
78
78
  end
79
-
79
+
80
80
  it "should now its next and previous dates" do
81
81
  jdate = JalaliDate.new(1388,10,11)
82
82
  jdate.next.should == JalaliDate.new(1388,10,12)
83
83
  jdate.previous.should == JalaliDate.new(1388,10,10)
84
84
  end
85
-
85
+
86
86
  it "should be able to move the month forward and backward" do
87
87
  jdate = JalaliDate.new(1388,10,11)
88
88
  five_month_later = jdate >> 5
@@ -90,10 +90,10 @@ describe JalaliDate do
90
90
  five_month_later.should == JalaliDate.new(1389,3,11)
91
91
  five_month_ago.should == JalaliDate.new(1388,5,11)
92
92
  end
93
-
93
+
94
94
  it "should be able to cycle through dates in different ways, namely, step, upto and downto" do
95
95
  jdate = JalaliDate.new(1388,10,10)
96
-
96
+
97
97
  days_string = ""
98
98
  jdate.step( jdate + 10 , 2) do |jd|
99
99
  days_string += jd.day.to_s
@@ -105,7 +105,7 @@ describe JalaliDate do
105
105
  days_string += jd.day.to_s
106
106
  end
107
107
  days_string.should == "101112131415"
108
-
108
+
109
109
  days_string = ""
110
110
  jdate.downto(jdate-5) do |jd|
111
111
  days_string += jd.day.to_s
@@ -121,7 +121,26 @@ describe JalaliDate do
121
121
  end
122
122
 
123
123
  it "should be able to print jalali date in different formats" do
124
- JalaliDate.new(1388,1,7).format("%a %A %b %B %d %j %m %w %y %Y %% %x").should == "ج جمعه فروردین فروردین 7 7 1 5 88 1388 % 88/1/7"
124
+ JalaliDate.new(1388,1,7).strftime("%a %A %b %B %d %e %j %m %w %y %Y %% %x").should == "ج جمعه فروردین Farvardin 07 7 7 1 5 88 1388 % 88/1/7"
125
+ end
126
+
127
+ it "should be intialize with a time object" do
128
+ time = Time.now
129
+ JalaliDate.new(time).hour.should == time.hour
130
+ end
131
+
132
+ it "should be able for format %H %I %M %p %S %X %Z correctly if initiallized with time" do
133
+ JalaliDate.new(1388,2,15,5,50,10).strftime("%H").should == "05"
134
+ JalaliDate.new(1388,2,15,18,50,10).strftime("%H %I").should == "18 06"
135
+ JalaliDate.new(1388,2,15,12,50,10).strftime("%H %I").should == "12 00"
136
+ JalaliDate.new(1388,2,15,12,50,10).strftime("%H %I %M %S").should == "12 00 50 10"
137
+ JalaliDate.new(1388,2,15,5,50,10).strftime("%p").should == "قبل از ظهر"
138
+ JalaliDate.new(1388,2,15,15,50,10).strftime("%p").should == "بعد از ظهر"
139
+ JalaliDate.new(1388,2,15,15,50,10).strftime("%X").should == "15:50:10"
140
+ JalaliDate.new(1388,2,15,15,50,10).strftime("%X").should == "15:50:10"
141
+ JalaliDate.new(1388,2,15,15,50,10,"CET",3600).strftime("%Z").should == "CET"
142
+ time = Time.now
143
+ JalaliDate.new(time).strftime("%Z").should == time.zone
125
144
  end
126
145
 
127
146
  end
@@ -1,9 +1,10 @@
1
1
  $LOAD_PATH.unshift(File.dirname(__FILE__))
2
2
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+
3
4
  require 'jalalidate'
4
- require 'spec'
5
- require 'spec/autorun'
5
+ require 'rspec'
6
+ require 'rspec/autorun'
6
7
 
7
- Spec::Runner.configure do |config|
8
+ RSpec.configure do |config|
8
9
 
9
10
  end
metadata CHANGED
@@ -2,12 +2,12 @@
2
2
  name: jalalidate
3
3
  version: !ruby/object:Gem::Version
4
4
  hash: 19
5
- prerelease: false
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
- - 2
9
- - 2
10
- version: 0.2.2
8
+ - 3
9
+ - 0
10
+ version: 0.3.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Allen A. Bargi
@@ -15,14 +15,46 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-12-24 00:00:00 +01:00
18
+ date: 2011-01-06 00:00:00 +01:00
19
19
  default_executable:
20
- dependencies: []
21
-
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rspec
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ hash: 11
30
+ segments:
31
+ - 2
32
+ - 1
33
+ - 0
34
+ version: 2.1.0
35
+ type: :development
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: bundler
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ hash: 23
46
+ segments:
47
+ - 1
48
+ - 0
49
+ - 0
50
+ version: 1.0.0
51
+ type: :development
52
+ version_requirements: *id002
22
53
  description: A library for working with Jalali Calendar (a.k.a Persian Calendar)
23
54
  email: allen.bargi@gmail.com
24
- executables: []
25
-
55
+ executables:
56
+ - jcal
57
+ - jdate
26
58
  extensions: []
27
59
 
28
60
  extra_rdoc_files:
@@ -31,12 +63,16 @@ extra_rdoc_files:
31
63
  files:
32
64
  - .gitignore
33
65
  - Gemfile
66
+ - Gemfile.lock
34
67
  - LICENSE
35
68
  - README.md
36
69
  - Rakefile
37
70
  - TODO
71
+ - bin/jcal
72
+ - bin/jdate
38
73
  - jalalidate.gemspec
39
74
  - lib/jalalidate.rb
75
+ - lib/jalalidate/cli.rb
40
76
  - lib/jalalidate/version.rb
41
77
  - spec/jalalidate_spec.rb
42
78
  - spec/spec_helper.rb
@@ -70,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
70
106
  requirements: []
71
107
 
72
108
  rubyforge_project: jalalidate
73
- rubygems_version: 1.3.7
109
+ rubygems_version: 1.4.1
74
110
  signing_key:
75
111
  specification_version: 3
76
112
  summary: A library for working with Jalali Calendar (a.k.a Persian Calendar)