mls 0.13.0 → 0.14.0

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: 2038b3ee1f58d0c9b529c5ecfe3ef927af8068b8
4
- data.tar.gz: 87d5a02cfa10037c074923202903c17f81c6211a
3
+ metadata.gz: 49407504285320c314076642711aa51cbcffb1ea
4
+ data.tar.gz: 1f01d0b23a0b9e5d89744a3020615ff59c420a6f
5
5
  SHA512:
6
- metadata.gz: 60cc8dba490166630d4c498828d2a5b2d82374a86bb496a7a409c65d172718bd1bc6cdd7da9e9e012c0c8c33e704636ab082244fdd4a24bdd8bcf1f47652a7d9
7
- data.tar.gz: 659c7557d36e305f7fe8a5c79f328f7854dc2535608cd2daa3013f9d63b0dc7028a63aafd0506d72845f7b92f8ac660d1783740f9271b25cb8b8db24dbc6a43e
6
+ metadata.gz: 96d45047e9069909a6e05f80fa8335188da8e81dd99e9c6d1aa0c7c898b1a84372aaac30320884f5b11233fec7d0f9f1b68fb34579bff6ae2be3bd6bb0faf0b1
7
+ data.tar.gz: d3fc967552d7105a79cd845ce8024b91e0f78a903ad87d300c63831d8f28bc2497eb50445e0e61e251cef952f02a24595aa99d395f5b5e062d6ceb75f6c4817f
@@ -29,7 +29,6 @@ class MLS::Account < MLS::Resource
29
29
  attribute :updated_at, DateTime, :serialize => :false
30
30
 
31
31
  attribute :email_token, String, :serialize => false
32
- attribute :auth_cookie, String, :serialize => false
33
32
  attribute :start_hours_of_operation, Fixnum, :serialize => :if_present
34
33
  attribute :end_hours_of_operation, Fixnum, :serialize => :if_present
35
34
  attribute :days_of_operation, String, :serialize => :if_present
@@ -129,12 +128,8 @@ class MLS::Account < MLS::Resource
129
128
  def authenticate(attrs_or_email, password=nil)
130
129
  email = attrs_or_email.is_a?(Hash) ? attrs_or_email[:email] : attrs_or_email
131
130
  password = attrs_or_email.is_a?(Hash) ? attrs_or_email[:password] : password
132
-
133
131
  response = MLS.post('/login', {:email => email, :password => password})
134
- MLS.auth_cookie = response['set-cookie']
135
-
136
132
  account = MLS::Account::Parser.parse(response.body)
137
- account.auth_cookie = MLS.auth_cookie
138
133
  account
139
134
  rescue MLS::Exception::Unauthorized => response
140
135
  nil
@@ -1,19 +1,14 @@
1
1
  class MLS::Brokerage < MLS::Resource
2
2
 
3
+ attr_accessor :avatar
4
+
3
5
  attribute :id, Fixnum, :serialize => :if_present
4
6
  attribute :name, String, :serialize => :if_present
5
7
  attribute :admin_id, Fixnum, :serialize => :if_present
6
8
  attribute :slug, String, :serialize => false
7
9
  attribute :palette, Hash, :serialize => :if_present
8
- attribute :avatar_digest, String, :serialize => false
9
10
 
10
11
  class << self
11
-
12
- def avatar(format='png', protocol='http')
13
- if avatar_digest
14
- "#{protocol}://assets.42floors.com/photos/original/#{avatar_digest}.png"
15
- end
16
- end
17
12
 
18
13
  def find(id)
19
14
  response = MLS.get("/brokerages/#{id}")
@@ -30,4 +25,7 @@ class MLS::Brokerage < MLS::Resource
30
25
  end
31
26
 
32
27
  class MLS::Brokerage::Parser < MLS::Parser
28
+ def avatar=(avatar)
29
+ @object.avatar = MLS::Photo::Parser.build(avatar)
30
+ end
33
31
  end
@@ -20,7 +20,7 @@ class MLS::Floorplan < MLS::Resource
20
20
  attrs[:file].rewind
21
21
  url = MLS.url.dup
22
22
  url.user = nil
23
- url.path = "/api/floorplans"
23
+ url.path = "/floorplans"
24
24
 
25
25
  if attrs[:subject]
26
26
  attrs[:subject_id] = attrs[:subject].id
@@ -20,7 +20,7 @@ class MLS::Flyer < MLS::Resource
20
20
  attrs[:file].rewind
21
21
  url = MLS.url.dup
22
22
  url.user = nil
