mls 1.1.3 → 1.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a0d57c55dc66886c12c685651d70a12e6dd89826
4
- data.tar.gz: d9cbe37f44ecce10b3188a916123bdd662bf45d6
3
+ metadata.gz: fbe4c5d0e51a15c6a0ffed14435fee0f31ab448f
4
+ data.tar.gz: 7c9ba424dedbf1cf02a331f20af33faa54bfa58d
5
5
  SHA512:
6
- metadata.gz: 3023a15fa2e01080ceea8f95f0cf818e3fe97a6aa3dca1ba4019daf8d3dcca394048bf317d5d168a24e8feaadc9eba111c8f5b4edf8c5bf75d2fbabd7b12b7a1
7
- data.tar.gz: 95593869037f36ebe3656a64886ad110e0852524b09f237b9306ef2aae94ab1c2969e5eac4041cf8b070813e86d470c9557d45c0d1a26de30142b7fa186a45a8
6
+ metadata.gz: 0085977e32094f3866b8e945b2e71e71e981bb204c710caa360d9502628a42e3c5edcce3a5ba1dac7785c565e293009012e92a1311de9e4cc36ebb5db0352478
7
+ data.tar.gz: 364147eef25f9cad12e97ff83dcc8d888a92996e74ac98da6e3e2b76722aeca9731b586b19de6d7a0a5bd7814ec5997bee0ce5b7ab6272455f3d06d620d4725a
data/lib/mls/session.rb CHANGED
@@ -2,8 +2,17 @@ class Session < MLS::Model
2
2
 
3
3
  belongs_to :account
4
4
 
5
- def self.authenticate(email, password)
5
+ # Authenticate with email and password.
6
+ # Returns either the newly created session or nil
7
+ def self.authenticate(email, password=nil)
8
+ if email.is_a? Hash
9
+ password = email[:password]
10
+ email = email[:email]
11
+ end
12
+
6
13
  Session.create(:email => email, :password => password)
14
+ rescue Sunstone::Exception::Unauthorized
15
+ nil
7
16
  end
8
17
 
9
18
  def self.authenticate_by_token(token)
data/mls.gemspec CHANGED
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "mls"
6
- s.version = '1.1.3'
6
+ s.version = '1.1.4'
7
7
  s.authors = ["Jon Bracy", "James R. Bracy"]
8
8
  s.email = ["jon@42floors.com", "james@42floors.com"]
9
9
  s.homepage = "http://mls.42floors.com"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mls
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 1.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Bracy
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-09-18 00:00:00.000000000 Z
12
+ date: 2014-10-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -220,15 +220,6 @@ files:
220
220
  - test/mls/resource_test.rb
221
221
  - test/mls_test.rb
222
222
  - test/test_helper.rb
223
- - test/units/models/test_account.rb
224
- - test/units/models/test_address.rb
225
- - test/units/models/test_contact.rb
226
- - test/units/models/test_flyer.rb
227
- - test/units/models/test_listing.rb
228
- - test/units/models/test_photo.rb
229
- - test/units/test_model.rb
230
- - test/units/test_parser.rb
231
- - test/units/test_resource.rb
232
223
  homepage: http://mls.42floors.com
233
224
  licenses: []
234
225
  metadata: {}
@@ -258,13 +249,4 @@ test_files:
258
249
  - test/mls/resource_test.rb
259
250
  - test/mls_test.rb
260
251
  - test/test_helper.rb
261
- - test/units/models/test_account.rb
262
- - test/units/models/test_address.rb
263
- - test/units/models/test_contact.rb
264
- - test/units/models/test_flyer.rb
265
- - test/units/models/test_listing.rb
266
- - test/units/models/test_photo.rb
267
- - test/units/test_model.rb
268
- - test/units/test_parser.rb
269
- - test/units/test_resource.rb
270
252
  has_rdoc:
