rosemary 0.3.7 → 0.3.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,6 +2,7 @@ module Rosemary
2
2
  # This is a virtual parent class for the OSM objects Node, Way and Relation.
3
3
  class Element
4
4
  include ActiveModel::Validations
5
+ include Comparable
5
6
 
6
7
  # Unique ID
7
8
  # @return [Fixnum] id of this element
@@ -55,6 +56,19 @@ module Rosemary
55
56
  add_tags(attrs['tag']) if attrs['tag']
56
57
  end
57
58
 
59
+ def <=>(another_element)
60
+ attribute_list.each do |attrib|
61
+ next if self.send(attrib) == another_element.send(attrib)
62
+
63
+ if self.send(attrib) < another_element.send(attrib)
64
+ return -1
65
+ else
66
+ return 1
67
+ end
68
+ end
69
+ 0
70
+ end
71
+
58
72
  # Create an error when somebody tries to set the ID.
59
73
  # (We need this here because otherwise method_missing will be called.)
60
74
  def id=(id) # :nodoc:
@@ -69,7 +83,7 @@ module Rosemary
69
83
 
70
84
  # The list of attributes for this object
71
85
  def attribute_list # :nodoc:
72
- [:id, :version, :uid, :user, :timestamp, :tags]
86
+ [:id, :version, :uid, :user, :timestamp, :changeset, :tags]
73
87
  end
74
88
 
75
89
  # Returns a hash of all non-nil attributes of this object.
data/lib/rosemary/node.rb CHANGED
@@ -48,5 +48,18 @@ module Rosemary
48
48
  end
49
49
  end
50
50
 
51
+ def <=>(another_node)
52
+ parent_compare = super(another_node)
53
+ # don't bother to compare more stuff if parent comparison failed
54
+ return parent_compare unless parent_compare == 0
55
+
56
+ tags_compare = self.send(:tags).sort <=> another_node.send(:tags).sort
57
+ # don't bother to compare more stuff if tags comparison failed
58
+ return tags_compare unless tags_compare == 0
59
+
60
+ 0
61
+ end
62
+
63
+
51
64
  end
52
65
  end
@@ -39,6 +39,23 @@ module Rosemary
39
39
  end
40
40
  end
41
41
 
42
+ def <=>(another_relation)
43
+ parent_compare = super(another_relation)
44
+ # don't bother to compare more stuff if parent comparison failed
45
+ return parent_compare unless parent_compare == 0
46
+
47
+ members_compare = self.send(:members).sort <=> another_relation.send(:members).sort
48
+ # don't bother to compare more stuff if nodes comparison failed
49
+ return members_compare unless members_compare == 0
50
+
51
+ tags_compare = self.send(:tags).sort <=> another_relation.send(:tags).sort
52
+ # don't bother to compare more stuff if tags comparison failed
53
+ return tags_compare unless tags_compare == 0
54
+
55
+ 0
56
+ end
57
+
58
+
42
59
  protected
43
60
 
44
61
  def extract_member(member_array)
@@ -1,4 +1,4 @@
1
1
  module Rosemary
2
2
  # The current version of this gem.
3
- VERSION = "0.3.7"
3
+ VERSION = "0.3.8"
4
4
  end
data/lib/rosemary/way.rb CHANGED
@@ -84,5 +84,21 @@ module Rosemary
84
84
  end
85
85
  end
86
86
  end
87
+
88
+ def <=>(another_way)
89
+ parent_compare = super(another_way)
90
+ # don't bother to compare more stuff if parent comparison failed
91
+ return parent_compare unless parent_compare == 0
92
+
93
+ nodes_compare = self.send(:nodes).sort <=> another_way.send(:nodes).sort
94
+ # don't bother to compare more stuff if nodes comparison failed
95
+ return nodes_compare unless nodes_compare == 0
96
+
97
+ tags_compare = self.send(:tags).sort <=> another_way.send(:tags).sort
98
+ # don't bother to compare more stuff if tags comparison failed
99
+ return tags_compare unless tags_compare == 0
100
+
101
+ 0
102
+ end
87
103
  end
88
104
  end
data/rosemary.gemspec CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
8
8
 
9
9
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
10
10
  s.authors = ["Christoph Bünte, Enno Brehm"]
11
- s.date = "2012-03-22"
11
+ s.date = Time.now
12
12
  s.description = "OpenStreetMap API client for ruby"
13
13
  s.email = ["info@christophbuente.de"]
14
14
  s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README.md"]
