mits 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/README.md +4 -4
  4. data/lib/mits.rb +4 -1
  5. data/lib/mits/base_mapper.rb +20 -0
  6. data/lib/mits/document.rb +16 -5
  7. data/lib/mits/saxerator_ext.rb +8 -1
  8. data/lib/mits/v3.0/address.rb +20 -0
  9. data/lib/mits/v3.0/amenity.rb +12 -0
  10. data/lib/mits/v3.0/company.rb +13 -0
  11. data/lib/mits/v3.0/deposit.rb +13 -0
  12. data/lib/mits/v3.0/fees.rb +17 -0
  13. data/lib/mits/v3.0/file.rb +18 -0
  14. data/lib/mits/v3.0/floorplan.rb +13 -0
  15. data/lib/mits/v3.0/mapper.rb +50 -0
  16. data/lib/mits/v3.0/mapper/address_mapper.rb +35 -0
  17. data/lib/mits/v3.0/mapper/amenities_mapper.rb +19 -0
  18. data/lib/mits/v3.0/mapper/company_mapper.rb +15 -0
  19. data/lib/mits/v3.0/mapper/deposit_mapper.rb +32 -0
  20. data/lib/mits/v3.0/mapper/fees_mapper.rb +19 -0
  21. data/lib/mits/v3.0/mapper/files_mapper.rb +25 -0
  22. data/lib/mits/v3.0/mapper/floorplan_mapper.rb +27 -0
  23. data/lib/mits/v3.0/mapper/pet_policy_mapper.rb +37 -0
  24. data/lib/mits/v3.0/mapper/policy_mapper.rb +12 -0
  25. data/lib/mits/v3.0/mapper/property_mapper.rb +57 -0
  26. data/lib/mits/v3.0/pet.rb +13 -0
  27. data/lib/mits/v3.0/pet_policy.rb +17 -0
  28. data/lib/mits/v3.0/policy.rb +10 -0
  29. data/lib/mits/v3.0/property.rb +23 -0
  30. data/lib/mits/v4.1/address.rb +21 -0
  31. data/lib/mits/v4.1/amenity.rb +21 -0
  32. data/lib/mits/v4.1/company.rb +8 -0
  33. data/lib/mits/v4.1/deposit.rb +8 -0
  34. data/lib/mits/v4.1/fees.rb +8 -0
  35. data/lib/mits/v4.1/file.rb +8 -0
  36. data/lib/mits/v4.1/mapper.rb +45 -0
  37. data/lib/mits/v4.1/mapper/address_mapper.rb +29 -0
  38. data/lib/mits/v4.1/mapper/company_mapper.rb +9 -0
  39. data/lib/mits/v4.1/mapper/property_mapper.rb +48 -0
  40. data/lib/mits/v4.1/mapper/units_mapper.rb +26 -0
  41. data/lib/mits/v4.1/pet.rb +8 -0
  42. data/lib/mits/v4.1/pet_policy.rb +8 -0
  43. data/lib/mits/v4.1/policy.rb +8 -0
  44. data/lib/mits/v4.1/property.rb +22 -0
  45. data/lib/mits/v4.1/unit.rb +13 -0
  46. data/lib/mits/version.rb +1 -1
  47. data/mits.gemspec +5 -4
  48. data/spec/fixtures/MITS_3.0_Property.yml +583 -0
  49. data/spec/fixtures/MITS_3.0_Sample.xml +589 -0
  50. data/spec/fixtures/{property.yml → MITS_4.1_Property.yml} +0 -0
  51. data/spec/fixtures/{mits.xml → MITS_4.1_Sample.xml} +0 -0
  52. data/spec/lib/mits/document_spec.rb +3 -3
  53. data/spec/lib/mits/v3.0/address_spec.rb +21 -0
  54. data/spec/lib/mits/v3.0/amenity_spec.rb +13 -0
  55. data/spec/lib/mits/{entities → v3.0}/company_spec.rb +0 -0
  56. data/spec/lib/mits/v3.0/deposit_spec.rb +14 -0
  57. data/spec/lib/mits/v3.0/fees_spec.rb +18 -0
  58. data/spec/lib/mits/v3.0/file_spec.rb +20 -0
  59. data/spec/lib/mits/v3.0/floorplan_spec.rb +14 -0
  60. data/spec/lib/mits/v3.0/mapper_spec.rb +198 -0
  61. data/spec/lib/mits/v3.0/pet_policy_spec.rb +17 -0
  62. data/spec/lib/mits/v3.0/pet_spec.rb +15 -0
  63. data/spec/lib/mits/v3.0/property_spec.rb +23 -0
  64. data/spec/lib/mits/v4.1/address_spec.rb +22 -0
  65. data/spec/lib/mits/v4.1/amenity_spec.rb +11 -0
  66. data/spec/lib/mits/v4.1/company_spec.rb +0 -0
  67. data/spec/lib/mits/v4.1/deposit_spec.rb +14 -0
  68. data/spec/lib/mits/v4.1/fees_spec.rb +18 -0
  69. data/spec/lib/mits/v4.1/file_spec.rb +20 -0
  70. data/spec/lib/mits/v4.1/mapper_spec.rb +194 -0
  71. data/spec/lib/mits/v4.1/pet_policy_spec.rb +16 -0
  72. data/spec/lib/mits/v4.1/pet_spec.rb +15 -0
  73. data/spec/lib/mits/v4.1/property_spec.rb +23 -0
  74. data/spec/lib/mits/v4.1/unit_spec.rb +14 -0
  75. metadata +112 -53
  76. data/lib/mits/entities/address.rb +0 -16
  77. data/lib/mits/entities/amenity.rb +0 -8
  78. data/lib/mits/entities/company.rb +0 -11
  79. data/lib/mits/entities/deposit.rb +0 -11
  80. data/lib/mits/entities/fees.rb +0 -15
  81. data/lib/mits/entities/file.rb +0 -16
  82. data/lib/mits/entities/pet.rb +0 -11
  83. data/lib/mits/entities/pet_policy.rb +0 -15
  84. data/lib/mits/entities/property.rb +0 -20
  85. data/lib/mits/entities/unit.rb +0 -11
  86. data/lib/mits/mapper.rb +0 -48
  87. data/lib/mits/mappers/address_mapper.rb +0 -29
  88. data/lib/mits/mappers/amenities_mapper.rb +0 -14
  89. data/lib/mits/mappers/company_mapper.rb +0 -11
  90. data/lib/mits/mappers/deposit_mapper.rb +0 -24
  91. data/lib/mits/mappers/fees_mapper.rb +0 -15
  92. data/lib/mits/mappers/files_mapper.rb +0 -19
  93. data/lib/mits/mappers/pet_policy_mapper.rb +0 -28
  94. data/lib/mits/mappers/property_mapper.rb +0 -41
  95. data/lib/mits/mappers/units_mapper.rb +0 -22
  96. data/spec/lib/mits/entities/address_spec.rb +0 -16
  97. data/spec/lib/mits/entities/amenity_spec.rb +0 -8
  98. data/spec/lib/mits/entities/deposit_spec.rb +0 -11
  99. data/spec/lib/mits/entities/fees_spec.rb +0 -15
  100. data/spec/lib/mits/entities/file_spec.rb +0 -17
  101. data/spec/lib/mits/entities/pet_policy_spec.rb +0 -14
  102. data/spec/lib/mits/entities/pet_spec.rb +0 -12
  103. data/spec/lib/mits/entities/property_spec.rb +0 -20
  104. data/spec/lib/mits/entities/unit_spec.rb +0 -11
  105. 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,13 @@
1
+ module MITS
2
+ module V3_0
3
+ class Pet
4
+ include SimpleObjects::Base
5
+
6
+ attribute :count
7
+ attribute :description
8
+ attribute :size
9
+ attribute :type
10
+ attribute :weight
11
+ end
12
+ end
13
+ 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,10 @@
1
+ module MITS
2
+ module V3_0
3
+ class Policy
4
+ include SimpleObjects::Base
5
+
6
+ attribute :general
7
+ attribute :pet
8
+ end
9
+ end
10
+ 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,8 @@
1
+ require 'mits/v3.0/company'
2
+
3
+ module MITS
4
+ module V4_1
5
+ class Company < V3_0::Company
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require 'mits/v3.0/deposit'
2
+
3
+ module MITS
4
+ module V4_1
5
+ class Deposit < V3_0::Deposit
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require 'mits/v3.0/fees'
2
+
3
+ module MITS
4
+ module V4_1
5
+ class Fees < V3_0::Fees
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ require 'mits/v3.0/file'
2
+
3
+ module MITS
4
+ module V4_1
5
+ class File < V3_0::File
6
+ end
7
+ end
8
+ 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,9 @@
1
+ module MITS
2
+ module V4_1
3
+ module Mapper
4
+ module CompanyMapper
5
+ extend V3_0::CompanyMapper
6
+ end
7
+ end
8
+ end
9
+ 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