@@ -1,28 +0,0 @@
1
- require 'test_helper'
2
-
3
- class TestAccount < ::Test::Unit::TestCase
4
-
5
- def test_create_account
6
- account = FactoryGirl.create(:account)
7
- assert account.id
8
- end
9
-
10
- def test_create_invalid_account
11
- account = FactoryGirl.build(:account, :email => nil)
12
- account.save
13
- assert account.errors[:email]
14
- end
15
-
16
- def test_search_email
17
- account = FactoryGirl.create(:account)
18
- matches = MLS::Account.search(account.email)
19
- assert_equal [account].map(&:id), matches.map(&:id)
20
- end
21
-
22
- def test_search_name
23
- account = FactoryGirl.create(:account)
24
- matches = MLS::Account.search(account.name)
25
- assert_equal [account].map(&:id), matches.map(&:id)
26
- end
27
-
28
- end
@@ -1,20 +0,0 @@
1
- require 'test_helper'
2
-
3
- class TestAddress < ::Test::Unit::TestCase
4
-
5
- def test_attributes
6
- address = MLS::Address.new
7
-
8
- attributes = [:id, :name, :slug, :latitude, :longitude, :formated_address, :streetnumber, :street, :neighbrhood, :city, :county, :state, :countr, :postalcode]
9
-
10
- attributes.each do |attribute|
11
- assert address.respond_to?(attribute), "address should respond to #{attribute}"
12
- end
13
- end
14
-
15
- def test_class_methods
16
- assert MLS::Address.respond_to?(:query)
17
- assert MLS::Address.respond_to?(:box_cluster)
18
- end
19
-
20
- end
@@ -1,31 +0,0 @@
1
- require 'test_helper'
2
-
3
- class TestTour < ::Test::Unit::TestCase
4
-
5
- # def test_attributes
6
- # tr = MLS::Tour.new
7
- #
8
- # assert tr.respond_to?(:message)
9
- # end
10
- #
11
- # def test_attr_accessors
12
- # tr = MLS::Tour.new
13
- #
14
- # assert tr.respond_to?(:listing)
15
- # end
16
- #
17
- # def test_class_methods
18
- # assert MLS::Tour.respond_to?(:get_all_for_account)
19
- # assert MLS::Tour.respond_to?(:create)
20
- # end
21
- #
22
- # def test_parser
23
- # assert defined?(MLS::Tour::Parser)
24
- # end
25
-
26
- test 'it' do
27
- @account = FactoryGirl.create(:account)
28
- @listing = FactoryGirl.create(:listing)
29
- end
30
-
31
- end
@@ -1,22 +0,0 @@
1
- require 'test_helper'
2
-
3
- class TestFlyer < ::Test::Unit::TestCase
4
-
5
-
6
- def test_create_flyer
7
- flyer = MLS::Flyer.create(:file => File.new('test/fixtures/flyer.pdf'))
8
- assert flyer.id
9
- end
10
-
11
- def test_attach_flyer_to_listing
12
- listing = MLS::Listing.create
13
- flyer = MLS::Flyer.create(
14
- :file => File.new('test/fixtures/flyer.pdf'),
15
- :subject => listing)
16
-
17
- flyer = MLS::Flyer.find(flyer.id)
18
- assert_equal listing.id, flyer.subject_id
19
- assert_equal "Listing", flyer.subject_type
20
- end
21
-
22
- end
@@ -1,243 +0,0 @@
1
- require 'test_helper'
2
-
3
- class ListingTest < Test::Unit::TestCase
4
-
5
- def test_attributes
6
- listing = MLS::Listing.new
7
-
8
- attributes = [:id, :address_id, :use, :account_id, :name, :type, :space_type, :unit, :floor, :description, :size, :maximum_contiguous_size, :minimum_divisible_size, :lease_terms, :rate, :rate_units, :sublease_expiration, :available_on, :term, :offices, :conference_rooms, :bathrooms, :kitchen, :showers, :ready_to_move_in, :furniture_available, :created_at, :updated_at]
9
-
10
- attributes.each do |attribute|
11
- assert listing.respond_to?(attribute), "listing should respond to #{attribute}"
12
- end
13
- end
14
-
15
- def test_attr_accessors
16
- listing = MLS::Listing.new
17
-
18
- assert listing.respond_to?(:address)
19
- assert listing.respond_to?(:agents)
20
- end
21
-
22
- def test_instance_methods
23
- listing = MLS::Listing.new
24
-
25
- assert listing.respond_to?(:photos)
26
- end
27
-
28
- def test_class_methods
29
- assert MLS::Listing.respond_to?(:find)
30
- end
31
-
32
- test '#request_tour for email without an account' do
33
- @listing = FactoryGirl.create(:listing)
34
- @name = Faker::Name.name
35
- @email = Faker::Internet.email
36
- tr = @listing.request_tour(@name, @email)
37
-
38
-
39
- assert_equal({}, tr.errors)
40
- assert_equal({}, tr.account.errors)
41
- # TODO assert_equal({}, tr.listing.errors)
42
- assert tr.id
43
- end
44
-
45
- test '#request_tour for email on a ghost account' do
46
- @account = FactoryGirl.create(:ghost_account)
47
- @listing = FactoryGirl.create(:listing)
48
-
49
- tr = @listing.request_tour(@account.name, @account.email)
50
- assert_equal({}, tr.errors)
51
- assert_equal({}, tr.account.errors)
52
- # TODO assert_equal({}, tr.listing.errors)
53
- assert tr.id
54
- end
55
-
56
- test '#request_tour for email on an account' do
57
- @account = FactoryGirl.create(:account)
58
- @listing = FactoryGirl.create(:listing)
59
-
60
- tr = @listing.request_tour(@account.name, @account.email)
61
- assert_equal({}, tr.errors)
62
- assert_equal({}, tr.account.errors)
63
- # TODO assert_equal({}, tr.listing.errors)
64
- assert tr.id
65
- end
66
-
67
- test '#request_tour for an non-existant listing' do
68
- @listing = FactoryGirl.build(:listing, :id => 94332)
69
-
70
- assert_raises(MLS::Exception::NotFound) do
71
- @listing.request_tour(Faker::Name.name, Faker::Internet.email)
72
- end
73
- end
74
-
75
- test '#request_tour without and account name' do
76
- @listing = FactoryGirl.create(:listing)
77
-
78
- tr = @listing.request_tour('', Faker::Internet.email)
79
- assert !tr.id
80
- assert_equal({:name => ["can't be blank"]}, tr.account.errors)
81
-
82
- tr = @listing.request_tour(nil, Faker::Internet.email)
83
- assert !tr.id
84
- assert_equal({:name => ["can't be blank"]}, tr.account.errors)
85
- end
86
-
87
- test '#request_tour without an account email' do
88
- @listing = FactoryGirl.create(:listing)
89
-
90
- tr = @listing.request_tour(Faker::Name.name, '')
91
- assert !tr.id
92
- assert_equal({:email => ["can't be blank", "is invalid"]}, tr.account.errors)
93
-
94
- tr = @listing.request_tour(Faker::Name.name, nil)
95
- assert !tr.id
96
- # assert !tr.persisted? #TODO move to persisted being based of id?
97
- assert_equal({:email => ["can't be blank", "is invalid"]}, tr.account.errors)
98
- end
99
-
100
- test '#request_tour with an account email' do
101
- @account = FactoryGirl.create(:account)
102
- @listing = FactoryGirl.create(:listing)
103
-
104
- tr = @listing.request_tour('', @account.email) # TODO should this try to set the name of the account?
105
- assert_equal({}, tr.errors)
106
- assert_equal({}, tr.account.errors)
107
- # TODO assert_equal({}, tr.listing.errors)
108
- assert tr.id
109
- assert tr.persisted?
110
- end
111
-
112
- test '#request_tour multiple times for a listing' do
113
- @account = FactoryGirl.create(:account)
114
- @listing = FactoryGirl.create(:listing)
115
-
116
- tr1 = @listing.request_tour(@account.name, @account.email)
117
- assert_equal({}, tr1.errors) # TODO should errors be here for account?
118
- assert_equal({}, tr1.account.errors)
119
- # TODO assert_equal({}, tr.listing.errors)
120
- assert tr1.persisted?
121
-
122
- tr2 = @listing.request_tour(@account.name, @account.email)
123
- assert_equal({}, tr2.errors)
124
- assert_equal({}, tr2.account.errors)
125
- # TODO assert_equal({}, tr.listing.errors)
126
- assert tr2.persisted?
127
-
128
- assert_not_equal tr1.id, tr2.id
129
- end
130
-
131
- test '#request_tour with optional info' do
132
- @listing = FactoryGirl.create(:listing)
133
-
134
- info = {:company => '42Floors', :population => 10, :funding => 'string thing', :move_in_date => '2012-09-12'}
135
- tr = @listing.request_tour(Faker::Name.name, Faker::Internet.email, info)
136
-
137
- assert tr.id
138
- assert_equal '42Floors', info[:company]
139
- assert_equal 10, info[:population]
140
- assert_equal 'string thing', info[:funding]
141
- assert_equal '2012-09-12', info[:move_in_date]
142
-
143
- tr = @listing.request_tour('', nil, info)
144
- assert !tr.id
145
- assert_equal '42Floors', info[:company]
146
- assert_equal 10, info[:population]
147
- assert_equal 'string thing', info[:funding]
148
- assert_equal '2012-09-12', info[:move_in_date]
149
- end
150
-
151
- def test_rate_per_sqft_per_month
152
- listing = MLS::Listing.new(:rate => 10.5, :rate_units => '/sqft/mo', :size => 5)
153
-
154
- assert_equal 10.5, listing.rate
155
- assert_equal 10.5, listing.rate('/sqft/mo')
156
- assert_equal 126, listing.rate('/sqft/yr')
157
- assert_equal 52.5, listing.rate('/mo')
158
- assert_equal 630, listing.rate('/yr')
159
- assert_equal 2100, listing.rate('/desk/mo')
160
- assert_raises RuntimeError do
161
- listing.rate('/random')
162
- end
163
- end
164
-
165
- def test_rate_per_sqft_per_year
166
- listing = MLS::Listing.new(:rate => 126, :rate_units => '/sqft/yr', :size => 5)
167
-
168
- assert_equal 126, listing.rate
169
- assert_equal 10.5, listing.rate('/sqft/mo')
170
- assert_equal 126, listing.rate('/sqft/yr')
171
- assert_equal 52.5, listing.rate('/mo')
172
- assert_equal 630, listing.rate('/yr')
173
- assert_equal 2100, listing.rate('/desk/mo')
174
- assert_raises RuntimeError do
175
- listing.rate('/random')
176
- end
177
- end
178
-
179
- def test_rate_per_month
180
- listing = MLS::Listing.new(:rate => 52.5, :rate_units => '/mo', :size => 5)
181
-
182
- assert_equal 52.5, listing.rate
183
- assert_equal 10.5, listing.rate('/sqft/mo')
184
- assert_equal 126, listing.rate('/sqft/yr')
185
- assert_equal 52.5, listing.rate('/mo')
186
- assert_equal 630, listing.rate('/yr')
187
- assert_equal 2100, listing.rate('/desk/mo')
188
- assert_raises RuntimeError do
189
- listing.rate('/random')
190
- end
191
- end
192
-
193
- def test_rate_per_year
194
- listing = MLS::Listing.new(:rate => 630, :rate_units => '/yr', :size => 5)
195
-
196
- assert_equal 630, listing.rate
197
- assert_equal 10.5, listing.rate('/sqft/mo')
198
- assert_equal 126, listing.rate('/sqft/yr')
199
- assert_equal 52.5, listing.rate('/mo')
200
- assert_equal 630, listing.rate('/yr')
201
- assert_equal 2100, listing.rate('/desk/mo')
202
- assert_raises RuntimeError do
203
- listing.rate('/random')
204
- end
205
- end
206
-
207
- def test_rate_per_desk_per_month
208
- listing = MLS::Listing.new(:rate => 2100, :rate_units => '/desk/mo', :size => 5)
209
-
210
- assert_equal 2100, listing.rate
211
- assert_equal 10.5, listing.rate('/sqft/mo')
212
- assert_equal 126, listing.rate('/sqft/yr')
213
- assert_equal 2100, listing.rate('/mo')
214
- assert_equal 25200, listing.rate('/yr')
215
- assert_equal 2100, listing.rate('/desk/mo')
216
- assert_raises RuntimeError do
217
- listing.rate('/random')
218
- end
219
- end
220
-
221
- def test_rate_percision
222
- listing = MLS::Listing.new(:rate => 47, :rate_units => '/sqft/yr', :size => 5)
223
-
224
- assert_equal 3.92, listing.rate('/sqft/mo')
225
- assert_equal 47, listing.rate('/sqft/yr')
226
- assert_equal 19.58, listing.rate('/mo')
227
- assert_equal 235, listing.rate('/yr')
228
- assert_equal 783.33, listing.rate('/desk/mo')
229
- end
230
-
231
- def test_null_rate
232
- listing = MLS::Listing.new(:rate => nil, :rate_units => '/yr', :size => 5)
233
-
234
- assert_equal nil, listing.rate
235
- assert_equal nil, listing.rate('/sqft/mo')
236
- assert_equal nil, listing.rate('/sqft/yr')
237
- assert_equal nil, listing.rate('/mo')
238
- assert_equal nil, listing.rate('/yr')
239
- assert_equal nil, listing.rate('/desk/mo')
240
- assert_equal nil, listing.rate('/random')
241
- end
242
-
243
- end
@@ -1,144 +0,0 @@
1
- require 'test_helper'
2
-
3
- class TestPhoto < ::Test::Unit::TestCase
4
-
5
-
6
- def test_create_photo
7
- photo = MLS::Photo.create(TEST_IMAGE)
8
- assert photo.id
9
- assert photo.digest
10
- end
11
-
12
- end
13
-
14
- TEST_IMAGE = StringIO.new(Base64.decode64(<<PHOTO))
15
- /9j/4AAQSkZJRgABAQEASABIAAD/4gxYSUNDX1BST0ZJTEUAAQEAAAxITGlu
16
- bwIQAABtbnRyUkdCIFhZWiAHzgACAAkABgAxAABhY3NwTVNGVAAAAABJRUMg
17
- c1JHQgAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLUhQICAAAAAAAAAAAAAAAAAA
18
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFjcHJ0AAABUAAA
19
- ADNkZXNjAAABhAAAAGx3dHB0AAAB8AAAABRia3B0AAACBAAAABRyWFlaAAAC
20
- GAAAABRnWFlaAAACLAAAABRiWFlaAAACQAAAABRkbW5kAAACVAAAAHBkbWRk
21
- AAACxAAAAIh2dWVkAAADTAAAAIZ2aWV3AAAD1AAAACRsdW1pAAAD+AAAABRt
22
- ZWFzAAAEDAAAACR0ZWNoAAAEMAAAAAxyVFJDAAAEPAAACAxnVFJDAAAEPAAA
23
- CAxiVFJDAAAEPAAACAx0ZXh0AAAAAENvcHlyaWdodCAoYykgMTk5OCBIZXds
24
- ZXR0LVBhY2thcmQgQ29tcGFueQAAZGVzYwAAAAAAAAASc1JHQiBJRUM2MTk2
25
- Ni0yLjEAAAAAAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAA
26
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWFlaIAAA
27
- AAAAAPNRAAEAAAABFsxYWVogAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABv
28
- ogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+E
29
- AAC2z2Rlc2MAAAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAA
30
- AAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAAAAAAAAAAAAA
31
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZXNjAAAAAAAAAC5JRUMgNjE5
32
- NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAtIHNSR0IAAAAAAAAA
33
- AAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAt
34
- IHNSR0IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVzYwAAAAAAAAAsUmVmZXJl
35
- bmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAA
36
- AAAALFJlZmVyZW5jZSBWaWV3aW5nIENvbmRpdGlvbiBpbiBJRUM2MTk2Ni0y
37
- LjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZpZXcAAAAAABOk/gAUXy4A
38
- EM8UAAPtzAAEEwsAA1yeAAAAAVhZWiAAAAAAAEwJVgBQAAAAVx/nbWVhcwAA
39
- AAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAo8AAAACc2lnIAAAAABDUlQgY3Vy
40
- dgAAAAAAAAQAAAAABQAKAA8AFAAZAB4AIwAoAC0AMgA3ADsAQABFAEoATwBU
41
- AFkAXgBjAGgAbQByAHcAfACBAIYAiwCQAJUAmgCfAKQAqQCuALIAtwC8AMEA
42
- xgDLANAA1QDbAOAA5QDrAPAA9gD7AQEBBwENARMBGQEfASUBKwEyATgBPgFF
43
- AUwBUgFZAWABZwFuAXUBfAGDAYsBkgGaAaEBqQGxAbkBwQHJAdEB2QHhAekB
44
- 8gH6AgMCDAIUAh0CJgIvAjgCQQJLAlQCXQJnAnECegKEAo4CmAKiAqwCtgLB
45
- AssC1QLgAusC9QMAAwsDFgMhAy0DOANDA08DWgNmA3IDfgOKA5YDogOuA7oD
46
- xwPTA+AD7AP5BAYEEwQgBC0EOwRIBFUEYwRxBH4EjASaBKgEtgTEBNME4QTw
47
- BP4FDQUcBSsFOgVJBVgFZwV3BYYFlgWmBbUFxQXVBeUF9gYGBhYGJwY3BkgG
48
- WQZqBnsGjAadBq8GwAbRBuMG9QcHBxkHKwc9B08HYQd0B4YHmQesB78H0gfl
49
- B/gICwgfCDIIRghaCG4IggiWCKoIvgjSCOcI+wkQCSUJOglPCWQJeQmPCaQJ
50
- ugnPCeUJ+woRCicKPQpUCmoKgQqYCq4KxQrcCvMLCwsiCzkLUQtpC4ALmAuw
51
- C8gL4Qv5DBIMKgxDDFwMdQyODKcMwAzZDPMNDQ0mDUANWg10DY4NqQ3DDd4N
52
- +A4TDi4OSQ5kDn8Omw62DtIO7g8JDyUPQQ9eD3oPlg+zD88P7BAJECYQQxBh
53
- EH4QmxC5ENcQ9RETETERTxFtEYwRqhHJEegSBxImEkUSZBKEEqMSwxLjEwMT
54
- IxNDE2MTgxOkE8UT5RQGFCcUSRRqFIsUrRTOFPAVEhU0FVYVeBWbFb0V4BYD
55
- FiYWSRZsFo8WshbWFvoXHRdBF2UXiReuF9IX9xgbGEAYZRiKGK8Y1Rj6GSAZ
56
- RRlrGZEZtxndGgQaKhpRGncanhrFGuwbFBs7G2MbihuyG9ocAhwqHFIcexyj
57
- HMwc9R0eHUcdcB2ZHcMd7B4WHkAeah6UHr4e6R8THz4faR+UH78f6iAVIEEg
58
- bCCYIMQg8CEcIUghdSGhIc4h+yInIlUigiKvIt0jCiM4I2YjlCPCI/AkHyRN
59
- JHwkqyTaJQklOCVoJZclxyX3JicmVyaHJrcm6CcYJ0kneierJ9woDSg/KHEo
60
- oijUKQYpOClrKZ0p0CoCKjUqaCqbKs8rAis2K2krnSvRLAUsOSxuLKIs1y0M
61
- LUEtdi2rLeEuFi5MLoIuty7uLyQvWi+RL8cv/jA1MGwwpDDbMRIxSjGCMbox
62
- 8jIqMmMymzLUMw0zRjN/M7gz8TQrNGU0njTYNRM1TTWHNcI1/TY3NnI2rjbp
63
- NyQ3YDecN9c4FDhQOIw4yDkFOUI5fzm8Ofk6Njp0OrI67zstO2s7qjvoPCc8
64
- ZTykPOM9Ij1hPaE94D4gPmA+oD7gPyE/YT+iP+JAI0BkQKZA50EpQWpBrEHu
65
- QjBCckK1QvdDOkN9Q8BEA0RHRIpEzkUSRVVFmkXeRiJGZ0arRvBHNUd7R8BI
66
- BUhLSJFI10kdSWNJqUnwSjdKfUrESwxLU0uaS+JMKkxyTLpNAk1KTZNN3E4l
67
- Tm5Ot08AT0lPk0/dUCdQcVC7UQZRUFGbUeZSMVJ8UsdTE1NfU6pT9lRCVI9U
68
- 21UoVXVVwlYPVlxWqVb3V0RXklfgWC9YfVjLWRpZaVm4WgdaVlqmWvVbRVuV
69
- W+VcNVyGXNZdJ114XcleGl5sXr1fD19hX7NgBWBXYKpg/GFPYaJh9WJJYpxi
70
- 8GNDY5dj62RAZJRk6WU9ZZJl52Y9ZpJm6Gc9Z5Nn6Wg/aJZo7GlDaZpp8WpI
71
- ap9q92tPa6dr/2xXbK9tCG1gbbluEm5rbsRvHm94b9FwK3CGcOBxOnGVcfBy
72
- S3KmcwFzXXO4dBR0cHTMdSh1hXXhdj52m3b4d1Z3s3gReG54zHkqeYl553pG
73
- eqV7BHtje8J8IXyBfOF9QX2hfgF+Yn7CfyN/hH/lgEeAqIEKgWuBzYIwgpKC
74
- 9INXg7qEHYSAhOOFR4Wrhg6GcobXhzuHn4gEiGmIzokziZmJ/opkisqLMIuW
75
- i/yMY4zKjTGNmI3/jmaOzo82j56QBpBukNaRP5GokhGSepLjk02TtpQglIqU
76
- 9JVflcmWNJaflwqXdZfgmEyYuJkkmZCZ/JpomtWbQpuvnByciZz3nWSd0p5A
77
- nq6fHZ+Ln/qgaaDYoUehtqImopajBqN2o+akVqTHpTilqaYapoum/adup+Co
78
- UqjEqTepqaocqo+rAqt1q+msXKzQrUStuK4trqGvFq+LsACwdbDqsWCx1rJL
79
- ssKzOLOutCW0nLUTtYq2AbZ5tvC3aLfguFm40blKucK6O7q1uy67p7whvJu9
80
- Fb2Pvgq+hL7/v3q/9cBwwOzBZ8Hjwl/C28NYw9TEUcTOxUvFyMZGxsPHQce/
81
- yD3IvMk6ybnKOMq3yzbLtsw1zLXNNc21zjbOts83z7jQOdC60TzRvtI/0sHT
82
- RNPG1EnUy9VO1dHWVdbY11zX4Nhk2OjZbNnx2nba+9uA3AXcit0Q3ZbeHN6i
83
- 3ynfr+A24L3hROHM4lPi2+Nj4+vkc+T85YTmDeaW5x/nqegy6LzpRunQ6lvq
84
- 5etw6/vshu0R7ZzuKO6070DvzPBY8OXxcvH/8ozzGfOn9DT0wvVQ9d72bfb7
85
- 94r4Gfio+Tj5x/pX+uf7d/wH/Jj9Kf26/kv+3P9t////4QE6RXhpZgAATU0A
86
- KgAAAAgABwESAAMAAAABAAEAAAEaAAUAAAABAAAAYgEbAAUAAAABAAAAagEo
87
- AAMAAAABAAIAAAExAAIAAAARAAAAcgEyAAIAAAAUAAAAhIdpAAQAAAABAAAA
88
- mAAAAAAAAABIAAAAAQAAAEgAAAABUGl4ZWxtYXRvciAyLjAuMQAAMjAxMjow
89
- ODowNyAxMTowODo4NQAACZAAAAcAAAAEMDIyMZADAAIAAAAUAAABCpAEAAIA
90
- AAAUAAABHpEBAAcAAAAEAAAAAKAAAAcAAAAEMDEwMKABAAMAAAABAAEAAKAC
91
- AAQAAAABAAAAZKADAAQAAAABAAAAhqQGAAMAAAABAAAAAAAAAAAyMDEyOjA0
92
- OjI4IDE1OjI0OjEzADIwMTI6MDQ6MjggMTU6MjQ6MTMA/+EBeGh0dHA6Ly9u
93
- cy5hZG9iZS5jb20veGFwLzEuMC8APHg6eG1wbWV0YSB4bWxuczp4PSJhZG9i
94
- ZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNC40LjAiPgogICA8cmRm
95
- OlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjIt
96
- cmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjph
97
- Ym91dD0iIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3Jn
98
- L2RjL2VsZW1lbnRzLzEuMS8iPgogICAgICAgICA8ZGM6c3ViamVjdD4KICAg
99
- ICAgICAgICAgPHJkZjpCYWcvPgogICAgICAgICA8L2RjOnN1YmplY3Q+CiAg
100
- ICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBt
101
- ZXRhPgoA/9sAQwAgFhgcGBQgHBocJCIgJjBQNDAsLDBiRko6UHRmenhyZnBu
102
- gJC4nICIropucKDaoq6+xM7Qznya4vLgyPC4ys7G/9sAQwEiJCQwKjBeNDRe
103
- xoRwhMbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbGxsbG
104
- xsbGxsbGxsbG/8AAEQgAhgBkAwEiAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAA
105
- AAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUS
106
- ITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2
107
- Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqS
108
- k5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh
109
- 4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAABAgME
110
- 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
- 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
- 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
- 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
- 6vLz9PX29/j5+v/aAAwDAQACEQMRAD8A1wKXFOxRiruSMZQyFTnBGODio4oB
115
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 3bl6A4xWFbmKKQqyFu/bNW3lkIxgNnoTjI7YpJOIaMzI4HkR5AMheo9B60qS
123
- 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
- 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
- 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
- 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
- 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
- ZZXA+YOBn1IGakN2yghhk564qtbhZAxd8HHemZKkhQCM8HFMVjW0y4aS4k29
129
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
143
- opALmjNFFAwzRRRQB//Z
144
- PHOTO
@@ -1,24 +0,0 @@
1
- require 'test_helper'
2
-
3
- class MyModel
4
- include MLS::Model
5
-
6
- end
7
-
8
- class TestModel < ::Test::Unit::TestCase
9
-
10
- def test_instance_methods
11
- model = MyModel.new
12
-
13
- assert model.respond_to?(:attribute)
14
- assert model.respond_to?(:attributes)
15
- assert model.respond_to?(:attribute_module)
16
- assert model.respond_to?(:create_reader_for)
17
- assert model.respond_to?(:create_writer_for)
18
- assert model.respond_to?(:model_name)
19
- assert model.respond_to?(:param_key)
20
- assert model.respond_to?(:root_element)
21
- assert model.respond_to?(:collection_root_element)
22
- end
23
-
24
- end
@@ -1,32 +0,0 @@
1
- require 'test_helper'
2
-
3
- class MyParser < MLS::Parser; end
4
-
5
- class TestParser < ::Test::Unit::TestCase
6
-
7
- def test_attr_readers
8
- parser = MyParser.new
9
-
10
- assert parser.respond_to?(:object)
11
- end
12
-
13
- def test_instance_methods
14
- parser = MyParser.new
15
-
16
- assert parser.respond_to?(:parse)
17
- assert parser.respond_to?(:update_attributes)
18
- assert parser.respond_to?(:extract_attributes)
19
- end
20
-
21
- def test_class_methods
22
- assert MyParser.respond_to?(:parse)
23
- assert MyParser.respond_to?(:parse_collection)
24
- assert MyParser.respond_to?(:build)
25
- assert MyParser.respond_to?(:update)
26
- assert MyParser.respond_to?(:extract_attributes)
27
- assert MyParser.respond_to?(:object_class)
28
- assert MyParser.respond_to?(:root_element)
29
- assert MyParser.respond_to?(:collection_root_element)
30
- end
31
-
32
- end
@@ -1,30 +0,0 @@
1
- require 'test_helper'
2
-
3
- class MyResource < MLS::Resource; end
4
-
5
- class TestResource < ::Test::Unit::TestCase
6
-
7
- def test_attr_readers
8
- resource = MyResource.new
9
-
10
- assert resource.respond_to?(:errors)
11
- assert resource.respond_to?(:persisted)
12
- end
13
-
14
- def test_instance_methods
15
- resource = MyResource.new
16
-
17
- assert resource.respond_to?(:new_record?)
18
- assert resource.respond_to?(:persisted?)
19
- assert resource.respond_to?(:save)
20
-
21
- assert resource.respond_to?(:attributes)
22
- assert resource.respond_to?(:set_default_values)
23
- assert resource.respond_to?(:update_attributes)
24
-
25
- assert resource.respond_to?(:to_hash)
26
- assert resource.respond_to?(:to_key)
27
- end
28
-
29
- test 'save returns true || false'
30
- end