g5_foundation_client 0.0.7 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3e4f389ba2da55a81baec211ca1ce4058921859b
4
- data.tar.gz: f12bfb5d736ecdb08945f9f31791542e46f9e5a8
3
+ metadata.gz: ee5b38c956c0df7d76098a167757cfb0ad5b156a
4
+ data.tar.gz: 1b13637bfaba09aa70df1733c89d8dc662333144
5
5
  SHA512:
6
- metadata.gz: e7ad00c0ea3df76cb049f3d1ffb87640678b17c0045c5c62faefe438f79f72a43f286e2dd798ef678fada7a35cba047df1fed916169cdeb9da116fcaded2a71e
7
- data.tar.gz: 5e52068d6b75f58854f3aa6178a52fd7f8140a7b7eef8006d8a908ef95a02d7d5641b405f53e3fddea6cea411539f2f32cb77ec671cfb6234a5ee732bb28203a
6
+ metadata.gz: fda59208298cc93d577b5014ab871f60cefef040e240c026a7bba3cc2360eacc983db8be30361429fa4a1b6160e3b919e7a053fe7fd15cda8efcf375971b277f
7
+ data.tar.gz: 41a77f8a3730a2835eb491e67527160cb73e41d1db1a7eab5a9604baa127a5146f42aa17e1fe8ccdf5fae40135b9e3659ca8ca5bfc8e9a73a992ccbc9b10f2c0
@@ -18,9 +18,8 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency "virtus"
21
+ spec.add_dependency "activesupport"
22
22
  spec.add_dependency "httparty"
23
- spec.add_dependency "microformats2"
24
23
  spec.add_dependency "g5_authentication_client", ">= 0.2"
25
24
 
26
25
  spec.add_development_dependency "bundler", "~> 1.5"
@@ -1,8 +1,7 @@
1
- require "virtus"
2
- require "httparty"
3
- require "microformats2"
4
- require "g5_authentication_client"
5
- require "g5_foundation_client/version"
1
+ require 'active_support/core_ext/hash'
2
+ require 'httparty'
3
+ require 'g5_authentication_client'
4
+ require 'g5_foundation_client/version'
6
5
 
7
6
  module G5FoundationClient
8
7
  def self.access_token=(token)
@@ -24,8 +23,4 @@ require 'g5_foundation_client/models/integration_setting'
24
23
  require 'g5_foundation_client/models/location'
25
24
  require 'g5_foundation_client/models/client'
26
25
 
27
- require 'g5_foundation_client/deserializers/safe_access'
28
- require 'g5_foundation_client/deserializers/integration_setting'
29
- require 'g5_foundation_client/deserializers/location'
30
- require 'g5_foundation_client/deserializers/client'
31
26
 
@@ -1,21 +1,23 @@
1
1
  class G5FoundationClient::Fetcher
2
2
  def self.fetch_url(url, &block)
3
3
  response = HTTParty.get(
4
- url,
5
- { query: { access_token: G5FoundationClient::access_token } }
4
+ url,
5
+ {query: {access_token: G5FoundationClient::access_token},
6
+ headers: {'Content-Type' => 'application/json', 'Accept' => 'application/json'}
7
+ }
6
8
  )
7
9
 
8
10
  case response.response.code.to_i
9
- when 200
10
- yield response.body
11
- when 404
12
- raise G5FoundationClient::RecordNotFoundException.new(
13
- "Couldn't find record at URL '#{url}'"
14
- )
15
- else
16
- raise Exception.new(
17
- "I got an unexpected response code '#{response.response.code}'"
18
- )
11
+ when 200
12
+ yield response.body
13
+ when 404
14
+ raise G5FoundationClient::RecordNotFoundException.new(
15
+ "Couldn't find record at URL '#{url}'"
16
+ )
17
+ else
18
+ raise Exception.new(
19
+ "I got an unexpected response code '#{response.response.code}'"
20
+ )
19
21
  end
20
22
  end
21
23
  end
@@ -1,16 +1,17 @@
1
1
  class G5FoundationClient::Client
2
- include Virtus.model
3
2
  extend G5FoundationClient::FindableByUid
3
+ attr_accessor :client_hash
4
4
 
5
- def self.deserializer_class
6
- G5FoundationClient::Deserializers::Client
5
+ def initialize(attrs)
6
+ self.client_hash = attrs.fetch(:client, attrs)
7
7
  end
8
8
 
9
- attribute :locations, Array[G5FoundationClient::Location]
10
- attribute :uid, String
11
- attribute :urn, String
12
- attribute :name, String
13
- attribute :vertical, String
14
- attribute :domain, String
15
- attribute :domain_type, String
9
+ [:id, :uid, :name, :urn, :vertical, :street_address_1, :street_address_2,
10
+ :city, :state, :postal_code, :fax, :email, :tel, :domain_type, :domain].each do |field|
11
+ define_method(field) { self.client_hash[field] }
12
+ end
13
+
14
+ def locations
15
+ @locations ||= self.client_hash[:locations].collect { |lh| G5FoundationClient::Location.new(lh.merge(client: self)) }
16
+ end
16
17
  end
@@ -1,7 +1,7 @@
1
1
  module G5FoundationClient::FindableByUid
2
2
  def find_by_uid(uid)
3
- G5FoundationClient::Fetcher.fetch_url(uid) do |markup|
4
- deserializer_class.from_markup(markup)
3
+ G5FoundationClient::Fetcher.fetch_url(uid) do |json|
4
+ new(ActiveSupport::HashWithIndifferentAccess.new(JSON.parse(json)))
5
5
  end
6
6
  end
7
7
  end
@@ -1,26 +1,29 @@
1
1
  class G5FoundationClient::IntegrationSetting
2
- include Virtus.model
2
+ attr_accessor :integration_setting_hash
3
+ attr_accessor :location
3
4
 
4
- def self.deserializer_class
5
- G5FoundationClient::Deserializers::IntegrationSetting
5
+ def initialize(attrs)
6
+ self.integration_setting_hash = attrs
7
+ self.location = self.integration_setting_hash.delete(:location)
6
8
  end
7
9
 
8
- attribute :inventory_service_url, String
9
- attribute :inventory_service_auth_token, String
10
- attribute :etl_strategy_name, String
11
- attribute :inventory_vendor_endpoint, String
12
- attribute :inventory_vendor_user_name, String
13
- attribute :inventory_vendor_password, String
14
- attribute :lead_strategy_name, String
15
- attribute :lead_vendor_endpoint, String
16
- attribute :lead_vendor_user_name, String
17
- attribute :lead_vendor_password, String
18
- attribute :custom_integration_settings, Hash
19
-
20
10
  def to_settings_hash
21
- hash = self.to_h.clone
22
- custom = hash.delete(:custom_integration_settings)
23
- hash = hash.merge(custom) if custom
24
- hash
11
+ self.integration_setting_hash
12
+ end
13
+
14
+ def lead?
15
+ 'lead' == self.vendor_action
16
+ end
17
+
18
+ def inventory?
19
+ 'inventory' == self.vendor_action
20
+ end
21
+
22
+ [:vendor_action, :strategy_name, :vendor_endpoint, :vendor_user_name, :vendor_password].each do |field|
23
+ define_method(field) { self.integration_setting_hash[field] }
24
+ end
25
+
26
+ def vendor_action
27
+ self.integration_setting_hash[:vendor_action]
25
28
  end
26
29
  end
