rets4r 0.8.5 → 1.1.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. data/.document +5 -0
  2. data/{test/client/data/1.5/metadata.xml → .gemtest} +0 -0
  3. data/CHANGELOG +611 -66
  4. data/CONTRIBUTORS +6 -2
  5. data/Gemfile +1 -0
  6. data/LICENSE +22 -0
  7. data/MANIFEST +63 -0
  8. data/NEWS +203 -0
  9. data/{README → README.rdoc} +11 -4
  10. data/RUBYS +7 -7
  11. data/Rakefile +48 -0
  12. data/TODO +5 -1
  13. data/examples/client_get_object.rb +31 -42
  14. data/examples/client_login.rb +20 -18
  15. data/examples/client_mapper.rb +17 -0
  16. data/examples/client_metadata.rb +28 -28
  17. data/examples/client_parser.rb +9 -0
  18. data/examples/client_search.rb +25 -27
  19. data/examples/settings.yml +114 -0
  20. data/lib/rets4r.rb +14 -1
  21. data/lib/rets4r/auth.rb +70 -66
  22. data/lib/rets4r/client.rb +470 -650
  23. data/lib/rets4r/client/data.rb +13 -13
  24. data/lib/rets4r/client/dataobject.rb +27 -19
  25. data/lib/rets4r/client/exceptions.rb +116 -0
  26. data/lib/rets4r/client/links.rb +32 -0
  27. data/lib/rets4r/client/metadata.rb +12 -12
  28. data/lib/rets4r/client/parsers/compact.rb +42 -0
  29. data/lib/rets4r/client/parsers/compact_nokogiri.rb +91 -0
  30. data/lib/rets4r/client/parsers/metadata.rb +92 -0
  31. data/lib/rets4r/client/parsers/response_parser.rb +100 -0
  32. data/lib/rets4r/client/requester.rb +143 -0
  33. data/lib/rets4r/client/transaction.rb +30 -33
  34. data/lib/rets4r/core_ext/array/extract_options.rb +15 -0
  35. data/lib/rets4r/core_ext/class/attribute_accessors.rb +58 -0
  36. data/lib/rets4r/core_ext/hash/keys.rb +46 -0
  37. data/lib/rets4r/core_ext/hash/slice.rb +39 -0
  38. data/lib/rets4r/listing_mapper.rb +17 -0
  39. data/lib/rets4r/listing_service.rb +35 -0
  40. data/lib/rets4r/loader.rb +8 -0
  41. data/lib/tasks/annotations.rake +121 -0
  42. data/lib/tasks/coverage.rake +13 -0
  43. data/rets4r.gemspec +24 -0
  44. data/spec/rets4r_compact_data_parser_spec.rb +7 -0
  45. data/test/data/1.5/bad_compact.xml +7 -0
  46. data/test/data/1.5/count_only_compact.xml +3 -0
  47. data/test/{client/data → data}/1.5/error.xml +0 -0
  48. data/test/{client/data → data}/1.5/invalid_compact.xml +0 -0
  49. data/test/{client/data → data}/1.5/login.xml +0 -0
  50. data/test/data/1.5/metadata.xml +0 -0
  51. data/test/{client/data → data}/1.5/search_compact.xml +0 -0
  52. data/test/data/1.5/search_compact_big.xml +136 -0
  53. data/test/{client/data → data}/1.5/search_unescaped_compact.xml +0 -0
  54. data/test/data/listing_service.yml +36 -0
  55. data/test/test_auth.rb +68 -0
  56. data/test/test_client.rb +342 -0
  57. data/test/test_client_links.rb +39 -0
  58. data/test/test_compact_nokogiri.rb +64 -0
  59. data/test/test_helper.rb +12 -0
  60. data/test/test_listing_mapper.rb +112 -0
  61. data/test/test_loader.rb +24 -0
  62. data/test/test_parser.rb +96 -0
  63. data/test/test_quality.rb +57 -0
  64. metadata +168 -53
  65. data/GPL +0 -340
  66. data/examples/metadata.xml +0 -42
  67. data/lib/rets4r/client/metadataindex.rb +0 -82
  68. data/lib/rets4r/client/parser.rb +0 -141
  69. data/lib/rets4r/client/parser/rexml.rb +0 -75
  70. data/lib/rets4r/client/parser/xmlparser.rb +0 -95
  71. data/test/client/parser/tc_rexml.rb +0 -17
  72. data/test/client/parser/tc_xmlparser.rb +0 -21
  73. data/test/client/tc_auth.rb +0 -68
  74. data/test/client/tc_client.rb +0 -320
  75. data/test/client/tc_metadataindex.rb +0 -36
  76. data/test/client/test_parser.rb +0 -128
  77. data/test/client/ts_all.rb +0 -8
  78. data/test/ts_all.rb +0 -1
  79. data/test/ts_client.rb +0 -1