23
- url.path = "/api/flyers"
23
+ url.path = "/flyers"
24
24
 
25
25
  if attrs[:subject]
26
26
  attrs[:subject_id] = attrs[:subject].id
@@ -26,7 +26,7 @@ class MLS::Photo < MLS::Resource
26
26
  attrs[:file].rewind
27
27
  url = MLS.url.dup
28
28
  url.user = nil
29
- url.path = "/api/photos"
29
+ url.path = "/photos"
30
30
  response = RestClient.post(url.to_s, {:photo => attrs}, MLS.headers)
31
31
  attrs[:file].close unless attrs[:file].closed?
32
32
 
data/lib/mls.rb CHANGED
@@ -6,6 +6,7 @@ require 'singleton'
6
6
  require 'yajl'
7
7
  require 'bigdecimal'
8
8
  require 'bigdecimal/util'
9
+ require 'active_support'
9
10
  require 'active_support/core_ext'
10
11
  require 'date'
11
12
  require 'time'
@@ -25,7 +26,7 @@ class MLS
25
26
 
26
27
  attr_reader :url, :user_agent
27
28
  attr_writer :asset_host, :image_host, :agent_profile
28
- attr_accessor :api_key, :auth_cookie, :logger
29
+ attr_accessor :api_key, :cookie_jar, :logger, :branch, :server, :forwarded_for
29
30
 
30
31
  # Sets the API Token and Host of the MLS Server
31
32
  #
@@ -77,17 +78,21 @@ class MLS
77
78
  end
78
79
 
79
80
  def headers # TODO: testme
80
- {
81
+ headers = {
81
82
  'Content-Type' => 'application/json',
82
83
  'User-Agent' => @user_agent,
83
84
  'X-42Floors-API-Version' => API_VERSION,
84
85
  'X-42Floors-API-Key' => api_key
85
86
  }
87
+ headers['X-42Floors-Branch'] = branch if branch
88
+ headers['X-42Floors-Server'] = server if server
89
+ headers['X-Forwarded-For'] = forwarded_for if forwarded_for
90
+ headers
86
91
  end
87
92
 
88
93
  def prepare_request(req) # TODO: testme
89
94
  headers.each { |k, v| req[k] = v }
90
- req['Cookie'] = auth_cookie if auth_cookie
95
+ req['Cookie'] = cookie_jar[:api_session] if cookie_jar[:api_session]
91
96
  end
92
97
 
93
98
  # Gets to +url+ on the MLS Server. Automatically includes any headers returned
@@ -95,8 +100,7 @@ class MLS
95
100
  #
96
101
  # Paramaters::
97
102
  #
98
- # * +url+ - The +url+ on the server to Get to. This url will automatically
99
- # be prefixed with <tt>"/api"</tt>. To get to <tt>"/api/accounts"</tt>
103
+ # * +url+ - The +url+ on the server to Get to. To get to <tt>"/accounts"</tt>
100
104
  # pass <tt>"/accounts"</tt> as +url+
101
105
  # * +params+ - A Hash or Ruby Object that responds to #to_param. The result
102
106
  # of this method is appended on the URL as query params
@@ -135,7 +139,7 @@ class MLS
135
139
  def get(url, params={}, *valid_response_codes, &block)
136
140
  params ||= {}
137
141
 
138
- req = Net::HTTP::Get.new("/api#{url}?" + params.to_param)
142
+ req = Net::HTTP::Get.new(url + '?' + params.to_param)
139
143
  prepare_request(req)
140
144
 
141
145
  response = connection.request(req)
@@ -154,8 +158,7 @@ class MLS
154
158
  #
155
159
  # Paramaters::
156
160
  #
157
- # * +url+ - The +url+ on the server to Put to. This url will automatically
158
- # be prefixed with <tt>"/api"</tt>. To put to <tt>"/api/accounts"</tt>
161
+ # * +url+ - The +url+ on the server to Put to. To put to <tt>"/accounts"</tt>
159
162
  # pass <tt>"/accounts"</tt> as +url+
160
163
  # * +body+ - A Ruby object which is converted into JSON and added in the request
161
164
  # Body.
@@ -194,7 +197,7 @@ class MLS
194
197
  def put(url, body={}, *valid_response_codes, &block)
195
198
  body ||= {}
196
199
 
197
- req = Net::HTTP::Put.new("/api#{url}")
200
+ req = Net::HTTP::Put.new(url)
198
201
  req.body = Yajl::Encoder.encode(body)
199
202
  prepare_request(req)
200
203
 
@@ -213,8 +216,7 @@ class MLS
213
216
  #
214
217
  # Paramaters::
215
218
  #
216
- # * +url+ - The +url+ on the server to Post to. This url will automatically
217
- # be prefixed with <tt>"/api"</tt>. To post to <tt>"/api/accounts"</tt>
219
+ # * +url+ - The +url+ on the server to Post to. To post to <tt>"/accounts"</tt>
218
220
  # pass <tt>"/accounts"</tt> as +url+
219
221
  # * +body+ - A Ruby object which is converted into JSON and added in the request
220
222
  # Body.
@@ -253,7 +255,7 @@ class MLS
253
255
  def post(url, body={}, *valid_response_codes, &block)
254
256
  body ||= {}
255
257
 
256
- req = Net::HTTP::Post.new("/api#{url}")
258
+ req = Net::HTTP::Post.new(url)
257
259
  req.body = Yajl::Encoder.encode(body)
258
260
  prepare_request(req)
259
261
 
@@ -272,8 +274,7 @@ class MLS
272
274
  #
273
275
  # Paramaters::
274
276
  #
275
- # * +url+ - The +url+ on the server to Post to. This url will automatically
276
- # be prefixed with <tt>"/api"</tt>. To delete to <tt>"/api/accounts"</tt>
277
+ # * +url+ - The +url+ on the server to Post to. To delete to <tt>"/accounts"</tt>
277
278
  # pass <tt>"/accounts"</tt> as +url+
278
279
  # * +body+ - A Ruby object which is converted into JSON and added in the request
279
280
  # Body.
@@ -312,7 +313,7 @@ class MLS
312
313
  def delete(url, body={}, *valid_response_codes, &block)
313
314
  body ||= {}
314
315
 
315
- req = Net::HTTP::Delete.new("/api#{url}")
316
+ req = Net::HTTP::Delete.new(url)
316
317
  req.body = Yajl::Encoder.encode(body)
317
318
  prepare_request(req)
318
319
 
@@ -384,6 +385,9 @@ class MLS
384
385
  end
385
386
  end
386
387
 
388
+ cookie_jar[:api_session] = response['Set-Cookie'] if response['Set-Cookie']
389
+ cookie_jar[:api_session_id] = response['X-42Floors-API-Session-Id'] if response['X-42Floors-API-Session-Id']
390
+
387
391
  response
388
392
  end
389
393
 
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 = '0.13.0'
6
+ s.version = '0.14.0'
7
7
  s.authors = ["James R. Bracy", "Jon Bracy"]
8
8
  s.email = ["james@42floors.com"]
9
9
  s.homepage = "http://mls.42floors.com"
data/test/test_helper.rb CHANGED
@@ -13,7 +13,7 @@ require 'fakeweb'
13
13
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__),'../'))
14
14
  require 'lib/mls/factories_helper'
15
15
 
16
- MLS_HOST = ENV['MLS_URL'] || 'http://localhost:4000/api'
16
+ MLS_HOST = ENV['MLS_URL'] || 'http://localhost:4000'
17
17
 
18
18
  MLS.url = ENV["MLS_TEST_URL"] || 'http://LBJXFC%2BhDiRRCYj6kXtXREfgNXRCJa8ALvPn%2FIeyjSe2QsQyHZ%2F%2BWwN2VZM2cw%3D%3D@localhost:5000'#
19
19
  # MLS.auth_cookie = MLS::Account.authenticate('jonbracy@gmail.com', 'test').auth_cookie
@@ -40,7 +40,7 @@ class TestMLS < ::Test::Unit::TestCase
40
40
  FakeWeb.register_uri(:get, "#{MLS_HOST}/test?key=value", :body => 'get')
41
41
  response = MLS.get('/test', :key => 'value')
42
42
 
43
- assert_equal '/api/test?key=value', FakeWeb.last_request.path
43
+ assert_equal '/test?key=value', FakeWeb.last_request.path
44
44
  end
45
45
 
46
46
  test '#get to 404 raises MLS::Exception::NotFound' do
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: 0.13.0
4
+ version: 0.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - James R. Bracy
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-02-17 00:00:00.000000000 Z
12
+ date: 2014-08-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
@@ -275,7 +275,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
275
275
  version: '0'
276
276
  requirements: []
277
277
  rubyforge_project: mls
278
- rubygems_version: 2.2.0
278
+ rubygems_version: 2.2.2
279
279
  signing_key:
280
280
  specification_version: 4
281
281
  summary: 42Floors MLS Client