@@ -1,28 +1,63 @@
1
1
  class G5FoundationClient::Location
2
- include Virtus.model
3
2
  extend G5FoundationClient::FindableByUid
4
3
 
5
- def self.deserializer_class
6
- G5FoundationClient::Deserializers::Location
4
+ attr_accessor :location_hash
5
+
6
+ def initialize(attrs)
7
+ self.location_hash = attrs.fetch(:location, attrs)
8
+ end
9
+
10
+ [:id, :uid, :client, :client_uid, :client_id, :name, :corporate, :created_at, :updated_at, :urn,
11
+ :street_address_1, :street_address_2, :city, :state, :postal_code,
12
+ :fax, :email, :hours, :twitter_username, :facebook_username, :yelp_username,
13
+ :pinterest_username, :foursquare_username, :tumblr_username, :instagram_username,
14
+ :vimeo_username, :youtube_username, :domain, :phone_number, :neighborhood, :boat_storage,
15
+ :business_storage, :gate_access, :security_monitoring, :business_center, :climate_controlled,
16
+ :heated_cooled, :friendly_staff, :covered_drivethru, :covered_loading, :rv_boat_storage,
17
+ :outside_parking, :deliveries, :dollies_carts, :digital_surveillance, :drive_up_access,
18
+ :electronic_gate, :uhaul_trucks, :budget_trucks, :moving_trucks, :free_truck, :fenced_lighted,
19
+ :ground_level_units, :high_ceilings, :individual_alarmed_units, :mail_boxes, :major_credit_cards,
20
+ :military_discounts, :student_discount, :senior_discount, :month_to_month, :no_admin_fee, :no_deposits,
21
+ :no_late_fees, :online_bill_pay, :packing_moving_supplies, :boxes_locks, :tenant_insurance, :truck_rentals,
22
+ :wide_driveways, :wine_storage, :other_features, :rv_storage, :seven_day_access, :other_storage,
23
+ :specific_demographic, :primary_offering, :secondary_other, :secondary_condo, :secondary_townhomes, :secondary_apartments, :floor_plans,
24
+ :nearby_schools, :highrise_structure, :garden_structure, :townhome_structure, :modern_structure, :nearby_employers, :dogs_allowed,
25
+ :cats_allowed, :accessibility, :air_conditioned, :cable_included, :ceiling_fans, :custom_cabinetry, :dishwasher,
26
+ :energy_efficient, :fireplace, :granite_counters, :hardwood_floors, :private_balcony, :private_patio, :refrigerator,
27
+ :stainless_appliances, :smoke_free, :style_design, :style_cost, :walkin_closet, :washer_dryer, :has_view, :other_amenities,
28
+ :carport_parking, :club_house, :dog_park, :corporate_suites, :family_friendly, :fitness_center, :furnished_apartments, :garages,
29
+ :gated_entrance, :laundry_facilities, :online_rental_payments, :onsite_management, :close_park, :pet_friendly, :playground,
30
+ :recycling_center, :swimming_pool, :hot_tub, :storage_available, :tennis_court, :wifi_available, :other_community_amenities,
31
+ :primary_offering_other, :ga_tracking_id, :ga_profile_id, :landmark_1_type, :landmark_1_name, :landmark_2_type, :landmark_2_name,
32
+ :property_feature_1, :property_feature_2, :property_feature_3, :apartment_amenity_1, :apartment_amenity_2,
33
+ :community_amenity_1, :community_amenity_2].each do |field|
34
+ define_method(field) { self.location_hash[field] }
35
+ end
36
+
37
+ alias_method :locality, :city
38
+ alias_method :region, :state
39
+ alias_method :primary_landmark, :landmark_1_name
40
+ alias_method :primary_amenity, :apartment_amenity_1
41
+
42
+
43
+ def street_address
44
+ return street_address_1 if street_address_2.blank?
45
+ "#{street_address_1}\n#{street_address_2}"
7
46
  end
8
47
 
9
- attribute :integration_setting, G5FoundationClient::IntegrationSetting
10
- attribute :uid, String
11
- attribute :urn, String
12
- attribute :client_uid, String
13
- attribute :name, String
14
- attribute :phone_number, String
15
- attribute :domain, String
16
- attribute :corporate, Boolean
17
- attribute :floor_plans, String
18
- attribute :primary_amenity, String
19
- attribute :qualifier, String
20
- attribute :primary_landmark, String
21
- attribute :ga_tracking_id, String
22
- attribute :ga_profile_id, String
23
- attribute :neighborhood, String
24
- attribute :street_address, String
25
- attribute :region, String
26
- attribute :locality, String
27
- attribute :postal_code, String
48
+ def integration_settings
49
+ @integration_settings ||= self.location_hash.fetch(:locations_integration_settings, []).collect { |is| G5FoundationClient::IntegrationSetting.new(is.merge(location: self)) }
50
+ end
51
+
52
+ def inventory_integration_settings
53
+ inventory_integration_setting_by_vendor_action :inventory?
54
+ end
55
+
56
+ def lead_integration_settings
57
+ inventory_integration_setting_by_vendor_action :lead?
58
+ end
59
+
60
+ def inventory_integration_setting_by_vendor_action(vendor_action)
61
+ integration_settings.detect { |is| is.send(vendor_action) }
62
+ end
28
63
  end
@@ -1,3 +1,3 @@
1
1
  module G5FoundationClient
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  end
@@ -0,0 +1 @@
1
+ {"client":{"id":2,"uid":"http://192.168.33.30:3000/clients/g5-c-6hng302-no-store","name":"no store","urn":"g5-c-6hng302-no-store","vertical":"Self-Storage","street_address_1":"20270 W North Ave","street_address_2":"","city":"Brookfield","state":"WI","postal_code":"53045-4278","fax":"(262) 744-9458","email":"perry@hertler.org","tel":"(262) 744-9458","domain_type":"SingleDomainClient","domain":"http://nostore.com","created_at":"2014-10-08T20:27:36.008Z","updated_at":"2014-10-08T20:27:36.008Z","locations":[{"id":3,"uid":"http://192.168.33.30:3000/clients/g5-c-6hng302-no-store/locations/g5-cl-6hng303-brussels","client_id":2,"client_uid":"http://192.168.33.30:3000/clients/g5-c-6hng302-no-store","name":"brussels","corporate":false,"created_at":"2014-10-08T20:27:36.011Z","updated_at":"2014-10-08T20:27:36.011Z","urn":"g5-cl-6hng303-brussels","street_address_1":"20270 W North Ave","street_address_2":"","city":"Brookfield","state":"WI","postal_code":"53045-4278","fax":"(262) 744-9458","email":"perry@hertler.org","hours":"","twitter_username":"","facebook_username":"","yelp_username":"","pinterest_username":"","foursquare_username":"","tumblr_username":"","instagram_username":"","vimeo_username":"","youtube_username":"","domain":"http://nostore.com/brussels","phone_number":"(262) 744-9458","neighborhood":"","boat_storage":false,"business_storage":false,"gate_access":false,"security_monitoring":false,"business_center":false,"climate_controlled":false,"heated_cooled":false,"friendly_staff":false,"covered_drivethru":false,"covered_loading":false,"rv_boat_storage":false,"outside_parking":false,"deliveries":false,"dollies_carts":false,"digital_surveillance":false,"drive_up_access":false,"electronic_gate":false,"uhaul_trucks":false,"budget_trucks":false,"moving_trucks":false,"free_truck":false,"fenced_lighted":false,"ground_level_units":false,"high_ceilings":false,"individual_alarmed_units":false,"mail_boxes":false,"major_credit_cards":false,"military_discounts":false,"student_discount":false,"senior_discount":false,"month_to_month":false,"no_admin_fee":false,"no_deposits":false,"no_late_fees":false,"online_bill_pay":false,"packing_moving_supplies":false,"boxes_locks":false,"tenant_insurance":false,"truck_rentals":false,"wide_driveways":false,"wine_storage":false,"other_features":"","rv_storage":false,"seven_day_access":false,"other_storage":"","specific_demographic":"","primary_offering":"","secondary_other":"","secondary_condo":false,"secondary_townhomes":false,"secondary_apartments":false,"floor_plans":"","nearby_schools":"","highrise_structure":false,"garden_structure":false,"townhome_structure":false,"modern_structure":false,"nearby_employers":"","dogs_allowed":false,"cats_allowed":false,"accessibility":"0","air_conditioned":false,"cable_included":false,"ceiling_fans":false,"custom_cabinetry":false,"dishwasher":false,"energy_efficient":false,"fireplace":false,"granite_counters":false,"hardwood_floors":false,"private_balcony":false,"private_patio":false,"refrigerator":false,"stainless_appliances":false,"smoke_free":false,"style_design":"","style_cost":"","walkin_closet":false,"washer_dryer":false,"has_view":false,"other_amenities":"","carport_parking":false,"club_house":false,"dog_park":false,"corporate_suites":false,"family_friendly":false,"fitness_center":false,"furnished_apartments":false,"garages":false,"gated_entrance":false,"laundry_facilities":false,"online_rental_payments":false,"onsite_management":false,"close_park":false,"pet_friendly":false,"playground":false,"recycling_center":false,"swimming_pool":false,"hot_tub":false,"storage_available":false,"tennis_court":false,"wifi_available":false,"other_community_amenities":"","primary_offering_other":null,"ga_tracking_id":"","ga_profile_id":"","landmark_1_type":"","landmark_1_name":"","landmark_2_type":"","landmark_2_name":"","property_feature_1":"","property_feature_2":"","property_feature_3":"","apartment_amenity_1":"","apartment_amenity_2":"","community_amenity_1":"","community_amenity_2":"","locations_integration_settings":[{"location_id":3,"vendor":"SiteLink","vendor_action":"inventory","id":2,"strategy_name":"vsn","vendor_user_name":"brusselsuname","vendor_password":"vp","vendor_endpoint":"ven","created_at":"2014-10-08T20:28:26.154Z","updated_at":"2014-10-08T20:28:26.154Z","channel":"4"}]}]}}
@@ -0,0 +1 @@
1
+ {"location":{"id":3,"uid":"http://192.168.33.30:3000/clients/g5-c-6hng302-no-store/locations/g5-cl-6hng303-brussels","client_id":2,"client_uid":"http://192.168.33.30:3000/clients/g5-c-6hng302-no-store","name":"brussels","corporate":false,"created_at":"2014-10-08T20:27:36.011Z","updated_at":"2014-10-08T20:27:36.011Z","urn":"g5-cl-6hng303-brussels","street_address_1":"20270 W North Ave","street_address_2":"","city":"Brookfield","state":"WI","postal_code":"53045-4278","fax":"(262) 744-9458","email":"perry@hertler.org","hours":"","twitter_username":"","facebook_username":"","yelp_username":"","pinterest_username":"","foursquare_username":"","tumblr_username":"","instagram_username":"","vimeo_username":"","youtube_username":"","domain":"http://nostore.com/brussels","phone_number":"(262) 744-9458","neighborhood":"","boat_storage":false,"business_storage":false,"gate_access":false,"security_monitoring":false,"business_center":false,"climate_controlled":false,"heated_cooled":false,"friendly_staff":false,"covered_drivethru":false,"covered_loading":false,"rv_boat_storage":false,"outside_parking":false,"deliveries":false,"dollies_carts":false,"digital_surveillance":false,"drive_up_access":false,"electronic_gate":false,"uhaul_trucks":false,"budget_trucks":false,"moving_trucks":false,"free_truck":false,"fenced_lighted":false,"ground_level_units":false,"high_ceilings":false,"individual_alarmed_units":false,"mail_boxes":false,"major_credit_cards":false,"military_discounts":false,"student_discount":false,"senior_discount":false,"month_to_month":false,"no_admin_fee":false,"no_deposits":false,"no_late_fees":false,"online_bill_pay":false,"packing_moving_supplies":false,"boxes_locks":false,"tenant_insurance":false,"truck_rentals":false,"wide_driveways":false,"wine_storage":false,"other_features":"","rv_storage":false,"seven_day_access":false,"other_storage":"","specific_demographic":"","primary_offering":"","secondary_other":"","secondary_condo":false,"secondary_townhomes":false,"secondary_apartments":false,"floor_plans":"","nearby_schools":"","highrise_structure":false,"garden_structure":false,"townhome_structure":false,"modern_structure":false,"nearby_employers":"","dogs_allowed":false,"cats_allowed":false,"accessibility":"0","air_conditioned":false,"cable_included":false,"ceiling_fans":false,"custom_cabinetry":false,"dishwasher":false,"energy_efficient":false,"fireplace":false,"granite_counters":false,"hardwood_floors":false,"private_balcony":false,"private_patio":false,"refrigerator":false,"stainless_appliances":false,"smoke_free":false,"style_design":"","style_cost":"","walkin_closet":false,"washer_dryer":false,"has_view":false,"other_amenities":"","carport_parking":false,"club_house":false,"dog_park":false,"corporate_suites":false,"family_friendly":false,"fitness_center":false,"furnished_apartments":false,"garages":false,"gated_entrance":false,"laundry_facilities":false,"online_rental_payments":false,"onsite_management":false,"close_park":false,"pet_friendly":false,"playground":false,"recycling_center":false,"swimming_pool":false,"hot_tub":false,"storage_available":false,"tennis_court":false,"wifi_available":false,"other_community_amenities":"","primary_offering_other":null,"ga_tracking_id":"","ga_profile_id":"","landmark_1_type":"","landmark_1_name":"","landmark_2_type":"","landmark_2_name":"","property_feature_1":"","property_feature_2":"","property_feature_3":"","apartment_amenity_1":"","apartment_amenity_2":"","community_amenity_1":"","community_amenity_2":"","locations_integration_settings":[{"location_id":3,"vendor":"SiteLink","vendor_action":"inventory","id":2,"strategy_name":"vsn","vendor_user_name":"brusselsuname","vendor_password":"vp","vendor_endpoint":"ven","created_at":"2014-10-08T20:28:26.154Z","updated_at":"2014-10-08T20:28:26.154Z","channel":"4"}]}}
@@ -42,17 +42,17 @@ describe G5FoundationClient::Client do
42
42
  it "instantiates associated Locations" do
43
43
  expect(client.locations.length).to eq(2)
44
44
  expect(client.locations.all? { |l| l.is_a?(G5FoundationClient::Location) }).to be_true
45
- expect(client.locations.map(&:name)).to eq([ "Location 1", "Location 2" ])
45
+ expect(client.locations.map(&:name)).to eq([ 'Location 1', 'Location 2'])
46
46
  end
47
47
  end
48
48
  end
49
49
 
50
50
  describe ".find_by_uid" do
51
- let(:uid) { "http://example.com/clients/g5-c-1234-client" }
52
- let(:response) { fixture("client_detail.html") }
53
- before { stub_json(uid + "?access_token=token", response) }
51
+ let(:uid) { 'http://example.com/clients/g5-c-1234-client' }
52
+ let(:response) { fixture('hub-client.json') }
53
+ before { stub_json(uid + '?access_token=token', response) }
54
54
  subject(:find) { G5FoundationClient::Client.find_by_uid(uid) }
55
55
 
56
- its(:name) { should eq("Test Client") }
56
+ its(:name) { should eq('no store') }
57
57
  end
58
58
  end
@@ -4,46 +4,47 @@ describe G5FoundationClient::IntegrationSetting do
4
4
  before { G5FoundationClient.access_token = 'token' }
5
5
 
6
6
  describe 'instantiating with a hash' do
7
- let(:inventory_service_url) { 'http://inventory.service.example.com' }
8
- let(:inventory_service_auth_token) { 'http://inventory.service.example.com' }
9
- let(:etl_strategy_name) { 'Centershift' }
10
- let(:inventory_vendor_endpoint) { 'http://centershift.example.com' }
11
- let(:inventory_vendor_user_name) { 'uname' }
12
- let(:inventory_vendor_password) { 'pw' }
13
- let(:lead_strategy_name) { 'sitelink' }
14
- let(:lead_vendor_endpoint) { 'http://sitelink.example.com' }
15
- let(:lead_vendor_user_name) { 'sluname' }
16
- let(:lead_vendor_password) { 'slpw' }
7
+ let(:service_url) { 'http://inventory.service.example.com' }
8
+ let(:location) { 'location' }
9
+ let(:strategy_name) { 'Centershift' }
10
+ let(:vendor_endpoint) { 'http://centershift.example.com' }
11
+ let(:vendor_user_name) { 'uname' }
12
+ let(:vendor_password) { 'pw' }
13
+ let(:vendor_action) { 'inventory' }
17
14
  let(:custom_integration_settings) { {foo: 'bar'} }
18
- let(:init_hash) { {inventory_service_url: inventory_service_url,
19
- inventory_service_auth_token: inventory_service_auth_token,
20
- etl_strategy_name: etl_strategy_name,
21
- inventory_vendor_endpoint: inventory_vendor_endpoint,
22
- inventory_vendor_user_name: inventory_vendor_user_name,
23
- inventory_vendor_password: inventory_vendor_password,
24
- lead_strategy_name: lead_strategy_name,
25
- lead_vendor_endpoint: lead_vendor_endpoint,
26
- lead_vendor_user_name: lead_vendor_user_name,
27
- lead_vendor_password: lead_vendor_password,
28
- custom_integration_settings: custom_integration_settings} }
29
- let(:expected_to_settings_hash) do
30
- expected = init_hash.clone
31
- custom = expected.delete(:custom_integration_settings)
32
- expected.merge(custom)
33
- end
15
+ let(:init_hash) { {service_url: service_url,
16
+ location: location,
17
+ strategy_name: strategy_name,
18
+ vendor_endpoint: vendor_endpoint,
19
+ vendor_user_name: vendor_user_name,
20
+ vendor_password: vendor_password,
21
+ vendor_action: 'inventory'
22
+ } }
23
+
34
24
  subject { G5FoundationClient::IntegrationSetting.new(init_hash) }
35
25
 
36
- its(:inventory_service_url) { should eql(inventory_service_url) }
37
- its(:inventory_service_auth_token) { should eql(inventory_service_auth_token) }
38
- its(:etl_strategy_name) { should eql(etl_strategy_name) }
39
- its(:inventory_vendor_endpoint) { should eql(inventory_vendor_endpoint) }
40
- its(:inventory_vendor_user_name) { should eql(inventory_vendor_user_name) }
41
- its(:inventory_vendor_password) { should eql(inventory_vendor_password) }
42
- its(:lead_strategy_name) { should eql(lead_strategy_name) }
43
- its(:lead_vendor_endpoint) { should eql(lead_vendor_endpoint) }
44
- its(:lead_vendor_user_name) { should eql(lead_vendor_user_name) }
45
- its(:lead_vendor_password) { should eql(lead_vendor_password) }
46
- its(:custom_integration_settings) { should eql(custom_integration_settings) }
47
- its(:to_settings_hash) { should eq(expected_to_settings_hash) }
26
+ its(:location) { should eql(location) }
27
+ its(:vendor_action) { should eql(vendor_action) }
28
+ its(:vendor_endpoint) { should eql(vendor_endpoint) }
29
+ its(:vendor_user_name) { should eql(vendor_user_name) }
30
+ its(:vendor_password) { should eql(vendor_password) }
31
+ its(:strategy_name) { should eql(strategy_name) }
32
+ its(:to_settings_hash) { should eq(init_hash) }
33
+ its(:inventory?) { should be_true }
34
+ its(:lead?) { should be_false }
35
+ end
36
+
37
+ describe 'vendor actions' do
38
+ context 'inventory' do
39
+ subject { G5FoundationClient::IntegrationSetting.new(vendor_action: 'inventory') }
40
+ its(:inventory?) { should be_true }
41
+ its(:lead?) { should be_false }
42
+ end
43
+
44
+ context 'lead' do
45
+ subject { G5FoundationClient::IntegrationSetting.new(vendor_action: 'lead') }
46
+ its(:inventory?) { should be_false }
47
+ its(:lead?) { should be_true }
48
+ end
48
49
  end
49
50
  end
@@ -6,24 +6,24 @@ describe G5FoundationClient::Location do
6
6
  describe "instantiating with a hash" do
7
7
  subject do
8
8
  G5FoundationClient::Location.new(
9
- uid: "http://example.com/urn",
10
- urn: "urn",
11
- client_uid: "http://example.com/client_uid",
12
- name: "Test Name",
13
- phone_number: "123-123-1234",
14
- domain: "example.com",
15
- corporate: "true",
16
- floor_plans: "Apartments",
17
- primary_amenity: "Pony Rides",
18
- primary_landmark: "An enormous bust of Brett Favre",
19
- qualifier: "I have no idea what a qualifier is",
20
- ga_tracking_id: "UA-1234-5",
21
- ga_profile_id: "ga:1234",
22
- neighborhood: "Wrong side of the tracks",
23
- street_address: "123 Test Way",
24
- region: "South Testakota",
25
- locality: "Testville",
26
- postal_code: "31337"
9
+ uid: "http://example.com/urn",
10
+ urn: "urn",
11
+ client_uid: "http://example.com/client_uid",
12
+ name: "Test Name",
13
+ phone_number: "123-123-1234",
14
+ domain: "example.com",
15
+ corporate: "true",
16
+ floor_plans: "Apartments",
17
+ apartment_amenity_1: "Pony Rides",
18
+ landmark_1_name: "An enormous bust of Brett Favre",
19
+ ga_tracking_id: "UA-1234-5",
20
+ ga_profile_id: "ga:1234",
21
+ neighborhood: "Wrong side of the tracks",
22
+ street_address_1: "123 Test Way",
23
+ street_address_2: "apt 2",
24
+ state: "South Testakota",
25
+ city: "Testville",
26
+ postal_code: "31337"
27
27
  )
28
28
  end
29
29
 
@@ -37,24 +37,28 @@ describe G5FoundationClient::Location do
37
37
  its(:floor_plans) { should eql("Apartments") }
38
38
  its(:primary_amenity) { should eql("Pony Rides") }
39
39
  its(:primary_landmark) { should eql("An enormous bust of Brett Favre") }
40
- its(:qualifier) { should eql("I have no idea what a qualifier is") }
41
40
  its(:ga_tracking_id) { should eql("UA-1234-5") }
42
41
  its(:ga_profile_id) { should eql("ga:1234") }
43
42
  its(:neighborhood) { should eql("Wrong side of the tracks") }
44
- its(:street_address) { should eql("123 Test Way") }
43
+ its(:street_address) { should eql("123 Test Way\napt 2") }
45
44
  its(:region) { should eql("South Testakota") }
46
45
  its(:locality) { should eql("Testville") }
47
46
  its(:postal_code) { should eql("31337") }
47
+ its(:inventory_integration_settings) { should be_nil }
48
+ its(:lead_integration_settings) { should be_nil }
48
49
  end
49
50
 
50
- describe ".find_by_uid" do
51
+ describe '.find_by_uid' do
51
52
  let(:uid) do
52
- "http://example.com/clients/g5-c-1234-client/locations/g5-cl-1234-location"
53
+ 'http://example.com/clients/g5-c-1234-client/locations/g5-cl-1234-location'
53
54
  end
54
- let(:response) { fixture("location_detail.html") }
55
- before { stub_json(uid + "?access_token=token", response) }
55
+ let(:response) { fixture('hub-location.json') }
56
+ before { stub_json(uid + '?access_token=token', response) }
56
57
  subject(:find) { G5FoundationClient::Location.find_by_uid(uid) }
57
58
 
58
- its(:name) { should eq("Test Location") }
59
+ its(:name) { should eq('brussels') }
60
+ it 'has inventory integration settings' do
61
+ subject.inventory_integration_settings.integration_setting_hash[:strategy_name].should eq('vsn')
62
+ end
59
63
  end
60
64
  end
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: g5_foundation_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Don Petersen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-24 00:00:00.000000000 Z
11
+ date: 2014-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: virtus
14
+ name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: microformats2
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: g5_authentication_client
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -152,10 +138,6 @@ files:
152
138
  - Rakefile
153
139
  - g5_foundation_client.gemspec
154
140
  - lib/g5_foundation_client.rb
155
- - lib/g5_foundation_client/deserializers/client.rb
156
- - lib/g5_foundation_client/deserializers/integration_setting.rb
157
- - lib/g5_foundation_client/deserializers/location.rb
158
- - lib/g5_foundation_client/deserializers/safe_access.rb
159
141
  - lib/g5_foundation_client/fetcher.rb
160
142
  - lib/g5_foundation_client/models/client.rb
161
143
  - lib/g5_foundation_client/models/findable_by_uid.rb
@@ -165,12 +147,8 @@ files:
165
147
  - lib/g5_foundation_client/rspec.rb
166
148
  - lib/g5_foundation_client/rspec/factories.rb
167
149
  - lib/g5_foundation_client/version.rb
168
- - spec/fixtures/client_detail.html
169
- - spec/fixtures/empty_hcard.html
170
- - spec/fixtures/location_detail.html
171
- - spec/lib/g5_foundation_client/deserializers/client_spec.rb
172
- - spec/lib/g5_foundation_client/deserializers/integration_setting_spec.rb
173
- - spec/lib/g5_foundation_client/deserializers/location_spec.rb
150
+ - spec/fixtures/hub-client.json
151
+ - spec/fixtures/hub-location.json
174
152
  - spec/lib/g5_foundation_client/fetcher_spec.rb
175
153
  - spec/lib/g5_foundation_client/models/client_spec.rb
176
154
  - spec/lib/g5_foundation_client/models/integration_setting_spec.rb
@@ -202,12 +180,8 @@ signing_key:
202
180
  specification_version: 4
203
181
  summary: Client gem to interact with G5 services.
204
182
  test_files:
205
- - spec/fixtures/client_detail.html
206
- - spec/fixtures/empty_hcard.html
207
- - spec/fixtures/location_detail.html
208
- - spec/lib/g5_foundation_client/deserializers/client_spec.rb
209
- - spec/lib/g5_foundation_client/deserializers/integration_setting_spec.rb
210
- - spec/lib/g5_foundation_client/deserializers/location_spec.rb
183
+ - spec/fixtures/hub-client.json
184
+ - spec/fixtures/hub-location.json
211
185
  - spec/lib/g5_foundation_client/fetcher_spec.rb
212
186
  - spec/lib/g5_foundation_client/models/client_spec.rb
213
187
  - spec/lib/g5_foundation_client/models/integration_setting_spec.rb