@@ -113,4 +113,56 @@ describe Node do
113
113
  subject.name = " Allice and Bob "
114
114
  subject.to_xml.should match "\"Allice and Bob\""
115
115
  end
116
+
117
+ it "should compare identity depending on tags and attributes" do
118
+ first_node = Way.new('id' => 123, 'changeset' => '123', 'version' => 1, 'user' => 'horst', 'uid' => '123', 'timestamp' => '2005-07-30T14:27:12+01:00')
119
+ first_node.tags[:name] = 'Black horse'
120
+ second_node = Way.new('id' => 123, 'changeset' => '123', 'version' => 1, 'user' => 'horst', 'uid' => '123', 'timestamp' => '2005-07-30T14:27:12+01:00')
121
+ second_node.tags[:name] = 'Black horse'
122
+ first_node.should == second_node
123
+ end
124
+
125
+ it "should not be equal when id does not match" do
126
+ first_node = Way.new('id' => 123)
127
+ second_node = Way.new('id' => 234)
128
+ first_node.should_not == second_node
129
+ end
130
+
131
+ it "should not be equal when changeset does not match" do
132
+ first_node = Way.new('changeset' => 123)
133
+ second_node = Way.new('changeset' => 234)
134
+ first_node.should_not == second_node
135
+ end
136
+
137
+ it "should not be equal when version does not match" do
138
+ first_node = Way.new('version' => 1)
139
+ second_node = Way.new('version' => 2)
140
+ first_node.should_not == second_node
141
+ end
142
+
143
+ it "should not be equal when user does not match" do
144
+ first_node = Way.new('user' => 'horst')
145
+ second_node = Way.new('user' => 'jack')
146
+ first_node.should_not == second_node
147
+ end
148
+
149
+ it "should not be equal when uid does not match" do
150
+ first_node = Way.new('uid' => 123)
151
+ second_node = Way.new('uid' => 234)
152
+ first_node.should_not == second_node
153
+ end
154
+
155
+ it "should not be equal when timestamp does not match" do
156
+ first_node = Way.new('timestamp' => '2005-07-30T14:27:12+01:00')
157
+ second_node = Way.new('timestamp' => '2006-07-30T14:27:12+01:00')
158
+ first_node.should_not == second_node
159
+ end
160
+
161
+ it "should not be equal when tags do not match" do
162
+ first_node = Way.new('id' => 123)
163
+ first_node.tags[:name] = 'black horse'
164
+ second_node = Way.new('id' => 123)
165
+ second_node.tags[:name] = 'white horse'
166
+ first_node.should_not == second_node
167
+ end
116
168
  end
@@ -23,4 +23,66 @@ describe Relation do
23
23
  subject.members.size.should eql 2
24
24
  end
25
25
 
26
+ it "should compare identity depending on tags and attributes" do
27
+ first_relation = Relation.new('id' => 123, 'changeset' => '123', 'version' => 1, 'user' => 'horst', 'uid' => '123', 'timestamp' => '2005-07-30T14:27:12+01:00')
28
+ first_relation.tags[:name] = 'Black horse'
29
+ second_relation = Relation.new('id' => 123, 'changeset' => '123', 'version' => 1, 'user' => 'horst', 'uid' => '123', 'timestamp' => '2005-07-30T14:27:12+01:00')
30
+ second_relation.tags[:name] = 'Black horse'
31
+ first_relation.should == second_relation
32
+ end
33
+
34
+ it "should not be equal when id does not match" do
35
+ first_relation = Relation.new('id' => 123)
36
+ second_relation = Relation.new('id' => 234)
37
+ first_relation.should_not == second_relation
38
+ end
39
+
40
+ it "should not be equal when changeset does not match" do
41
+ first_relation = Relation.new('changeset' => 123)
42
+ second_relation = Relation.new('changeset' => 234)
43
+ first_relation.should_not == second_relation
44
+ end
45
+
46
+ it "should not be equal when version does not match" do
47
+ first_relation = Relation.new('version' => 1)
48
+ second_relation = Relation.new('version' => 2)
49
+ first_relation.should_not == second_relation
50
+ end
51
+
52
+ it "should not be equal when user does not match" do
53
+ first_relation = Relation.new('user' => 'horst')
54
+ second_relation = Relation.new('user' => 'jack')
55
+ first_relation.should_not == second_relation
56
+ end
57
+
58
+ it "should not be equal when uid does not match" do
59
+ first_relation = Relation.new('uid' => 123)
60
+ second_relation = Relation.new('uid' => 234)
61
+ first_relation.should_not == second_relation
62
+ end
63
+
64
+ it "should not be equal when timestamp does not match" do
65
+ first_relation = Relation.new('timestamp' => '2005-07-30T14:27:12+01:00')
66
+ second_relation = Relation.new('timestamp' => '2006-07-30T14:27:12+01:00')
67
+ first_relation.should_not == second_relation
68
+ end
69
+
70
+ it "should not be equal when members do not match" do
71
+ first_relation = Relation.new('id' => 123)
72
+ first_relation.members << 1
73
+ first_relation.members << 2
74
+ second_relation = Relation.new('id' => 123)
75
+ second_relation.members << 1
76
+ second_relation.members << 3
77
+ first_relation.should_not == second_relation
78
+ end
79
+
80
+ it "should not be equal when tags do not match" do
81
+ first_relation = Relation.new('id' => 123)
82
+ first_relation.tags[:name] = 'black horse'
83
+ second_relation = Relation.new('id' => 123)
84
+ second_relation.tags[:name] = 'white horse'
85
+ first_relation.should_not == second_relation
86
+ end
87
+
26
88
  end
