rets 0.9.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +19 -0
  3. data/Manifest.txt +24 -0
  4. data/README.md +73 -1
  5. data/Rakefile +1 -1
  6. data/lib/rets.rb +202 -1
  7. data/lib/rets/client.rb +83 -94
  8. data/lib/rets/http_client.rb +42 -0
  9. data/lib/rets/metadata.rb +15 -3
  10. data/lib/rets/metadata/caching.rb +59 -0
  11. data/lib/rets/metadata/file_cache.rb +29 -0
  12. data/lib/rets/metadata/json_serializer.rb +27 -0
  13. data/lib/rets/metadata/lookup_table.rb +65 -0
  14. data/lib/rets/metadata/lookup_type.rb +3 -4
  15. data/lib/rets/metadata/marshal_serializer.rb +27 -0
  16. data/lib/rets/metadata/multi_lookup_table.rb +70 -0
  17. data/lib/rets/metadata/null_cache.rb +24 -0
  18. data/lib/rets/metadata/resource.rb +39 -29
  19. data/lib/rets/metadata/rets_class.rb +27 -23
  20. data/lib/rets/metadata/rets_object.rb +32 -0
  21. data/lib/rets/metadata/table.rb +9 -101
  22. data/lib/rets/metadata/table_factory.rb +19 -0
  23. data/lib/rets/metadata/yaml_serializer.rb +27 -0
  24. data/lib/rets/parser/compact.rb +61 -18
  25. data/lib/rets/parser/error_checker.rb +8 -1
  26. data/test/fixtures.rb +58 -0
  27. data/test/test_caching.rb +89 -0
  28. data/test/test_client.rb +44 -24
  29. data/test/test_error_checker.rb +18 -0
  30. data/test/test_file_cache.rb +42 -0
  31. data/test/test_http_client.rb +96 -60
  32. data/test/test_json_serializer.rb +26 -0
  33. data/test/test_marshal_serializer.rb +26 -0
  34. data/test/test_metadata.rb +62 -450
  35. data/test/test_metadata_class.rb +50 -0
  36. data/test/test_metadata_lookup_table.rb +21 -0
  37. data/test/test_metadata_lookup_type.rb +12 -0
  38. data/test/test_metadata_multi_lookup_table.rb +60 -0
  39. data/test/test_metadata_object.rb +20 -0
  40. data/test/test_metadata_resource.rb +140 -0
  41. data/test/test_metadata_root.rb +151 -0
  42. data/test/test_metadata_table.rb +21 -0
  43. data/test/test_metadata_table_factory.rb +24 -0
  44. data/test/test_parser_compact.rb +23 -28
  45. data/test/test_yaml_serializer.rb +26 -0
  46. metadata +29 -5
@@ -0,0 +1,21 @@
1
+ require_relative "helper"
2
+
3
+ class TestMetadataTable < MiniTest::Test
4
+ def test_table_resolve_returns_empty_string_when_value_nil
5
+ table = Rets::Metadata::Table.new({}, "resource_id")
6
+
7
+ assert_equal "", table.resolve(nil)
8
+ end
9
+
10
+ def test_table_resolve_passes_values_straight_through
11
+ table = Rets::Metadata::Table.new({}, "resource_id")
12
+
13
+ assert_equal "Foo", table.resolve("Foo")
14
+ end
15
+
16
+ def test_table_resolve_passes_values_strips_extra_whitspace
17
+ table = Rets::Metadata::Table.new({}, "resource_id")
18
+
19
+ assert_equal "Foo", table.resolve(" Foo ")
20
+ end
21
+ end
@@ -0,0 +1,24 @@
1
+ require_relative "helper"
2
+
3
+ class TestMetadataTableFactory < MiniTest::Test
4
+ def test_table_factory_creates_mutli_lookup_table
5
+ table_fragment = {"LookupName" => "Foo", "Interpretation" => "LookupMulti"}
6
+ resource_id = "id"
7
+ lookup_types = {}
8
+ assert_instance_of Rets::Metadata::MultiLookupTable, Rets::Metadata::TableFactory.build(table_fragment, resource_id, lookup_types)
9
+ end
10
+
11
+ def test_table_factory_creates_lookup_table
12
+ table_fragment = {"LookupName" => "Foo", "Interpretation" => "Lookup"}
13
+ resource_id = "id"
14
+ lookup_types = {}
15
+ assert_instance_of Rets::Metadata::LookupTable, Rets::Metadata::TableFactory.build(table_fragment, resource_id, lookup_types)
16
+ end
17
+
18
+ def test_table_factory_creates_table
19
+ table_fragment = {"LookupName" => "", "Interpretation" => ""}
20
+ resource_id = "id"
21
+ lookup_types = {}
22
+ assert_instance_of Rets::Metadata::Table, Rets::Metadata::TableFactory.build(table_fragment, resource_id, lookup_types)
23
+ end
24
+ end
@@ -7,14 +7,6 @@ class TestParserCompact < MiniTest::Test
7
7
  end
8
8
  end
9
9
 
10
- def test_parse_document_uses_default_delimiter_when_none_provided
11
- # we assert that the delimeter character getting to parse is a tab
12
- # even though COMPACT defines no delimiter tag
13
- Rets::Parser::Compact.expects(:parse_row).with(%w(A B), "1\t2", /\t/)
14
- Rets::Parser::Compact.expects(:parse_row).with(%w(A B), "4\t5", /\t/)
15
- Rets::Parser::Compact.parse_document(COMPACT)
16
- end
17
-
18
10
  def test_parse_document_delegates_to_parse
19
11
  result = Rets::Parser::Compact.parse_document(COMPACT)
20
12
 
@@ -29,33 +21,19 @@ class TestParserCompact < MiniTest::Test
29
21
  end
30
22
  end
31
23
 
32
- def test_parse_returns_key_value_pairs
33
- result = Rets::Parser::Compact.parse_row(%w(A B), "1\t2")
34
-
35
- assert_equal({"A" => "1", "B" => "2"}, result)
36
- end
37
-
38
24
  # RMLS does this. :|
39
25
  def test_remaining_columns_produce_empty_string_values
40
- column_names = %w(A B C D)
26
+ column_names = "A B C D"
41
27
  data = "1 2"
42
28
 
43
- assert_equal({"A" => "1", "B" => "2", "C" => "", "D" => ""},
44
- Rets::Parser::Compact.parse_row(column_names, data, / /))
29
+ assert_equal({"A" => "1", "B" => "2", "C" => "", "D" => ""}, Rets::Parser::Compact.parse(column_names, data, ' '))
45
30
  end
46
31
 
47
32
  def test_leading_empty_columns_are_preserved_with_delimiter
48
- column_names = %w(A B C D)
33
+ column_names = "A\tB\tC\tD"
49
34
  data = "\t\t3\t4" # first two columns are empty data.
50
35
 
51
- assert_equal({"A" => "", "B" => "", "C" => "3", "D" => "4"},
52
- Rets::Parser::Compact.parse_row(column_names, data, /\t/))
53
- end
54
-
55
- def test_parse_only_accepts_regexp
56
- assert_raises ArgumentError do
57
- Rets::Parser::Compact.parse_row(["a"], "b", " ")
58
- end
36
+ assert_equal({"A" => "", "B" => "", "C" => "3", "D" => "4"}, Rets::Parser::Compact.parse(column_names, data, "\t"))
59
37
  end
60
38
 
61
39
  def test_parse_empty_document
@@ -73,18 +51,29 @@ class TestParserCompact < MiniTest::Test
73
51
  assert_equal 0, count
74
52
  end
75
53
 
54
+ def test_get_count_with_unrecognized_document
55
+ count = Rets::Parser::Compact.get_count("")
56
+ assert_equal 0, count
57
+ end
58
+
76
59
  def test_parse_example
77
- rows = Rets::Parser::Compact.parse_document(Nokogiri.parse(SAMPLE_COMPACT))
60
+ rows = Rets::Parser::Compact.parse_document(SAMPLE_COMPACT)
78
61
 
79
62
  assert_equal "7", rows.first["MetadataEntryID"]
80
63
  end
81
64
 
82
65
  def test_parse_example_2
83
- rows = Rets::Parser::Compact.parse_document(Nokogiri.parse(SAMPLE_COMPACT_2))
66
+ rows = Rets::Parser::Compact.parse_document(SAMPLE_COMPACT_2)
84
67
 
85
68
  assert_equal "", rows.first["ModTimeStamp"]
86
69
  end
87
70
 
71
+ def test_parse_with_changed_delimiter
72
+ rows = Rets::Parser::Compact.parse_document(CHANGED_DELIMITER)
73
+
74
+ assert_equal [{"A" => "1", "B" => "2"}, {"A" => "4", "B" => "5"}], rows
75
+ end
76
+
88
77
  def test_parse_html_encoded_chars
89
78
  rows = Rets::Parser::Compact.parse_document(SAMPLE_COMPACT_WITH_SPECIAL_CHARS)
90
79
 
@@ -96,4 +85,10 @@ class TestParserCompact < MiniTest::Test
96
85
 
97
86
  assert_equal "text with <tag>", rows.last["PublicRemarksNew"]
98
87
  end
88
+
89
+ def test_parse_property_with_lots_of_columns
90
+ row = Rets::Parser::Compact.parse_document(SAMPLE_PROPERTY_WITH_LOTS_OF_COLUMNS).first
91
+ assert_equal 800, row.keys.size
92
+ assert_equal 800.times.map { |x| "K%03d" % x }, row.keys
93
+ end
99
94
  end
@@ -0,0 +1,26 @@
1
+ require_relative "helper"
2
+
3
+ require "stringio"
4
+
5
+ class TestYamlSerializer < MiniTest::Test
6
+
7
+ def setup
8
+ @serializer = Rets::Metadata::YamlSerializer.new
9
+ end
10
+
11
+ def test_round_trip
12
+ metadata = {"foo" => "bar"}
13
+ file = StringIO.new
14
+ @serializer.save(file, metadata)
15
+ file.rewind
16
+ loaded = @serializer.load(file)
17
+ assert_equal metadata, loaded
18
+ end
19
+
20
+ def test_bad_data
21
+ file = StringIO.new("\x01")
22
+ loaded = @serializer.load(file)
23
+ assert_nil loaded
24
+ end
25
+
26
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rets
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Estately, Inc. Open Source
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-11 00:00:00.000000000 Z
11
+ date: 2016-02-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httpclient
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 2.6.0
19
+ version: 2.7.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 2.6.0
26
+ version: 2.7.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: http-cookie
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -153,24 +153,48 @@ files:
153
153
  - lib/rets/locking_http_client.rb
154
154
  - lib/rets/measuring_http_client.rb
155
155
  - lib/rets/metadata.rb
156
+ - lib/rets/metadata/caching.rb
156
157
  - lib/rets/metadata/containers.rb
158
+ - lib/rets/metadata/file_cache.rb
159
+ - lib/rets/metadata/json_serializer.rb
160
+ - lib/rets/metadata/lookup_table.rb
157
161
  - lib/rets/metadata/lookup_type.rb
162
+ - lib/rets/metadata/marshal_serializer.rb
163
+ - lib/rets/metadata/multi_lookup_table.rb
164
+ - lib/rets/metadata/null_cache.rb
158
165
  - lib/rets/metadata/resource.rb
159
166
  - lib/rets/metadata/rets_class.rb
167
+ - lib/rets/metadata/rets_object.rb
160
168
  - lib/rets/metadata/root.rb
161
169
  - lib/rets/metadata/table.rb
170
+ - lib/rets/metadata/table_factory.rb
171
+ - lib/rets/metadata/yaml_serializer.rb
162
172
  - lib/rets/parser/compact.rb
163
173
  - lib/rets/parser/error_checker.rb
164
174
  - lib/rets/parser/multipart.rb
165
175
  - test/fixtures.rb
166
176
  - test/helper.rb
177
+ - test/test_caching.rb
167
178
  - test/test_client.rb
168
179
  - test/test_error_checker.rb
180
+ - test/test_file_cache.rb
169
181
  - test/test_http_client.rb
182
+ - test/test_json_serializer.rb
170
183
  - test/test_locking_http_client.rb
184
+ - test/test_marshal_serializer.rb
171
185
  - test/test_metadata.rb
186
+ - test/test_metadata_class.rb
187
+ - test/test_metadata_lookup_table.rb
188
+ - test/test_metadata_lookup_type.rb
189
+ - test/test_metadata_multi_lookup_table.rb
190
+ - test/test_metadata_object.rb
191
+ - test/test_metadata_resource.rb
192
+ - test/test_metadata_root.rb
193
+ - test/test_metadata_table.rb
194
+ - test/test_metadata_table_factory.rb
172
195
  - test/test_parser_compact.rb
173
196
  - test/test_parser_multipart.rb
197
+ - test/test_yaml_serializer.rb
174
198
  - test/vcr_cassettes/unauthorized_response.yml
175
199
  homepage: http://github.com/estately/rets
176
200
  licenses:
@@ -194,7 +218,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
194
218
  version: '0'
195
219
  requirements: []
196
220
  rubyforge_project:
197
- rubygems_version: 2.2.3
221
+ rubygems_version: 2.4.5.1
198
222
  signing_key:
199
223
  specification_version: 4
200
224
  summary: "[![Build Status](https://secure.travis-ci.org/estately/rets.png?branch=master)](http://travis-ci.org/estately/rets)