@@ -1,25 +0,0 @@
1
- module G5FoundationClient::Deserializers
2
- module Client
3
- extend SafeAccess
4
-
5
- def self.from_markup(markup)
6
- h = Microformats2.parse(markup).cards.first
7
- client = G5FoundationClient::Client.new(
8
- uid: with_safe_access { h.uid },
9
- urn: with_safe_access { h.g5_urn },
10
- name: with_safe_access { h.name },
11
- vertical: with_safe_access { h.g5_vertical },
12
- domain: with_safe_access { h.g5_domain },
13
- domain_type: with_safe_access { h.g5_domain_type }
14
- )
15
-
16
- location_formats = with_safe_access(stringify: false) { h.orgs.map(&:format) }
17
- location_formats ||= []
18
- location_formats.each do |hcard|
19
- client.locations << G5FoundationClient::Deserializers::Location.from_hcard(hcard)
20
- end
21
-
22
- client
23
- end
24
- end
25
- end
@@ -1,42 +0,0 @@
1
- module G5FoundationClient::Deserializers
2
- module IntegrationSetting
3
- extend SafeAccess
4
-
5
- class << self
6
- def from_hcard(hcard)
7
- G5FoundationClient::IntegrationSetting.new(hcard_to_hash(hcard))
8
- end
9
-
10
- def hcard_to_hash(h)
11
- {
12
- inventory_service_url: with_safe_access { h.g5_inventory_service_url },
13
- inventory_service_auth_token: with_safe_access { h.g5_inventory_service_auth_token },
14
- etl_strategy_name: with_safe_access { h.g5_etl_strategy_name },
15
- inventory_vendor_endpoint: with_safe_access { h.g5_inventory_vendor_endpoint },
16
- inventory_vendor_user_name: with_safe_access { h.g5_inventory_vendor_user_name },
17
- inventory_vendor_password: with_safe_access { h.g5_inventory_vendor_password },
18
- lead_strategy_name: with_safe_access { h.g5_lead_strategy_name },
19
- lead_vendor_endpoint: with_safe_access { h.g5_lead_vendor_endpoint },
20
- lead_vendor_user_name: with_safe_access { h.g5_lead_vendor_user_name },
21
- lead_vendor_password: with_safe_access { h.g5_lead_vendor_password },
22
- custom_integration_settings: custom_integration_settings_from_hcard(h)
23
- }
24
- end
25
-
26
- def num_custom_elements(hcard)
27
- hcard.methods.collect(&:to_s).count { |setting| setting =~ /g5_custom_integration_setting_name_\d+$/ }
28
- end
29
-
30
- def custom_integration_settings_from_hcard(hcard)
31
- custom_settings = Hash.new
32
-
33
- num_custom_elements(hcard).times do |index|
34
- name = with_safe_access { hcard.send("g5_custom_integration_setting_name_#{index}") }
35
- value = with_safe_access { hcard.send("g5_custom_integration_setting_value_#{index}") }
36
- custom_settings[name.to_sym] = value
37
- end
38
- custom_settings
39
- end
40
- end
41
- end
42
- end
@@ -1,37 +0,0 @@
1
- module G5FoundationClient::Deserializers
2
- module Location
3
- extend SafeAccess
4
-
5
- def self.from_markup(markup)
6
- hcard = Microformats2.parse(markup).cards.first
7
- from_hcard(hcard)
8
- end
9
-
10
- def self.from_hcard(hcard)
11
- G5FoundationClient::Location.new(hcard_to_hash(hcard).merge(integration_setting: IntegrationSetting.from_hcard(hcard)))
12
- end
13
-
14
- def self.hcard_to_hash(h)
15
- {
16
- uid: with_safe_access { h.uid },
17
- urn: with_safe_access { h.g5_urn },
18
- client_uid: with_safe_access { h.org.format.uid.to_s},
19
- name: with_safe_access { h.name },
20
- phone_number: with_safe_access { h.adr.format.tel },
21
- domain: with_safe_access { h.g5_domain },
22
- corporate: with_safe_access { h.g5_corporate },
23
- floor_plans: with_safe_access { h.g5_floorplan },
24
- primary_amenity: with_safe_access { h.g5_aparment_amenity_1 },
25
- qualifier: with_safe_access { h.g5_aparment_feature_1 },
26
- primary_landmark: with_safe_access { h.g5_landmark_1 },
27
- ga_tracking_id: with_safe_access { h.ga_tracking_id },
28
- ga_profile_id: with_safe_access { h.ga_profile_id },
29
- neighborhood: with_safe_access { h.adr.format.g5_neighborhood },
30
- street_address: with_safe_access { h.adr.format.street_address },
31
- region: with_safe_access { h.adr.format.region },
32
- locality: with_safe_access { h.adr.format.locality },
33
- postal_code: with_safe_access { h.adr.format.postal_code }
34
- }
35
- end
36
- end
37
- end
@@ -1,12 +0,0 @@
1
- module G5FoundationClient::Deserializers
2
- module SafeAccess
3
- def with_safe_access(options = {}, &block)
4
- options[:stringify] = true if options[:stringify] == nil
5
-
6
- result = block.call
7
- options[:stringify] ? result.to_s : result
8
- rescue NoMethodError
9
- nil
10
- end
11
- end
12
- end
@@ -1,220 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head></head>
4
- <body>
5
- <article>
6
- <div class="h-card">
7
- <h2>
8
- <a class="p-name u-uid u-url" href="http://example.com/clients/g5-c-1234-client">Test Client</a>
9
- <small class="p-g5-vertical">Apartments</small>
10
- |
11
- <small class="u-g5-domain">http://example.com/</small>
12
- |
13
- <small class="p-g5-domain-type">MultiDomainClient</small>
14
- <small class="p-g5-urn">g5-c-1234-client</small>
15
- </h2>
16
- <p class="p-adr h-adr">
17
- <span class="p-street-address">
18
- 455 NW Franklin
19
-
20
- </span>
21
- <span>
22
- <span class="p-locality">Bend</span>
23
- <span class="p-region">OR</span>
24
- <span class="p-postal-code">97701</span>
25
- </span>
26
- <span class="p-tel p-fax"></span>
27
- <span class="u-email"></span>
28
- </p>
29
-
30
- <div>
31
- <h4>Locations</h4>
32
- <ul class="list-unstyled">
33
- <li class="p-org h-card">
34
- <a class="p-name u-uid u-url"
35
- href="http://example.com/clients/g5-c-1234-client/locations/g5-cl-1234-location">Test Location
36
- 1</a>
37
- <a class="u-url u-g5-domain" href="http://www.salidadelsolapartments.com">http://www.salidadelsolapartments.com</a>
38
-
39
- <p class="p-adr h-adr">
40
- <span class="p-street-address">
41
- 1125 Sunrise Blvd.
42
-
43
- </span>
44
- <span class="p-g5-neighborhood">West</span>
45
- <span>
46
- <span class="p-locality">Ventura</span>
47
- <span class="p-region">CA</span>
48
- <span class="p-postal-code">93001</span>
49
- </span>
50
- <span class="p-tel">805-798-1256</span>
51
- <span class="p-tel p-fax"></span>
52
- <span class="u-email">info@salidadelsolapts.com</span>
53
- </p>
54
-
55
- <p>
56
- <strong>Corporate:</strong>
57
- <br/>
58
- <span class="p-g5-corporate">false</span>
59
- </p>
60
-
61
- <p>
62
- <strong>Floor Plans:</strong>
63
- <br/>
64
- <span class="p-g5-floorplan">1, 2, 3, studio Apartments</span>
65
- </p>
66
-
67
- <p>
68
- <strong>Landmarks:</strong>
69
- <br/>
70
- <span class="p-g5-landmark-1">Venture Marina</span>
71
- <br/>
72
- <span class="p-g5-landmark-2">River Ridge Golf Course</span>
73
- </p>
74
-
75
- <p>
76
- <strong>Property Features or Qualifiers:</strong>
77
- <br/>
78
- <span class="p-g5-aparment-feature-1">Luxury</span>
79
- <br/>
80
- <span class="p-g5-aparment-feature-2">Gated</span>
81
- <br/>
82
- <span class="p-g5-aparment-feature-3"></span>
83
- </p>
84
-
85
- <p>
86
- <strong>Primary Amenities:</strong>
87
- <br/>
88
- <span class="p-g5-aparment-amenity-1">Stainless Steel Appliances</span>
89
- <br/>
90
- <span class="p-g5-community-amenity-1">Fitness Center</span>
91
- </p>
92
-
93
- <h4>Client</h4>
94
-
95
- <p class="p-org h-card">
96
- <a class="p-name u-uid u-url" href="http://example.com/clients/g5-c-1234-client">Test Client</a>
97
- </p>
98
- </li>
99
- <li class="p-org h-card">
100
- <a class="p-name u-uid u-url"
101
- href="http://g5-hub.herokuapp.com/clients/g5-c-1servrzr-luxe-apartment-company/locations/g5-cl-1servrzz-depot-17">Depot
102
- 17</a>
103
- <a class="u-url u-g5-domain" href="http://www.depot17apartments.com">http://www.depot17apartments.com</a>
104
-
105
- <p class="p-adr h-adr">
106
- <span class="p-street-address">
107
- 2675 Station St.
108
-
109
- </span>
110
- <span class="p-g5-neighborhood">Park Slope</span>
111
- <span>
112
- <span class="p-locality">Brooklyn</span>
113
- <span class="p-region">NY</span>
114
- <span class="p-postal-code">11215</span>
115
- </span>
116
- <span class="p-tel">718-639-3915</span>
117
- <span class="p-tel p-fax"></span>
118
- <span class="u-email">info@depot17.com</span>
119
- </p>
120
-
121
- <p>
122
- <strong>Corporate:</strong>
123
- <br/>
124
- <span class="p-g5-corporate">false</span>
125
- </p>
126
-
127
- <p>
128
- <strong>Floor Plans:</strong>
129
- <br/>
130
- <span class="p-g5-floorplan"> Apartments</span>
131
- </p>
132
-
133
- <p>
134
- <strong>Landmarks:</strong>
135
- <br/>
136
- <span class="p-g5-landmark-1"></span>
137
- <br/>
138
- <span class="p-g5-landmark-2"></span>
139
- </p>
140
-
141
- <p>
142
- <strong>Property Features or Qualifiers:</strong>
143
- <br/>
144
- <span class="p-g5-aparment-feature-1"></span>
145
- <br/>
146
- <span class="p-g5-aparment-feature-2"></span>
147
- <br/>
148
- <span class="p-g5-aparment-feature-3"></span>
149
- </p>
150
-
151
- <p>
152
- <strong>Primary Amenities:</strong>
153
- <br/>
154
- <span class="p-g5-aparment-amenity-1"></span>
155
- <br/>
156
- <span class="p-g5-community-amenity-1"></span>
157
- </p>
158
-
159
- <div>
160
- <h4>
161
- <a href="http://192.168.33.30:3000/locations/g5-cl-6hc1xfr-perry-hertler/integration_settings/1/edit">Integration
162
- Settings</a>
163
- </h4>
164
- <dl class="dl-horizontal">
165
- <dt>Inventory Service URL</dt>
166
- <dd class="p-g5-inventory-service-url">http://localhost:5777/api/v1/storage_facilities</dd>
167
-
168
- <dt>Inventory Service Auth Token</dt>
169
- <dd class="p-g5-inventory-service-auth-token">
170
- authtoken
171
- </dd>
172
-
173
- <dt>ETL Strategy Name</dt>
174
- <dd class="p-g5-etl-strategy-name">EtlStrategies::Centershift4</dd>
175
-
176
- <dt>Inventory Vendor Endpoint</dt>
177
- <dd class="p-g5-inventory-vendor-endpoint">https://slc.centershift.com/sandbox40/SWS.asmx?WSDL</dd>
178
-
179
- <dt>Inventory Vendor User Name</dt>
180
- <dd class="p-g5-inventory-vendor-user-name">G-5TSite</dd>
181
-
182
- <dt>Inventory Vendor Password</dt>
183
- <dd class="p-g5-inventory-vendor-password">1qaz@Wsx</dd>
184
-
185
- <dt>Lead Strategy Name</dt>
186
- <dd class="p-g5-lead-strategy-name">LeadStrategies::SiteLink</dd>
187
-
188
- <dt>Lead Vendor Endpoint</dt>
189
- <dd class="p-g5-lead-vendor-endpoint">https://www.smdservers.net/CCWs_3.5/CallCenterWs.asmx?WSDL
190
- </dd>
191
-
192
- <dt>Lead Vendor User Name</dt>
193
- <dd class="p-g5-lead-vendor-user-name">Administrator</dd>
194
-
195
- <dt>Lead Vendor Password</dt>
196
- <dd class="p-g5-lead-vendor-password">Demo</dd>
197
-
198
- <dt class=p-g5-custom-integration-setting-name-0>corporate_code</dt>
199
- <dd class=p-g5-custom-integration-setting-value-0>1000000129</dd>
200
- <dt class=p-g5-custom-integration-setting-name-1>location_code</dt>
201
- <dd class=p-g5-custom-integration-setting-value-1>1000000678</dd>
202
- <dt class=p-g5-custom-integration-setting-name-2>channel</dt>
203
- <dd class=p-g5-custom-integration-setting-value-2>2</dd>
204
- </dl>
205
- </div>
206
-
207
-
208
- <h4>Client</h4>
209
-
210
- <p class="p-org h-card">
211
- <a class="p-name u-uid u-url" href="http://example.com/clients/g5-c-1234-client">Test Client</a>
212
- </p>
213
- </li>
214
- </ul>
215
- </div>
216
- </div>
217
-
218
- </article>
219
- </body>
220
- </html>
@@ -1,8 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head></head>
4
- <body>
5
- <section class="h-card">
6
- </section>
7
- </body>
8
- </html>
@@ -1,154 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head></head>
4
- <body>
5
- <section class="h-card">
6
- <h2>
7
- <a class="p-name u-uid u-url" href="http://example.com/clients/g5-c-1234-client/locations/g5-cl-1234-location">Test
8
- Location</a>
9
- <small class="p-g5-urn">g5-cl-1234-location</small>
10
- </h2>
11
-
12
- <h4>Domain</h4>
13
- <a class="u-url u-g5-domain" href="http://example.com/">http://example.com/</a>
14
-
15
- <h4>Address</h4>
16
-
17
- <p class="p-adr h-adr">
18
- <span class="p-street-address">
19
- 123 Test Way
20
-
21
- </span>
22
- <span class="p-g5-neighborhood">West</span>
23
- <span>
24
- <span class="p-locality">Testville</span>
25
- <span class="p-region">TK</span>
26
- <span class="p-postal-code">31324</span>
27
- </span>
28
- <span class="p-tel">123-123-1234</span>
29
- <span class="p-tel p-fax"></span>
30
- <span class="u-email">info@salidadelsolapts.com</span>
31
- </p>
32
-
33
- <p>
34
- <strong>Corporate:</strong>
35
- <br/>
36
- <span class="p-g5-corporate">true</span>
37
- </p>
38
-
39
- <p>
40
- <strong>Hours:</strong>
41
- <br/>
42
- <pre class="p-g5-hour">Mon-Fri: 7am - 6pm, Sat: 8am - 3pm, Sunday: Closed</pre>
43
- </p>
44
- <p>
45
- <strong>Floor Plans:</strong>
46
- <br/>
47
- <span class="p-g5-floorplan">1, 2, 3, studio apartments</span>
48
- </p>
49
-
50
- <p>
51
- <strong>Landmarks:</strong>
52
- <br/>
53
- <span class="p-g5-landmark-1">Venture Marina</span>
54
- <br/>
55
- <span class="p-g5-landmark-2">River Ridge Golf Course</span>
56
- </p>
57
-
58
- <p>
59
- <strong>Property Features or Qualifiers:</strong>
60
- <br/>
61
- <span class="p-g5-aparment-feature-1">Luxury</span>
62
- <br/>
63
- <span class="p-g5-aparment-feature-2">Gated</span>
64
- <br/>
65
- <span class="p-g5-aparment-feature-3"></span>
66
- </p>
67
-
68
- <p>
69
- <strong>Primary Amenities:</strong>
70
- <br/>
71
- <span class="p-g5-aparment-amenity-1">Stainless Steel Appliances</span>
72
- <br/>
73
- <span class="p-g5-community-amenity-1">Fitness Center</span>
74
- </p>
75
-
76
- <h4>Google Analytics</h4>
77
- <dl class="dl-horizontal">
78
- <dt>Tracking ID</dt>
79
- <dd class="p-ga-tracking-id">UA-1234-1</dd>
80
-
81
- <dt>View Profile ID</dt>
82
- <dd class="p-ga-profile-id">ga:1234</dd>
83
- </dl>
84
-
85
- <div>
86
- <h4>
87
- <a href="http://192.168.33.30:3000/locations/g5-cl-6hc1xfr-perry-hertler/integration_settings/1/edit">Integration
88
- Settings</a>
89
- </h4>
90
- <dl class="dl-horizontal">
91
- <dt>Inventory Service URL</dt>
92
- <dd class="p-g5-inventory-service-url">http://localhost:5777/api/v1/storage_facilities</dd>
93
-
94
- <dt>Inventory Service Auth Token</dt>
95
- <dd class="p-g5-inventory-service-auth-token">
96
- authtoken
97
- </dd>
98
-
99
- <dt>ETL Strategy Name</dt>
100
- <dd class="p-g5-etl-strategy-name">EtlStrategies::Centershift4</dd>
101
-
102
- <dt>Inventory Vendor Endpoint</dt>
103
- <dd class="p-g5-inventory-vendor-endpoint">https://slc.centershift.com/sandbox40/SWS.asmx?WSDL</dd>
104
-
105
- <dt>Inventory Vendor User Name</dt>
106
- <dd class="p-g5-inventory-vendor-user-name">G-5TSite</dd>
107
-
108
- <dt>Inventory Vendor Password</dt>
109
- <dd class="p-g5-inventory-vendor-password">1qaz@Wsx</dd>
110
-
111
- <dt>Lead Strategy Name</dt>
112
- <dd class="p-g5-lead-strategy-name">LeadStrategies::SiteLink</dd>
113
-
114
- <dt>Lead Vendor Endpoint</dt>
115
- <dd class="p-g5-lead-vendor-endpoint">https://www.smdservers.net/CCWs_3.5/CallCenterWs.asmx?WSDL</dd>
116
-
117
- <dt>Lead Vendor User Name</dt>
118
- <dd class="p-g5-lead-vendor-user-name">Administrator</dd>
119
-
120
- <dt>Lead Vendor Password</dt>
121
- <dd class="p-g5-lead-vendor-password">Demo</dd>
122
-
123
- <dt class=p-g5-custom-integration-setting-name-0>corporate_code</dt>
124
- <dd class=p-g5-custom-integration-setting-value-0>1000000129</dd>
125
- <dt class=p-g5-custom-integration-setting-name-1>location_code</dt>
126
- <dd class=p-g5-custom-integration-setting-value-1>1000000678</dd>
127
- <dt class=p-g5-custom-integration-setting-name-2>channel</dt>
128
- <dd class=p-g5-custom-integration-setting-value-2>2</dd>
129
- </dl>
130
- </div>
131
-
132
-
133
- <dl>
134
- <dt>Twitter</dt>
135
- <dd class="p-nickname p-g5-nickname-twitter">G5Platform</dd>
136
- <dt>Facebook</dt>
137
- <dd class="p-nickname p-g5-nickname-facebook">GetG5</dd>
138
- <dt>Yelp</dt>
139
- <dd class="p-nickname p-g5-nickname-yelp">g5-bend</dd>
140
- <dt>Foursquare</dt>
141
- <dd class="p-nickname p-g5-nickname-foursquare">
142
- https://foursquare.com/v/g5-search-marketing/4b720385f964a5201b6a2de3
143
- </dd>
144
- </dl>
145
-
146
- <h4>Client</h4>
147
-
148
- <p class="p-org h-card">
149
- <a class="p-name u-uid u-url" href="http://example.com/clients/g5-c-1234-client">Test Client</a>
150
- </p>
151
- </section>
152
-
153
- </body>
154
- </html>
@@ -1,31 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe G5FoundationClient::Deserializers::Client do
4
- describe ".from_markup" do
5
- subject(:client) { G5FoundationClient::Deserializers::Client.from_markup(markup) }
6
-
7
- context "with many fields provided" do
8
- let(:markup) { fixture("client_detail.html") }
9
-
10
- its(:uid) { should eq("http://example.com/clients/g5-c-1234-client") }
11
- its(:urn) { should eq("g5-c-1234-client") }
12
- its(:name) { should eq("Test Client") }
13
- its(:vertical) { should eq("Apartments") }
14
- its(:domain) { should eq("http://example.com/") }
15
- its(:domain_type) { should eq("MultiDomainClient") }
16
-
17
- describe "#locations" do
18
- it "instantiates associated Locations" do
19
- expect(client.locations.length).to eq(2)
20
- expect(client.locations.first.name).to eq("Test Location 1")
21
- expect(client.locations.first.uid).to eq("http://example.com/clients/g5-c-1234-client/locations/g5-cl-1234-location")
22
- end
23
- end
24
- end
25
-
26
- context "missing many fields" do
27
- let(:markup) { fixture("empty_hcard.html") }
28
- its(:uid) { should be_nil }
29
- end
30
- end
31
- end
@@ -1,23 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe G5FoundationClient::Deserializers::IntegrationSetting do
4
- describe '.from_markup' do
5
- subject { G5FoundationClient::Deserializers::Location.from_markup(markup).integration_setting }
6
-
7
- context 'with many fields provided' do
8
- let(:markup) { fixture('location_detail.html') }
9
-
10
- its(:inventory_service_url) { should eq('http://localhost:5777/api/v1/storage_facilities') }
11
- its(:inventory_service_auth_token) { should eq('authtoken') }
12
- its(:etl_strategy_name) { should eq('EtlStrategies::Centershift4') }
13
- its(:inventory_vendor_endpoint) { should eq('https://slc.centershift.com/sandbox40/SWS.asmx?WSDL') }
14
- its(:inventory_vendor_user_name) { should eq('G-5TSite') }
15
- its(:inventory_vendor_password) { should eq('1qaz@Wsx') }
16
- its(:lead_strategy_name) { should eq('LeadStrategies::SiteLink') }
17
- its(:lead_vendor_endpoint) { should eq('https://www.smdservers.net/CCWs_3.5/CallCenterWs.asmx?WSDL') }
18
- its(:lead_vendor_user_name) { should eq('Administrator') }
19
- its(:lead_vendor_password) { should eq('Demo') }
20
- its(:custom_integration_settings) { should eq({corporate_code: '1000000129', location_code: '1000000678', channel: '2'}) }
21
- end
22
- end
23
- end
@@ -1,35 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe G5FoundationClient::Deserializers::Location do
4
- describe ".from_markup" do
5
- subject { G5FoundationClient::Deserializers::Location.from_markup(markup) }
6
-
7
- context "with many fields provided" do
8
- let(:markup) { fixture("location_detail.html") }
9
-
10
- its(:uid) { should eq("http://example.com/clients/g5-c-1234-client/locations/g5-cl-1234-location") }
11
- its(:urn) { should eq("g5-cl-1234-location") }
12
- its(:client_uid) { should eq("http://example.com/clients/g5-c-1234-client") }
13
- its(:name) { should eq("Test Location") }
14
- its(:phone_number) { should eq("123-123-1234") }
15
- its(:domain) { should eq("http://example.com/") }
16
- its(:corporate) { should be_true }
17
- its(:floor_plans) { should eq("1, 2, 3, studio apartments") }
18
- its(:primary_amenity) { should eq("Stainless Steel Appliances") }
19
- its(:qualifier) { should eq("Luxury") }
20
- its(:primary_landmark) { should eq("Venture Marina") }
21
- its(:ga_tracking_id) { should eq("UA-1234-1") }
22
- its(:ga_profile_id) { should eq("ga:1234") }
23
- its(:neighborhood) { should eq("West") }
24
- its(:street_address) { should eq("123 Test Way") }
25
- its(:locality) { should eq("Testville") }
26
- its(:region) { should eq("TK") }
27
- its(:postal_code) { should eq("31324") }
28
- end
29
-
30
- context "missing many fields" do
31
- let(:markup) { fixture("empty_hcard.html") }
32
- its(:uid) { should be_nil }
33
- end
34
- end
35
- end