navfund 0.0.2 → 0.0.3
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.
- data/README.md +23 -7
- data/Rakefile +2 -0
- data/lib/navfund/exceptions.rb +19 -0
- data/lib/navfund/navfund.rb +0 -1
- data/lib/navfund/provider.rb +13 -1
- data/lib/navfund/providers/sunlife.rb +21 -4
- data/lib/navfund/version.rb +1 -1
- data/lib/navfund.rb +1 -0
- data/test/lib/navfund/function_test.rb +1 -10
- data/test/lib/navfund/provider_test.rb +20 -0
- metadata +5 -2
data/README.md
CHANGED
@@ -10,11 +10,11 @@ Add this line to your application's Gemfile:
|
|
10
10
|
|
11
11
|
And then execute:
|
12
12
|
|
13
|
-
|
13
|
+
bundle
|
14
14
|
|
15
15
|
Or install it yourself as:
|
16
16
|
|
17
|
-
|
17
|
+
gem install navfund
|
18
18
|
|
19
19
|
## Usage
|
20
20
|
|
@@ -22,20 +22,36 @@ Get a list of supported Providers:
|
|
22
22
|
|
23
23
|
Navfund::Providers
|
24
24
|
|
25
|
-
Get supported funds for a specific Provider:
|
26
|
-
|
27
|
-
Navfund::Sunlife::Funds
|
28
|
-
|
29
25
|
Initialize a Provider's data:
|
30
26
|
|
31
27
|
@sunlife = Navfund::Sunlife.new
|
32
|
-
|
28
|
+
|
29
|
+
To get a list of supported funds for a specific Provider:
|
30
|
+
|
31
|
+
Navfund::Sunlife::Funds
|
32
|
+
@sunlife.funds # if a provider is initialized
|
33
|
+
|
33
34
|
Get the current NAVPU/NAVPS of a fund, by name:
|
34
35
|
|
35
36
|
@sunlife.value("Bond Fund")
|
36
37
|
|
38
|
+
Some Providers have a separate page when listing VUL (Variable Unit Life Insurance) fund values. To get the VUL value by name, add a :vul option when calling the value method. It is possible that the same name is used for both VUL and non-VUL funds:
|
39
|
+
|
40
|
+
@sunlife.value("Bond Fund", :vul)
|
41
|
+
|
37
42
|
A Navfund::Provider::InvalidFund will be raised if the specified fund is not supported or is invalid.
|
38
43
|
|
44
|
+
## Testing
|
45
|
+
|
46
|
+
Install the minitest gem if its not already installed in your system
|
47
|
+
|
48
|
+
gem install minitest
|
49
|
+
|
50
|
+
Then run the tests (default rake task is the 'test' task):
|
51
|
+
|
52
|
+
rake test
|
53
|
+
|
54
|
+
|
39
55
|
## Contributing
|
40
56
|
|
41
57
|
1. Fork it
|
data/Rakefile
CHANGED
@@ -0,0 +1,19 @@
|
|
1
|
+
# Main module
|
2
|
+
|
3
|
+
module Navfund
|
4
|
+
|
5
|
+
class InvalidProvider < StandardError
|
6
|
+
def initialize(msg = "The provider you entered is not supported!")
|
7
|
+
super
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class Provider
|
12
|
+
class InvalidFund < StandardError
|
13
|
+
def initialize(msg = "The fund name you entered is not supported!")
|
14
|
+
super
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
data/lib/navfund/navfund.rb
CHANGED
data/lib/navfund/provider.rb
CHANGED
@@ -2,11 +2,23 @@
|
|
2
2
|
|
3
3
|
module Navfund
|
4
4
|
class Provider
|
5
|
-
class InvalidFund < StandardError; end
|
6
5
|
|
7
6
|
def scrape
|
8
7
|
@document = open(@url).read
|
9
8
|
@wrapped_document = Nokogiri::HTML(@document)
|
9
|
+
if @vul_url
|
10
|
+
@vul_document = open(@vul_url).read
|
11
|
+
@wrapped_vul_document = Nokogiri::HTML(@vul_document)
|
12
|
+
end
|
10
13
|
end
|
14
|
+
|
15
|
+
def self.strip_value(val)
|
16
|
+
val.strip.gsub('PHP', '').gsub('USD', '').strip
|
17
|
+
end
|
18
|
+
|
19
|
+
def valid_fund?(fund)
|
20
|
+
false
|
21
|
+
end
|
22
|
+
|
11
23
|
end
|
12
24
|
end
|
@@ -4,21 +4,34 @@ module Navfund
|
|
4
4
|
class Sunlife < Provider
|
5
5
|
# List of funds
|
6
6
|
MAIN_URL = "http://www.sunlife.com.ph/philippines/Products+and+Services/Sun+Life+Prosperity+Funds?vgnLocale=en_CA"
|
7
|
+
VUL_URL = "http://www.sunlife.com.ph/philippines/Products+and+Services/VUL?vgnLocale=en_CA"
|
7
8
|
Funds = ["Bond Fund", "Balanced Fund", "Equity Fund", "Money Market Fund", "GS Fund", "Dollar Advantage Fund", "Dollar Abundance Fund"]
|
8
9
|
|
9
10
|
def initialize
|
10
11
|
@url = MAIN_URL
|
12
|
+
@vul_url = VUL_URL
|
11
13
|
self.scrape
|
12
|
-
end
|
14
|
+
end
|
13
15
|
|
14
|
-
|
16
|
+
# Fetch the current value
|
17
|
+
# Some providers have a separate page for VUL funds, to force checking the VUL page,
|
18
|
+
# set the type to :vul, for example @sunlife.value("Bond Fund", :vul)
|
19
|
+
# It is possible that the same fund name is used for VUL and non-VUL funds so this is necessary
|
20
|
+
def value(fund, fund_type=nil)
|
15
21
|
val = nil
|
22
|
+
# Set fund_type to nil if VUL page is not present
|
23
|
+
fund_type = nil if fund_type == :vul && @wrapped_vul_document.nil?
|
16
24
|
if valid_fund?(fund)
|
17
|
-
|
25
|
+
source_document = (fund_type == :vul) ? @wrapped_vul_document : @wrapped_document
|
26
|
+
fname = source_document.search("[text()*='#{fund}']").first
|
18
27
|
if fname
|
19
28
|
fval = fname.parent.next_element rescue nil
|
20
|
-
|
29
|
+
elsif @wrapped_vul_document && fund_type != :vul
|
30
|
+
# Search VUL page (if its not done before)
|
31
|
+
fname = @wrapped_vul_document.search("[text()*='#{fund}']").first
|
32
|
+
fval = fname.parent.next_element rescue nil
|
21
33
|
end
|
34
|
+
val = Provider.strip_value(fval.text) if fval
|
22
35
|
else
|
23
36
|
raise InvalidFund
|
24
37
|
end
|
@@ -28,5 +41,9 @@ module Navfund
|
|
28
41
|
def valid_fund?(fund)
|
29
42
|
Funds.include?(fund)
|
30
43
|
end
|
44
|
+
|
45
|
+
def funds
|
46
|
+
Funds
|
47
|
+
end
|
31
48
|
end
|
32
49
|
end
|
data/lib/navfund/version.rb
CHANGED
data/lib/navfund.rb
CHANGED
@@ -1,14 +1,5 @@
|
|
1
1
|
require_relative '../../test_helper'
|
2
2
|
|
3
3
|
describe Navfund do
|
4
|
-
|
5
|
-
@fund = Navfund::Metrobank.fund("Equity")
|
6
|
-
end
|
7
|
-
it "should get the fund object" do
|
8
|
-
@fund.should_not be_blank
|
9
|
-
STDERR.puts "<p>#{@fund.inspect}</p>"
|
10
|
-
end
|
11
|
-
it "should get the current navpu back in the response" do
|
12
|
-
@fund.value.should_not be_blank
|
13
|
-
end
|
4
|
+
|
14
5
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative '../../test_helper'
|
2
|
+
|
3
|
+
describe Navfund do
|
4
|
+
before do
|
5
|
+
@sunlife = Navfund::Sunlife.new
|
6
|
+
end
|
7
|
+
describe "when a provider is given" do
|
8
|
+
it "should get the provider object" do
|
9
|
+
@sunlife.wont_be_nil
|
10
|
+
end
|
11
|
+
it "should get the current value back in the response" do
|
12
|
+
Navfund::Sunlife::Funds.each do |fund|
|
13
|
+
@sunlife.value(fund).wont_be_nil
|
14
|
+
end
|
15
|
+
end
|
16
|
+
it "should get the current value back in the response when :vul is set" do
|
17
|
+
@sunlife.value("Bond Fund", :vul).wont_be_nil
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: navfund
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-11-
|
12
|
+
date: 2012-11-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
@@ -56,6 +56,7 @@ files:
|
|
56
56
|
- README.md
|
57
57
|
- Rakefile
|
58
58
|
- lib/navfund.rb
|
59
|
+
- lib/navfund/exceptions.rb
|
59
60
|
- lib/navfund/navfund.rb
|
60
61
|
- lib/navfund/provider.rb
|
61
62
|
- lib/navfund/providers/metrobank.rb
|
@@ -64,6 +65,7 @@ files:
|
|
64
65
|
- lib/navfund/version.rb
|
65
66
|
- navfund.gemspec
|
66
67
|
- test/lib/navfund/function_test.rb
|
68
|
+
- test/lib/navfund/provider_test.rb
|
67
69
|
- test/lib/navfund/version_test.rb
|
68
70
|
- test/test_helper.rb
|
69
71
|
homepage: https://github.com/marvs/navfund
|
@@ -93,5 +95,6 @@ summary: Navfund is a ruby gem that fetches the values of the current NAVPU/NAVP
|
|
93
95
|
of several Banks/Providers of UITFs/Mutual Funds
|
94
96
|
test_files:
|
95
97
|
- test/lib/navfund/function_test.rb
|
98
|
+
- test/lib/navfund/provider_test.rb
|
96
99
|
- test/lib/navfund/version_test.rb
|
97
100
|
- test/test_helper.rb
|