@@ -0,0 +1,112 @@
1
+ $:.unshift File.expand_path(File.join(File.dirname(__FILE__)))
2
+ require 'test_helper'
3
+
4
+ class ListingMapperTest < Test::Unit::TestCase
5
+ context "ListingMapper" do
6
+ should "access select" do
7
+ config = RETS4R::ListingService.connection
8
+ mapper = RETS4R::ListingMapper.new(config)
9
+ assert_equal config[:select], mapper.select
10
+ end
11
+ should "map from rets keys to record keys" do
12
+ original = {
13
+ "ListingID"=>"11322886",
14
+ "AgentID"=>"000533246",
15
+ "Status"=>"act",
16
+ "ListPrice"=>"239000",
17
+ "StreetNumber"=>"8317",
18
+ "StreetName"=>"Thompson",
19
+ "StreetDirection"=>"",
20
+ "Unit"=>"",
21
+ "ZipCode"=>"79606-6652",
22
+ "City"=>"Abilene",
23
+ "County"=>"Taylor",
24
+ "State"=>"TX",
25
+ "LotSize"=>"LTS.5-.99A",
26
+ "SqFt"=>"2825",
27
+ "LivingArea"=>"2",
28
+ "Bedrooms"=>"4",
29
+ "Garage"=>"PARATTACHE,PAROPENER,PARREAR,PARSIDE",
30
+ "YearBuilt"=>"2005",
31
+ "AgentName"=>"CD Boyd, II",
32
+
33
+ "GARAGECAP"=>"2",
34
+ "BATHSFULLBASEMENT"=>"",
35
+ "BATHSFULLLEVEL1"=>"",
36
+ "BATHSFULLLEVEL2"=>"",
37
+ "BATHSFULLLEVEL3"=>"",
38
+ "STORIES"=>"2",
39
+ "INTERIOR"=>"INFBAY-WIN,INFCABLE-A,INFDECLTNG,INFHIGHSPD,INFLOFT,INFSOUND-W,INFVAUL-CL,INFWIND-CO",
40
+ "ACRESCULTIVATED"=>"",
41
+ "CARPORTCAP"=>"0",
42
+ "TAXUNEXEMPT"=>"5876",
43
+ "STREETDIRSUFFIX"=>"",
44
+ "NUMSTOCKTANKS"=>"",
45
+ "LOTDIM"=>"87X182",
46
+ "ACRESPRICE"=>"662049",
47
+ "FIREPLACES"=>"1",
48
+ "SUBDIVISION"=>"Belle Vista Estates",
49
+ "UTILITIES"=>"STUASPHALT,UTLCITY-SE,UTLCITY-WA,STUCONCRET",
50
+ "LISTSTATUSFLAG"=>"",
51
+ "NUMDININGAREAS"=>"2",
52
+ "SQFTPRICE"=>"84.6",
53
+ "MAPPAGE"=>"9999",
54
+ "NUMBARNS"=>"",
55
+ "UIDPRP"=>"3211078",
56
+ "NUMRESIDENCE"=>"",
57
+ "LISTPRICELOW"=>"0",
58
+ "MAPBOOK"=>"OT",
59
+ "LOTNUM"=>"",
60
+ "OFFICELIST_OFFICENAM1"=>"McClure, REALTORS",
61
+ "ACRES"=>"0.361",
62
+ "AGENTSELL_FULLNAME"=>"",
63
+ "BATHSHALFLEVEL1"=>"",
64
+ "PROPSUBTYPE"=>"S",
65
+ "ROOMBEDBATHDESC"=>"BBFJET-TUB,BBFLIN-CLO,BBFSEP-SHO,BBFW+I-CLO",
66
+ "BATHSHALFLEVEL2"=>"",
67
+ "LISTPRICEORIG"=>"239000",
68
+ "BATHSHALFLEVEL3"=>"",
69
+ "UID"=>"3211078",
70
+ "OFFICELIST"=>"FMAB",
71
+ "BATHSHALFBASEMENT"=>"",
72
+ "STORIESBLDG"=>"",
73
+ "REMARKS"=>"Custom home built in 05'. Growing neighborhood convienient to Wylie schools. Abundant living areas and and open space floor plan.Could be 5th BDRM, or upstair BDRM & Bath could be another living area. Perfect office next to Master. Gourmet sized kitchen, granite countertops, barell ceilings, wonderful storage space!!!!",
74
+ "STREETNUMDISPLAY"=>"8317",
75
+ "PROPSUBTYPEDISPLAY"=>"RES-S",
76
+ "BATHSHALF"=>"0",
77
+ "STYLE"=>"STYRANCH",
78
+ "COMMONFEATURES"=>"",
79
+ "OFFICESELL_OFFICENAM2"=>"",
80
+ "BATHSFULL"=>"3",
81
+ "MAPCOORD"=>"none",
82
+ "SQFTSOURCE"=>"TAX",
83
+ "NUMLAKES"=>"",
84
+ "NUMWELLS"=>"",
85
+ "NUMPONDS"=>"",
86
+ "LOTDESC"=>"LTDSUBDIV"}
87
+ mapper = RETS4R::ListingMapper.new
88
+ actual = mapper.map(original)
89
+ expected = {
90
+ :mls => "11322886",
91
+ :agent_id =>"000533246",
92
+ :rets_updated_at => nil,
93
+ :status=>"act",
94
+ :list_price =>"239000",
95
+ :street_number =>"8317",
96
+ :street_direction => "",
97
+ :street_name=>"Thompson",
98
+ :unit_number =>"",
99
+ :zip_code =>"79606-6652",
100
+ :city => "Abilene",
101
+ :county =>"Taylor",
102
+ :square_feet =>"2825",
103
+ :living_area => "2",
104
+ :baths =>nil,
105
+ :beds => "4",
106
+ :garage => "PARATTACHE,PAROPENER,PARREAR,PARSIDE",
107
+ :year_built => "2005",
108
+ }
109
+ expected.merge(actual).keys.each{|k| assert_equal expected[k], actual[k], "mismatched on key #{k}"}
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,24 @@
1
+ $:.unshift File.expand_path(File.join(File.dirname(__FILE__), "..", "lib"))
2
+
3
+ require 'rets4r'
4
+ require 'test/unit'
5
+
6
+ class LoaderTest < Test::Unit::TestCase
7
+ def test_should_pass_records_to_block
8
+ file = File.expand_path(File.join('test', 'data', '1.5', 'search_compact.xml'))
9
+
10
+ listings = []
11
+ RETS4R::Loader.load(open(file)) do |record|
12
+ listings << record
13
+ end
14
+
15
+ assert_equal 2, listings.length
16
+ assert_equal "Datum1", listings[0]['First']
17
+ assert_equal "Datum2", listings[0]['Second']
18
+ assert_equal "Datum3", listings[0]['Third']
19
+ assert_equal "Datum4", listings[1]['First']
20
+ assert_equal "Datum5", listings[1]['Second']
21
+ assert_equal "Datum6", listings[1]['Third']
22
+
23
+ end
24
+ end
@@ -0,0 +1,96 @@
1
+ $:.unshift File.expand_path(File.join(File.dirname(__FILE__), "..", "lib"))
2
+
3
+ require 'test/unit'
4
+ require 'rets4r'
5
+
6
+ module RETS4R
7
+ class Client
8
+ class TestParser < Test::Unit::TestCase
9
+ def setup
10
+ @parser = ResponseParser.new
11
+ end
12
+
13
+ DATA_DIR = 'test/data/1.5/'
14
+
15
+ def load_xml_from_file(file_name)
16
+ xml = ''
17
+
18
+ File.open(file_name) do |file|
19
+ file.each do |line|
20
+ xml << line
21
+ end
22
+ end
23
+
24
+ xml
25
+ end
26
+
27
+ def parse_to_transaction(xml_file_name)
28
+ @parser.parse_key_value(load_xml_from_file(xml_file_name))
29
+ end
30
+
31
+ # Test Cases
32
+
33
+ # TODO: verify test_search_compact header, metadata
34
+ def test_search_compact
35
+ xml = load_xml_from_file("#{DATA_DIR}search_compact.xml")
36
+ transaction = @parser.parse_results(xml, 'COMPACT')
37
+
38
+ assert_equal true, transaction.success?, "transaction should be successful"
39
+ assert_equal '0', transaction.reply_code
40
+ assert_equal 'SUCCESS', transaction.reply_text
41
+ assert_equal [], transaction.header
42
+ # XXX: this used to say, why?
43
+ # assert_equal false, transaction.header.empty?
44
+
45
+ assert_equal nil, transaction.metadata
46
+
47
+ assert_equal ?\t, transaction.delimiter
48
+ assert_equal "\t", transaction.ascii_delimiter
49
+ assert_equal true, transaction.maxrows?
50
+
51
+ assert_equal 2, transaction.response.length, 'response length should be 2'
52
+ assert_equal "Datum1", transaction.response[0]['First']
53
+ assert_equal "Datum2", transaction.response[0]['Second']
54
+ assert_equal "Datum3", transaction.response[0]['Third']
55
+ assert_equal "Datum4", transaction.response[1]['First']
56
+ assert_equal "Datum5", transaction.response[1]['Second']
57
+ assert_equal "Datum6", transaction.response[1]['Third']
58
+
59
+ # Check for compatibility
60
+ assert_equal transaction.data, transaction.response
61
+
62
+ assert_equal nil, transaction.secondary_response
63
+ end
64
+
65
+ def test_unescaped_search_compact
66
+ assert_raise(REXML::ParseException) do
67
+ @parser.parse_key_value(load_xml_from_file("#{DATA_DIR}search_unescaped_compact.xml"))
68
+ end
69
+ end
70
+
71
+ def test_invalid_search_compact
72
+ assert_raise(REXML::ParseException) do
73
+ @parser.parse_key_value(load_xml_from_file("#{DATA_DIR}search_unescaped_compact.xml"))
74
+ end
75
+ end
76
+
77
+ def test_login_results
78
+ transaction = parse_to_transaction("#{DATA_DIR}login.xml")
79
+
80
+ assert_equal(true, transaction.success?)
81
+ assert_equal('srealtor,1,11,11111', transaction.response['User'])
82
+ assert_equal('/rets/Login', transaction.response['Login'])
83
+ end
84
+
85
+ def test_error_results
86
+ xml = load_xml_from_file("#{DATA_DIR}error.xml")
87
+
88
+ exception = assert_raise(InvalidResourceException) do
89
+ @parser.parse_object_response(xml)
90
+ end
91
+
92
+ assert_equal('20400 - Invalid Invalidness.', exception.message)
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env ruby -w
2
+ libdir = File.expand_path('../../lib', __FILE__)
3
+ $LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir)
4
+
5
+ require "test/unit"
6
+
7
+ class TestQuality < Test::Unit::TestCase
8
+ def test_can_still_be_built
9
+ Dir.chdir(root) do
10
+ `gem build rets4r.gemspec`
11
+ assert_equal 0, $?
12
+ end
13
+ end
14
+
15
+ def test_has_no_malformed_whitespace
16
+ error_messages = []
17
+ Dir.chdir(root) do
18
+ File.read("MANIFEST").split("\n").each do |filename|
19
+ next if filename =~ /data/
20
+ error_messages << check_for_tab_characters(filename)
21
+ error_messages << check_for_extra_spaces(filename)
22
+ end
23
+ end
24
+ assert_well_formed error_messages.compact
25
+ end
26
+
27
+ def assert_well_formed(actual)
28
+ assert actual.empty?, actual.join("\n")
29
+ end
30
+
31
+ def check_for_tab_characters(filename)
32
+ failing_lines = []
33
+ File.readlines(filename).each_with_index do |line,number|
34
+ failing_lines << number + 1 if line =~ /\t/
35
+ end
36
+
37
+ unless failing_lines.empty?
38
+ "#{filename} has tab characters on lines #{failing_lines.join(', ')}"
39
+ end
40
+ end
41
+
42
+ def check_for_extra_spaces(filename)
43
+ failing_lines = []
44
+ File.readlines(filename).each_with_index do |line,number|
45
+ next if line =~ /^\s+#.*\s+\n$/
46
+ failing_lines << number + 1 if line =~ /\s+\n$/
47
+ end
48
+
49
+ unless failing_lines.empty?
50
+ "#{filename} has spaces on the EOL on lines #{failing_lines.join(', ')}"
51
+ end
52
+ end
53
+
54
+ def root
55
+ File.expand_path("../..", __FILE__)
56
+ end
57
+ end
metadata CHANGED
@@ -1,104 +1,219 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rets4r
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.5
4
+ hash: 55
5
+ prerelease:
6
+ segments:
7
+ - 1
8
+ - 1
9
+ - 18
10
+ version: 1.1.18
5
11
  platform: ruby
