mdex_client 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/Rakefile +9 -0
- data/lib/mdex_client.rb +1 -0
- data/lib/mdex_client/active_record/extensions.rb +77 -0
- data/lib/mdex_client/client.rb +91 -0
- data/lib/mdex_client/fake_mdex.rb +1 -0
- data/lib/mdex_client/fake_mdex/fake_mdex.rb +23 -0
- data/lib/mdex_client/fake_mdex/mdex.wsdl +787 -0
- data/lib/mdex_client/fake_mdex/mdex_response.xml +7 -0
- data/lib/mdex_client/mdata/aggregate_record.rb +15 -0
- data/lib/mdex_client/mdata/aggregation_key.rb +19 -0
- data/lib/mdex_client/mdata/dimension.rb +51 -0
- data/lib/mdex_client/mdata/dimension_value.rb +47 -0
- data/lib/mdex_client/mdata/geocode.rb +14 -0
- data/lib/mdex_client/mdata/navigation_query.rb +135 -0
- data/lib/mdex_client/mdata/navigation_result.rb +75 -0
- data/lib/mdex_client/mdata/node.rb +64 -0
- data/lib/mdex_client/mdata/range_filter.rb +163 -0
- data/lib/mdex_client/mdata/record.rb +59 -0
- data/lib/mdex_client/mdata/refinement_config.rb +44 -0
- data/lib/mdex_client/mdata/search.rb +36 -0
- data/lib/mdex_client/mdata/sort.rb +26 -0
- data/lib/mdex_client/version.rb +3 -0
- data/mdex_client.gemspec +25 -0
- data/spec/spec_helper.rb +21 -0
- metadata +151 -0
@@ -0,0 +1,7 @@
|
|
1
|
+
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header/><soapenv:Body><mdata:Response xmlns:mdata="http://www.endeca.com/MDEX/data/IR600"><mdata:TypedResult><NavigationResults xmlns="http://www.endeca.com/MDEX/data/IR600"><Dimensions><Dimension Name="Category" Id="4294959480" MultiSelect="None"><DimensionValue Name="Category" Id="4294959480" IsLeaf="false" IsNavigable="false"><DimensionValues><DimensionValue Name="HEALTH CARE" Id="4294959366" IsLeaf="false" IsNavigable="true"><DimensionValues><DimensionValue Name="Ambulatory & Primary Health Care" Id="4294959354" IsLeaf="false" IsNavigable="true"><DimensionValues><DimensionValue Name="Group Health Practices" Id="4294959353" IsLeaf="true" IsNavigable="true"/></DimensionValues></DimensionValue><DimensionValue Name="Research Institutes & Public Policy Analysis" Id="4294959362" IsLeaf="true" IsNavigable="true"/><DimensionValue Name="Hospitals" Id="4294959358" IsLeaf="false" IsNavigable="true"><DimensionValues><DimensionValue Name="Specialty Hospitals" Id="4294959355" IsLeaf="true" IsNavigable="true"/><DimensionValue Name="Community Health Systems" Id="4294959357" IsLeaf="true" IsNavigable="true"/><DimensionValue Name="General Hospitals" Id="4294959356" IsLeaf="true" IsNavigable="true"/></DimensionValues></DimensionValue></DimensionValues></DimensionValue><DimensionValue Name="PUBLIC SAFETY, DISASTER PREPAREDNESS & RELIEF" Id="4294959157" IsLeaf="false" IsNavigable="true"><DimensionValues><DimensionValue Name="Disaster Preparedness & Relief Services" Id="4294959149" IsLeaf="false" IsNavigable="true"/></DimensionValues></DimensionValue><DimensionValue Name="COMMUNITY IMPROVEMENT & CAPACITY BUILDING" Id="4294958988" IsLeaf="false" IsNavigable="true"><DimensionValues><DimensionValue Name="Community Service Clubs" Id="4294958968" IsLeaf="false" IsNavigable="true"/></DimensionValues></DimensionValue></DimensionValues></DimensionValue></Dimension><Dimension Name="State" Id="13" MultiSelect="None"><DimensionValue Name="State" Id="13" IsLeaf="false" IsNavigable="false"><DimensionValues><DimensionValue Name="Iowa" Id="28" IsLeaf="true" IsNavigable="true"/><DimensionValue Name="Massachusetts" Id="35" IsLeaf="true" IsNavigable="true"/><DimensionValue Name="Arizona" Id="17" IsLeaf="true" IsNavigable="true"/><DimensionValue Name="California" Id="14" IsLeaf="true" IsNavigable="true"/><DimensionValue Name="Maryland" Id="36" IsLeaf="true" IsNavigable="true"/><DimensionValue Name="Ohio" Id="49" IsLeaf="true" IsNavigable="true"/><DimensionValue Name="Oregon" Id="51" IsLeaf="true" IsNavigable="true"/><DimensionValue Name="Illinois" Id="30" IsLeaf="true" IsNavigable="true"/></DimensionValues></DimensionValue></Dimension><Dimension Name="Income" Id="5" MultiSelect="None"><DimensionValue Name="Income" Id="5" IsLeaf="false" IsNavigable="false"><DimensionValues><DimensionValue Name="Greater than $10M" Id="12" IsLeaf="true" IsNavigable="true"/><DimensionValue Name="$100k - $500k" Id="7" IsLeaf="true" IsNavigable="true"/></DimensionValues></DimensionValue></Dimension><Dimension Name="IRS Sub Section" Id="4" MultiSelect="None"><DimensionValue Name="IRS Sub Section" Id="4" IsLeaf="false" IsNavigable="false"><DimensionValues><DimensionValue Name="501(c)(3) Public Charity" Id="4294959940" IsLeaf="true" IsNavigable="true"/><DimensionValue Name="501(c)(3) Private Nonoperating Foundation" Id="4294959893" IsLeaf="true" IsNavigable="true"/></DimensionValues></DimensionValue></Dimension><Dimension Name="City" Id="1" MultiSelect="None"><DimensionValue Name="City" Id="1" IsLeaf="false" IsNavigable="false"><DimensionValues><DimensionValue Name="Cleveland" Id="4294958394" IsLeaf="true" IsNavigable="true"/><DimensionValue Name="Phoenix" Id="4294958396" IsLeaf="true" IsNavigable="true"/><DimensionValue Name="Northfield" Id="4294957554" IsLeaf="true" IsNavigable="true"/><DimensionValue Name="Stanford" Id="4294958825" IsLeaf="true" IsNavigable="true"/><DimensionValue Name="Portland" Id="4294958395" IsLeaf="true" IsNavigable="true"/><DimensionValue Name="Westborough" Id="4294957507" IsLeaf="true" IsNavigable="true"/><DimensionValue Name="Cedar Falls" Id="4294952063" IsLeaf="true" IsNavigable="true"/><DimensionValue Name="San Pedro" Id="4294956472" IsLeaf="true" IsNavigable="true"/><DimensionValue Name="Oakland" Id="4294958818" IsLeaf="true" IsNavigable="true"/><DimensionValue Name="Glenview" Id="4294955486" IsLeaf="true" IsNavigable="true"/></DimensionValues></DimensionValue></Dimension></Dimensions><NavigationStatesResult><DimensionStates><DimensionState DimensionName="Category" DimensionId="4294959480"><Refinements ParentName="Category" ParentId="4294959480" HasMore="false" IsRefinable="true"/></DimensionState><DimensionState DimensionName="State" DimensionId="13"><Refinements ParentName="State" ParentId="13" HasMore="false" IsRefinable="true"/></DimensionState><DimensionState DimensionName="Income" DimensionId="5"><Refinements ParentName="Income" ParentId="5" HasMore="false" IsRefinable="true"/></DimensionState><DimensionState DimensionName="IRS Sub Section" DimensionId="4"><Refinements ParentName="IRS Sub Section" ParentId="4" HasMore="false" IsRefinable="true"/></DimensionState></DimensionStates></NavigationStatesResult><RecordsResult Offset="0" RecordsPerPage="10" TotalRecordCount="829320"><Records><Record Id="45-0233470"><Attributes><AssignedDimensionValue Key="Category" DimensionId="4294959480" Id="4294959357">Community Health Systems</AssignedDimensionValue><AssignedDimensionValue Key="State" DimensionId="13" Id="17">Arizona</AssignedDimensionValue><AssignedDimensionValue Key="City" DimensionId="1" Id="4294958396">Phoenix</AssignedDimensionValue><AssignedDimensionValue Key="Income" DimensionId="5" Id="12">Greater than $10M</AssignedDimensionValue><AssignedDimensionValue Key="IRS Sub Section" DimensionId="4" Id="4294959940">501(c)(3) Public Charity</AssignedDimensionValue><Property Key="Address1">1441 N 12TH St</Property><Property Key="Assets">5738090000.000000</Property><Property Key="ContactPhone">602-747-4000</Property><Property Key="created_at">2011-07-20 15:39:34.0</Property><Property Key="Deductibility">Contributions are deductible, as provided by law</Property><Property Key="deductibility_codes">1</Property><Property Key="Description">Community Health Systems</Property><Property Key="EIN">45-0233470</Property><Property Key="guidestar_updated_at">2011-08-04 00:34:17.0</Property><Property Key="id">1</Property><Property Key="IncomeValue">4180549890.000000</Property><Property Key="is_pub78_verified">true</Property><Property Key="Mission">BANNER HEALTH'S NONPROFIT MISSION IS TO MAKE A DIFFERENCE IN PEOPLE'S LIVES THROUH EXCELLENT PATIENT CARE</Property><Property Key="ntees">,,,E21</Property><Property Key="OrgName">BANNER HEALTH</Property><Property Key="pub78_date">2011-06-28</Property><Property Key="pub78_updated_at">2011-07-26 21:01:44.0</Property><Property Key="RulingYear">1977</Property><Property Key="UniqueId">45-0233470</Property><Property Key="updated_at">2011-08-04 00:34:17.0</Property><Property Key="Zip">85006</Property></Attributes></Record><Record Id="94-1105628"><Attributes><AssignedDimensionValue Key="Category" DimensionId="4294959480" Id="4294959357">Community Health Systems</AssignedDimensionValue><AssignedDimensionValue Key="State" DimensionId="13" Id="51">Oregon</AssignedDimensionValue><AssignedDimensionValue Key="City" DimensionId="1" Id="4294958395">Portland</AssignedDimensionValue><AssignedDimensionValue Key="Income" DimensionId="5" Id="12">Greater than $10M</AssignedDimensionValue><AssignedDimensionValue Key="IRS Sub Section" DimensionId="4" Id="4294959940">501(c)(3) Public Charity</AssignedDimensionValue><Property Key="Address1">2701 Nw Vauahn Street</Property><Property Key="Assets">22753200100.000000</Property><Property Key="ContactPhone">510-271-6611</Property><Property Key="created_at">2011-07-20 15:39:34.0</Property><Property Key="Deductibility">Contributions are deductible, as provided by law</Property><Property Key="deductibility_codes"/><Property Key="Description">Community Health Systems</Property><Property Key="EIN">94-1105628</Property><Property Key="guidestar_updated_at">2011-08-03 23:56:37.0</Property><Property Key="id">3</Property><Property Key="IncomeValue">14795299800.000000</Property><Property Key="is_pub78_verified">true</Property><Property Key="Mission">TO PROVIDE HIGH-QUALITY, AFFORDABLE HEALTH CARE SERVICES TO IMPROVE THE HEALTH OF OUR MEMBERS AND THE COMMUNITIES WE SERVE</Property><Property Key="ntees">,,,E21</Property><Property Key="OrgName">KAISER FOUNDATION HOSPITALS</Property><Property Key="pub78_date">2011-06-28</Property><Property Key="pub78_updated_at">2011-07-26 23:12:09.0</Property><Property Key="RulingYear">1949</Property><Property Key="UniqueId">94-1105628</Property><Property Key="updated_at">2011-08-03 23:56:37.0</Property><Property Key="Zip">97210</Property></Attributes></Record><Record Id="23-7095578"><Attributes><AssignedDimensionValue Key="Category" DimensionId="4294959480" Id="4294958968">Community Service Clubs</AssignedDimensionValue><AssignedDimensionValue Key="State" DimensionId="13" Id="28">Iowa</AssignedDimensionValue><AssignedDimensionValue Key="City" DimensionId="1" Id="4294952063">Cedar Falls</AssignedDimensionValue><AssignedDimensionValue Key="IRS Sub Section" DimensionId="4" Id="4294959940">501(c)(3) Public Charity</AssignedDimensionValue><Property Key="Address1">2221 W 8th St</Property><Property Key="Assets">0.000000</Property><Property Key="ContactEmail">KLaCascia@toastmasters.org</Property><Property Key="ContactFirstName">Kelly</Property><Property Key="ContactLastName">LaCascia</Property><Property Key="ContactPhone">949-8582865</Property><Property Key="ContactPrefix">Ms</Property><Property Key="ContactTitle">Associate Editor</Property><Property Key="created_at">2011-07-26 18:54:26.0</Property><Property Key="Deductibility">Contributions are deductible, as provided by law</Property><Property Key="deductibility_codes"/><Property Key="Description">Community Service Clubs (Kiwanis, Lions, Jaycees, etc.)</Property><Property Key="EIN">23-7095578</Property><Property Key="guidestar_updated_at">2011-08-03 13:25:19.0</Property><Property Key="id">212265</Property><Property Key="IncomeValue">0.000000</Property><Property Key="is_pub78_verified">true</Property><Property Key="Mission">The mission of a Toastmasters Club is to provide a mutually supportive and positive learning environment in which every member has the opportunity to develop communication and leadership skills, which in turn foster self-confidence and personal growth.</Property><Property Key="ntees">S80,,,</Property><Property Key="OrgName">Toastmasters International</Property><Property Key="Programs">Members of Toastmaster Clubs have access to a wide range of educational materials, including books, audio and videotapes, and seminar programs available at reduced cost through the Toastmasters International Supply Catalog.</Property><Property Key="pub78_date">2011-06-28</Property><Property Key="pub78_updated_at">2011-07-26 18:54:26.0</Property><Property Key="UniqueId">23-7095578</Property><Property Key="updated_at">2011-08-03 13:25:19.0</Property><Property Key="Url">http://www.toastmasters.org</Property><Property Key="Zip">50613</Property></Attributes></Record><Record Id="94-1340523"><Attributes><AssignedDimensionValue Key="Category" DimensionId="4294959480" Id="4294959353">Group Health Practices</AssignedDimensionValue><AssignedDimensionValue Key="State" DimensionId="13" Id="14">California</AssignedDimensionValue><AssignedDimensionValue Key="City" DimensionId="1" Id="4294958818">Oakland</AssignedDimensionValue><AssignedDimensionValue Key="Income" DimensionId="5" Id="12">Greater than $10M</AssignedDimensionValue><AssignedDimensionValue Key="IRS Sub Section" DimensionId="4" Id="4294959940">501(c)(3) Public Charity</AssignedDimensionValue><Property Key="Address1">One Kaiser Plz Ste 15L</Property><Property Key="Assets">11001900000.000000</Property><Property Key="ContactPhone">510-271-6611</Property><Property Key="created_at">2011-07-20 15:39:34.0</Property><Property Key="Deductibility">Contributions are deductible, as provided by law</Property><Property Key="deductibility_codes"/><Property Key="Description">Group Health Practice (Health Maintenance Organizations)</Property><Property Key="EIN">94-1340523</Property><Property Key="guidestar_updated_at">2011-08-04 00:47:45.0</Property><Property Key="id">4</Property><Property Key="IncomeValue">33221900300.000000</Property><Property Key="is_pub78_verified">true</Property><Property Key="Mission">TO PROVIDE HIGH-QUALITY, AFFORDABLE HEALTH CARE SERVICES TO IMPROVE THE HEALTH OF OUR MEMBERS AND THE COMMUNITIES WE SERVE</Property><Property Key="ntees">,,,E31</Property><Property Key="OrgName">KAISER FOUNDATION HEALTH PLAN INC</Property><Property Key="pub78_date">2011-06-28</Property><Property Key="pub78_updated_at">2011-07-26 23:12:19.0</Property><Property Key="RulingYear">1981</Property><Property Key="UniqueId">94-1340523</Property><Property Key="updated_at">2011-08-04 00:47:45.0</Property><Property Key="Zip">94612</Property></Attributes></Record><Record Id="36-6961913"><Attributes><AssignedDimensionValue Key="State" DimensionId="13" Id="30">Illinois</AssignedDimensionValue><AssignedDimensionValue Key="City" DimensionId="1" Id="4294957554">Northfield</AssignedDimensionValue><AssignedDimensionValue Key="Income" DimensionId="5" Id="7">$100k - $500k</AssignedDimensionValue><AssignedDimensionValue Key="IRS Sub Section" DimensionId="4" Id="4294959893">501(c)(3) Private Nonoperating Foundation</AssignedDimensionValue><Property Key="Address1">631 Briar Ln</Property><Property Key="Assets">1770170.000000</Property><Property Key="ContactPhone">847-291-4341</Property><Property Key="created_at">2011-07-26 20:29:47.0</Property><Property Key="Deductibility">Contributions are deductible, as provided by law</Property><Property Key="deductibility_codes">4</Property><Property Key="EIN">36-6961913</Property><Property Key="guidestar_updated_at">2011-08-03 20:37:19.0</Property><Property Key="id">424277</Property><Property Key="IncomeValue">208897.000000</Property><Property Key="is_pub78_verified">true</Property><Property Key="Mission">
|
2
|
+
No information currently in database.
|
3
|
+
</Property><Property Key="OrgName">THOMAS L & KATHLEEN G BINDLEY CHARITABLE TRUST</Property><Property Key="pub78_date">2011-06-28</Property><Property Key="pub78_updated_at">2011-07-26 20:29:47.0</Property><Property Key="RulingYear">1991</Property><Property Key="UniqueId">36-6961913</Property><Property Key="updated_at">2011-08-03 20:37:19.0</Property><Property Key="Zip">60093</Property></Attributes></Record><Record Id="23-7095580"><Attributes><AssignedDimensionValue Key="Category" DimensionId="4294959480" Id="4294958968">Community Service Clubs</AssignedDimensionValue><AssignedDimensionValue Key="State" DimensionId="13" Id="14">California</AssignedDimensionValue><AssignedDimensionValue Key="City" DimensionId="1" Id="4294956472">San Pedro</AssignedDimensionValue><AssignedDimensionValue Key="IRS Sub Section" DimensionId="4" Id="4294959940">501(c)(3) Public Charity</AssignedDimensionValue><Property Key="Address1">1748 Cumbre Dr</Property><Property Key="Assets">0.000000</Property><Property Key="ContactEmail">KLaCascia@toastmasters.org</Property><Property Key="ContactFirstName">Kelly</Property><Property Key="ContactLastName">LaCascia</Property><Property Key="ContactPhone">949-8582865</Property><Property Key="ContactPrefix">Ms</Property><Property Key="ContactTitle">Associate Editor</Property><Property Key="created_at">2011-07-26 18:54:26.0</Property><Property Key="Deductibility">Contributions are deductible, as provided by law</Property><Property Key="deductibility_codes"/><Property Key="Description">Community Service Clubs (Kiwanis, Lions, Jaycees, etc.)</Property><Property Key="EIN">23-7095580</Property><Property Key="guidestar_updated_at">2011-07-28 00:10:08.0</Property><Property Key="id">212266</Property><Property Key="IncomeValue">0.000000</Property><Property Key="is_pub78_verified">true</Property><Property Key="Mission">The mission of a Toastmasters Club is to provide a mutually supportive and positive learning environment in which every member has the opportunity to develop communication and leadership skills, which in turn foster self-confidence and personal growth.</Property><Property Key="ntees">S80,,,</Property><Property Key="OrgName">Toastmasters International</Property><Property Key="Programs">Members of Toastmaster Clubs have access to a wide range of educational materials, including books, audio and videotapes, and seminar programs available at reduced cost through the Toastmasters International Supply Catalog.</Property><Property Key="pub78_date">2011-06-28</Property><Property Key="pub78_updated_at">2011-07-26 18:54:26.0</Property><Property Key="UniqueId">23-7095580</Property><Property Key="updated_at">2011-07-28 00:10:08.0</Property><Property Key="Url">http://www.toastmasters.org</Property><Property Key="Zip">90732</Property></Attributes></Record><Record Id="34-0714585"><Attributes><AssignedDimensionValue Key="Category" DimensionId="4294959480" Id="4294959357">Community Health Systems</AssignedDimensionValue><AssignedDimensionValue Key="Category" DimensionId="4294959480" Id="4294959353">Group Health Practices</AssignedDimensionValue><AssignedDimensionValue Key="Category" DimensionId="4294959480" Id="4294959362">Research Institutes & Public Policy Analysis</AssignedDimensionValue><AssignedDimensionValue Key="Category" DimensionId="4294959480" Id="4294959355">Specialty Hospitals</AssignedDimensionValue><AssignedDimensionValue Key="State" DimensionId="13" Id="49">Ohio</AssignedDimensionValue><AssignedDimensionValue Key="City" DimensionId="1" Id="4294958394">Cleveland</AssignedDimensionValue><AssignedDimensionValue Key="Income" DimensionId="5" Id="12">Greater than $10M</AssignedDimensionValue><AssignedDimensionValue Key="IRS Sub Section" DimensionId="4" Id="4294959940">501(c)(3) Public Charity</AssignedDimensionValue><Property Key="Address1">9500 Euclid Ave</Property><Property Key="Address2">H-18</Property><Property Key="Aka">CCF</Property><Property Key="Assets">4721790000.000000</Property><Property Key="ContactEmail">waitkur@ccf.org</Property><Property Key="ContactFax">216-4457470</Property><Property Key="ContactFirstName">Robert</Property><Property Key="ContactLastName">Waitkus</Property><Property Key="ContactPhone">216-4442200</Property><Property Key="ContactPrefix">Mr.</Property><Property Key="ContactTitle">Senior Director - Taxation & Compliance</Property><Property Key="created_at">2011-07-20 15:39:34.0</Property><Property Key="Deductibility">Contributions are deductible, as provided by law</Property><Property Key="deductibility_codes">1</Property><Property Key="Description">Hospital (Specialty)Group Health Practice (Health Maintenance Organizations)Research Institutes and/or Public Policy AnalysisCommunity Health Systems</Property><Property Key="EIN">34-0714585</Property><Property Key="ExecutiveFirstName">Delos (Toby)</Property><Property Key="ExecutiveLastName">Cosgrove</Property><Property Key="ExecutivePrefix">Dr.</Property><Property Key="ExecutiveTitle">CEO & President, Chairman, Board of Governors</Property><Property Key="guidestar_updated_at">2011-08-03 21:21:28.0</Property><Property Key="id">5</Property><Property Key="IncomeValue">2975079940.000000</Property><Property Key="is_pub78_verified">true</Property><Property Key="Mission">Patient Care, Research and Education.</Property><Property Key="ntees">E24,E31,E05,E21</Property><Property Key="OrgName">Cleveland Clinic Foundation</Property><Property Key="Programs">The Cleveland Clinic Foundation was established in 1921 for the singular purpose of benefiting humanity through the efficient, effective and ethical practice of medicine, by advocating scientific investigation and medical education, by maintaining the highest standards of quality, and by honoring creativity and innovation. That ideal continues today with the delivery of world-class healthcare to thousands of patients from Northeast Ohio, across the United States, and around the world. The Foundation is dedicated to its mission statement: "..better care of the sick, investigation into their problems, and further education of those who serve." The goals of the Foundation are pursued and achieved through three significant functions: Patient Care, Research, and Education. The Cleveland Clinic has distinguished itself as a world premier health care institution not by simply carrying out these activities, but rather by the successful interaction between these functions on a collaborative basis.</Property><Property Key="pub78_date">2011-06-28</Property><Property Key="pub78_updated_at">2011-07-26 20:10:59.0</Property><Property Key="RulingYear">1928</Property><Property Key="UniqueId">34-0714585</Property><Property Key="updated_at">2011-08-03 21:21:28.0</Property><Property Key="Url">www.clevelandclinic.org</Property><Property Key="YearFounded">1921</Property><Property Key="Zip">44195</Property></Attributes></Record><Record Id="94-6174066"><Attributes><AssignedDimensionValue Key="Category" DimensionId="4294959480" Id="4294959356">General Hospitals</AssignedDimensionValue><AssignedDimensionValue Key="State" DimensionId="13" Id="14">California</AssignedDimensionValue><AssignedDimensionValue Key="City" DimensionId="1" Id="4294958825">Stanford</AssignedDimensionValue><AssignedDimensionValue Key="Income" DimensionId="5" Id="12">Greater than $10M</AssignedDimensionValue><AssignedDimensionValue Key="IRS Sub Section" DimensionId="4" Id="4294959940">501(c)(3) Public Charity</AssignedDimensionValue><Property Key="Address1">300 Pasteur Dr Mc 5510</Property><Property Key="Assets">2156940030.000000</Property><Property Key="ContactPhone">650-723-4000</Property><Property Key="created_at">2011-07-20 15:39:34.0</Property><Property Key="Deductibility">Contributions are deductible, as provided by law</Property><Property Key="deductibility_codes"/><Property Key="Description">Hospital (General)</Property><Property Key="EIN">94-6174066</Property><Property Key="guidestar_updated_at">2011-08-03 21:21:33.0</Property><Property Key="id">28</Property><Property Key="IncomeValue">1769549950.000000</Property><Property Key="is_pub78_verified">true</Property><Property Key="Mission">STANFORD HOSPITAL AND CLINICS ("SHC") IS A NON-PROFIT CALIFORNIA PUBLIC BENEFIT CORPORATION OF WHICH THE BOARD OF TRUSTEES OF LELAND STANFORD JUNIOR UNIVERSITY (THE "UNIV ERSITY") IS THE SOLE MEMBER THE objective and the PURPOSE OF SHC IS TO provide patient care services, SUPPORT, BENEFIT AND FURTHER THE CHARITABLE, and SCHIENTIFIC AND EDUCATIONAL PURPOSES OF THE UNIVERSITY AND THE UNIVERSITY'S SCHOOL OF MEDICINE</Property><Property Key="ntees">,,,E22</Property><Property Key="OrgName">STANFORD HOSPITAL AND CLINICS </Property><Property Key="pub78_date">2011-06-28</Property><Property Key="pub78_updated_at">2011-07-26 23:19:27.0</Property><Property Key="RulingYear">1959</Property><Property Key="UniqueId">94-6174066</Property><Property Key="updated_at">2011-08-03 21:21:33.0</Property><Property Key="Zip">94305</Property></Attributes></Record><Record Id="36-6961931"><Attributes><AssignedDimensionValue Key="State" DimensionId="13" Id="30">Illinois</AssignedDimensionValue><AssignedDimensionValue Key="City" DimensionId="1" Id="4294955486">Glenview</AssignedDimensionValue><AssignedDimensionValue Key="Income" DimensionId="5" Id="7">$100k - $500k</AssignedDimensionValue><AssignedDimensionValue Key="IRS Sub Section" DimensionId="4" Id="4294959893">501(c)(3) Private Nonoperating Foundation</AssignedDimensionValue><Property Key="Address1">800 Waukegan Rd</Property><Property Key="Assets">1983400.000000</Property><Property Key="ContactPhone">847-729-1900</Property><Property Key="created_at">2011-07-26 20:29:47.0</Property><Property Key="Deductibility">Contributions are deductible, as provided by law</Property><Property Key="deductibility_codes">4</Property><Property Key="EIN">36-6961931</Property><Property Key="guidestar_updated_at">2011-08-03 20:52:08.0</Property><Property Key="id">424278</Property><Property Key="IncomeValue">435475.000000</Property><Property Key="is_pub78_verified">true</Property><Property Key="Mission">
|
4
|
+
No information currently in database.
|
5
|
+
</Property><Property Key="OrgName">PETER G WAGNER CHARITABLE FOUNDATION</Property><Property Key="pub78_date">2011-06-28</Property><Property Key="pub78_updated_at">2011-07-26 20:29:47.0</Property><Property Key="RulingYear">1991</Property><Property Key="UniqueId">36-6961931</Property><Property Key="updated_at">2011-08-03 20:52:08.0</Property><Property Key="Zip">60025</Property></Attributes></Record><Record Id="27-1325280"><Attributes><AssignedDimensionValue Key="Category" DimensionId="4294959480" Id="4294959149">Disaster Preparedness & Relief Services</AssignedDimensionValue><AssignedDimensionValue Key="State" DimensionId="13" Id="36">Maryland</AssignedDimensionValue><AssignedDimensionValue Key="State" DimensionId="13" Id="35">Massachusetts</AssignedDimensionValue><AssignedDimensionValue Key="City" DimensionId="1" Id="4294957507">Westborough</AssignedDimensionValue><AssignedDimensionValue Key="IRS Sub Section" DimensionId="4" Id="4294959940">501(c)(3) Public Charity</AssignedDimensionValue><Property Key="Address1">PO Box 41</Property><Property Key="Address2">% Tarun Batra</Property><Property Key="Assets">0.000000</Property><Property Key="created_at">2011-07-26 19:39:28.0</Property><Property Key="Deductibility">Contributions are deductible, as provided by law</Property><Property Key="deductibility_codes"/><Property Key="Description">Disaster Preparedness and Relief Services</Property><Property Key="EIN">27-1325280</Property><Property Key="guidestar_updated_at">2011-08-03 14:41:56.0</Property><Property Key="id">310376</Property><Property Key="IncomeValue">0.000000</Property><Property Key="is_pub78_verified">true</Property><Property Key="Mission">
|
6
|
+
No information currently in database.
|
7
|
+
</Property><Property Key="ntees">,,,M20</Property><Property Key="OrgName">VOICE FOR EARTH INC </Property><Property Key="pub78_date">2011-06-28</Property><Property Key="pub78_updated_at">2011-07-26 19:39:28.0</Property><Property Key="RulingYear">2010</Property><Property Key="UniqueId">27-1325280</Property><Property Key="updated_at">2011-08-03 14:41:56.0</Property><Property Key="Zip">1581</Property></Attributes></Record></Records></RecordsResult><AppliedFilters/><BusinessRulesResult/><KeywordRedirects/><AnalyticsResult/></NavigationResults></mdata:TypedResult></mdata:Response></soapenv:Body></soapenv:Envelope>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'mdex_client/mdata/node'
|
2
|
+
|
3
|
+
module MDEXClient
|
4
|
+
module MData
|
5
|
+
class AggregateRecord < Record
|
6
|
+
attr_accessor :derived_properties, :constituent_records, :records_in_aggregate
|
7
|
+
|
8
|
+
def initialize_from_element!
|
9
|
+
@records_in_aggregate = @element["RecordsInAggregate"].to_i
|
10
|
+
@derived_properties = property_list("mdata:DerivedProperties/mdata:Property")
|
11
|
+
@constituent_records = record_list("mdata:ConstituentRecords")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'mdex_client/mdata/node'
|
2
|
+
|
3
|
+
module MDEXClient
|
4
|
+
module MData
|
5
|
+
class AggregationKey < Node
|
6
|
+
attr_accessor :name, :records_per_aggregate_record
|
7
|
+
|
8
|
+
def initialize_from_element!
|
9
|
+
@name = element.text
|
10
|
+
@records_per_aggregate_record = element["RecordsPerAggregateRecord"].to_i
|
11
|
+
end
|
12
|
+
|
13
|
+
def write_xml!(xml)
|
14
|
+
xml.mdata :AggregationKey, "RecordsPerAggregateRecord" => records_per_aggregate_record,
|
15
|
+
name
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'mdex_client/mdata/node'
|
2
|
+
require 'mdex_client/mdata/dimension_value'
|
3
|
+
|
4
|
+
module MDEXClient
|
5
|
+
module MData
|
6
|
+
class Dimension < Node
|
7
|
+
attr_accessor :id, :name, :multi_select, :group_name, :values, :refinements,
|
8
|
+
:parent_id, :selected_value_ids, :implicit_value_ids
|
9
|
+
|
10
|
+
def initialize_from_element!
|
11
|
+
@id = @element["Id"].to_i
|
12
|
+
@name = @element["Name"]
|
13
|
+
@multi_select = @element["MultiSelect"]
|
14
|
+
@group_name = @element["GroupName"]
|
15
|
+
|
16
|
+
@values = {}
|
17
|
+
xpath("mdata:DimensionValue").each do |value|
|
18
|
+
dv = DimensionValue.new(value)
|
19
|
+
dv.dimension = self
|
20
|
+
@values[dv.id] = dv
|
21
|
+
end
|
22
|
+
|
23
|
+
@refinements ||= []
|
24
|
+
@selected_value_ids ||= []
|
25
|
+
@implicit_value_ids ||= []
|
26
|
+
end
|
27
|
+
|
28
|
+
def initialize_dimension_state!(element, dimension_values)
|
29
|
+
node = Node.new(element)
|
30
|
+
refinement_list = node.xpath("mdata:Refinements").first
|
31
|
+
if refinement_list
|
32
|
+
@parent_id = refinement_list["ParentId"].to_i
|
33
|
+
@has_more_refinements = (refinement_list["HasMore"] == "true")
|
34
|
+
@is_refinable = (refinement_list["IsRefinable"] == "true")
|
35
|
+
end
|
36
|
+
|
37
|
+
@refinements = node.dimension_value_state_list("mdata:Refinements", dimension_values)
|
38
|
+
@selected_value_ids = node.dimension_value_state_list("mdata:SelectedDimensionValues", dimension_values)
|
39
|
+
@implicit_value_ids = node.dimension_value_state_list("mdata:ImplicitDimensionValues", dimension_values)
|
40
|
+
end
|
41
|
+
|
42
|
+
def has_more_refinements?
|
43
|
+
@has_more_refinements
|
44
|
+
end
|
45
|
+
|
46
|
+
def refinable?
|
47
|
+
@is_refinable
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'mdex_client/mdata/node'
|
2
|
+
|
3
|
+
module MDEXClient
|
4
|
+
module MData
|
5
|
+
class DimensionValue < Node
|
6
|
+
attr_accessor :id, :dimension, :parent, :name, :static_record_count, :values, :properties
|
7
|
+
|
8
|
+
def initialize_from_element!
|
9
|
+
@id = @element["Id"].to_i
|
10
|
+
@name = @element["Name"]
|
11
|
+
@is_leaf = @element["IsLeaf"] == "true"
|
12
|
+
@is_navigable = @element["IsNavigable"] == "true"
|
13
|
+
@static_record_count = @element["StaticRecordCount"].to_i
|
14
|
+
|
15
|
+
@values = {}
|
16
|
+
xpath("mdata:DimensionValues/mdata:DimensionValue").each do |value|
|
17
|
+
dv = DimensionValue.new(value)
|
18
|
+
dv.parent = self
|
19
|
+
@values[dv.id] = dv
|
20
|
+
end
|
21
|
+
|
22
|
+
@properties = property_list("mdata:Properties/mdata:Property")
|
23
|
+
end
|
24
|
+
|
25
|
+
def dimension=(new_dimension)
|
26
|
+
@dimension = new_dimension
|
27
|
+
values.each do |id, value|
|
28
|
+
value.dimension = new_dimension
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def leaf?
|
33
|
+
@is_leaf
|
34
|
+
end
|
35
|
+
|
36
|
+
def navigable?
|
37
|
+
@is_navigable
|
38
|
+
end
|
39
|
+
|
40
|
+
def ancestors
|
41
|
+
a = parent ? parent.ancestors : []
|
42
|
+
a << parent if parent
|
43
|
+
a
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'mdex_client/mdata/node'
|
2
|
+
|
3
|
+
module MDEXClient
|
4
|
+
module MData
|
5
|
+
class Geocode < Node
|
6
|
+
attr_accessor :latitude, :longitude
|
7
|
+
|
8
|
+
def initialize_from_element!
|
9
|
+
@latitude = element["Latitude"].to_f
|
10
|
+
@longitude = element["Longitude"].to_f
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,135 @@
|
|
1
|
+
require 'mdex_client/mdata/node'
|
2
|
+
require 'mdex_client/mdata/sort'
|
3
|
+
require 'mdex_client/mdata/search'
|
4
|
+
require 'mdex_client/mdata/range_filter'
|
5
|
+
|
6
|
+
module MDEXClient
|
7
|
+
module MData
|
8
|
+
class NavigationQuery < Node
|
9
|
+
attr_accessor :selected_dimension_value_ids, :refinement_configs,
|
10
|
+
:expose_all_refinements, :aggregation_key,
|
11
|
+
:record_offset, :records_per_page, :included_record_attributes, :sorts,
|
12
|
+
:business_rules_filter, :business_rules_preview_time, :eql_expression,
|
13
|
+
:record_filter, :range_filters, :searches, :enable_did_you_mean, :analytics_expression,
|
14
|
+
:user_profiles, :language_id, :dimension_value_strata, :alternative_phrasing_mode
|
15
|
+
|
16
|
+
def write_xml!(xml)
|
17
|
+
if selected_dimension_value_ids
|
18
|
+
xml.mdata :SelectedDimensionValueIds do
|
19
|
+
selected_dimension_value_ids.each do |id|
|
20
|
+
xml.mdata :DimensionValueId, id
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
if refinement_configs || expose_all_refinements
|
26
|
+
params = {}
|
27
|
+
params["ExposeAllRefinements"] = true if expose_all_refinements
|
28
|
+
xml.mdata :RefinementConfigs, params do
|
29
|
+
if refinement_configs
|
30
|
+
refinement_configs.each do |conf|
|
31
|
+
conf.write_xml!(xml)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
aggregation_key.try(:write_xml!)
|
38
|
+
xml.mdata :RecordOffset, record_offset if record_offset
|
39
|
+
xml.mdata :RecordsPerPage, records_per_page if records_per_page
|
40
|
+
|
41
|
+
if included_record_attributes
|
42
|
+
xml.mdata :IncludedRecordAttributes do
|
43
|
+
included_record_attributes.each do |a|
|
44
|
+
xml.mdata :IncludedRecordAttribute, a
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
if sorts
|
50
|
+
xml.mdata :Sorts do
|
51
|
+
sorts.each do |sort|
|
52
|
+
sort.write_xml!(xml)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
xml.mdata :BusinessRulesFilter, business_rules_filter if business_rules_filter
|
58
|
+
if business_rules_preview_time
|
59
|
+
xml.mdata :BusinessRulesPreviewTime,
|
60
|
+
business_rules_preview_time.utc.strftime("%Y-%m-%dT%H:%M:%S")
|
61
|
+
end
|
62
|
+
|
63
|
+
xml.mdata :EqlExpression, eql_expression if eql_expression
|
64
|
+
xml.mdata :RecordFilter, record_filter if record_filter
|
65
|
+
|
66
|
+
if range_filters.present?
|
67
|
+
xml.mdata :RangeFilters do
|
68
|
+
range_filters.each do |filter|
|
69
|
+
filter.write_xml!(xml)
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
if searches && searches.any? { |key, search| search.query.present? }
|
75
|
+
searches_attrs = {}
|
76
|
+
searches_attrs["EnableDidYouMean"] = enable_did_you_mean.to_s if enable_did_you_mean
|
77
|
+
xml.mdata :Searches, searches_attrs do
|
78
|
+
searches.each do |key, search|
|
79
|
+
next unless search.query.present?
|
80
|
+
search.write_xml!(xml)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def sorts=(new_sorts)
|
87
|
+
@sorts = convert_items(new_sorts, Sort)
|
88
|
+
end
|
89
|
+
|
90
|
+
def searches=(new_searches)
|
91
|
+
@searches = new_searches.inject({}) do |memo, (key, params)|
|
92
|
+
memo[key] = case params
|
93
|
+
when Search
|
94
|
+
params
|
95
|
+
when Hash
|
96
|
+
Search.new(params.merge(:key => key))
|
97
|
+
else
|
98
|
+
raise "Can't initialize a Search using #{params.inspect}"
|
99
|
+
end
|
100
|
+
|
101
|
+
memo
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def refinement_configs=(new_rcs)
|
106
|
+
@refinement_configs = convert_items(new_rcs, RefinementConfig)
|
107
|
+
end
|
108
|
+
|
109
|
+
def main_search_query
|
110
|
+
@searches ||= {}
|
111
|
+
@searches["mainSearch"].try(:query)
|
112
|
+
end
|
113
|
+
|
114
|
+
def main_search_query=(query)
|
115
|
+
@searches ||= {}
|
116
|
+
@searches["mainSearch"] ||= Search.new
|
117
|
+
@searches["mainSearch"].key = "mainSearch"
|
118
|
+
@searches["mainSearch"].query = query
|
119
|
+
@searches["mainSearch"].enable_snippeting = true
|
120
|
+
@searches["mainSearch"].snippet_length = 100
|
121
|
+
end
|
122
|
+
|
123
|
+
protected
|
124
|
+
def convert_items(arr, klass)
|
125
|
+
arr.collect do |item|
|
126
|
+
if item.is_a?(klass)
|
127
|
+
item
|
128
|
+
else
|
129
|
+
klass.new(item)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'mdex_client/mdata/node'
|
2
|
+
require 'mdex_client/mdata/dimension'
|
3
|
+
require 'mdex_client/mdata/refinement_config'
|
4
|
+
require 'mdex_client/mdata/record'
|
5
|
+
require 'mdex_client/mdata/aggregate_record'
|
6
|
+
|
7
|
+
module MDEXClient
|
8
|
+
module MData
|
9
|
+
class NavigationResult < Node
|
10
|
+
attr_accessor :dimensions, :dimension_values, :refinement_configs, :offset,
|
11
|
+
:records_per_page, :total_record_count,
|
12
|
+
:total_aggregate_record_count, :records, :eql_expression,
|
13
|
+
:range_filters, :record_filter, :search_reports, :selected_dimension_value_ids,
|
14
|
+
:language_id, :business_rules, :keyword_redirects, :analytics
|
15
|
+
|
16
|
+
def initialize_from_element!
|
17
|
+
@dimensions = {}
|
18
|
+
@dimension_values = {}
|
19
|
+
xpath("mdata:Dimensions/mdata:Dimension").each do |child|
|
20
|
+
dim = Dimension.new(child)
|
21
|
+
@dimensions[dim.id.to_i] = dim
|
22
|
+
add_dimension_values!(dim.values)
|
23
|
+
end
|
24
|
+
|
25
|
+
xpath("mdata:NavigationStatesResult/mdata:DimensionStates/mdata:DimensionState").each do |child|
|
26
|
+
dim = @dimensions[child["DimensionId"].to_i]
|
27
|
+
dim.initialize_dimension_state!(child, @dimension_values)
|
28
|
+
end
|
29
|
+
|
30
|
+
refinement_configs = xpath("mdata:NavigationStatesResult/mdata:RefinementConfigs").first
|
31
|
+
@expose_all_refinements = (refinement_configs["ExposeAllRefinements"] == "true") if refinement_configs
|
32
|
+
@refinement_configs = xpath("mdata:NavigationStatesResult/mdata:RefinementConfigs/mdata:RefinementConfig").collect do |child|
|
33
|
+
RefinementConfig.new(child)
|
34
|
+
end
|
35
|
+
|
36
|
+
records_result = xpath("mdata:RecordsResult").first
|
37
|
+
|
38
|
+
@offset = records_result["Offset"].to_i
|
39
|
+
@records_per_page = records_result["RecordsPerPage"].to_i
|
40
|
+
@total_record_count = records_result["TotalRecordCount"].to_i
|
41
|
+
@total_aggregate_record_count = records_result["TotalAggregateRecordCount"].to_i
|
42
|
+
@records = record_list("mdata:RecordsResult/mdata:Records")
|
43
|
+
|
44
|
+
applied_filters = xpath("mdata:NavigationAppliedFilters")
|
45
|
+
if applied_filters.count > 0
|
46
|
+
af = Node.new(applied_filters.first)
|
47
|
+
@eql_expression = af.xpath("mdata:EqlExpression").text
|
48
|
+
@record_filter = af.xpath("mdata:RecordFilter").text
|
49
|
+
#TODO: search reports
|
50
|
+
@selected_dimension_value_ids = af.xpath("mdata:SelectedDimensionValueIds/mdata:DimensionValueId").collect(&:to_i)
|
51
|
+
@language_id = af.xpath("mdata:LanguageId").text
|
52
|
+
end
|
53
|
+
@range_filters = xpath("mdata:NavigationAppliedFilters/mdata:RangeFilterList").children.collect do |filter|
|
54
|
+
RangeFilter.from_element(filter)
|
55
|
+
end
|
56
|
+
|
57
|
+
#TODO: business rules
|
58
|
+
#TODO: keyword redirects
|
59
|
+
#TODO: analytics
|
60
|
+
end
|
61
|
+
|
62
|
+
def add_dimension_values!(values)
|
63
|
+
values.each do |id, value|
|
64
|
+
next if @dimension_values[id]
|
65
|
+
@dimension_values[id] = value
|
66
|
+
add_dimension_values!(value.values)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def expose_all_refinements?
|
71
|
+
@expose_all_refinements
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'mdex_client/client'
|
2
|
+
|
3
|
+
module MDEXClient
|
4
|
+
module MData
|
5
|
+
class Node
|
6
|
+
attr_accessor :element
|
7
|
+
|
8
|
+
def initialize(element_or_hash=nil)
|
9
|
+
return if element_or_hash.nil?
|
10
|
+
|
11
|
+
case element_or_hash
|
12
|
+
when Nokogiri::XML::Element, Nokogiri::XML::NodeSet
|
13
|
+
@element = element_or_hash
|
14
|
+
initialize_from_element!
|
15
|
+
when Hash
|
16
|
+
element_or_hash.each do |key, value|
|
17
|
+
send("#{key}=", value)
|
18
|
+
end
|
19
|
+
else
|
20
|
+
raise "Invalid type to initialize a MDEXClient::MData::Node: #{element_or_hash.class}"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Subclasses should override this to initialize the appropriate fields from the
|
25
|
+
# provided XML element.
|
26
|
+
def initialize_from_element!
|
27
|
+
end
|
28
|
+
|
29
|
+
def css(search)
|
30
|
+
@element.css(search, MDEXClient::Client::NAMESPACES)
|
31
|
+
end
|
32
|
+
|
33
|
+
def xpath(search)
|
34
|
+
@element.xpath(search, MDEXClient::Client::NAMESPACES)
|
35
|
+
end
|
36
|
+
|
37
|
+
def record_list(search)
|
38
|
+
records = xpath("#{search}/mdata:Record").collect do |child|
|
39
|
+
Record.new(child)
|
40
|
+
end
|
41
|
+
|
42
|
+
xpath("#{search}/mdata:AggregateRecord").each do |child|
|
43
|
+
records << AggregateRecord.new(child)
|
44
|
+
end
|
45
|
+
|
46
|
+
records
|
47
|
+
end
|
48
|
+
|
49
|
+
def property_list(search)
|
50
|
+
xpath(search).inject({}) do |memo, property|
|
51
|
+
memo[property["Key"]] = property.text
|
52
|
+
memo
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def dimension_value_state_list(search, dimension_values)
|
57
|
+
query = "#{search}/mdata:DimensionValue | #{search}/mdata:DimensionValueReference"
|
58
|
+
xpath(query).collect do |dv|
|
59
|
+
dimension_values[dv["Id"].to_i]
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,163 @@
|
|
1
|
+
require 'mdex_client/mdata/node'
|
2
|
+
require 'mdex_client/mdata/geocode'
|
3
|
+
|
4
|
+
module MDEXClient
|
5
|
+
module MData
|
6
|
+
class RangeFilter < Node
|
7
|
+
class UnknownFilterType < Exception
|
8
|
+
attr_accessor :filter_type
|
9
|
+
|
10
|
+
def initialize(filter_type)
|
11
|
+
@filter_type = filter_type
|
12
|
+
super("Unknown filter type: #{filter_type}")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
attr_accessor :attribute_name
|
17
|
+
|
18
|
+
def initialize_from_element!
|
19
|
+
@attribute_name = element["AttributeName"]
|
20
|
+
end
|
21
|
+
|
22
|
+
def attribute_attr
|
23
|
+
{ "AttributeName" => @attribute_name }
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.from_element(element)
|
27
|
+
case element.name
|
28
|
+
when "LessThanFilter"
|
29
|
+
LessThanFilter.new(element)
|
30
|
+
when "LessThanOrEqualFilter"
|
31
|
+
LessThanOrEqualFilter.new(element)
|
32
|
+
when "GreaterThanFilter"
|
33
|
+
GreaterThanFilter.new(element)
|
34
|
+
when "GreaterThanOrEqualFilter"
|
35
|
+
GreaterThanOrEqualFilter.new(element)
|
36
|
+
when "BetweenFilter"
|
37
|
+
BetweenFilter.new(element)
|
38
|
+
else
|
39
|
+
raise UnknownFilterType.new(element.name)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
module UpperBound
|
44
|
+
attr_accessor :upper_bound
|
45
|
+
|
46
|
+
def init_upper_bound_from_element!
|
47
|
+
@upper_bound = element["UpperBound"].to_f
|
48
|
+
end
|
49
|
+
|
50
|
+
def upper_bound_attr
|
51
|
+
{ "UpperBound" => @upper_bound }
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
module LowerBound
|
56
|
+
attr_accessor :lower_bound
|
57
|
+
|
58
|
+
def init_lower_bound_from_element!
|
59
|
+
@lower_bound = element["LowerBound"].to_f
|
60
|
+
end
|
61
|
+
|
62
|
+
def lower_bound_attr
|
63
|
+
{ "LowerBound" => @lower_bound }
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
module GeocodeReference
|
68
|
+
attr_accessor :geocode_reference
|
69
|
+
|
70
|
+
def init_geocode_reference_from_element!
|
71
|
+
gc = xpath("mdata:GeocodeReference")
|
72
|
+
@geocode_reference = Geocode.new(gc) if gc
|
73
|
+
end
|
74
|
+
|
75
|
+
def write_geocode_reference!(xml)
|
76
|
+
return unless @geocode_reference
|
77
|
+
|
78
|
+
xml.mdata :GeocodeReference, "Latitude" => @geocode_reference.latitude,
|
79
|
+
"Longitude" => @geocode_reference.longitude
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
class LessThanFilter < RangeFilter
|
85
|
+
include RangeFilter::UpperBound
|
86
|
+
include RangeFilter::GeocodeReference
|
87
|
+
|
88
|
+
def initialize_from_element!
|
89
|
+
super
|
90
|
+
init_upper_bound_from_element!
|
91
|
+
init_geocode_reference_from_element!
|
92
|
+
end
|
93
|
+
|
94
|
+
def write_xml!(xml)
|
95
|
+
xml.mdata :LessThanFilter, attribute_attr.merge(upper_bound_attr) do
|
96
|
+
write_geocode_reference! xml
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
class LessThanOrEqualFilter < RangeFilter
|
102
|
+
include RangeFilter::UpperBound
|
103
|
+
|
104
|
+
def initialize_from_element!
|
105
|
+
super
|
106
|
+
init_upper_bound_from_element!
|
107
|
+
end
|
108
|
+
|
109
|
+
def write_xml!(xml)
|
110
|
+
xml.mdata :LessThanOrEqualFilter, attribute_attr.merge(upper_bound_attr)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
class GreaterThanFilter < RangeFilter
|
115
|
+
include RangeFilter::LowerBound
|
116
|
+
include RangeFilter::GeocodeReference
|
117
|
+
|
118
|
+
def initialize_from_element!
|
119
|
+
super
|
120
|
+
init_lower_bound_from_element!
|
121
|
+
init_geocode_reference_from_element!
|
122
|
+
end
|
123
|
+
|
124
|
+
def write_xml!(xml)
|
125
|
+
xml.mdata :GreaterThanFilter, attribute_attr.merge(lower_bound_attr) do
|
126
|
+
write_geocode_reference! xml
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
class GreaterThanOrEqualFilter < RangeFilter
|
132
|
+
include RangeFilter::LowerBound
|
133
|
+
|
134
|
+
def initialize_from_element!
|
135
|
+
super
|
136
|
+
init_lower_bound_from_element!
|
137
|
+
end
|
138
|
+
|
139
|
+
def write_xml!(xml)
|
140
|
+
xml.mdata :GreaterThanOrEqualFilter, attribute_attr.merge(lower_bound_attr)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
class BetweenFilter < RangeFilter
|
145
|
+
include RangeFilter::UpperBound
|
146
|
+
include RangeFilter::LowerBound
|
147
|
+
include RangeFilter::GeocodeReference
|
148
|
+
|
149
|
+
def initialize_from_element!
|
150
|
+
super
|
151
|
+
init_upper_bound_from_element!
|
152
|
+
init_lower_bound_from_element!
|
153
|
+
init_geocode_reference_from_element!
|
154
|
+
end
|
155
|
+
|
156
|
+
def write_xml!(xml)
|
157
|
+
xml.mdata :BetweenFilter, attribute_attr.merge(lower_bound_attr).merge(upper_bound_attr) do
|
158
|
+
write_geocode_reference! xml
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|