g5_foundation_client 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 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