jalalidate 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008-2010 Aziz A. Bargi
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,31 @@
1
+ = Jalali Date Library
2
+
3
+ == History
4
+
5
+ ==== 0.2 - 25.FEB.2010
6
+ * renamed the gem from JalaliDate to jalalidate
7
+ * added spec and a full test suite
8
+ * updated gemspec file for rubygems.org
9
+ * updated some documentations
10
+
11
+ ==== 0.02 - 08.AUG.2008
12
+ * added jalali to geregorian date convertor.
13
+ * added JalaliDate class and ported Date class method to JalaliDate
14
+
15
+ ==== 0.01 - 07.AUG.2008
16
+ * planning the project
17
+
18
+
19
+ == Note on Patches/Pull Requests
20
+
21
+ * Fork the project.
22
+ * Make your feature addition or bug fix.
23
+ * Add tests for it. This is important so I don't break it in a
24
+ future version unintentionally.
25
+ * Commit, do not mess with rakefile, version, or history.
26
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
27
+ * Send me a pull request. Bonus points for topic branches.
28
+
29
+ == Copyright
30
+
31
+ Copyright (c) 2008-2010 Aziz A. Bargi. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,77 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+
8
+ gem.name = "jalalidate"
9
+ gem.version = "0.2.0"
10
+ gem.authors = ["Aziz A. Bargi"]
11
+ gem.email = "aziz.bargi@gmail.com"
12
+ gem.rubyforge_project = 'JalaliDate'
13
+ gem.homepage = "http://github.com/aziz/jalalidate"
14
+ gem.summary = "A port of class Date in ruby that works based on Jalali Calendar (a.k.a Persian Calendar)"
15
+ gem.require_path = "lib"
16
+ gem.has_rdoc = true
17
+ gem.extra_rdoc_files = ["README.rdoc","LICENSE"]
18
+ gem.add_development_dependency "rspec", ">= 1.2.9"
19
+ gem.rdoc_options << "--charset" << "utf-8"
20
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
21
+ end
22
+ Jeweler::GemcutterTasks.new
23
+ rescue LoadError
24
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
25
+ end
26
+
27
+ require 'spec/rake/spectask'
28
+ Spec::Rake::SpecTask.new(:spec) do |spec|
29
+ spec.libs << 'lib' << 'spec'
30
+ spec.spec_files = FileList['spec/**/*_spec.rb']
31
+ end
32
+
33
+ Spec::Rake::SpecTask.new(:rcov) do |spec|
34
+ spec.libs << 'lib' << 'spec'
35
+ spec.pattern = 'spec/**/*_spec.rb'
36
+ spec.rcov = true
37
+ end
38
+
39
+ task :spec => :check_dependencies
40
+
41
+ begin
42
+ require 'reek/adapters/rake_task'
43
+ Reek::RakeTask.new do |t|
44
+ t.fail_on_error = true
45
+ t.verbose = false
46
+ t.source_files = 'lib/**/*.rb'
47
+ end
48
+ rescue LoadError
49
+ task :reek do
50
+ abort "Reek is not available. In order to run reek, you must: sudo gem install reek"
51
+ end
52
+ end
53
+
54
+ begin
55
+ require 'roodi'
56
+ require 'roodi_task'
57
+ RoodiTask.new do |t|
58
+ t.verbose = false
59
+ end
60
+ rescue LoadError
61
+ task :roodi do
62
+ abort "Roodi is not available. In order to run roodi, you must: sudo gem install roodi"
63
+ end
64
+ end
65
+
66
+ task :default => :spec
67
+
68
+ require 'rake/rdoctask'
69
+ Rake::RDocTask.new do |rdoc|
70
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
71
+
72
+ rdoc.options << "--charset" << "utf-8"
73
+ rdoc.rdoc_dir = 'rdoc'
74
+ rdoc.title = "jalalidate #{version}"
75
+ rdoc.rdoc_files.include(['README.rdoc','LICENSE'])
76
+ rdoc.rdoc_files.include('lib/**/*.rb')
77
+ end
data/TODO ADDED
@@ -0,0 +1,3 @@
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
data/lib/jalalidate.rb ADDED
@@ -0,0 +1,315 @@
1
+ # :title:Jalali Date #
2
+ require 'jcode'
3
+ require "date"
4
+
5
+ class JalaliDate
6
+
7
+ #:stopdoc:
8
+ $KCODE = 'u'
9
+ GDaysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
10
+ JDaysInMonth = [31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29]
11
+ PERSIAN_MONTH_NAMES = [nil, "فروردین","اردیبهشت","خرداد","تیر","مرداد","شهریور","مهر","آبان","آذر","دی","بهمن","اسفند"]
12
+ PERSIAN_WEEKDAY_NAMES = ["یک‌شنبه","دوشنبه","سه‌شنبه","چهارشنبه","پنج‌شنبه","جمعه","شنبه"]
13
+ PERSIAN_ABBR_WEEKDAY_NAMES = ["۱ش","۲ش","۳ش","۴ش","۵ش","ج","ش"]
14
+ PERSIAN_MERIDIAN_INDICATOR = ["قبل از ظهر","بعد از ظهر"]
15
+ PERSIAN_ABBR_MERIDIAN_INDICATOR = ["ق.ظ","ب.ظ"]
16
+ #:startdoc:
17
+
18
+ include Comparable
19
+
20
+ attr_accessor :year,:month,:day
21
+ attr_reader :g_year, :g_month, :g_day
22
+
23
+ # Can be initialized in two ways:
24
+ # - First by feeding 3 arguments for Jalali Date, year,month and day.
25
+ # - The Second way to initializes is to pass a normal Ruby Date object, it'll be converted to jalali automatically.
26
+ #
27
+ # Example:
28
+ # jdate = JalaliDate.new(Date.today)
29
+ # other_jdate = JalaliDate.new(1388,9,17)
30
+ 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
35
+ end
36
+
37
+ raise ArgumentError, "invalid arguments or invalid Jalali date" unless self.class.valid?(year,month,day)
38
+ @year = year
39
+ @month = month
40
+ @day = day
41
+ @g_year, @g_month, @g_day = jalali_to_gregorian(year,month,day)
42
+ end
43
+
44
+ # Class Methods
45
+ class << self
46
+
47
+ # Return a JalaliDate object representing today's date in calendar
48
+ def today
49
+ JalaliDate.new(Date.today)
50
+ end
51
+
52
+ # Return a JalaliDate object representing yesterday's date in calendar
53
+ def yesterday
54
+ JalaliDate.new(Date.today - 1)
55
+ end
56
+
57
+ # Return a JalaliDate object representing tomorrow's date in calendar
58
+ def tomorrow
59
+ JalaliDate.new(Date.today + 1)
60
+ end
61
+
62
+ # Accpets a four digit number as the jalaliyear and returns true if that particular year
63
+ # is a leap year in jalali calendar otherwise it returns false.
64
+ def leap?(y)
65
+ [6,22,17,13,9,5,1,30].include?(y%33) ? true : false
66
+ end
67
+
68
+ # Accpets three numbers for year (4 digit), month and day in jalali calendar and checks if it's a
69
+ # valid date according to jalali calendar or not.
70
+ def valid?(y,m,d)
71
+ (y.class == Fixnum && y > 0 &&
72
+ m.class == Fixnum && (1..12).include?(m) &&
73
+ d.class == Fixnum && (((1..JDaysInMonth[m-1]).include?(d)) || (d == 30 && m == 12 && leap?(y) ))
74
+ ) ? true : false
75
+ end
76
+ end
77
+
78
+ # Converts a JalaiDate object to Ruby Date object
79
+ def to_gregorian; Date.new(@g_year,@g_month,@g_day); end;
80
+ alias :to_g :to_gregorian
81
+
82
+ # Returns a string represtation of the JalaliDate object in format like this: y/m/d
83
+ def to_s
84
+ [@year,@month,@day].join("/")
85
+ end
86
+
87
+ # Returns a hash in a format like this: {:year => @year, :month => @month, :day => @day}
88
+ def to_hash
89
+ {:year => @year, :month => @month, :day => @day}
90
+ end
91
+
92
+ # Returns an array in a format like this: [y,m,d]
93
+ def to_a
94
+ [@year,@month,@day]
95
+ end
96
+
97
+ # Return internal object state as a programmer-readable string.
98
+ def inspect
99
+ "#<#{self.class}:#{self.object_id}, :year => #{@year}, :month => #{@month}, :day => #{@day} >"
100
+ end
101
+
102
+ # Adds n days to the current JalaliDate object
103
+ def +(days)
104
+ self.class.new( to_g + days )
105
+ end
106
+
107
+ # Subtracts n days from the current JalaliDate object
108
+ def -(days)
109
+ self.class.new( to_g - days )
110
+ end
111
+
112
+ # Return the next day for the current JalaliDate object
113
+ def next(n=1)
114
+ self + n
115
+ end
116
+ alias :succ :next
117
+
118
+ # Return the previous day for the current JalaliDate object
119
+ def previous(n=1)
120
+ self - n
121
+ end
122
+
123
+ # Compares two JalaliDate objects. acts like Date#<=>
124
+ def <=>(other)
125
+ to_g <=> other.to_g
126
+ end
127
+
128
+ # Move JalaliDate object forward by n months
129
+ def >>(months)
130
+ y, m = (@year * 12 + (@month - 1) + months).divmod(12)
131
+ m, = (m + 1) .divmod(1)
132
+ d = @day
133
+ d -= 1 until self.class.valid?(y, m, d)
134
+ self.class.new(y,m,d)
135
+ end
136
+
137
+ # Move JalaliDate object backward by n months
138
+ def <<(months)
139
+ self >> -months
140
+ end
141
+
142
+ # Step the current date forward +step+ days at a time (or backward, if step is negative) until we reach
143
+ # limit (inclusive), yielding the resultant date at each step.
144
+ #
145
+ # Example:
146
+ # jdate = JalaliDate.new(Date.today)
147
+ # jdate.step(Date.today+10, 2) do |jd|
148
+ # puts jd.to_s
149
+ # end
150
+ def step(limit, step=1)
151
+ da = self
152
+ op = %w(- <= >=)[step <=> 0]
153
+ while da.__send__(op, limit)
154
+ yield da
155
+ da += step
156
+ end
157
+ self
158
+ end
159
+
160
+ # Step forward one day at a time until we reach max (inclusive), yielding each date as we go.
161
+ #
162
+ # Example:
163
+ # jdate = JalaliDate.new(Date.today)
164
+ # days_string = ""
165
+ # jdate.upto(jdate+5) do |jd|
166
+ # days_string += jd.day.to_s
167
+ # end
168
+ def upto(max, &block)
169
+ step(max, +1, &block)
170
+ end
171
+
172
+ # Step backward one day at a time until we reach min (inclusive), yielding each date as we go.
173
+ # See #upto for the example.
174
+ def downto(min, &block)
175
+ step(min, -1, &block)
176
+ end
177
+
178
+ # Is this a leap year?
179
+ def leap?
180
+ self.class.leap?(@year)
181
+ end
182
+
183
+ # Get the week day of this date. Sunday is day-of-week 0; Saturday is day-of-week 6.
184
+ def wday
185
+ to_g.wday
186
+ end
187
+
188
+ # Get the day-of-the-year of this date.
189
+ # Farvardin 1 is day-of-the-year 1
190
+ def yday
191
+ m = (@month-2 < 0) ? 0 : @month-2
192
+ (@month==1) ? @day : @day + JDaysInMonth[0..m].inject(0) {|sum, n| sum + n }
193
+ end
194
+
195
+ # Formats time according to the directives in the given format string. Any text not listed as a directive will be
196
+ # passed through to the output string.
197
+ #
198
+ # Format meanings:
199
+ #
200
+ # [%a] The abbreviated weekday name (۳ش)
201
+ # [%A] The full weekday name (یکشنبه)
202
+ # [%b or %B] The month name (اردیبهشت)
203
+ # [%d] Day of the month (1..31)
204
+ # [%j] Day of the year (1..366)
205
+ # [%m] Month of the year (1..12)
206
+ # [%w] Day of the week (Sunday is 0, 0..6)
207
+ # [%x] Preferred representation for the date alone, no time in format YY/M/D
208
+ # [%y] Year without a century (00..99)
209
+ # [%Y] Year with century
210
+ # [%%] Literal %'' character
211
+ #
212
+ # Example:
213
+ # d = JalaliDate.today
214
+ # d.strftime("Printed on %Y/%m/%d") #=> "Printed on 87/5/26
215
+ def strftime(format_str = '%Y/%m/%d')
216
+ clean_fmt = format_str.gsub(/%{2}/, "SUBSTITUTION_MARKER").
217
+ gsub(/%a/, PERSIAN_ABBR_WEEKDAY_NAMES[wday]).
218
+ gsub(/%A/, PERSIAN_WEEKDAY_NAMES[wday]).
219
+ gsub(/%b/, PERSIAN_MONTH_NAMES[@month]).
220
+ gsub(/%B/, PERSIAN_MONTH_NAMES[@month]).
221
+ gsub(/%d/, @day.to_s).
222
+ gsub(/%m/, @month.to_s).
223
+ gsub(/%Y/, @year.to_s).
224
+ gsub(/%y/, @year.to_s.slice(2,2)).
225
+ gsub(/%j/, yday.to_s).
226
+ gsub(/%w/, wday.to_s).
227
+ gsub(/%x/, [@year.to_s.slice(2,2),@month,@day].join("/")).
228
+ gsub(/#{"SUBSTITUTION_MARKER"}/, '%')
229
+ end
230
+ alias :format :strftime
231
+
232
+ private #-------------------------------------------------------------------------
233
+
234
+ def gregorian_to_jalali(year, month, day)
235
+ gy = year - 1600
236
+ gm = month - 1
237
+ gd = day - 1
238
+ g_day_no = 365*gy + (gy+3)/4 - (gy+99)/100 + (gy+399)/400
239
+ gm.times { |i| g_day_no += GDaysInMonth[i] }
240
+ g_day_no += 1 if gm > 1 && ((gy%4 == 0 && gy%100 != 0) || (gy%400 == 0))
241
+ g_day_no += gd
242
+
243
+ j_day_no = g_day_no-79
244
+ j_np = j_day_no/12053
245
+ j_day_no %= 12053
246
+ jy = 979 + 33 * j_np + 4*(j_day_no/1461)
247
+ j_day_no %= 1461
248
+
249
+ if (j_day_no >= 366)
250
+ jy += (j_day_no - 1)/365
251
+ j_day_no = (j_day_no - 1) % 365
252
+ end
253
+
254
+ 11.times do |i|
255
+ if j_day_no >= JDaysInMonth[i]
256
+ j_day_no -= JDaysInMonth[i]
257
+ $j = i + 1
258
+ else
259
+ $j = i
260
+ break
261
+ end
262
+ end
263
+ jm = $j + 1
264
+ jd = j_day_no + 1
265
+
266
+ [jy, jm, jd]
267
+ end
268
+
269
+ def jalali_to_gregorian(year,month,day)
270
+ jy = year - 979
271
+ jm = month - 1
272
+ jd = day - 1
273
+ j_day_no = 365*jy + (jy/33)*8 + (jy % 33 + 3)/4
274
+ jm.times { |i| j_day_no += JDaysInMonth[i] }
275
+ j_day_no += jd
276
+
277
+ g_day_no = j_day_no + 79
278
+ gy = 1600 + 400*(g_day_no/146097)
279
+ g_day_no %= 146097
280
+
281
+ leap = true
282
+ if g_day_no >= 36525
283
+ g_day_no -= 1
284
+ gy += 100 * (g_day_no/36524)
285
+ g_day_no %= 36524
286
+ (g_day_no >= 365) ? g_day_no += 1 : leap = false
287
+ end
288
+
289
+ gy += 4 * (g_day_no/1461)
290
+ g_day_no %= 1461
291
+
292
+ if g_day_no >= 366
293
+ leap = false
294
+ g_day_no -= 1
295
+ gy += g_day_no/365
296
+ g_day_no %= 365
297
+ end
298
+
299
+ 11.times do |i|
300
+ leap_day = (i==1 && leap) ? 1 : 0
301
+ if g_day_no >= (GDaysInMonth[i] + leap_day )
302
+ g_day_no -= (GDaysInMonth[i] + leap_day )
303
+ $g = i + 1
304
+ else
305
+ $g = i
306
+ break
307
+ end
308
+ end
309
+ gm = $g + 1
310
+ gd = g_day_no + 1
311
+
312
+ [gy,gm,gd]
313
+ end
314
+
315
+ end
@@ -0,0 +1,127 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe JalaliDate do
4
+
5
+ it "should initialize with valid year,month,date values" do
6
+ jdate = JalaliDate.new(1388,11,22)
7
+ jdate.should be_instance_of(JalaliDate)
8
+ end
9
+
10
+ it "should raise error for invalid year,month,date combination on initialize" do
11
+ lambda { JalaliDate.new(1388,14,22) }.should raise_error(ArgumentError) # invalid month
12
+ lambda { JalaliDate.new(1388,14,32) }.should raise_error(ArgumentError) # invalid day
13
+ lambda { JalaliDate.new(1388,14,"22") }.should raise_error(ArgumentError) # invalid type
14
+ lambda { JalaliDate.new(1388,14,22,11,0) }.should raise_error(ArgumentError) # invalid arguments
15
+ end
16
+
17
+ it "should initialize with a ruby date object" do
18
+ jdate = JalaliDate.new(Date.today)
19
+ jdate.should be_instance_of(JalaliDate)
20
+ end
21
+
22
+ it "should populate attr_accessors for jalali year, month and date and attr_reader for gregorian year,month and date" do
23
+ jdate = JalaliDate.new(1388,11,22)
24
+ jdate.year.should eql(1388)
25
+ jdate.month.should eql(11)
26
+ jdate.day.should eql(22)
27
+ jdate.g_year.should eql(2010)
28
+ jdate.g_month.should eql(2)
29
+ jdate.g_day.should eql(11)
30
+ end
31
+
32
+ it "should return today, yesterday, and tomorrow date according to jalali calendar" do
33
+ Date.stub!(:today).and_return(Date.new(2010,1,1))
34
+ JalaliDate.today.should == JalaliDate.new(1388,10,11)
35
+ JalaliDate.yesterday.should == JalaliDate.new(1388,10,10)
36
+ JalaliDate.tomorrow.should == JalaliDate.new(1388,10,12)
37
+ end
38
+
39
+ it "should distinguish invalid jalali dates" do
40
+ JalaliDate.valid?(1388,13,11).should be_false
41
+ JalaliDate.valid?(-1388,11,11).should be_false
42
+ JalaliDate.valid?(1388,1,45).should be_false
43
+ JalaliDate.valid?(1388,12,30).should be_false
44
+ JalaliDate.valid?(1387,12,30).should be_true
45
+ end
46
+
47
+ it "should distinguish leap years" do
48
+ JalaliDate.leap?(1387).should be_true
49
+ JalaliDate.leap?(1388).should be_false
50
+ end
51
+
52
+ it "should convert to gregorian date correctly" do
53
+ jdate = JalaliDate.new(1388,10,11)
54
+ jdate.to_g.should == Date.new(2010,1,1)
55
+ end
56
+
57
+ it "should convert to string, array and hash correctly" do
58
+ jdate = JalaliDate.new(1388,10,11)
59
+ jdate.to_s.should == "1388/10/11"
60
+ jdate.to_a.should == [1388,10,11]
61
+ jdate.to_hash.should == {:year => 1388, :month => 10, :day => 11}
62
+ end
63
+
64
+ it "should be able to add and substract days from the currect jalai date object" do
65
+ jdate = JalaliDate.new(1388,10,11)
66
+ five_days_later = jdate + 5
67
+ twenty_days_ago = jdate - 20
68
+ five_days_later.should == JalaliDate.new(1388,10,16)
69
+ twenty_days_ago.should == JalaliDate.new(1388,9,21)
70
+ end
71
+
72
+ it "should be able to compare two jalali dates" do
73
+ jdate = JalaliDate.new(1388,10,11)
74
+ next_month_jdate = JalaliDate.new(1388,11,11)
75
+ next_month_jdate.<=>(jdate).should == 1
76
+ jdate.<=>(next_month_jdate).should == -1
77
+ jdate.<=>(jdate).should == 0
78
+ end
79
+
80
+ it "should now its next and previous dates" do
81
+ jdate = JalaliDate.new(1388,10,11)
82
+ jdate.next.should == JalaliDate.new(1388,10,12)
83
+ jdate.previous.should == JalaliDate.new(1388,10,10)
84
+ end
85
+
86
+ it "should be able to move the month forward and backward" do
87
+ jdate = JalaliDate.new(1388,10,11)
88
+ five_month_later = jdate >> 5
89
+ five_month_ago = jdate << 5
90
+ five_month_later.should == JalaliDate.new(1389,3,11)
91
+ five_month_ago.should == JalaliDate.new(1388,5,11)
92
+ end
93
+
94
+ it "should be able to cycle through dates in different ways, namely, step, upto and downto" do
95
+ jdate = JalaliDate.new(1388,10,10)
96
+
97
+ days_string = ""
98
+ jdate.step( jdate + 10 , 2) do |jd|
99
+ days_string += jd.day.to_s
100
+ end
101
+ days_string.should == "101214161820"
102
+
103
+ days_string = ""
104
+ jdate.upto(jdate+5) do |jd|
105
+ days_string += jd.day.to_s
106
+ end
107
+ days_string.should == "101112131415"
108
+
109
+ days_string = ""
110
+ jdate.downto(jdate-5) do |jd|
111
+ days_string += jd.day.to_s
112
+ end
113
+ days_string.should == "1098765"
114
+ end
115
+
116
+ it "should return a correct year day based on Jalali Calendar" do
117
+ JalaliDate.new(1388,1,1).yday.should == 1
118
+ JalaliDate.new(1388,12,29).yday.should == 365
119
+ JalaliDate.new(1387,12,30).yday.should == 366
120
+ JalaliDate.new(1388,9,17).yday.should == 263
121
+ end
122
+
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"
125
+ end
126
+
127
+ end
@@ -0,0 +1,9 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'jalalidate'
4
+ require 'spec'
5
+ require 'spec/autorun'
6
+
7
+ Spec::Runner.configure do |config|
8
+
9
+ end
metadata ADDED
@@ -0,0 +1,85 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jalalidate
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 2
8
+ - 0
9
+ version: 0.2.0
10
+ platform: ruby
11
+ authors:
12
+ - Aziz A. Bargi
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-03-03 00:00:00 +01:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rspec
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 1
29
+ - 2
30
+ - 9
31
+ version: 1.2.9
32
+ type: :development
33
+ version_requirements: *id001
34
+ description:
35
+ email: aziz.bargi@gmail.com
36
+ executables: []
37
+
38
+ extensions: []
39
+
40
+ extra_rdoc_files:
41
+ - LICENSE
42
+ - README.rdoc
43
+ files:
44
+ - LICENSE
45
+ - README.rdoc
46
+ - Rakefile
47
+ - TODO
48
+ - lib/jalalidate.rb
49
+ - spec/jalalidate_spec.rb
50
+ - spec/spec_helper.rb
51
+ has_rdoc: true
52
+ homepage: http://github.com/aziz/jalalidate
53
+ licenses: []
54
+
55
+ post_install_message:
56
+ rdoc_options:
57
+ - --charset=UTF-8
58
+ - --charset
59
+ - utf-8
60
+ require_paths:
61
+ - lib
62
+ required_ruby_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ segments:
67
+ - 0
68
+ version: "0"
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ segments:
74
+ - 0
75
+ version: "0"
76
+ requirements: []
77
+
78
+ rubyforge_project: JalaliDate
79
+ rubygems_version: 1.3.6
80
+ signing_key:
81
+ specification_version: 3
82
+ summary: A port of class Date in ruby that works based on Jalali Calendar (a.k.a Persian Calendar)
83
+ test_files:
84
+ - spec/jalalidate_spec.rb
85
+ - spec/spec_helper.rb