divISOr 0.0.1 → 1.0.0

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.
@@ -10,4 +10,10 @@ class ISORecords
10
10
  fields = [fields] unless fields.is_a?(Array)
11
11
  data.map{|record| fields.map{|field| record[field.to_sym] }}.flatten.compact.map(&:upcase)
12
12
  end
13
+
14
+ def all(value, fields)
15
+ fields = [fields] unless fields.is_a?(Array)
16
+ return data if value.nil?
17
+ data.select{|record| fields.any?{|field| record[field] == value}}
18
+ end
13
19
  end
data/lib/divISOr.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'json'
2
2
 
3
3
  require 'divISOr/divISOr'
4
+ require 'divISOr/hash_wrapper'
4
5
  require 'divISOr/iso'
5
6
  require 'divISOr/iso_records'
6
7
 
@@ -0,0 +1,23 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe ISO10383 do
4
+
5
+ let(:data) { {:city=>"WARSZAWA", :acr=>"WSE", :code=>"XWAR", :country=>"POLAND", :description=>"WARSAW STOCK EXCHANGE", :currency=>"PL"} }
6
+ let(:different_data) {{:some => 'data'}}
7
+ let(:iso_10383) { ISO10383.new(data) }
8
+
9
+ it 'is equal to another ISO10383 object if contains the same data' do
10
+ same_iso_10383 = ISO10383.new(data)
11
+ different_iso_10383 = ISO10383.new(different_data)
12
+ iso_10383.should == same_iso_10383
13
+ iso_10383.should_not == different_iso_10383
14
+ end
15
+
16
+ it 'responds to code' do
17
+ iso_10383.code.should == 'XWAR'
18
+ end
19
+
20
+ it 'responds to country' do
21
+ iso_10383.country.should == 'POLAND'
22
+ end
23
+ end
@@ -1,8 +1,30 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
2
 
3
3
  describe ISO3166 do
4
+
5
+ let(:data) { {:code => "AD", :country => "ANDORRA"} }
6
+ let(:different_data) {{:some => 'data'}}
7
+ let(:iso_3166) { ISO3166.new(data) }
8
+
9
+ it 'is equal to another ISO3166 object if contains the same data' do
10
+ same_iso_3166 = ISO3166.new(data)
11
+ different_iso_3166 = ISO3166.new(different_data)
12
+ iso_3166.should == same_iso_3166
13
+ iso_3166.should_not == different_iso_3166
14
+ end
15
+
16
+ it 'responds to code' do
17
+ iso_3166.code.should == 'AD'
18
+ end
19
+
20
+ it 'responds to country' do
21
+ iso_3166.country.should == 'ANDORRA'
22
+ end
23
+ end
24
+
25
+ describe ISO3166::Codes do
4
26
  context 'validation' do
5
- let(:iso_3166) {ISO3166.new}
27
+ let(:iso_3166) {ISO3166::Codes.new}
6
28
  let(:iso_records) { mock(:values_for => ['US']) }
7
29
  before { ISORecords.stub(:new => iso_records) }
8
30
 
@@ -0,0 +1,52 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe ISO4217 do
4
+
5
+ let(:data) { {:code => "AFN", :numeric_code => "971", :country => "AFGHANISTAN", :currency => "Afghani"} }
6
+ let(:different_data) {{:some => 'data'}}
7
+ let(:iso_4217) { ISO4217.new(data) }
8
+
9
+ it 'is equal to another ISO4217 object if contains the same data' do
10
+ same_iso_4217 = ISO4217.new(data)
11
+ different_iso_4217 = ISO4217.new(different_data)
12
+ iso_4217.should == same_iso_4217
13
+ iso_4217.should_not == different_iso_4217
14
+ end
15
+
16
+ it 'responds to code' do
17
+ iso_4217.code.should == 'AFN'
18
+ end
19
+
20
+ it 'responds to numeric_code' do
21
+ iso_4217.numeric_code.should == '971'
22
+ end
23
+
24
+ it 'responds to country' do
25
+ iso_4217.country.should == 'AFGHANISTAN'
26
+ end
27
+
28
+ it 'responds to currency' do
29
+ iso_4217.currency.should == 'Afghani'
30
+ end
31
+ end
32
+
33
+ describe ISO4217::Codes do
34
+ context 'for simple data' do
35
+ let(:all_records) { [mock, mock] }
36
+ let(:iso_records) { mock(:all => all_records) }
37
+ before { ISORecords.stub(:new => iso_records) }
38
+
39
+ it 'gets all matching iso_record' do
40
+ iso_records.should_receive(:all).with('USD', :code)
41
+ ISO4217::Codes.new.all('USD') {|a| a == a }
42
+ end
43
+
44
+ it 'builds objects from each record' do
45
+ all_records.each do |record|
46
+ ISO4217.should_receive(:new).with(record)
47
+ end
48
+ ISO4217::Codes.new.all('USD') {|a| ISO4217.new(a) }
49
+ end
50
+ end
51
+ end
52
+
@@ -8,6 +8,7 @@ describe ISORecords do
8
8
  context 'on initialization' do
9
9
  it 'loads data' do
10
10
  iso_records.data.should == [{:code => 'A', :says => 'hello'},
11
+ {:country => 'A'},
11
12
  {:code => 'B', :says => 'goodbye'}]
12
13
  end
13
14
  end
@@ -21,6 +22,25 @@ describe ISORecords do
21
22
  iso_records.values_for([:code, :says]).should == ['A', 'HELLO', 'B', 'GOODBYE']
22
23
  end
23
24
  end
25
+
26
+ context 'retrieving all matching records' do
27
+ it 'for a single field with a single return value' do
28
+ iso_records.all('A', :code).should == [{:code => 'A', :says => 'hello'}]
29
+ end
30
+
31
+ it 'for multiple fields with a single return value' do
32
+ iso_records.all('A', [:says, :code]).should == [{:code => 'A', :says => 'hello'}]
33
+ end
34
+
35
+ it 'for multiple fields with multple return values' do
36
+ iso_records.all('A', [:country, :code]).should == [{:code => 'A', :says => 'hello'}, {:country => 'A'}]
37
+ end
38
+
39
+ it 'when called with a nil value' do
40
+ iso_records.all(nil, :code).should == [{:code => 'A', :says => 'hello'}, {:country => 'A'},
41
+ {:code => 'B', :says => 'goodbye'}]
42
+ end
43
+ end
24
44
  end
25
45
 
26
46
  context 'for complex data' do
@@ -47,5 +67,6 @@ describe ISORecords do
47
67
  end
48
68
  end
49
69
  end
70
+
50
71
  end
51
72
 
data/spec/divISOr_spec.rb CHANGED
@@ -4,10 +4,10 @@ describe "Divisor" do
4
4
  context 'validation' do
5
5
  context 'for ISO 3166' do
6
6
  let(:iso3166) { mock(:validate => true) }
7
- before { ISO3166.stub(:new => iso3166) }
7
+ before { ISO3166::Codes.stub(:new => iso3166) }
8
8
 
9
9
  it 'create a ISO3166 on first call' do
10
- ISO3166.should_receive(:new)
10
+ ISO3166::Codes.should_receive(:new)
11
11
  DivISOr.validate_iso3166('US')
12
12
  end
13
13
 
@@ -24,10 +24,10 @@ describe "Divisor" do
24
24
 
25
25
  context 'for ISO 4217' do
26
26
  let(:iso4217) { mock(:validate => true) }
27
- before { ISO4217.stub(:new => iso4217) }
27
+ before { ISO4217::Codes.stub(:new => iso4217) }
28
28
 
29
29
  it 'create a ISO4217 on first call' do
30
- ISO4217.should_receive(:new)
30
+ ISO4217::Codes.should_receive(:new)
31
31
  DivISOr.validate_iso4217('USD')
32
32
  end
33
33
 
@@ -44,10 +44,10 @@ describe "Divisor" do
44
44
 
45
45
  context 'for ISO 10383' do
46
46
  let(:iso10383) { mock(:validate => true) }
47
- before { ISO10383.stub(:new => iso10383) }
47
+ before { ISO10383::Codes.stub(:new => iso10383) }
48
48
 
49
49
  it 'create a ISO10383 on first call' do
50
- ISO10383.should_receive(:new)
50
+ ISO10383::Codes.should_receive(:new)
51
51
  DivISOr.validate_iso10383('BARX')
52
52
  end
53
53
 
@@ -62,4 +62,84 @@ describe "Divisor" do
62
62
  end
63
63
  end
64
64
  end