6
12
  authors:
7
13
  - Scott Patterson
14
+ - John Wulff
15
+ - bgetting
16
+ - Jacob Basham
17
+ - Joseph Holsten
8
18
  autorequire:
9
19
  bindir: bin
10
20
  cert_chain: []
11
21
 
12
- date: 2008-11-06 00:00:00 -08:00
22
+ date: 2011-03-26 00:00:00 -05:00
13
23
  default_executable:
14
- dependencies: []
15
-
16
- description:
17
- email: scott.patterson@digitalaun.com
24
+ dependencies:
25
+ - !ruby/object:Gem::Dependency
26
+ name: nokogiri
27
+ prerelease: false
28
+ requirement: &id001 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ hash: 115
34
+ segments:
35
+ - 1
36
+ - 4
37
+ - 3
38
+ - 0
39
+ version: 1.4.3.0
40
+ type: :runtime
41
+ version_requirements: *id001
42
+ - !ruby/object:Gem::Dependency
43
+ name: mocha
44
+ prerelease: false
45
+ requirement: &id002 !ruby/object:Gem::Requirement
46
+ none: false
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ hash: 3
51
+ segments:
52
+ - 0
53
+ version: "0"
54
+ type: :development
55
+ version_requirements: *id002
56
+ - !ruby/object:Gem::Dependency
57
+ name: shoulda
58
+ prerelease: false
59
+ requirement: &id003 !ruby/object:Gem::Requirement
60
+ none: false
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ hash: 3
65
+ segments:
66
+ - 0
67
+ version: "0"
68
+ type: :development
69
+ version_requirements: *id003
70
+ - !ruby/object:Gem::Dependency
71
+ name: activesupport
72
+ prerelease: false
73
+ requirement: &id004 !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ hash: 3
79
+ segments:
80
+ - 0
81
+ version: "0"
82
+ type: :development
83
+ version_requirements: *id004
84
+ - !ruby/object:Gem::Dependency
85
+ name: rake
86
+ prerelease: false
87
+ requirement: &id005 !ruby/object:Gem::Requirement
88
+ none: false
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ hash: 3
93
+ segments:
94
+ - 0
95
+ version: "0"
96
+ type: :development
97
+ version_requirements: *id005
98
+ description: RETS4R is a native Ruby interface to the RETS (Real Estate Transaction Standard). It currently is built for the 1.5 specification, but support for 1.7 and 2.0 are planned. It does not currently implement all of the specification, but the most commonly used portions. Specifically, there is no support for Update transactions.
99
+ email:
100
+ - scott.patterson@digitalaun.com
101
+ - john@johnwulff.com
102
+ - brian@terra-firma-design.com
103
+ - jacob@paperpigeons.net
104
+ - joseph@josephholsten.com
18
105
  executables: []
19
106
 
20
107
  extensions: []
21
108
 
22
109
  extra_rdoc_files:
110
+ - CHANGELOG
23
111
  - CONTRIBUTORS
24
- - README
25
112
  - LICENSE
113
+ - MANIFEST
114
+ - NEWS
115
+ - README.rdoc
26
116
  - RUBYS
27
- - GPL
28
- - CHANGELOG
29
117
  - TODO
30
118
  files:
119
+ - .document
120
+ - .gemtest
121
+ - CHANGELOG
122
+ - CONTRIBUTORS
123
+ - Gemfile
124
+ - LICENSE
125
+ - MANIFEST
126
+ - NEWS
127
+ - README.rdoc
128
+ - RUBYS
129
+ - Rakefile
130
+ - TODO
31
131
  - examples/client_get_object.rb
32
132
  - examples/client_login.rb
133
+ - examples/client_mapper.rb
33
134
  - examples/client_metadata.rb
135
+ - examples/client_parser.rb
34
136
  - examples/client_search.rb
35
- - examples/metadata.xml
36
- - lib/rets4r
137
+ - examples/settings.yml
138
+ - lib/rets4r.rb
37
139
  - lib/rets4r/auth.rb
38
- - lib/rets4r/client
140
+ - lib/rets4r/client.rb
39
141
  - lib/rets4r/client/data.rb
40
142
  - lib/rets4r/client/dataobject.rb
143
+ - lib/rets4r/client/exceptions.rb
144
+ - lib/rets4r/client/links.rb
41
145
  - lib/rets4r/client/metadata.rb
42
- - lib/rets4r/client/metadataindex.rb
43
- - lib/rets4r/client/parser
44
- - lib/rets4r/client/parser/rexml.rb
45
- - lib/rets4r/client/parser/xmlparser.rb
46
- - lib/rets4r/client/parser.rb
146
+ - lib/rets4r/client/parsers/compact.rb
147
+ - lib/rets4r/client/parsers/compact_nokogiri.rb
148
+ - lib/rets4r/client/parsers/metadata.rb
149
+ - lib/rets4r/client/parsers/response_parser.rb
150
+ - lib/rets4r/client/requester.rb
47
151
  - lib/rets4r/client/transaction.rb
48
- - lib/rets4r/client.rb
49
- - lib/rets4r.rb
50
- - test/client
51
- - test/client/data
52
- - test/client/data/1.5
53
- - test/client/data/1.5/error.xml
54
- - test/client/data/1.5/invalid_compact.xml
55
- - test/client/data/1.5/login.xml
56
- - test/client/data/1.5/metadata.xml
57
- - test/client/data/1.5/search_compact.xml
58
- - test/client/data/1.5/search_unescaped_compact.xml
59
- - test/client/parser
60
- - test/client/parser/tc_rexml.rb
61
- - test/client/parser/tc_xmlparser.rb
62
- - test/client/tc_auth.rb
63
- - test/client/tc_client.rb
64
- - test/client/tc_metadataindex.rb
65
- - test/client/test_parser.rb
66
- - test/client/ts_all.rb
67
- - test/ts_all.rb
68
- - test/ts_client.rb
69
- - CONTRIBUTORS
70
- - README
71
- - LICENSE
72
- - RUBYS
73
- - GPL
74
- - CHANGELOG
75
- - TODO
152
+ - lib/rets4r/core_ext/array/extract_options.rb
153
+ - lib/rets4r/core_ext/class/attribute_accessors.rb
154
+ - lib/rets4r/core_ext/hash/keys.rb
155
+ - lib/rets4r/core_ext/hash/slice.rb
156
+ - lib/rets4r/listing_mapper.rb
157
+ - lib/rets4r/listing_service.rb
158
+ - lib/rets4r/loader.rb
159
+ - lib/tasks/annotations.rake
160
+ - lib/tasks/coverage.rake
161
+ - rets4r.gemspec
162
+ - spec/rets4r_compact_data_parser_spec.rb
163
+ - test/data/1.5/bad_compact.xml
164
+ - test/data/1.5/count_only_compact.xml
165
+ - test/data/1.5/error.xml
166
+ - test/data/1.5/invalid_compact.xml
167
+ - test/data/1.5/login.xml
168
+ - test/data/1.5/metadata.xml
169
+ - test/data/1.5/search_compact.xml
170
+ - test/data/1.5/search_compact_big.xml
171
+ - test/data/1.5/search_unescaped_compact.xml
172
+ - test/data/listing_service.yml
173
+ - test/test_auth.rb
174
+ - test/test_client.rb
175
+ - test/test_client_links.rb
176
+ - test/test_compact_nokogiri.rb
177
+ - test/test_helper.rb
178
+ - test/test_listing_mapper.rb
179
+ - test/test_loader.rb
180
+ - test/test_parser.rb
181
+ - test/test_quality.rb
76
182
  has_rdoc: true
