rquran 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,77 @@
1
+ module Rquran
2
+ include QuranData
3
+
4
+ def self.sura_name(sura)
5
+ SuraNames[sura]
6
+ end
7
+
8
+ def self.page_for_ayah(sura, relative_ayah_index)
9
+ page = 0
10
+ Pages.each do |p|
11
+ next if p.empty?
12
+ page += 1
13
+ if p[0] == sura and p[1]==relative_ayah_index then
14
+ return page
15
+ elsif p[0] > sura then
16
+ return page - 1
17
+ elsif p[0]==sura and p[1] > relative_ayah_index
18
+ return page - 1
19
+ end
20
+ end
21
+ end
22
+
23
+ def self.page_for_absolute_ayah(absolute_ayah_index)
24
+ page_for_ayah( sura_for_ayah(absolute_ayah_index) , relative_ayah_refernce(absolute_ayah_index) )
25
+ end
26
+
27
+ def self.absolute_index_for_ayah(sura,relative_ayah_index)
28
+ Suras[sura][1]+relative_ayah_refernce-1
29
+ end
30
+
31
+ def self.juzu_for_ayah(sura,relative_ayah_index)
32
+ juzu = 0
33
+ Juzus[1..31].each do |j|
34
+ juzu += 1
35
+ if j[0] == sura and j[1] == relative_ayah_index
36
+ return juzu
37
+ elsif j[0] > sura
38
+ return juzu - 1
39
+ elsif j[0] == sura and j[1]> relative_ayah_index
40
+ return juzu - 1
41
+ end
42
+ end
43
+ end
44
+
45
+ def self.sura_for_ayah(absolute_ayah_index)
46
+ return nil if not valid_absolute_ayah(absolute_ayah_index)
47
+ surah = 0
48
+ Suras.each do |s|
49
+ if !s.empty?
50
+ if s[1] + s[2] - 1 >= absolute_ayah_index
51
+ break
52
+ end
53
+ end
54
+ surah += 1
55
+ end
56
+ return surah
57
+ end
58
+
59
+ def self.relative_for_ayah(absolute_ayah_index)
60
+ return nil if not valid_absolute_ayah(absolute_ayah_index)
61
+ surah = sura_for_ayah(absolute_ayah_index)
62
+ return absolute_ayah_index - Suras[surah][1]+1
63
+ end
64
+
65
+ def self.juzu_for_absolute_ayah_index(absolute_ayah_index)
66
+ juzu_for_ayah(sura_for_ayah(absolute_ayah_index),relative_for_ayah(absolute_ayah_index))
67
+ end
68
+
69
+ # an ayah is valid if the sura is between 1 and 114 and ayah is <= number of ayas in that sura
70
+ def self.valid_ayah(sura,ayah)
71
+ (1..114).include?(sura) and (1..Suras[sura][2]).include?(ayah)
72
+ end
73
+
74
+ def self.valid_absolute_ayah(absolute_ayah_index)
75
+ (0..6235).include?(absolute_ayah_index)
76
+ end
77
+ end
@@ -0,0 +1,46 @@
1
+ module Rquran
2
+ module Mixin
3
+ module ClassMethods
4
+ # enables an object to have a property that acts as an ayah reference with all releated methods.
5
+ def has_ayah(*args)
6
+ args.each do |aya_var|
7
+ attr_accessor aya_var
8
+ define_method aya_var.to_s + "_ayah" do
9
+ val = send(aya_var)
10
+ return nil if val.nil?
11
+ val.class == Array ? val[1] : (Rquran.relative_for_ayah(val))
12
+ end
13
+ define_method aya_var.to_s + "_sura" do
14
+ val = send(aya_var)
15
+ return nil if val.nil?
16
+ val.class == Array ? val[0] : (Rquran.sura_for_ayah(val))
17
+ end
18
+ define_method aya_var.to_s + "_sura_name" do
19
+ val = send(aya_var)
20
+ return nil if val.nil?
21
+ val.class == Array ? Rquran.sura_name(val[0]) : Rquran.sura_name(send(aya_var.to_s+"_sura"))
22
+ end
23
+ define_method aya_var.to_s+"_valid?" do
24
+ val = send(aya_var)
25
+ return nil if val.nil?
26
+ Rquran.valid_ayah(send(aya_var.to_s+"_sura") , send(aya_var.to_s+"_ayah"))
27
+ end
28
+ define_method aya_var.to_s + "_juzu" do
29
+ val = send(aya_var)
30
+ return nil if val.nil?
31
+ Rquran.juzu_for_ayah(send(aya_var.to_s+"_sura") , send(aya_var.to_s+"_ayah"))
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ module InstanceMethods
38
+
39
+ end
40
+
41
+ def self.included(receiver)
42
+ receiver.extend ClassMethods
43
+ receiver.send :include, InstanceMethods
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,4 @@
1
+ module Rquran
2
+ VERSION = "1.0.0"
3
+ end
4
+
data/rquran.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "rquran/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "rquran"
7
+ s.version = Rquran::VERSION
8
+ s.authors = ["Abdulaziz Alnutaifi"]
9
+ s.email = ["abdulaziz.alnutaifi@me.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{Gem for Quran related calculations, meta-data}
12
+ s.description = %q{Gem for quran related calculations, meta-data}
13
+
14
+ s.rubyforge_project = "rquran"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # specify any dependencies here; for example:
22
+ # s.add_development_dependency "rspec"
23
+ # s.add_runtime_dependency "rest-client"
24
+ end
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rquran
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Abdulaziz Alnutaifi
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-01-18 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Gem for quran related calculations, meta-data
15
+ email:
16
+ - abdulaziz.alnutaifi@me.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - .gitignore
22
+ - .yardoc/checksums
23
+ - .yardoc/object_types
24
+ - .yardoc/objects/root.dat
25
+ - .yardoc/proxy_types
26
+ - Gemfile
27
+ - README.md
28
+ - Rakefile
29
+ - doc/QuranData.html
30
+ - doc/Rquran.html
31
+ - doc/Rquran/Mixin.html
32
+ - doc/Rquran/Mixin/ClassMethods.html
33
+ - doc/Rquran/Mixin/InstanceMethods.html
34
+ - doc/_index.html
35
+ - doc/class_list.html
36
+ - doc/css/common.css
37
+ - doc/css/full_list.css
38
+ - doc/css/style.css
39
+ - doc/file.README.html
40
+ - doc/file_list.html
41
+ - doc/frames.html
42
+ - doc/index.html
43
+ - doc/js/app.js
44
+ - doc/js/full_list.js
45
+ - doc/js/jquery.js
46
+ - doc/method_list.html
47
+ - doc/top-level-namespace.html
48
+ - lib/rquran.rb
49
+ - lib/rquran/quran_data.rb
50
+ - lib/rquran/rquran.rb
51
+ - lib/rquran/rquran_mixin.rb
52
+ - lib/rquran/version.rb
53
+ - rquran.gemspec
54
+ homepage: ''
55
+ licenses: []
56
+ post_install_message:
57
+ rdoc_options: []
58
+ require_paths:
59
+ - lib
60
+ required_ruby_version: !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ! '>='
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
72
+ requirements: []
73
+ rubyforge_project: rquran
74
+ rubygems_version: 1.8.24
75
+ signing_key:
76
+ specification_version: 3
77
+ summary: Gem for Quran related calculations, meta-data
78
+ test_files: []
79
+ has_rdoc: