atdis 0.3.13 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +46 -0
  3. data/.ruby-version +1 -1
  4. data/Gemfile +9 -7
  5. data/Guardfile +4 -3
  6. data/Rakefile +4 -2
  7. data/atdis.gemspec +10 -5
  8. data/lib/atdis.rb +2 -0
  9. data/lib/atdis/feed.rb +31 -24
  10. data/lib/atdis/model.rb +101 -99
  11. data/lib/atdis/models/address.rb +10 -4
  12. data/lib/atdis/models/application.rb +12 -9
  13. data/lib/atdis/models/authority.rb +11 -6
  14. data/lib/atdis/models/document.rb +8 -6
  15. data/lib/atdis/models/event.rb +10 -8
  16. data/lib/atdis/models/info.rb +73 -49
  17. data/lib/atdis/models/land_title_ref.rb +15 -7
  18. data/lib/atdis/models/location.rb +9 -7
  19. data/lib/atdis/models/page.rb +34 -19
  20. data/lib/atdis/models/pagination.rb +91 -32
  21. data/lib/atdis/models/person.rb +7 -5
  22. data/lib/atdis/models/reference.rb +7 -5
  23. data/lib/atdis/models/response.rb +5 -3
  24. data/lib/atdis/models/torrens_title.rb +9 -7
  25. data/lib/atdis/separated_url.rb +17 -15
  26. data/lib/atdis/validators.rb +46 -39
  27. data/lib/atdis/version.rb +3 -1
  28. data/spec/atdis/feed_spec.rb +126 -34
  29. data/spec/atdis/model_spec.rb +124 -51
  30. data/spec/atdis/models/address_spec.rb +18 -9
  31. data/spec/atdis/models/application_spec.rb +222 -155
  32. data/spec/atdis/models/authority_spec.rb +45 -15
  33. data/spec/atdis/models/document_spec.rb +10 -4
  34. data/spec/atdis/models/event_spec.rb +23 -11
  35. data/spec/atdis/models/info_spec.rb +191 -116
  36. data/spec/atdis/models/land_title_ref_spec.rb +32 -16
  37. data/spec/atdis/models/location_spec.rb +75 -60
  38. data/spec/atdis/models/page_spec.rb +241 -135
  39. data/spec/atdis/models/pagination_spec.rb +177 -77
  40. data/spec/atdis/models/person_spec.rb +8 -4
  41. data/spec/atdis/models/reference_spec.rb +29 -16
  42. data/spec/atdis/models/response_spec.rb +2 -1
  43. data/spec/atdis/models/torrens_title_spec.rb +24 -18
  44. data/spec/atdis/separated_url_spec.rb +14 -15
  45. data/spec/spec_helper.rb +14 -10
  46. metadata +56 -27
data/lib/atdis/version.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Atdis
2
- VERSION = "0.3.13"
4
+ VERSION = "0.4.0"
3
5
  end
@@ -1,110 +1,202 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
4
 
3
5
  describe ATDIS::Feed do
4
- let(:feed) { ATDIS::Feed.new("http://www.council.nsw.gov.au/atdis/1.0") }
6
+ let(:feed) { ATDIS::Feed.new("http://www.council.nsw.gov.au/atdis/1.0", "UTC") }
5
7
  let(:page) { double }
6
8
 
7
9
  it "should return all the applications" do
8
- expect(ATDIS::Models::Page).to receive(:read_url).with("http://www.council.nsw.gov.au/atdis/1.0/applications.json").and_return(page)
9
- feed.applications.should == page
10
+ expect(ATDIS::Models::Page).to receive(:read_url).with(
11
+ "http://www.council.nsw.gov.au/atdis/1.0/applications.json",
12
+ "UTC"
13
+ ).and_return(page)
14
+ expect(feed.applications).to eq page
10
15
  end
11
16
 
12
17
  it "should return all the applications" do
13
- feed.applications_url.should == "http://www.council.nsw.gov.au/atdis/1.0/applications.json"
18
+ expect(feed.applications_url).to eq "http://www.council.nsw.gov.au/atdis/1.0/applications.json"
14
19
  end
15
20
 
16
21
  describe "should restrict search by postcode" do
17
22
  it "single postcode" do
18
- feed.applications_url(postcode: 2000).should == "http://www.council.nsw.gov.au/atdis/1.0/applications.json?postcode=2000"
23
+ expect(feed.applications_url(postcode: 2000)).to eq "http://www.council.nsw.gov.au/atdis/1.0/applications.json?postcode=2000"
19
24
  end
20
25
 
21
26
  it "multiple postcodes in an array" do
22
- feed.applications_url(postcode: [2000,2001]).should == "http://www.council.nsw.gov.au/atdis/1.0/applications.json?postcode=2000,2001"
27
+ expect(feed.applications_url(postcode: [2000, 2001])).to eq "http://www.council.nsw.gov.au/atdis/1.0/applications.json?postcode=2000,2001"
23
28
  end
24
29
 
25
30
  it "multiple postcodes as a string" do
26
- feed.applications_url(postcode: "2000,2001").should == "http://www.council.nsw.gov.au/atdis/1.0/applications.json?postcode=2000,2001"
31
+ expect(feed.applications_url(postcode: "2000,2001")).to eq "http://www.council.nsw.gov.au/atdis/1.0/applications.json?postcode=2000,2001"
27
32
  end
28
33
  end
29
34
 
30
35
  describe "search by lodgement date" do
31
36
  it "just a lodgement start date as a date" do
32
- feed.applications_url(lodgement_date_start: Date.new(2001,2,1)).should == "http://www.council.nsw.gov.au/atdis/1.0/applications.json?lodgement_date_start=2001-02-01"
37
+ expect(feed.applications_url(lodgement_date_start: Date.new(2001, 2, 1))).to eq "http://www.council.nsw.gov.au/atdis/1.0/applications.json?lodgement_date_start=2001-02-01"
33
38
  end
34
39
 
35
40
  it "just a lodgement start date as a string" do
36
- feed.applications_url(lodgement_date_start: "2011-02-04").should == "http://www.council.nsw.gov.au/atdis/1.0/applications.json?lodgement_date_start=2011-02-04"
41
+ expect(feed.applications_url(lodgement_date_start: "2011-02-04")).to eq "http://www.council.nsw.gov.au/atdis/1.0/applications.json?lodgement_date_start=2011-02-04"
37
42
  end
38
43
 
39
44
  it "a lodgement start date and end date" do
40
- feed.applications_url(lodgement_date_start: Date.new(2001,2,1), lodgement_date_end: Date.new(2001,3,1)).should == "http://www.council.nsw.gov.au/atdis/1.0/applications.json?lodgement_date_end=2001-03-01&lodgement_date_start=2001-02-01"
45
+ expect(
46
+ feed.applications_url(
47
+ lodgement_date_start: Date.new(2001, 2, 1),
48
+ lodgement_date_end: Date.new(2001, 3, 1)
49
+ )
50
+ ).to eq(
51
+ "http://www.council.nsw.gov.au/atdis/1.0/applications.json?lodgement_date_end=2001-03-01&lodgement_date_start=2001-02-01"
52
+ )
41
53
  end
42
54
  end
43
55
 
44
56
  describe "search by last modified date" do
45
57
  it "just a last modified start date" do
46
- feed.applications_url(last_modified_date_start: Date.new(2001,2,1)).should == "http://www.council.nsw.gov.au/atdis/1.0/applications.json?last_modified_date_start=2001-02-01"
58
+ expect(feed.applications_url(last_modified_date_start: Date.new(2001, 2, 1))).to eq "http://www.council.nsw.gov.au/atdis/1.0/applications.json?last_modified_date_start=2001-02-01"
47
59
  end
48
60
 
49
61
  it "a last modified start date and end date" do
50
- feed.applications_url(last_modified_date_start: Date.new(2001,2,1), last_modified_date_end: Date.new(2001,3,1)).should == "http://www.council.nsw.gov.au/atdis/1.0/applications.json?last_modified_date_end=2001-03-01&last_modified_date_start=2001-02-01"
62
+ expect(
63
+ feed.applications_url(
64
+ last_modified_date_start: Date.new(2001, 2, 1),
65
+ last_modified_date_end: Date.new(2001, 3, 1)
66
+ )
67
+ ).to eq(
68
+ "http://www.council.nsw.gov.au/atdis/1.0/applications.json?last_modified_date_end=2001-03-01&last_modified_date_start=2001-02-01"
69
+ )
51
70
  end
52
71
  end
53
72
 
54
73
  describe "search by suburb" do
55
74
  it do
56
- feed.applications_url(suburb: ["willow tree", "foo", "bar"]).should == "http://www.council.nsw.gov.au/atdis/1.0/applications.json?suburb=willow+tree,foo,bar"
75
+ expect(feed.applications_url(suburb: ["willow tree", "foo", "bar"])).to eq "http://www.council.nsw.gov.au/atdis/1.0/applications.json?suburb=willow+tree,foo,bar"
57
76
  end
58
77
  end
59
78
 
60
79
  it "jump straight to the second page" do
61
- feed.applications_url(page: 2).should == "http://www.council.nsw.gov.au/atdis/1.0/applications.json?page=2"
80
+ expect(feed.applications_url(page: 2)).to eq "http://www.council.nsw.gov.au/atdis/1.0/applications.json?page=2"
62
81
  end
63
82
 
64
83
  it "passing an invalid option" do
65
- expect {feed.applications_url(foo: 1)}.to raise_error "Unexpected options used: foo"
84
+ expect { feed.applications_url(foo: 1) }.to raise_error "Unexpected options used: foo"
66
85
  end
67
86
 
68
87
  describe ".base_url_from_url" do
69
- it { ATDIS::Feed.base_url_from_url("http://www.council.nsw.gov.au/atdis/1.0/applications.json?postcode=2000").should == "http://www.council.nsw.gov.au/atdis/1.0" }
70
- it { ATDIS::Feed.base_url_from_url("http://www.foo.nsw.gov.au/prefix/atdis/1.0/applications.json?postcode=2000#bar").should == "http://www.foo.nsw.gov.au/prefix/atdis/1.0" }
88
+ it do
89
+ expect(
90
+ ATDIS::Feed.base_url_from_url(
91
+ "http://www.council.nsw.gov.au/atdis/1.0/applications.json?postcode=2000"
92
+ )
93
+ ).to eq "http://www.council.nsw.gov.au/atdis/1.0"
94
+ end
95
+ it do
96
+ expect(
97
+ ATDIS::Feed.base_url_from_url(
98
+ "http://www.foo.nsw.gov.au/prefix/atdis/1.0/applications.json?postcode=2000#bar"
99
+ )
100
+ ).to eq "http://www.foo.nsw.gov.au/prefix/atdis/1.0"
101
+ end
71
102
  it "should assume that any query parameters that are not recognised are part of the base_url" do
72
- ATDIS::Feed.base_url_from_url("http://www.foo.nsw.gov.au/prefix/atdis/1.0/applications.json?postcode=2000&foo=bar").should == "http://www.foo.nsw.gov.au/prefix/atdis/1.0?foo=bar"
103
+ expect(
104
+ ATDIS::Feed.base_url_from_url(
105
+ "http://www.foo.nsw.gov.au/prefix/atdis/1.0/applications.json?postcode=2000&foo=bar"
106
+ )
107
+ ).to eq "http://www.foo.nsw.gov.au/prefix/atdis/1.0?foo=bar"
73
108
  end
74
109
  end
75
110
 
76
111
  describe ".options_from_url" do
77
- it { ATDIS::Feed.options_from_url("http://www.council.nsw.gov.au/atdis/1.0/applications.json").should == {} }
78
- it { ATDIS::Feed.options_from_url("http://www.council.nsw.gov.au/atdis/1.0/applications.json?page=2").should == {page: 2} }
79
- it { ATDIS::Feed.options_from_url("http://www.council.nsw.gov.au/atdis/1.0/applications.json?postcode=2000,2001").should == {postcode: "2000,2001"} }
80
- it { ATDIS::Feed.options_from_url("http://www.council.nsw.gov.au/atdis/1.0/applications.json?lodgement_date_end=2001-03-01&lodgement_date_start=2001-02-01").should ==
81
- {lodgement_date_start: Date.new(2001,2,1), lodgement_date_end: Date.new(2001,3,1)} }
82
- it { ATDIS::Feed.options_from_url("http://www.council.nsw.gov.au/atdis/1.0/applications.json?last_modified_date_end=2001-03-01&last_modified_date_start=2001-02-01").should ==
83
- {last_modified_date_start: Date.new(2001,2,1), last_modified_date_end: Date.new(2001,3,1)} }
112
+ it do
113
+ expect(
114
+ ATDIS::Feed.options_from_url("http://www.council.nsw.gov.au/atdis/1.0/applications.json")
115
+ ).to eq({})
116
+ end
117
+ it do
118
+ expect(
119
+ ATDIS::Feed.options_from_url(
120
+ "http://www.council.nsw.gov.au/atdis/1.0/applications.json?page=2"
121
+ )
122
+ ).to eq(page: 2)
123
+ end
124
+ it do
125
+ expect(
126
+ ATDIS::Feed.options_from_url(
127
+ "http://www.council.nsw.gov.au/atdis/1.0/applications.json?postcode=2000,2001"
128
+ )
129
+ ).to eq(postcode: "2000,2001")
130
+ end
131
+ it do
132
+ expect(
133
+ ATDIS::Feed.options_from_url(
134
+ "http://www.council.nsw.gov.au/atdis/1.0/applications.json?lodgement_date_end=2001-03-01&lodgement_date_start=2001-02-01"
135
+ )
136
+ ).to eq(
137
+ lodgement_date_start: Date.new(2001, 2, 1), lodgement_date_end: Date.new(2001, 3, 1)
138
+ )
139
+ end
140
+ it do
141
+ expect(
142
+ ATDIS::Feed.options_from_url(
143
+ "http://www.council.nsw.gov.au/atdis/1.0/applications.json?last_modified_date_end=2001-03-01&last_modified_date_start=2001-02-01"
144
+ )
145
+ ).to eq(
146
+ last_modified_date_start: Date.new(2001, 2, 1), last_modified_date_end: Date.new(2001, 3, 1)
147
+ )
148
+ end
84
149
  it "should assume that any query parameters that are not recognised are part of the base_url" do
85
- ATDIS::Feed.options_from_url("http://www.foo.nsw.gov.au/prefix/atdis/1.0/applications.json?postcode=2000&foo=bar").should == {postcode: "2000"}
150
+ expect(
151
+ ATDIS::Feed.options_from_url(
152
+ "http://www.foo.nsw.gov.au/prefix/atdis/1.0/applications.json?postcode=2000&foo=bar"
153
+ )
154
+ ).to eq(postcode: "2000")
86
155
  end
87
156
 
88
157
  it do
89
- ATDIS::Feed.options_from_url("http://www.council.nsw.gov.au/atdis/1.0/applications.json?suburb=willow+tree,foo,bar").should == {suburb: "willow tree,foo,bar"}
158
+ expect(
159
+ ATDIS::Feed.options_from_url(
160
+ "http://www.council.nsw.gov.au/atdis/1.0/applications.json?suburb=willow+tree,foo,bar"
161
+ )
162
+ ).to eq(suburb: "willow tree,foo,bar")
90
163
  end
91
164
 
92
165
  it do
93
- ATDIS::Feed.options_from_url("http://www.council.nsw.gov.au/atdis/1.0/applications.json?suburb=&postcode=2000").should == {postcode: "2000", suburb: nil}
166
+ expect(
167
+ ATDIS::Feed.options_from_url(
168
+ "http://www.council.nsw.gov.au/atdis/1.0/applications.json?suburb=&postcode=2000"
169
+ )
170
+ ).to eq(postcode: "2000", suburb: nil)
94
171
  end
95
172
  end
96
173
 
97
174
  describe "#application_url" do
98
- it { feed.application_url("27B6").should == "http://www.council.nsw.gov.au/atdis/1.0/27B6.json" }
99
- it { feed.application_url("27B stroke 6").should == "http://www.council.nsw.gov.au/atdis/1.0/27B+stroke+6.json" }
100
- it { feed.application_url("27B/6").should == "http://www.council.nsw.gov.au/atdis/1.0/27B%2F6.json" }
175
+ it do
176
+ expect(feed.application_url("27B6")).to eq(
177
+ "http://www.council.nsw.gov.au/atdis/1.0/27B6.json"
178
+ )
179
+ end
180
+ it do
181
+ expect(feed.application_url("27B stroke 6")).to eq(
182
+ "http://www.council.nsw.gov.au/atdis/1.0/27B+stroke+6.json"
183
+ )
184
+ end
185
+ it do
186
+ expect(feed.application_url("27B/6")).to eq(
187
+ "http://www.council.nsw.gov.au/atdis/1.0/27B%2F6.json"
188
+ )
189
+ end
101
190
  end
102
191
 
103
192
  describe "#application" do
104
193
  it {
105
194
  application = double
106
- expect(ATDIS::Models::Application).to receive(:read_url).with("http://www.council.nsw.gov.au/atdis/1.0/27B%2F6.json").and_return(application)
107
- feed.application("27B/6").should == application
195
+ expect(ATDIS::Models::Application).to receive(:read_url).with(
196
+ "http://www.council.nsw.gov.au/atdis/1.0/27B%2F6.json",
197
+ "UTC"
198
+ ).and_return(application)
199
+ expect(feed.application("27B/6")).to eq application
108
200
  }
109
201
  end
110
202
  end
@@ -1,119 +1,192 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
2
4
 
3
5
  class ModelB < ATDIS::Model
4
- set_field_mappings ({
6
+ field_mappings(
5
7
  bar: [String]
6
- })
8
+ )
7
9
  end
8
10
 
9
11
  class ModelA < ATDIS::Model
10
- set_field_mappings ({
11
- bar: [String],
12
+ field_mappings(
13
+ bar: [String],
12
14
  hello: [ModelB]
13
- })
15
+ )
14
16
  end
15
17
 
16
18
  describe ATDIS::Model do
17
19
  describe ".attributes" do
18
20
  it do
19
- a = ModelA.new(bar: "foo")
20
- a.attributes.should == {"bar" => "foo"}
21
+ a = ModelA.new({ bar: "foo" }, "UTC")
22
+ expect(a.attributes).to eq("bar" => "foo")
21
23
  end
22
24
  end
23
25
 
24
26
  describe "#json_errors" do
25
27
  it "should return the json attribute with the errors" do
26
- a = ModelA.interpret(bar: "Hello")
28
+ a = ModelA.interpret({ bar: "Hello" }, "UTC")
27
29
  a.errors.add(:bar, ATDIS::ErrorMessage["can not be so friendly", "4.5"])
28
30
  a.errors.add(:bar, ATDIS::ErrorMessage["and something else", "4.6"])
29
- a.json_errors.should == [[{bar: "Hello"}, [
30
- ATDIS::ErrorMessage["bar can not be so friendly", "4.5"],
31
- ATDIS::ErrorMessage["bar and something else", "4.6"]]]]
31
+ expect(a.json_errors).to eq(
32
+ [[
33
+ { bar: "Hello" },
34
+ [
35
+ ATDIS::ErrorMessage["bar can not be so friendly", "4.5"],
36
+ ATDIS::ErrorMessage["bar and something else", "4.6"]
37
+ ]
38
+ ]]
39
+ )
32
40
  end
33
41
 
34
42
  it "should include the errors from child objects" do
35
- a = ModelA.interpret(hello: {bar: "Kat"})
43
+ a = ModelA.interpret({ hello: { bar: "Kat" } }, "UTC")
36
44
  a.hello.errors.add(:bar, ATDIS::ErrorMessage["can't be a name", "2.3"])
37
- a.hello.json_errors.should == [[{bar: "Kat"}, [ATDIS::ErrorMessage["bar can't be a name", "2.3"]]]]
38
- a.json_errors.should == [[{hello: {bar: "Kat"}}, [ATDIS::ErrorMessage["bar can't be a name", "2.3"]]]]
45
+ expect(a.hello.json_errors).to eq(
46
+ [[{ bar: "Kat" }, [ATDIS::ErrorMessage["bar can't be a name", "2.3"]]]]
47
+ )
48
+ expect(a.json_errors).to eq(
49
+ [[{ hello: { bar: "Kat" } }, [ATDIS::ErrorMessage["bar can't be a name", "2.3"]]]]
50
+ )
39
51
  end
40
52
 
41
53
  it "should include the errors from only the first child object in an array" do
42
- a = ModelA.interpret(hello: [{bar: "Kat"}, {bar: "Mat"}])
43
- a.hello[0].bar.should == "Kat"
44
- a.hello[1].bar.should == "Mat"
45
- a.json_errors.should == []
54
+ a = ModelA.interpret({ hello: [{ bar: "Kat" }, { bar: "Mat" }] }, "UTC")
55
+ expect(a.hello[0].bar).to eq "Kat"
56
+ expect(a.hello[1].bar).to eq "Mat"
57
+ expect(a.json_errors).to eq []
46
58
  a.hello[0].errors.add(:bar, ATDIS::ErrorMessage["can't be a name", "1.2"])
47
59
  a.hello[1].errors.add(:bar, ATDIS::ErrorMessage["can't be a name", "1.2"])
48
- a.json_errors.should == [[{hello: [{bar: "Kat"}]}, [ATDIS::ErrorMessage["bar can't be a name", "1.2"]]]]
60
+ expect(a.json_errors).to eq(
61
+ [[{ hello: [{ bar: "Kat" }] }, [ATDIS::ErrorMessage["bar can't be a name", "1.2"]]]]
62
+ )
49
63
  end
50
64
 
51
65
  it "should show json parsing errors" do
52
- a = ModelA.interpret(invalid: {parameter: "foo"})
53
- a.should_not be_valid
54
- a.json_errors.should == [[nil, [ATDIS::ErrorMessage['Unexpected parameters in json data: {"invalid":{"parameter":"foo"}}', "4"]]]]
66
+ a = ModelA.interpret({ invalid: { parameter: "foo" } }, "UTC")
67
+ expect(a).to_not be_valid
68
+ expect(a.json_errors).to eq(
69
+ [[
70
+ nil,
71
+ [
72
+ ATDIS::ErrorMessage[
73
+ 'Unexpected parameters in json data: {"invalid":{"parameter":"foo"}}',
74
+ "4"
75
+ ]
76
+ ]
77
+ ]]
78
+ )
55
79
  end
56
80
 
57
81
  it "should json errors even if value is nil" do