65
+
66
+ context 'lookup' do
67
+ context 'for ISO 4217' do
68
+ let(:iso4217) { mock(:validate => true) }
69
+ before { ISO4217::Codes.stub(:new => iso4217) }
70
+
71
+ it 'gets all records' do
72
+ iso4217.should_receive(:all).with('USD')
73
+ DivISOr.iso4217('USD')
74
+ end
75
+ end
76
+
77
+ context 'for ISO 3166' do
78
+ let(:all_records) { mock(:first => false) }
79
+ let(:iso3166) { mock(:validate => true, :all => all_records) }
80
+ before { ISO3166::Codes.stub(:new => iso3166) }
81
+
82
+ it 'gets all records' do
83
+ iso3166.should_receive(:all).with('US')
84
+ DivISOr.iso3166('US')
85
+ end
86
+
87
+ it 'gets the first record' do
88
+ all_records.should_receive(:first)
89
+ DivISOr.iso3166('US')
90
+ end
91
+ end
92
+
93
+ context 'for ISO 10383' do
94
+ let(:all_records) { mock(:first => false) }
95
+ let(:iso10383) { mock(:validate => true, :all => all_records) }
96
+ before { ISO10383::Codes.stub(:new => iso10383) }
97
+
98
+ it 'gets all records' do
99
+ iso10383.should_receive(:all).with('US')
100
+ DivISOr.iso10383('US')
101
+ end
102
+
103
+ it 'gets the first record' do
104
+ all_records.should_receive(:first)
105
+ DivISOr.iso10383('US')
106
+ end
107
+ end
108
+ end
109
+
110
+ context 'list all records' do
111
+ context 'for ISO 4217' do
112
+ let(:all_records) { mock }
113
+ let(:iso4217) { mock(:validate => true, :all => all_records) }
114
+ before { ISO4217::Codes.stub(:new => iso4217) }
115
+
116
+ it 'gets all records' do
117
+ iso4217.should_receive(:all).with(nil)
118
+ DivISOr.list_iso4217.should == all_records
119
+ end
120
+ end
121
+
122
+ context 'for ISO 3166' do
123
+ let(:all_records) { mock }
124
+ let(:iso3166) { mock(:validate => true, :all => all_records) }
125
+ before { ISO3166::Codes.stub(:new => iso3166) }
126
+
127
+ it 'gets all records' do
128
+ iso3166.should_receive(:all).with(nil)
129
+ DivISOr.list_iso3166.should == all_records
130
+ end
131
+ end
132
+
133
+ context 'for ISO 10383' do
134
+ let(:all_records) { mock }
135
+ let(:iso10383) { mock(:validate => true, :all => all_records) }
136
+ before { ISO10383::Codes.stub(:new => iso10383) }
137
+
138
+ it 'gets all records' do
139
+ iso10383.should_receive(:all).with(nil)
140
+ DivISOr.list_iso10383.should == all_records
141
+ end
142
+ end
143
+ end
65
144
  end
145
+
@@ -1,5 +1,6 @@
1
1
  [
2
2
  {"code": "A", "says": "hello"},
3
+ {"country": "A"},
3
4
  {"code": "B", "says": "goodbye"}
4
5
  ]
5
6
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: divISOr
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
+ - 1
7
8
  - 0
8
9
  - 0
9
- - 1
10
- version: 0.0.1
10
+ version: 1.0.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - "David Henry and Alberto Pe\xC3\xB1a"
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-06-28 00:00:00 +01:00
18
+ date: 2011-06-29 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -130,6 +130,7 @@ files:
130
130
  - divISOr.gemspec
131
131
  - lib/divISOr.rb
132
132
  - lib/divISOr/divISOr.rb
133
+ - lib/divISOr/hash_wrapper.rb
133
134
  - lib/divISOr/iso.rb
134
135
  - lib/divISOr/iso10383.rb
135
136
  - lib/divISOr/iso3166.rb
@@ -138,7 +139,9 @@ files:
138
139
  - lib/divISOr/iso_data/3166
139
140
  - lib/divISOr/iso_data/4217
140
141
  - lib/divISOr/iso_records.rb
142
+ - spec/divISOr/iso10383_spec.rb
141
143
  - spec/divISOr/iso3166_spec.rb
144
+ - spec/divISOr/iso4217_spec.rb
142
145
  - spec/divISOr/iso_records_spec.rb
143
146
  - spec/divISOr_spec.rb
144
147
  - spec/iso_data/complex_data