77
183
  homepage: http://rets4r.rubyforge.org/
184
+ licenses: []
185
+
78
186
  post_install_message:
79
187
  rdoc_options:
188
+ - --charset=UTF-8
80
189
  - --main
81
- - README
190
+ - README.rdoc
82
191
  require_paths:
83
192
  - lib
84
193
  required_ruby_version: !ruby/object:Gem::Requirement
194
+ none: false
85
195
  requirements:
86
196
  - - ">="
87
197
  - !ruby/object:Gem::Version
198
+ hash: 3
199
+ segments:
200
+ - 0
88
201
  version: "0"
89
- version:
90
202
  required_rubygems_version: !ruby/object:Gem::Requirement
203
+ none: false
91
204
  requirements:
92
205
  - - ">="
93
206
  - !ruby/object:Gem::Version
207
+ hash: 3
208
+ segments:
209
+ - 0
94
210
  version: "0"
95
- version:
96
211
  requirements: []
97
212
 
98
213
  rubyforge_project: rets4r
99
- rubygems_version: 1.3.0
214
+ rubygems_version: 1.6.2
100
215
  signing_key:
101
- specification_version: 2
102
- summary: A native Ruby implementation of RETS (Real Estate Transaction Standard).
103
- test_files:
104
- - test/ts_all.rb
216
+ specification_version: 3
217
+ summary: RETS4R is a native Ruby interface to the RETS (Real Estate Transaction Standard)
218
+ test_files: []
219
+