quandl_babelfish 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +7 -7
- data/.travis.yml +12 -12
- data/Gemfile +1 -1
- data/LICENSE +7 -7
- data/README.md +18 -18
- data/UPGRADE.md +38 -31
- data/lib/quandl/babelfish.rb +28 -28
- data/lib/quandl/babelfish/chronometer.rb +43 -43
- data/lib/quandl/babelfish/cleaner.rb +33 -32
- data/lib/quandl/babelfish/date_maid.rb +237 -237
- data/lib/quandl/babelfish/helper.rb +8 -8
- data/lib/quandl/babelfish/number_maid.rb +79 -79
- data/lib/quandl/babelfish/version.rb +4 -4
- data/lib/quandl/error/guess_date_format.rb +4 -4
- data/lib/quandl/error/invalid_date.rb +4 -4
- data/lib/quandl/error/standard.rb +26 -26
- data/lib/quandl/error/unknown_date_format.rb +4 -4
- data/quandl_babelfish.gemspec +21 -21
- data/spec/lib/quandl/babelfish/chronometer_spec.rb +50 -50
- data/spec/lib/quandl/babelfish/cleaner_spec.rb +70 -70
- data/spec/lib/quandl/babelfish/date_maid_spec.rb +528 -528
- data/spec/lib/quandl/babelfish/helper_spec.rb +44 -44
- data/spec/lib/quandl/babelfish/number_maid_spec.rb +126 -126
- data/spec/lib/quandl/babelfish_spec.rb +15 -15
- data/spec/spec_helper.rb +12 -12
- data/spec/support/matchers/be_eq_at_index.rb +31 -31
- metadata +12 -4
@@ -1,45 +1,45 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
include Quandl::Babelfish
|
3
|
-
describe Helper do
|
4
|
-
|
5
|
-
before(:each) do
|
6
|
-
@square_table = [
|
7
|
-
[1,2,3],
|
8
|
-
[4,5,6],
|
9
|
-
[7,8,9]
|
10
|
-
]
|
11
|
-
end
|
12
|
-
|
13
|
-
it 'should square an already square table' do
|
14
|
-
Helper::make_square(@square_table).should == @square_table
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'should square an empty table' do
|
18
|
-
Helper::make_square([]).should == []
|
19
|
-
end
|
20
|
-
|
21
|
-
it 'should square a single cell table' do
|
22
|
-
Helper::make_square([[1]]).should == [[1]]
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'should square a single row table' do
|
26
|
-
Helper::make_square([[1,2,3]]).should == [[1,2,3]]
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'should square a nil row table' do
|
30
|
-
Helper::make_square([[], [1,2,3]]).should == [[nil,nil,nil], [1,2,3]]
|
31
|
-
end
|
32
|
-
|
33
|
-
it 'should square a nil row table at end too' do
|
34
|
-
Helper::make_square([[1,2,3], []]).should == [[1,2,3], [nil,nil,nil]]
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'should square a variable row table' do
|
38
|
-
Helper::make_square([[1], [1,2,3], [1,2]]).should == [[1,nil,nil], [1,2,3], [1,2,nil]]
|
39
|
-
end
|
40
|
-
|
41
|
-
it 'should square messy table' do
|
42
|
-
Helper::make_square([[1],[],[1,2,3],[1],[1],[1,2,3,4,5,6]]).should == [[1,nil,nil,nil,nil,nil], [nil,nil,nil,nil,nil,nil], [1,2,3,nil,nil,nil], [1,nil,nil,nil,nil,nil], [1,nil,nil,nil,nil,nil], [1,2,3,4,5,6]]
|
43
|
-
end
|
44
|
-
|
1
|
+
require 'spec_helper'
|
2
|
+
include Quandl::Babelfish
|
3
|
+
describe Helper do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
@square_table = [
|
7
|
+
[1,2,3],
|
8
|
+
[4,5,6],
|
9
|
+
[7,8,9]
|
10
|
+
]
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should square an already square table' do
|
14
|
+
Helper::make_square(@square_table).should == @square_table
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should square an empty table' do
|
18
|
+
Helper::make_square([]).should == []
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should square a single cell table' do
|
22
|
+
Helper::make_square([[1]]).should == [[1]]
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should square a single row table' do
|
26
|
+
Helper::make_square([[1,2,3]]).should == [[1,2,3]]
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'should square a nil row table' do
|
30
|
+
Helper::make_square([[], [1,2,3]]).should == [[nil,nil,nil], [1,2,3]]
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'should square a nil row table at end too' do
|
34
|
+
Helper::make_square([[1,2,3], []]).should == [[1,2,3], [nil,nil,nil]]
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should square a variable row table' do
|
38
|
+
Helper::make_square([[1], [1,2,3], [1,2]]).should == [[1,nil,nil], [1,2,3], [1,2,nil]]
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should square messy table' do
|
42
|
+
Helper::make_square([[1],[],[1,2,3],[1],[1],[1,2,3,4,5,6]]).should == [[1,nil,nil,nil,nil,nil], [nil,nil,nil,nil,nil,nil], [1,2,3,nil,nil,nil], [1,nil,nil,nil,nil,nil], [1,nil,nil,nil,nil,nil], [1,2,3,4,5,6]]
|
43
|
+
end
|
44
|
+
|
45
45
|
end
|
@@ -1,126 +1,126 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
include Quandl::Babelfish
|
4
|
-
describe NumberMaid do
|
5
|
-
|
6
|
-
it "should handle '1.432,32' i.e. 1432.32 in Canadian format" do
|
7
|
-
NumberMaid::init(:decimal_mark => ',')
|
8
|
-
NumberMaid::clean('1.432,32').should == 1432.32
|
9
|
-
NumberMaid::init({}) #reset settings
|
10
|
-
end
|
11
|
-
|
12
|
-
it "should remove spaces that act as 000 separators" do
|
13
|
-
NumberMaid::clean('12 345').should == 12345
|
14
|
-
end
|
15
|
-
|
16
|
-
it "should accept commas that act as 000 separators" do
|
17
|
-
NumberMaid::clean('12,345').should == 12345
|
18
|
-
end
|
19
|
-
|
20
|
-
it "should handle scientific notation" do
|
21
|
-
NumberMaid::clean('2.1e2').should == 210
|
22
|
-
NumberMaid::clean('2.1 E 2').should == 210
|
23
|
-
NumberMaid::clean('2.1 E+2').should == 210
|
24
|
-
NumberMaid::clean('210 E -2').should == 2.1
|
25
|
-
NumberMaid::clean('2.1 e +2').should == 210
|
26
|
-
NumberMaid::clean('2.1*10^2').should == 210
|
27
|
-
NumberMaid::clean('2.1 X102').should == 210
|
28
|
-
NumberMaid::clean('sci not: -2.1 * 10 2 Ghz').should == -210
|
29
|
-
end
|
30
|
-
|
31
|
-
it "should mulitiply number if cell contains million or billion" do
|
32
|
-
NumberMaid::clean('35 million').should == 35000000
|
33
|
-
NumberMaid::clean('42 billion').should == 42000000000
|
34
|
-
end
|
35
|
-
|
36
|
-
it "should handle a plain integer" do
|
37
|
-
NumberMaid::clean('1').should == 1
|
38
|
-
end
|
39
|
-
|
40
|
-
it "should handle a plain negative integer" do
|
41
|
-
NumberMaid::clean('-1').should == -1
|
42
|
-
NumberMaid::clean('(1)').should == -1
|
43
|
-
end
|
44
|
-
|
45
|
-
it "should handle a plain float" do
|
46
|
-
NumberMaid::clean('1.1').should == 1.1
|
47
|
-
end
|
48
|
-
|
49
|
-
it "should handle a plain negative float" do
|
50
|
-
NumberMaid::clean('-1.1').should == -1.1
|
51
|
-
NumberMaid::clean('(1.1)').should == -1.1
|
52
|
-
end
|
53
|
-
|
54
|
-
it "should ignore extraneous characters" do
|
55
|
-
NumberMaid::clean('a1.1a').should == 1.1
|
56
|
-
NumberMaid::clean('And the answer is 1.1').should == 1.1
|
57
|
-
NumberMaid::clean('1.1 for the win').should == 1.1
|
58
|
-
NumberMaid::clean('1.1%').should == 1.1
|
59
|
-
NumberMaid::clean('-1.1%').should == -1.1
|
60
|
-
NumberMaid::clean('(1.1%)').should == -1.1
|
61
|
-
NumberMaid::clean('[1.1%]').should == 1.1
|
62
|
-
NumberMaid::clean('/1.1%/').should == 1.1
|
63
|
-
NumberMaid::clean('{1.1%}').should == 1.1
|
64
|
-
NumberMaid::clean('1.1Ghz').should == 1.1
|
65
|
-
NumberMaid::clean('(1.1Ghz)').should == -1.1
|
66
|
-
end
|
67
|
-
|
68
|
-
it 'should get nothing' do
|
69
|
-
NumberMaid::clean('').should be_nil
|
70
|
-
NumberMaid::clean('super').should be_nil
|
71
|
-
NumberMaid::clean('This is great. And then she said...').should be_nil
|
72
|
-
NumberMaid::clean(' ').should be_nil
|
73
|
-
NumberMaid::clean('.').should be_nil
|
74
|
-
NumberMaid::clean('*').should be_nil
|
75
|
-
NumberMaid::clean('(not a number dude)').should be_nil
|
76
|
-
NumberMaid::clean('(O.OO)').should be_nil
|
77
|
-
NumberMaid::clean('#!!@#$%.^&*())').should be_nil # The cartoon swear test
|
78
|
-
end
|
79
|
-
|
80
|
-
it "should handle this stupid one: '(A1) 249.34' " do
|
81
|
-
NumberMaid::clean('(A1) 234.3').should == 234.3
|
82
|
-
NumberMaid::clean('234.3{3}').should == 234.3
|
83
|
-
NumberMaid::clean('234.3[yes]').should == 234.3
|
84
|
-
NumberMaid::clean('(234.3)').should == -234.3
|
85
|
-
NumberMaid::clean('est. 32.8').should == 32.8
|
86
|
-
NumberMaid::clean('(a6) 9,008').should == 9008
|
87
|
-
end
|
88
|
-
|
89
|
-
it "should handle: '32.4/66.2'" do
|
90
|
-
NumberMaid::clean('32.4/18.8').should == 32.4
|
91
|
-
NumberMaid::clean('32.4 / 18.8').should == 32.4
|
92
|
-
NumberMaid::clean('32.4 to 18.8').should == 32.4
|
93
|
-
NumberMaid::clean('273.1/281.7').should == 273.1
|
94
|
-
NumberMaid::clean('1,013/1,026').should == 1013
|
95
|
-
NumberMaid::clean('1,013/1,026').should == 1013
|
96
|
-
NumberMaid::clean('~14,508/14,512').should == 14508
|
97
|
-
end
|
98
|
-
|
99
|
-
it "should convert many numbers" do
|
100
|
-
numbers = [2011,'2012*[123]',2013,2014]
|
101
|
-
|
102
|
-
numbers = NumberMaid::clean(numbers)
|
103
|
-
numbers.length.should == 4
|
104
|
-
numbers[0].should == 2011
|
105
|
-
numbers[1].should == 2012
|
106
|
-
numbers[2].should == 2013
|
107
|
-
numbers[3].should == 2014
|
108
|
-
end
|
109
|
-
|
110
|
-
it "should leave nil's for invalid cells" do
|
111
|
-
numbers = [2011,2012,'abcdef',2014]
|
112
|
-
numbers = NumberMaid::clean(numbers)
|
113
|
-
numbers.length.should == 4
|
114
|
-
numbers[0].should == 2011
|
115
|
-
numbers[1].should == 2012
|
116
|
-
numbers[2].should be_nil
|
117
|
-
numbers[3].should == 2014
|
118
|
-
|
119
|
-
end
|
120
|
-
|
121
|
-
it "should handle crazy long decimals" do
|
122
|
-
numbers = NumberMaid::clean('0.12345678901234567890')
|
123
|
-
numbers.should == 0.12345678901235
|
124
|
-
end
|
125
|
-
|
126
|
-
end
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
include Quandl::Babelfish
|
4
|
+
describe NumberMaid do
|
5
|
+
|
6
|
+
it "should handle '1.432,32' i.e. 1432.32 in Canadian format" do
|
7
|
+
NumberMaid::init(:decimal_mark => ',')
|
8
|
+
NumberMaid::clean('1.432,32').should == 1432.32
|
9
|
+
NumberMaid::init({}) #reset settings
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should remove spaces that act as 000 separators" do
|
13
|
+
NumberMaid::clean('12 345').should == 12345
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should accept commas that act as 000 separators" do
|
17
|
+
NumberMaid::clean('12,345').should == 12345
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should handle scientific notation" do
|
21
|
+
NumberMaid::clean('2.1e2').should == 210
|
22
|
+
NumberMaid::clean('2.1 E 2').should == 210
|
23
|
+
NumberMaid::clean('2.1 E+2').should == 210
|
24
|
+
NumberMaid::clean('210 E -2').should == 2.1
|
25
|
+
NumberMaid::clean('2.1 e +2').should == 210
|
26
|
+
NumberMaid::clean('2.1*10^2').should == 210
|
27
|
+
NumberMaid::clean('2.1 X102').should == 210
|
28
|
+
NumberMaid::clean('sci not: -2.1 * 10 2 Ghz').should == -210
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should mulitiply number if cell contains million or billion" do
|
32
|
+
NumberMaid::clean('35 million').should == 35000000
|
33
|
+
NumberMaid::clean('42 billion').should == 42000000000
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should handle a plain integer" do
|
37
|
+
NumberMaid::clean('1').should == 1
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should handle a plain negative integer" do
|
41
|
+
NumberMaid::clean('-1').should == -1
|
42
|
+
NumberMaid::clean('(1)').should == -1
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should handle a plain float" do
|
46
|
+
NumberMaid::clean('1.1').should == 1.1
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should handle a plain negative float" do
|
50
|
+
NumberMaid::clean('-1.1').should == -1.1
|
51
|
+
NumberMaid::clean('(1.1)').should == -1.1
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should ignore extraneous characters" do
|
55
|
+
NumberMaid::clean('a1.1a').should == 1.1
|
56
|
+
NumberMaid::clean('And the answer is 1.1').should == 1.1
|
57
|
+
NumberMaid::clean('1.1 for the win').should == 1.1
|
58
|
+
NumberMaid::clean('1.1%').should == 1.1
|
59
|
+
NumberMaid::clean('-1.1%').should == -1.1
|
60
|
+
NumberMaid::clean('(1.1%)').should == -1.1
|
61
|
+
NumberMaid::clean('[1.1%]').should == 1.1
|
62
|
+
NumberMaid::clean('/1.1%/').should == 1.1
|
63
|
+
NumberMaid::clean('{1.1%}').should == 1.1
|
64
|
+
NumberMaid::clean('1.1Ghz').should == 1.1
|
65
|
+
NumberMaid::clean('(1.1Ghz)').should == -1.1
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'should get nothing' do
|
69
|
+
NumberMaid::clean('').should be_nil
|
70
|
+
NumberMaid::clean('super').should be_nil
|
71
|
+
NumberMaid::clean('This is great. And then she said...').should be_nil
|
72
|
+
NumberMaid::clean(' ').should be_nil
|
73
|
+
NumberMaid::clean('.').should be_nil
|
74
|
+
NumberMaid::clean('*').should be_nil
|
75
|
+
NumberMaid::clean('(not a number dude)').should be_nil
|
76
|
+
NumberMaid::clean('(O.OO)').should be_nil
|
77
|
+
NumberMaid::clean('#!!@#$%.^&*())').should be_nil # The cartoon swear test
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should handle this stupid one: '(A1) 249.34' " do
|
81
|
+
NumberMaid::clean('(A1) 234.3').should == 234.3
|
82
|
+
NumberMaid::clean('234.3{3}').should == 234.3
|
83
|
+
NumberMaid::clean('234.3[yes]').should == 234.3
|
84
|
+
NumberMaid::clean('(234.3)').should == -234.3
|
85
|
+
NumberMaid::clean('est. 32.8').should == 32.8
|
86
|
+
NumberMaid::clean('(a6) 9,008').should == 9008
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should handle: '32.4/66.2'" do
|
90
|
+
NumberMaid::clean('32.4/18.8').should == 32.4
|
91
|
+
NumberMaid::clean('32.4 / 18.8').should == 32.4
|
92
|
+
NumberMaid::clean('32.4 to 18.8').should == 32.4
|
93
|
+
NumberMaid::clean('273.1/281.7').should == 273.1
|
94
|
+
NumberMaid::clean('1,013/1,026').should == 1013
|
95
|
+
NumberMaid::clean('1,013/1,026').should == 1013
|
96
|
+
NumberMaid::clean('~14,508/14,512').should == 14508
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should convert many numbers" do
|
100
|
+
numbers = [2011,'2012*[123]',2013,2014]
|
101
|
+
|
102
|
+
numbers = NumberMaid::clean(numbers)
|
103
|
+
numbers.length.should == 4
|
104
|
+
numbers[0].should == 2011
|
105
|
+
numbers[1].should == 2012
|
106
|
+
numbers[2].should == 2013
|
107
|
+
numbers[3].should == 2014
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should leave nil's for invalid cells" do
|
111
|
+
numbers = [2011,2012,'abcdef',2014]
|
112
|
+
numbers = NumberMaid::clean(numbers)
|
113
|
+
numbers.length.should == 4
|
114
|
+
numbers[0].should == 2011
|
115
|
+
numbers[1].should == 2012
|
116
|
+
numbers[2].should be_nil
|
117
|
+
numbers[3].should == 2014
|
118
|
+
|
119
|
+
end
|
120
|
+
|
121
|
+
it "should handle crazy long decimals" do
|
122
|
+
numbers = NumberMaid::clean('0.12345678901234567890')
|
123
|
+
numbers.should == 0.12345678901235
|
124
|
+
end
|
125
|
+
|
126
|
+
end
|
@@ -1,15 +1,15 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
include Quandl
|
4
|
-
describe Babelfish do
|
5
|
-
|
6
|
-
it 'should run gem' do
|
7
|
-
input=[[1990,1,2,3],[1991,4,5,6]]
|
8
|
-
output, headers = Babelfish::clean input
|
9
|
-
output[0][0].should ==Date.new(1990,12,31)
|
10
|
-
output[0][1].should ==1
|
11
|
-
output[1][0].should ==Date.new(1991,12,31)
|
12
|
-
output[1][3].should ==6
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
include Quandl
|
4
|
+
describe Babelfish do
|
5
|
+
|
6
|
+
it 'should run gem' do
|
7
|
+
input=[[1990,1,2,3],[1991,4,5,6]]
|
8
|
+
output, headers = Babelfish::clean input
|
9
|
+
output[0][0].should ==Date.new(1990,12,31)
|
10
|
+
output[0][1].should ==1
|
11
|
+
output[1][0].should ==Date.new(1991,12,31)
|
12
|
+
output[1][3].should ==6
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
|
-
$:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
|
2
|
-
|
3
|
-
require 'pry'
|
4
|
-
require "rspec"
|
5
|
-
require 'quandl/babelfish'
|
6
|
-
|
7
|
-
# require support
|
8
|
-
Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each {|f| require f}
|
9
|
-
|
10
|
-
RSpec.configure do |config|
|
11
|
-
config.treat_symbols_as_metadata_keys_with_true_values = true
|
12
|
-
config.mock_with :rspec
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
|
2
|
+
|
3
|
+
require 'pry'
|
4
|
+
require "rspec"
|
5
|
+
require 'quandl/babelfish'
|
6
|
+
|
7
|
+
# require support
|
8
|
+
Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each {|f| require f}
|
9
|
+
|
10
|
+
RSpec.configure do |config|
|
11
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
12
|
+
config.mock_with :rspec
|
13
13
|
end
|
@@ -1,32 +1,32 @@
|
|
1
|
-
RSpec::Matchers.define :be_eq_at_index do |index, expected|
|
2
|
-
match do |actual|
|
3
|
-
# value should eq expectation
|
4
|
-
actual_value_with_index(actual, index) == expected
|
5
|
-
end
|
6
|
-
|
7
|
-
failure_message_for_should do |actual|
|
8
|
-
"expected that #{actual_value_with_index(actual, index)} would eq #{expected}"
|
9
|
-
end
|
10
|
-
|
11
|
-
failure_message_for_should_not do |actual|
|
12
|
-
"expected that #{actual_value_with_index(actual, index)} would eq #{expected}"
|
13
|
-
end
|
14
|
-
|
15
|
-
description do
|
16
|
-
"be eq to #{expected} for array at index #{index}"
|
17
|
-
end
|
18
|
-
|
19
|
-
def actual_value_with_index(actual, index)
|
20
|
-
# split string index into keys
|
21
|
-
indexes = index.to_s.split(']').collect{|v| v.gsub('[','') }
|
22
|
-
# convert indexes to integers if this is an array
|
23
|
-
indexes = indexes.collect(&:to_i) if actual.is_a?(Array)
|
24
|
-
# apply indexes to value
|
25
|
-
value = actual
|
26
|
-
indexes.each do |i|
|
27
|
-
value = value.send(:[], i)
|
28
|
-
end
|
29
|
-
value
|
30
|
-
end
|
31
|
-
|
1
|
+
RSpec::Matchers.define :be_eq_at_index do |index, expected|
|
2
|
+
match do |actual|
|
3
|
+
# value should eq expectation
|
4
|
+
actual_value_with_index(actual, index) == expected
|
5
|
+
end
|
6
|
+
|
7
|
+
failure_message_for_should do |actual|
|
8
|
+
"expected that #{actual_value_with_index(actual, index)} would eq #{expected}"
|
9
|
+
end
|
10
|
+
|
11
|
+
failure_message_for_should_not do |actual|
|
12
|
+
"expected that #{actual_value_with_index(actual, index)} would eq #{expected}"
|
13
|
+
end
|
14
|
+
|
15
|
+
description do
|
16
|
+
"be eq to #{expected} for array at index #{index}"
|
17
|
+
end
|
18
|
+
|
19
|
+
def actual_value_with_index(actual, index)
|
20
|
+
# split string index into keys
|
21
|
+
indexes = index.to_s.split(']').collect{|v| v.gsub('[','') }
|
22
|
+
# convert indexes to integers if this is an array
|
23
|
+
indexes = indexes.collect(&:to_i) if actual.is_a?(Array)
|
24
|
+
# apply indexes to value
|
25
|
+
value = actual
|
26
|
+
indexes.each do |i|
|
27
|
+
value = value.send(:[], i)
|
28
|
+
end
|
29
|
+
value
|
30
|
+
end
|
31
|
+
|
32
32
|
end
|