@@ -87,4 +87,66 @@ describe Way do
87
87
  subject.add_tags(:wheelchair => '')
88
88
  subject.to_xml.should_not match /k=\"wheelchair\"/
89
89
  end
90
+
91
+ it "should compare identity depending on tags and attributes" do
92
+ first_way = Way.new('id' => 123, 'changeset' => '123', 'version' => 1, 'user' => 'horst', 'uid' => '123', 'timestamp' => '2005-07-30T14:27:12+01:00')
93
+ first_way.tags[:name] = 'Black horse'
94
+ second_way = Way.new('id' => 123, 'changeset' => '123', 'version' => 1, 'user' => 'horst', 'uid' => '123', 'timestamp' => '2005-07-30T14:27:12+01:00')
95
+ second_way.tags[:name] = 'Black horse'
96
+ first_way.should == second_way
97
+ end
98
+
99
+ it "should not be equal when id does not match" do
100
+ first_way = Way.new('id' => 123)
101
+ second_way = Way.new('id' => 234)
102
+ first_way.should_not == second_way
103
+ end
104
+
105
+ it "should not be equal when changeset does not match" do
106
+ first_way = Way.new('changeset' => 123)
107
+ second_way = Way.new('changeset' => 234)
108
+ first_way.should_not == second_way
109
+ end
110
+
111
+ it "should not be equal when version does not match" do
112
+ first_way = Way.new('version' => 1)
113
+ second_way = Way.new('version' => 2)
114
+ first_way.should_not == second_way
115
+ end
116
+
117
+ it "should not be equal when user does not match" do
118
+ first_way = Way.new('user' => 'horst')
119
+ second_way = Way.new('user' => 'jack')
120
+ first_way.should_not == second_way
121
+ end
122
+
123
+ it "should not be equal when uid does not match" do
124
+ first_way = Way.new('uid' => 123)
125
+ second_way = Way.new('uid' => 234)
126
+ first_way.should_not == second_way
127
+ end
128
+
129
+ it "should not be equal when timestamp does not match" do
130
+ first_way = Way.new('timestamp' => '2005-07-30T14:27:12+01:00')
131
+ second_way = Way.new('timestamp' => '2006-07-30T14:27:12+01:00')
132
+ first_way.should_not == second_way
133
+ end
134
+
135
+ it "should not be equal when nodes do not match" do
136
+ first_way = Way.new('id' => 123)
137
+ first_way.nodes << 1
138
+ first_way.nodes << 2
139
+ second_way = Way.new('id' => 123)
140
+ second_way.nodes << 1
141
+ second_way.nodes << 3
142
+ first_way.should_not == second_way
143
+ end
144
+
145
+ it "should not be equal when tags do not match" do
146
+ first_way = Way.new('id' => 123)
147
+ first_way.tags[:name] = 'black horse'
148
+ second_way = Way.new('id' => 123)
149
+ second_way.tags[:name] = 'white horse'
150
+ first_way.should_not == second_way
151
+ end
90
152
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rosemary
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.7
4
+ version: 0.3.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-22 00:00:00.000000000 Z
12
+ date: 2012-09-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: httparty
@@ -241,7 +241,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
241
241
  version: '0'
242
242
  segments:
243
243
  - 0
244
- hash: -321215509293511542
244
+ hash: -3489737723584128145
245
245
  required_rubygems_version: !ruby/object:Gem::Requirement
246
246
  none: false
247
247
  requirements: