propertysolutions 0.0.14

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,20 @@
1
+ Copyright 2013 YOURNAME
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,2 @@
1
+ <h1>Property Solutions</h1>
2
+ <p>A gem to help consume the API for propertysolutions.com.</p>
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'ProperySolutions'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
@@ -0,0 +1,27 @@
1
+
2
+ module PropertySolutions
3
+ class Address
4
+
5
+ attr_accessor :address, :city, :state, :zip, :country
6
+
7
+ def initialize(arr = nil)
8
+ if (arr.nil?)
9
+ @address = ""
10
+ @city = ""
11
+ @state = ""
12
+ @zip = ""
13
+ @country = ""
14
+ else
15
+ parse(arr)
16
+ end
17
+ end
18
+
19
+ def parse(arr)
20
+ @address = arr['Address'] || ""
21
+ @city = arr['City'] || ""
22
+ @state = arr['State'] || ""
23
+ @zip = arr['PostalCode'] || ""
24
+ @country = arr['Country'] || ""
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,41 @@
1
+
2
+ class PropertySolutions::ApiConsumer
3
+
4
+ @@field_order = 'id'
5
+ @@base = ''
6
+
7
+ def self.request(method, data = nil)
8
+
9
+ data = {} if data.nil?
10
+ data.delete_if { |k,v| v.nil? }
11
+
12
+ data = {
13
+ 'auth' => {
14
+ 'type' => "basic",
15
+ 'username' => PropertySolutions::username,
16
+ 'password' => PropertySolutions::password,
17
+ },
18
+ 'method' => {
19
+ 'name' => method, # required_service_name
20
+ 'params' => data # parameters required for the web service
21
+ }
22
+ }
23
+
24
+ resp = Typhoeus::Request.new(
25
+ "https://#{PropertySolutions::domain}.propertysolutions.com/api/#{@@base}",
26
+ method: :post,
27
+ headers: { 'Content-type' => 'application/json, charset: utf-8' },
28
+ body: data.to_json
29
+ ).run
30
+ resp = JSON.parse(resp.response_body)
31
+ if (resp['response'].nil? || !resp['response']['error'].nil? || resp['response']['result'].nil?)
32
+ return false
33
+ end
34
+ return resp = resp['response']['result']
35
+ end
36
+
37
+ def self.sort(arr)
38
+ return arr.sort { |x,y| x.send(@@field_order.to_sym) <=> y.send(@@field_order.to_sym) }
39
+ end
40
+
41
+ end
@@ -0,0 +1,20 @@
1
+
2
+ module PropertySolutions
3
+ class Phone
4
+
5
+ attr_accessor :number, :description
6
+
7
+ def initialize(arr = nil)
8
+ if (arr.nil?)
9
+ @number = ""
10
+ @description = ""
11
+ end
12
+ end
13
+
14
+ def parse(arr)
15
+ @number = arr["PhoneNumber"] || ""
16
+ @description = arr["PhoneDescription"] || ""
17
+ end
18
+
19
+ end
20
+ end
@@ -0,0 +1,75 @@
1
+
2
+ module PropertySolutions
3
+ class Properties < PropertySolutions::ApiConsumer
4
+
5
+ @@field_order = 'id'
6
+ @@base = 'properties'
7
+
8
+ # Find a property given a property ID
9
+ def self.find(property_id)
10
+ resp = self.request('getProperties', {
11
+ 'propertyIds' => [property_id]
12
+ })
13
+ return nil if !resp || resp['PhysicalProperty'].nil? || resp['PhysicalProperty']['Property'].nil?
14
+ prop = Property.new(resp['PhysicalProperty']['Property'][0])
15
+ return prop
16
+ end
17
+
18
+ # Reorder the properties that will be returned based on the given field
19
+ def self.reorder(field)
20
+ @@field_order = field
21
+ return self
22
+ end
23
+
24
+ # Return all the properties
25
+ def self.all
26
+ return self.properties
27
+ end
28
+
29
+ # Return all the properties
30
+ def self.properties(property_ids = nil)
31
+ resp = self.request('getProperties', {
32
+ 'propertyIds' => property_ids
33
+ })
34
+ return [] if !resp || resp['PhysicalProperty'].nil? || resp['PhysicalProperty']['Property'].nil?
35
+ props = resp['PhysicalProperty']['Property'].collect { |p| Property.new(p) }
36
+ props.sort! { |x,y|
37
+ x.send(@@field_order.to_sym) <=> y.send(@@field_order.to_sym)
38
+ }
39
+ return props
40
+ end
41
+
42
+ #def self.floor_plans(property_id, property_floor_plan_ids = nil)
43
+ # return self.request('getFloorPlans', {
44
+ # 'propertyId' => property_id,
45
+ # 'propertyFloorPlanIds' => property_floor_plan_ids
46
+ # })
47
+ #end
48
+ #
49
+ #def self.pet_types(property_ids)
50
+ # return self.request('getGetTypes', {
51
+ # 'propertyIds' => property_ids
52
+ # })
53
+ #end
54
+ #
55
+ #def self.rentable_items(property_id)
56
+ # return self.request('getRentableItems', {
57
+ # 'propertyId' => property_id
58
+ # })
59
+ #end
60
+ #
61
+ #def self.property_pick_lists(property_ids)
62
+ # return self.request('getPropertyPickLists', {
63
+ # 'propertyIds' => property_ids
64
+ # })
65
+ #end
66
+ #
67
+ #def self.property_preferences(property_id, keys = nil)
68
+ # return self.request('getPropertyPreferences', {
69
+ # 'property_id' => property_id,
70
+ # 'keys' => keys
71
+ # })
72
+ #end
73
+
74
+ end
75
+ end
@@ -0,0 +1,36 @@
1
+
2
+ module PropertySolutions
3
+ class Property
4
+
5
+ attr_accessor :id, :name, :type, :short_desc, :long_desc, :website, :address, :phone, :disabled
6
+
7
+ def initialize(arr)
8
+ if (arr.nil?)
9
+ @id = ""
10
+ @name = ""
11
+ @type = ""
12
+ @short_desc = ""
13
+ @long_desc = ""
14
+ @website = ""
15
+ @address = Address.new
16
+ @phone = Phone.new
17
+ @disabled = false
18
+ else
19
+ parse(arr)
20
+ end
21
+ end
22
+
23
+ def parse(arr)
24
+ @id = arr['PropertyID'] || ""
25
+ @name = arr['MarketingName'] || ""
26
+ @type = arr['Apartment'] || ""
27
+ @short_desc = arr['ShortDescription'] || ""
28
+ @long_desc = arr['LongDescription'] || ""
29
+ @website = arr['webSite'] || ""
30
+ @address = Address.new(arr['Address'])
31
+ @phone = Phone.new(arr['Phone'])
32
+ @disabled = arr['IsDisabled'] || ""
33
+ end
34
+
35
+ end
36
+ end
@@ -0,0 +1,100 @@
1
+
2
+ module PropertySolutions
3
+ class Unit
4
+
5
+ attr_accessor :id, :name, :type, :short_desc, :long_desc, :website, :address, :phone, :disabled
6
+
7
+ def initialize(arr)
8
+ if (arr.nil?)
9
+ @id = ""
10
+ @name = ""
11
+ @type = ""
12
+ @short_desc = ""
13
+ @long_desc = ""
14
+ @website = ""
15
+ @address = Address.new
16
+ @phone = Phone.new
17
+ @disabled = false
18
+ else
19
+ parse(arr)
20
+ end
21
+ end
22
+
23
+ def parse(arr)
24
+ @number = arr["@attributes"]["UnitNumber"] || ""
25
+ @unit_id = arr["@attributes"]["PropertyUnitId"] || ""
26
+ @unit_type_id = arr["@attributes"]["UnitTypeId"] || ""
27
+ @floor_plan_id = arr["@attributes"]["FloorplanId"] || ""
28
+ @floor_plan_name = arr["@attributes"]["FloorPlanName"] || ""
29
+ @availability = arr["@attributes"]["Availability"] || ""
30
+
31
+ # arr["Rent"]
32
+ #
33
+ # },
34
+ # "Rent"=>{
35
+ # "TermRent"=>[
36
+ # {"@attributes"=>{"LeaseTerm"=>6, "Rent"=>"0.00"}},
37
+ # {"@attributes"=>{"LeaseTerm"=>12, "Rent"=>"0.00"}},
38
+ # {"@attributes"=>{"LeaseTerm"=>18, "Rent"=>"0.00"}}
39
+ # ],
40
+ # "@attributes"=>{"MinRent"=>"0.00", "MaxRent"=>"0.00"}
41
+ # },
42
+ # "Deposit"=>{
43
+ # "@attributes"=>{"MinDeposit"=>"0.00", "MaxDeposit"=>"200.00"}
44
+ # }
45
+ # },
46
+
47
+ end
48
+ end
49
+ end
50
+
51
+ #{
52
+ # "ILS_Units"=> {
53
+ # "Unit"=> [
54
+ # {
55
+ # "@attributes"=>{
56
+ # "UnitNumber"=>"123-A",
57
+ # "FloorPlanName"=>"Two Bed/ Two Bath",
58
+ # "Availability"=>"Not Available",
59
+ # "FloorplanId"=>137634,
60
+ # "UnitTypeId"=>"153497",
61
+ # "PropertyUnitId"=>2422769
62
+ # },
63
+ # "Rent"=>{
64
+ # "TermRent"=>[
65
+ # {"@attributes"=>{"LeaseTerm"=>6, "Rent"=>"0.00"}},
66
+ # {"@attributes"=>{"LeaseTerm"=>12, "Rent"=>"0.00"}},
67
+ # {"@attributes"=>{"LeaseTerm"=>18, "Rent"=>"0.00"}}
68
+ # ],
69
+ # "@attributes"=>{"MinRent"=>"0.00", "MaxRent"=>"0.00"}
70
+ # },
71
+ # "Deposit"=>{
72
+ # "@attributes"=>{"MinDeposit"=>"0.00", "MaxDeposit"=>"200.00"}
73
+ # }
74
+ # },
75
+ # {
76
+ # "@attributes"=>{
77
+ # "UnitNumber"=>"123-B",
78
+ # "FloorPlanName"=>"Two Bed/ Two Bath",
79
+ # "Availability"=>"Not Available",
80
+ # "FloorplanId"=>137634,
81
+ # "UnitTypeId"=>"153497",
82
+ # "PropertyUnitId"=>2422769
83
+ # },
84
+ # "Rent"=>{
85
+ # "TermRent"=>[
86
+ # {"@attributes"=>{"LeaseTerm"=>6, "Rent"=>"0.00"}},
87
+ # {"@attributes"=>{"LeaseTerm"=>12, "Rent"=>"0.00"}},
88
+ # {"@attributes"=>{"LeaseTerm"=>18, "Rent"=>"0.00"}}
89
+ # ],
90
+ # "@attributes"=>{"MinRent"=>"0.00", "MaxRent"=>"0.00"}
91
+ # },
92
+ # "Deposit"=>{
93
+ # "@attributes"=>{
94
+ # "MinDeposit"=>"0.00", "MaxDeposit"=>"200.00"
95
+ # }
96
+ # }
97
+ # }
98
+ # ]
99
+ # }
100
+ #}
@@ -0,0 +1,47 @@
1
+
2
+ module PropertySolutions
3
+ class Units < PropertySolutions::ApiConsumer
4
+
5
+ @@field_order = 'id'
6
+ @@base = 'propertyunits'
7
+
8
+ ## Returns a list of unit types for a given property id
9
+ #def self.unit_types(property_id)
10
+ # return self.request('getUnitTypes', {
11
+ # 'propertyId' => property_id
12
+ # })
13
+ #end
14
+ #
15
+ ## Pulls a Specials/Concessions for the propertyId passed.
16
+ #def self.specials(property_id)
17
+ # return self.request('getSpecials', {
18
+ # 'propertyId' => property_id
19
+ # })
20
+ #end
21
+
22
+ # Pulls a list of Unit availability and their pricing
23
+ def self.where(options)
24
+ resp = self.request('getUnitsAvailabilityAndPricing', {
25
+ 'propertyId' => options['property_id'], # [Integer] required
26
+ 'floorplanId' => options['floor_plan_id'], # [Integer] optional
27
+ 'unitTypeId' => options['unit_type_id'], # [Integer] optional
28
+ 'propertyUnitId' => options['unit_id'], # [Integer] optional
29
+ 'availableUnitsOnly' => options['available'] # [Boolean] optional
30
+ })
31
+ return resp
32
+ #return [] if !resp || resp['PhysicalProperty'].nil? || resp['PhysicalProperty']['Property'].nil?
33
+ #units = resp['PhysicalProperty']['Property'].collect { |p| Property.new(p) }
34
+ #units = self.sort(units)
35
+ #return units
36
+ end
37
+
38
+ ## Pulls a list of Amenities
39
+ #def self.amenities(property_id, unit_number = nil)
40
+ # return self.request('getAmenities', {
41
+ # 'propertyId' => property_id,
42
+ # 'unitNumber' => unit_number
43
+ # })
44
+ #end
45
+
46
+ end
47
+ end
@@ -0,0 +1,69 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rails/all'
4
+ require 'propertysolutions'
5
+ require 'propertysolutions/engine'
6
+ require 'propertysolutions/version'
7
+ require 'propertysolutions/ps_helper'
8
+ require 'trollop'
9
+
10
+ #puts "Usage:"
11
+ #puts "Create a new propertysolutions app:"
12
+ #puts " propertysolutions new <app_path>"
13
+ #puts "Initialize an existing rails app as a new propertysolutions app:"
14
+ #puts " propertysolutions init [<app_path>]\n\n"
15
+ #exit
16
+
17
+ #global_opts = Trollop::options do
18
+ # banner <<-EOS
19
+ #--------------------------------------------------------------------------------
20
+ #Property Solutions
21
+ #A gem to consume the Property Solutions API
22
+ #--------------------------------------------------------------------------------
23
+ #Usage:
24
+ #propertysolutions new <path>
25
+ #propertysolutions init [--force] [<path>]
26
+ #--------------------------------------------------------------------------------
27
+ #EOS
28
+ # version "Caboose CMS Version #{Caboose::VERSION}\n\n"
29
+ # stop_on ['version', 'new', 'init']
30
+ #end
31
+ #
32
+ #cmd = ARGV.shift
33
+ #case cmd
34
+ #
35
+ #when 'new'
36
+ #
37
+ # path = ARGV.shift
38
+ # if (path.nil?)
39
+ # puts "Error: path for new app is required.\n\n"
40
+ # global_opts.help
41
+ # exit
42
+ # end
43
+ #
44
+ # puts "Creating the new rails app..."
45
+ # `rails new #{path} -d=mysql`
46
+ # helper = CabooseHelper.new(path, true)
47
+ # helper.init_all
48
+ #
49
+ #when 'init'
50
+ #
51
+ # opts = Trollop::options do
52
+ # opt :force, 'Force re-installation of all propertysolutions files.', :default => false
53
+ # end
54
+ #
55
+ # path = ARGV.shift
56
+ # path = Dir.pwd if path.nil?
57
+ # is_rails_app = File.exists?(File.join(path, 'config', 'environment.rb'))
58
+ # if (!is_rails_app)
59
+ # puts "Error: Not a rails app.\n\n"
60
+ # global_opts.help
61
+ # exit
62
+ # end
63
+ #
64
+ # helper = CabooseHelper.new(path, opts.force)
65
+ # helper.init_all
66
+ #
67
+ #else
68
+ #end
69
+ #
@@ -0,0 +1,3 @@
1
+
2
+ PropertySolutions::Engine.routes.draw do
3
+ end
@@ -0,0 +1,23 @@
1
+ require 'typhoeus'
2
+ require 'json'
3
+
4
+ module PropertySolutions
5
+
6
+ def PropertySolutions.log(message, title = nil)
7
+ if (Rails.logger.nil?)
8
+ puts "\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
9
+ puts title.to_s unless title.nil?
10
+ puts message
11
+ puts ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"
12
+ else
13
+ Rails.logger.debug("\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
14
+ Rails.logger.debug(title.to_s) unless title.nil?
15
+ Rails.logger.debug(message)
16
+ Rails.logger.debug(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n")
17
+ end
18
+ end
19
+
20
+ class Engine < ::Rails::Engine
21
+ isolate_namespace PropertySolutions
22
+ end
23
+ end
@@ -0,0 +1,3 @@
1
+ module PropertySolutions
2
+ VERSION = '0.0.14'
3
+ end
@@ -0,0 +1,14 @@
1
+ require "property_solutions/engine"
2
+
3
+ module PropertySolutions
4
+
5
+ mattr_accessor :domain
6
+ @@domain = ''
7
+
8
+ mattr_accessor :username
9
+ @@username = ''
10
+
11
+ mattr_accessor :password
12
+ @@password = ''
13
+
14
+ end
@@ -0,0 +1,27 @@
1
+ require "property_solutions/version"
2
+
3
+ namespace :property_solutions do
4
+
5
+ desc "Initializes the database for a caboose installation"
6
+ task :db => :environment do
7
+ drop_tables
8
+ create_tables
9
+ load_data
10
+ end
11
+ desc "Drops all caboose tables"
12
+ task :drop_tables => :environment do drop_tables end
13
+ desc "Creates all caboose tables"
14
+ task :create_tables => :environment do create_tables end
15
+ desc "Loads data into caboose tables"
16
+ task :load_data => :environment do load_data end
17
+
18
+ def drop_tables
19
+ end
20
+
21
+ def create_tables
22
+ end
23
+
24
+ def load_data
25
+ end
26
+
27
+ end
metadata ADDED
@@ -0,0 +1,142 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: propertysolutions
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.14
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - William Barry
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-06-13 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rails
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 3.2.13
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 3.2.13
30
+ - !ruby/object:Gem::Dependency
31
+ name: activesupport
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: trollop
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: typhoeus
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: json
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ description: A gem that interacts with the property management site propertysolutions.com
95
+ email:
96
+ - william@nine.is
97
+ executables:
98
+ - propertysolutions
99
+ extensions: []
100
+ extra_rdoc_files: []
101
+ files:
102
+ - app/models/property_solutions/address.rb
103
+ - app/models/property_solutions/api_consumer.rb
104
+ - app/models/property_solutions/phone.rb
105
+ - app/models/property_solutions/properties.rb
106
+ - app/models/property_solutions/property.rb
107
+ - app/models/property_solutions/unit.rb
108
+ - app/models/property_solutions/units.rb
109
+ - bin/propertysolutions
110
+ - config/routes.rb
111
+ - lib/property_solutions/engine.rb
112
+ - lib/property_solutions/version.rb
113
+ - lib/propertysolutions.rb
114
+ - lib/tasks/propertysolutions.rake
115
+ - MIT-LICENSE
116
+ - Rakefile
117
+ - README.md
118
+ homepage: http://github.com/williambarry007/propertysolutions
119
+ licenses: []
120
+ post_install_message:
121
+ rdoc_options: []
122
+ require_paths:
123
+ - lib
124
+ required_ruby_version: !ruby/object:Gem::Requirement
125
+ none: false
126
+ requirements:
127
+ - - ! '>='
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ required_rubygems_version: !ruby/object:Gem::Requirement
131
+ none: false
132
+ requirements:
133
+ - - ! '>='
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ requirements: []
137
+ rubyforge_project:
138
+ rubygems_version: 1.8.25
139
+ signing_key:
140
+ specification_version: 3
141
+ summary: A gem to help consume the API for propertysolutions.com
142
+ test_files: []