58
- b = ModelB.new
82
+ b = ModelB.new({}, "UTC")
59
83
  b.errors.add(:bar, ATDIS::ErrorMessage.new("can't be nil", "1.2"))
60
- b.json_errors.should == [[{bar: nil}, [ATDIS::ErrorMessage.new("bar can't be nil", "1.2")]]]
84
+ expect(b.json_errors).to eq(
85
+ [[{ bar: nil }, [ATDIS::ErrorMessage.new("bar can't be nil", "1.2")]]]
86
+ )
61
87
  end
62
88
  end
63
89
 
64
90
  describe ".cast" do
65
- it {ATDIS::Model.cast("2013-04-20T02:01:07Z", DateTime).should == DateTime.new(2013,4,20,2,1,7)}
66
- it {ATDIS::Model.cast("2013-04-20", DateTime).should == DateTime.new(2013,4,20)}
67
- it {ATDIS::Model.cast("2013-04-20T02:01:07+05:00", DateTime).should == DateTime.new(2013,4,20,2,1,7,"+5")}
68
- it {ATDIS::Model.cast("2013-04-20T02:01:07-05:00", DateTime).should == DateTime.new(2013,4,20,2,1,7,"-5")}
69
- it {ATDIS::Model.cast("2013-04", DateTime).should be_nil}
70
- it {ATDIS::Model.cast("18 September 2013", DateTime).should be_nil}
71
- it {ATDIS::Model.cast(DateTime.new(2013,4,20,2,1,7), DateTime).should == DateTime.new(2013,4,20,2,1,7)}
91
+ describe "DateTime" do
92
+ describe "timezone given in string" do
93
+ context "in default timezone" do
94
+ let(:value) { ATDIS::Model.cast("2013-04-20T02:01:07Z", DateTime, "UTC") }
95
+ it { expect(value).to eq(DateTime.new(2013, 4, 20, 2, 1, 7, 0)) }
96
+ it { expect(value.zone).to eq "+00:00" }
97
+ end
98
+
99
+ context "in Sydney timezone" do
100
+ let(:value) { ATDIS::Model.cast("2013-04-20T02:01:07Z", DateTime, "Sydney") }
101
+ it { expect(value).to eq(DateTime.new(2013, 4, 20, 2, 1, 7, 0)) }
102
+ it { expect(value.zone).to eq "+10:00" }
103
+ end
104
+
105
+ it do
106
+ expect(
107
+ ATDIS::Model.cast("2013-04-20T02:01:07+05:00", DateTime, "UTC")
108
+ ).to eq(DateTime.new(2013, 4, 20, 2, 1, 7, "+5"))
109
+ end
110
+
111
+ it do
112
+ expect(
113
+ ATDIS::Model.cast("2013-04-20T02:01:07-05:00", DateTime, "UTC")
114
+ ).to eq(DateTime.new(2013, 4, 20, 2, 1, 7, "-5"))
115
+ end
116
+ end
117
+
118
+ describe "timezone not given in string" do
119
+ context "in default timezone" do
120
+ let(:value) { ATDIS::Model.cast("2013-04-20", DateTime, "UTC") }
121
+ it { expect(value).to eq(DateTime.new(2013, 4, 20, 0, 0, 0, 0)) }
122
+ it { expect(value.zone).to eq "+00:00" }
123
+ end
124
+
125
+ context "in Sydney timezone" do
126
+ let(:value) { ATDIS::Model.cast("2013-04-20", DateTime, "Sydney") }
127
+ it { expect(value).to eq(DateTime.new(2013, 4, 20, 0, 0, 0, "+10")) }
128
+ it { expect(value.zone).to eq "+10:00" }
129
+ end
130
+ end
131
+
132
+ it do
133
+ expect(ATDIS::Model.cast("2013-04", DateTime, "UTC")).to be_nil
134
+ end
135
+
136
+ it do
137
+ expect(ATDIS::Model.cast("18 September 2013", DateTime, "UTC")).to be_nil
138
+ end
139
+
140
+ it do
141
+ expect(
142
+ ATDIS::Model.cast(DateTime.new(2013, 4, 20, 2, 1, 7, 0), DateTime, "UTC")
143
+ ).to eq(DateTime.new(2013, 4, 20, 2, 1, 7, 0))
144
+ end
145
+ end
72
146
 
73
147
  it "should cast arrays by casting each member" do
74
- ATDIS::Model.cast([1, 2, 3], String).should == ["1", "2", "3"]
148
+ expect(ATDIS::Model.cast([1, 2, 3], String, "UTC")).to eq %w[1 2 3]
75
149
  end
76
150
 
77
151
  # This casting allows nil values
78
- describe "casting Fixnum" do
79
- it { ATDIS::Model.cast("3", Fixnum).should == 3}
80
- it { ATDIS::Model.cast("4.0", Fixnum).should == 4}
81
- it { ATDIS::Model.cast(5, Fixnum).should == 5}
82
- it { ATDIS::Model.cast(0, Fixnum).should == 0}
83
- it { ATDIS::Model.cast(nil, Fixnum).should be_nil}
152
+ describe "casting Integer" do
153
+ it { expect(ATDIS::Model.cast("3", Integer, "UTC")).to eq 3 }
154
+ it { expect(ATDIS::Model.cast("4.0", Integer, "UTC")).to eq 4 }
155
+ it { expect(ATDIS::Model.cast(5, Integer, "UTC")).to eq 5 }
156
+ it { expect(ATDIS::Model.cast(0, Integer, "UTC")).to eq 0 }
157
+ it { expect(ATDIS::Model.cast(nil, Integer, "UTC")).to be_nil }
84
158
  end
85
159
  end
86
160
 
87
161
  describe ".attribute_keys" do
88
162
  it do
89
- ATDIS::Model.attribute_types = {foo: String, a: Fixnum, info: String}
90
- ATDIS::Model.attribute_keys.should == [:foo, :a, :info]
163
+ ATDIS::Model.attribute_types = { foo: String, a: Integer, info: String }
164
+ expect(ATDIS::Model.attribute_keys).to eq %i[foo a info]
91
165
  end
92
166
  end
93
167
 
94
168
  describe ".partition_by_used" do
95
169
  it do
96
- ATDIS::Model.stub(:attribute_keys).and_return([:foo])
97
- ATDIS::Model.partition_by_used({foo: 2}).should == [
98
- {foo: 2}, {}
170
+ allow(ATDIS::Model).to receive(:attribute_keys).and_return([:foo])
171
+ expect(ATDIS::Model.partition_by_used(foo: 2)).to eq [
172
+ { foo: 2 }, {}
99
173
  ]
100
174
  end
101
175
 
102
176
  it do
103
- ATDIS::Model.stub(:attribute_keys).and_return([:foo, :a])
104
- ATDIS::Model.partition_by_used({foo: 2, a: 3, d: 4}).should == [
105
- {foo: 2, a: 3},
106
- {d: 4}
177
+ allow(ATDIS::Model).to receive(:attribute_keys).and_return(%i[foo a])
178
+ expect(ATDIS::Model.partition_by_used(foo: 2, a: 3, d: 4)).to eq [
179
+ { foo: 2, a: 3 },
180
+ { d: 4 }
107
181
  ]
108
182
  end
109
183
 
110
184
  it "something that isn't a hash will never get used" do
111
- ATDIS::Model.stub(:attribute_keys).and_return([:foo, :a])
112
- ATDIS::Model.partition_by_used("hello").should == [
185
+ allow(ATDIS::Model).to receive(:attribute_keys).and_return(%i[foo a])
186
+ expect(ATDIS::Model.partition_by_used("hello")).to eq [
113
187
  {},
114
188
  "hello"
115
189
  ]
116
-
117
190
  end
118
191
  end
119
192
  end