mits 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -1
- data/README.md +4 -4
- data/lib/mits.rb +4 -1
- data/lib/mits/base_mapper.rb +20 -0
- data/lib/mits/document.rb +16 -5
- data/lib/mits/saxerator_ext.rb +8 -1
- data/lib/mits/v3.0/address.rb +20 -0
- data/lib/mits/v3.0/amenity.rb +12 -0
- data/lib/mits/v3.0/company.rb +13 -0
- data/lib/mits/v3.0/deposit.rb +13 -0
- data/lib/mits/v3.0/fees.rb +17 -0
- data/lib/mits/v3.0/file.rb +18 -0
- data/lib/mits/v3.0/floorplan.rb +13 -0
- data/lib/mits/v3.0/mapper.rb +50 -0
- data/lib/mits/v3.0/mapper/address_mapper.rb +35 -0
- data/lib/mits/v3.0/mapper/amenities_mapper.rb +19 -0
- data/lib/mits/v3.0/mapper/company_mapper.rb +15 -0
- data/lib/mits/v3.0/mapper/deposit_mapper.rb +32 -0
- data/lib/mits/v3.0/mapper/fees_mapper.rb +19 -0
- data/lib/mits/v3.0/mapper/files_mapper.rb +25 -0
- data/lib/mits/v3.0/mapper/floorplan_mapper.rb +27 -0
- data/lib/mits/v3.0/mapper/pet_policy_mapper.rb +37 -0
- data/lib/mits/v3.0/mapper/policy_mapper.rb +12 -0
- data/lib/mits/v3.0/mapper/property_mapper.rb +57 -0
- data/lib/mits/v3.0/pet.rb +13 -0
- data/lib/mits/v3.0/pet_policy.rb +17 -0
- data/lib/mits/v3.0/policy.rb +10 -0
- data/lib/mits/v3.0/property.rb +23 -0
- data/lib/mits/v4.1/address.rb +21 -0
- data/lib/mits/v4.1/amenity.rb +21 -0
- data/lib/mits/v4.1/company.rb +8 -0
- data/lib/mits/v4.1/deposit.rb +8 -0
- data/lib/mits/v4.1/fees.rb +8 -0
- data/lib/mits/v4.1/file.rb +8 -0
- data/lib/mits/v4.1/mapper.rb +45 -0
- data/lib/mits/v4.1/mapper/address_mapper.rb +29 -0
- data/lib/mits/v4.1/mapper/company_mapper.rb +9 -0
- data/lib/mits/v4.1/mapper/property_mapper.rb +48 -0
- data/lib/mits/v4.1/mapper/units_mapper.rb +26 -0
- data/lib/mits/v4.1/pet.rb +8 -0
- data/lib/mits/v4.1/pet_policy.rb +8 -0
- data/lib/mits/v4.1/policy.rb +8 -0
- data/lib/mits/v4.1/property.rb +22 -0
- data/lib/mits/v4.1/unit.rb +13 -0
- data/lib/mits/version.rb +1 -1
- data/mits.gemspec +5 -4
- data/spec/fixtures/MITS_3.0_Property.yml +583 -0
- data/spec/fixtures/MITS_3.0_Sample.xml +589 -0
- data/spec/fixtures/{property.yml → MITS_4.1_Property.yml} +0 -0
- data/spec/fixtures/{mits.xml → MITS_4.1_Sample.xml} +0 -0
- data/spec/lib/mits/document_spec.rb +3 -3
- data/spec/lib/mits/v3.0/address_spec.rb +21 -0
- data/spec/lib/mits/v3.0/amenity_spec.rb +13 -0
- data/spec/lib/mits/{entities → v3.0}/company_spec.rb +0 -0
- data/spec/lib/mits/v3.0/deposit_spec.rb +14 -0
- data/spec/lib/mits/v3.0/fees_spec.rb +18 -0
- data/spec/lib/mits/v3.0/file_spec.rb +20 -0
- data/spec/lib/mits/v3.0/floorplan_spec.rb +14 -0
- data/spec/lib/mits/v3.0/mapper_spec.rb +198 -0
- data/spec/lib/mits/v3.0/pet_policy_spec.rb +17 -0
- data/spec/lib/mits/v3.0/pet_spec.rb +15 -0
- data/spec/lib/mits/v3.0/property_spec.rb +23 -0
- data/spec/lib/mits/v4.1/address_spec.rb +22 -0
- data/spec/lib/mits/v4.1/amenity_spec.rb +11 -0
- data/spec/lib/mits/v4.1/company_spec.rb +0 -0
- data/spec/lib/mits/v4.1/deposit_spec.rb +14 -0
- data/spec/lib/mits/v4.1/fees_spec.rb +18 -0
- data/spec/lib/mits/v4.1/file_spec.rb +20 -0
- data/spec/lib/mits/v4.1/mapper_spec.rb +194 -0
- data/spec/lib/mits/v4.1/pet_policy_spec.rb +16 -0
- data/spec/lib/mits/v4.1/pet_spec.rb +15 -0
- data/spec/lib/mits/v4.1/property_spec.rb +23 -0
- data/spec/lib/mits/v4.1/unit_spec.rb +14 -0
- metadata +112 -53
- data/lib/mits/entities/address.rb +0 -16
- data/lib/mits/entities/amenity.rb +0 -8
- data/lib/mits/entities/company.rb +0 -11
- data/lib/mits/entities/deposit.rb +0 -11
- data/lib/mits/entities/fees.rb +0 -15
- data/lib/mits/entities/file.rb +0 -16
- data/lib/mits/entities/pet.rb +0 -11
- data/lib/mits/entities/pet_policy.rb +0 -15
- data/lib/mits/entities/property.rb +0 -20
- data/lib/mits/entities/unit.rb +0 -11
- data/lib/mits/mapper.rb +0 -48
- data/lib/mits/mappers/address_mapper.rb +0 -29
- data/lib/mits/mappers/amenities_mapper.rb +0 -14
- data/lib/mits/mappers/company_mapper.rb +0 -11
- data/lib/mits/mappers/deposit_mapper.rb +0 -24
- data/lib/mits/mappers/fees_mapper.rb +0 -15
- data/lib/mits/mappers/files_mapper.rb +0 -19
- data/lib/mits/mappers/pet_policy_mapper.rb +0 -28
- data/lib/mits/mappers/property_mapper.rb +0 -41
- data/lib/mits/mappers/units_mapper.rb +0 -22
- data/spec/lib/mits/entities/address_spec.rb +0 -16
- data/spec/lib/mits/entities/amenity_spec.rb +0 -8
- data/spec/lib/mits/entities/deposit_spec.rb +0 -11
- data/spec/lib/mits/entities/fees_spec.rb +0 -15
- data/spec/lib/mits/entities/file_spec.rb +0 -17
- data/spec/lib/mits/entities/pet_policy_spec.rb +0 -14
- data/spec/lib/mits/entities/pet_spec.rb +0 -12
- data/spec/lib/mits/entities/property_spec.rb +0 -20
- data/spec/lib/mits/entities/unit_spec.rb +0 -11
- data/spec/lib/mits/mapper_spec.rb +0 -180
@@ -0,0 +1,19 @@
|
|
1
|
+
module MITS
|
2
|
+
module V3_0
|
3
|
+
module Mapper
|
4
|
+
module FeesMapper
|
5
|
+
def fees(tag, entity = Fees)
|
6
|
+
entity.new(admin_fee: try(tag[:AdminFee], :to_f),
|
7
|
+
application_fee: try(tag[:ApplicationFee], :to_f),
|
8
|
+
broker_fee: try(tag[:BrokerFee], :to_f),
|
9
|
+
late_fee_per_day: try(tag[:LateFeePerDay], :to_f),
|
10
|
+
late_min_fee: try(tag[:LateMinFee], :to_f),
|
11
|
+
late_percent: try(tag[:LatePercent], :to_f),
|
12
|
+
late_type: tag[:LateType],
|
13
|
+
non_refundable_hold_fee: try(tag[:NonRefundableHoldFee], :to_f),
|
14
|
+
prorate_type: tag[:ProrateType])
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module MITS
|
2
|
+
module V3_0
|
3
|
+
module Mapper
|
4
|
+
module FilesMapper
|
5
|
+
def files(tags, entity = File)
|
6
|
+
tags = [tags] unless tags.is_a? Array
|
7
|
+
tags.map { |tag| file(tag, entity) }
|
8
|
+
end
|
9
|
+
|
10
|
+
def file(tag, entity = File)
|
11
|
+
entity.new(active: bool(tag[:Active]),
|
12
|
+
caption: tag[:Caption],
|
13
|
+
description: tag[:Description],
|
14
|
+
format: tag[:Format],
|
15
|
+
height: try(tag[:Height], :to_i),
|
16
|
+
id: tag[:FileID],
|
17
|
+
name: tag[:Name],
|
18
|
+
rank: tag[:Rank],
|
19
|
+
source: tag[:Src],
|
20
|
+
width: tag[:Width])
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module MITS
|
2
|
+
module V3_0
|
3
|
+
module Mapper
|
4
|
+
module FloorplanMapper
|
5
|
+
def floorplans(tags)
|
6
|
+
tags = [tags] unless tags.is_a? Array
|
7
|
+
tags.map { |tag| floorplan(tag) }
|
8
|
+
end
|
9
|
+
|
10
|
+
def floorplan(tag)
|
11
|
+
Floorplan.new(bathrooms: try(rooms(tag[:Room], 'Bathroom'), :to_f),
|
12
|
+
bedrooms: try(rooms(tag[:Room], 'Bedroom'), :to_i),
|
13
|
+
name: tag[:Name],
|
14
|
+
rent: range_tag(tag[:MarketRent]),
|
15
|
+
sqft: range_tag(tag[:SquareFeet]))
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def rooms(tag, type)
|
21
|
+
room = tag.find { |t| t[:RoomType] == type }
|
22
|
+
room[:Count] if room
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module MITS
|
2
|
+
module V3_0
|
3
|
+
module Mapper
|
4
|
+
module PetPolicyMapper
|
5
|
+
def pet_policies(tags, entity = PetPolicy, secondary_entity = Pet)
|
6
|
+
tags = [tags] unless tags.is_a? Array
|
7
|
+
tags.map { |tag| pet_policy(tag, entity, secondary_entity) }
|
8
|
+
end
|
9
|
+
|
10
|
+
def pet_policy(tag, entity = PetPolicy, secondary_entity = Pet)
|
11
|
+
if bool(tag[:Allowed])
|
12
|
+
entity.new(allowed: true,
|
13
|
+
care: bool(tag[:PetCare]),
|
14
|
+
deposit: try(tag[:Deposit], :to_f),
|
15
|
+
fee: try(tag[:Fee], :to_f),
|
16
|
+
pets: pets(tag[:Pets], secondary_entity),
|
17
|
+
rent: try(tag[:Rent], :to_f),
|
18
|
+
restrictions: tag[:Restrictions])
|
19
|
+
else
|
20
|
+
entity.new(allowed: false)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def pets(tags, entity = Pet)
|
25
|
+
tags = [tags] unless tags.is_a? Array
|
26
|
+
tags.map do |tag|
|
27
|
+
entity.new(count: tag[:Count].to_i,
|
28
|
+
description: tag[:Description],
|
29
|
+
size: tag[:Size],
|
30
|
+
weight: tag[:Weight],
|
31
|
+
type: tag[:PetType])
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module MITS
|
2
|
+
module V3_0
|
3
|
+
module Mapper
|
4
|
+
module PolicyMapper
|
5
|
+
def policy(tag, policy = Policy, pet_policy = PetPolicy, pet = Pet)
|
6
|
+
pet_policies = pet_policies(tag[:Pet], pet_policy, pet)
|
7
|
+
policy.new(general: tag[:General], pet: pet_policies)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module MITS
|
2
|
+
module V3_0
|
3
|
+
module Mapper
|
4
|
+
module PropertyMapper
|
5
|
+
def property(tag)
|
6
|
+
basics = property_basics(tag)
|
7
|
+
details = property_details(tag)
|
8
|
+
Property.new(basics.merge(details))
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def property_basics(tag)
|
14
|
+
propId = tag[:PropertyID]
|
15
|
+
{
|
16
|
+
company_id: company_id(tag[:Identification], propId[:Identification]),
|
17
|
+
description: tag[:Information][:LongDescription],
|
18
|
+
id: primary_id(propId[:Identification]),
|
19
|
+
name: propId[:MarketingName],
|
20
|
+
summary: tag[:Information][:ShortDescription],
|
21
|
+
type: tag[:ILS_Identification][:ILS_IdentificationType],
|
22
|
+
website: propId[:WebSite]
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
def property_details(tag)
|
27
|
+
details = {}
|
28
|
+
|
29
|
+
# Optional fields
|
30
|
+
details[:address] = address(tag[:PropertyID][:Address], tag[:ILS_Identification]) if tag[:PropertyID][:Address]
|
31
|
+
details[:amenities] = try(tag[:Amenity], :amenities)
|
32
|
+
details[:deposit] = try(tag[:Deposit], :deposits)
|
33
|
+
details[:fees] = try(tag[:Fee], :fees)
|
34
|
+
details[:files] = try(tag[:File], :files)
|
35
|
+
details[:policy] = try(tag[:Policy], :policy)
|
36
|
+
details[:floorplans] = try(tag[:Floorplan], :floorplans)
|
37
|
+
|
38
|
+
details
|
39
|
+
end
|
40
|
+
|
41
|
+
def primary_id(tags)
|
42
|
+
find_in_tags(tags, 'primaryid')
|
43
|
+
end
|
44
|
+
|
45
|
+
def company_id(*tags)
|
46
|
+
find_in_tags(tags.flatten, 'managementid')
|
47
|
+
end
|
48
|
+
|
49
|
+
def find_in_tags(tags, type)
|
50
|
+
tags = [tags] unless tags.is_a? Array
|
51
|
+
tag = tags.find { |t| t[:IDType].downcase == type.downcase }
|
52
|
+
tag[:IDValue] if tag
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module MITS
|
2
|
+
module V3_0
|
3
|
+
class PetPolicy
|
4
|
+
include SimpleObjects::Base
|
5
|
+
|
6
|
+
attribute :allowed
|
7
|
+
attribute :care
|
8
|
+
attribute :deposit
|
9
|
+
attribute :fee
|
10
|
+
attribute :pets
|
11
|
+
attribute :rent
|
12
|
+
attribute :restrictions
|
13
|
+
|
14
|
+
alias_method :allowed?, :allowed
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module MITS
|
2
|
+
module V3_0
|
3
|
+
class Property
|
4
|
+
include SimpleObjects::Base
|
5
|
+
|
6
|
+
attribute :address
|
7
|
+
attribute :amenities
|
8
|
+
attribute :company_id
|
9
|
+
attribute :deposit
|
10
|
+
attribute :description
|
11
|
+
attribute :fees
|
12
|
+
attribute :files
|
13
|
+
attribute :floorplans
|
14
|
+
attribute :id
|
15
|
+
attribute :name
|
16
|
+
attribute :policy
|
17
|
+
attribute :summary
|
18
|
+
attribute :type
|
19
|
+
attribute :units
|
20
|
+
attribute :website
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module MITS
|
2
|
+
module V4_1
|
3
|
+
class Address
|
4
|
+
include SimpleObjects::Base
|
5
|
+
|
6
|
+
attribute :address1
|
7
|
+
attribute :address2
|
8
|
+
attribute :city
|
9
|
+
attribute :country
|
10
|
+
attribute :county_name
|
11
|
+
attribute :description
|
12
|
+
attribute :latitude
|
13
|
+
attribute :longitude
|
14
|
+
attribute :postal_code
|
15
|
+
attribute :province
|
16
|
+
attribute :state
|
17
|
+
attribute :type
|
18
|
+
attribute :unparsed_address
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'mits/v3.0/amenity'
|
2
|
+
module SimpleObjects
|
3
|
+
module Attributes
|
4
|
+
module ClassMethods
|
5
|
+
def attributes
|
6
|
+
unless @attributes
|
7
|
+
@attributes = superclass.attributes if superclass.respond_to? :attributes
|
8
|
+
@attributes ||= {}
|
9
|
+
end
|
10
|
+
@attributes
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
module MITS
|
17
|
+
module V4_1
|
18
|
+
class Amenity < V3_0::Amenity
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require_relative 'address'
|
2
|
+
require_relative 'amenity'
|
3
|
+
require_relative 'company'
|
4
|
+
require_relative 'deposit'
|
5
|
+
require_relative 'fees'
|
6
|
+
require_relative 'file'
|
7
|
+
require_relative 'pet'
|
8
|
+
require_relative 'pet_policy'
|
9
|
+
require_relative 'policy'
|
10
|
+
require_relative 'property'
|
11
|
+
require_relative 'unit'
|
12
|
+
|
13
|
+
require_relative 'mapper/address_mapper'
|
14
|
+
require_relative 'mapper/property_mapper'
|
15
|
+
require_relative 'mapper/units_mapper'
|
16
|
+
|
17
|
+
require_relative '../v3.0/mapper/amenities_mapper'
|
18
|
+
require_relative '../v3.0/mapper/company_mapper'
|
19
|
+
require_relative '../v3.0/mapper/deposit_mapper'
|
20
|
+
require_relative '../v3.0/mapper/fees_mapper'
|
21
|
+
require_relative '../v3.0/mapper/files_mapper'
|
22
|
+
require_relative '../v3.0/mapper/pet_policy_mapper'
|
23
|
+
require_relative '../v3.0/mapper/policy_mapper'
|
24
|
+
|
25
|
+
|
26
|
+
module MITS
|
27
|
+
module V4_1
|
28
|
+
module Mapper
|
29
|
+
extend BaseMapper
|
30
|
+
|
31
|
+
extend V3_0::Mapper::AmenitiesMapper
|
32
|
+
extend V3_0::Mapper::CompanyMapper
|
33
|
+
extend V3_0::Mapper::DepositMapper
|
34
|
+
extend V3_0::Mapper::FeesMapper
|
35
|
+
extend V3_0::Mapper::FilesMapper
|
36
|
+
extend V3_0::Mapper::PetPolicyMapper
|
37
|
+
extend V3_0::Mapper::PolicyMapper
|
38
|
+
|
39
|
+
extend AddressMapper
|
40
|
+
extend PropertyMapper
|
41
|
+
extend UnitsMapper
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'mits/v3.0/mapper/address_mapper'
|
2
|
+
|
3
|
+
module MITS
|
4
|
+
module V4_1
|
5
|
+
module Mapper
|
6
|
+
module AddressMapper
|
7
|
+
include V3_0::Mapper::AddressMapper
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def address_attributes(tag)
|
12
|
+
{
|
13
|
+
address1: tag[:AddressLine1],
|
14
|
+
address2: tag[:AddressLine2],
|
15
|
+
city: tag[:City],
|
16
|
+
country: tag[:Country],
|
17
|
+
country_name: tag[:CountyName],
|
18
|
+
description: tag[:Description],
|
19
|
+
postal_code: tag[:PostalCode],
|
20
|
+
province: tag[:Province],
|
21
|
+
state: tag[:State],
|
22
|
+
type: tag[:AddressType],
|
23
|
+
unparsed_address: tag[:UnparsedAddress]
|
24
|
+
}
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module MITS
|
2
|
+
module V4_1
|
3
|
+
module Mapper
|
4
|
+
module PropertyMapper
|
5
|
+
def property(tag)
|
6
|
+
basics = property_basics(tag)
|
7
|
+
details = property_details(tag)
|
8
|
+
Property.new(basics.merge(details))
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def property_basics(tag)
|
14
|
+
propId = tag[:PropertyID]
|
15
|
+
{
|
16
|
+
company_id: company_id(propId[:Identification]),
|
17
|
+
description: tag[:Information][:LongDescription],
|
18
|
+
id: tag[:IDValue],
|
19
|
+
name: propId[:MarketingName],
|
20
|
+
summary: tag[:Information][:ShortDescription],
|
21
|
+
type: tag[:ILS_Identification][:ILS_IdentificationType],
|
22
|
+
website: propId[:WebSite]
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
def property_details(tag)
|
27
|
+
details = {}
|
28
|
+
|
29
|
+
# Optional fields
|
30
|
+
details[:address] = try(tag[:PropertyID][:Address], tag[:ILS_Identification], Address, :address)
|
31
|
+
details[:amenities] = try(tag[:ILS_Unit][:Amenity], Amenity, :amenities)
|
32
|
+
details[:deposit] = try(tag[:Deposit], Deposit, :deposit)
|
33
|
+
details[:fees] = try(tag[:Fee], Fees, :fees)
|
34
|
+
details[:files] = try(tag[:File], File, :files)
|
35
|
+
details[:policy] = try(tag[:Policy], Policy, PetPolicy, Pet, :policy)
|
36
|
+
details[:units] = try(tag[:ILS_Unit][:Units][:Unit], :units)
|
37
|
+
|
38
|
+
details
|
39
|
+
end
|
40
|
+
|
41
|
+
def company_id(tags)
|
42
|
+
tag = tags.find { |t| t[:IDType].downcase == 'company' }
|
43
|
+
tag[:IDValue] if tag
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|