clumpy 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -30,7 +30,7 @@ module Clumpy
30
30
  if parent_cluster
31
31
  parent_cluster.points << point
32
32
  else
33
- clusters << cluster_class.new(point, cluster_distance, cluster_options)
33
+ clusters << cluster_class.new(point, cluster_options)
34
34
  end
35
35
  end
36
36
 
@@ -42,14 +42,20 @@ module Clumpy
42
42
  clusters.find { |c| c.contains?(point) }
43
43
  end
44
44
 
45
- def cluster_distance
45
+ def cluster_latitude_distance
46
46
  latitude_distance / DISTANCE_MODIFIER
47
47
  end
48
48
 
49
+ def cluster_longitude_distance
50
+ longitude_distance / (DISTANCE_MODIFIER * 2)
51
+ end
52
+
49
53
  def cluster_options
50
54
  {
51
55
  values_threshold: options[:values_threshold],
52
- include_values: options[:include_values]
56
+ include_values: options[:include_values],
57
+ latitude_distance: cluster_latitude_distance,
58
+ longitude_distance: cluster_longitude_distance
53
59
  }
54
60
  end
55
61
 
@@ -64,5 +70,13 @@ module Clumpy
64
70
  MAX_LATITUDE_DISTANCE
65
71
  end
66
72
  end
73
+
74
+ def longitude_distance
75
+ if options[:nelng] && options[:swlng]
76
+ (options[:nelng] - options[:swlng]).abs
77
+ else
78
+ MAX_LONGITUDE_DISTANCE
79
+ end
80
+ end
67
81
  end
68
82
  end
@@ -2,14 +2,17 @@ module Clumpy
2
2
  module ClusterBehavior
3
3
  attr_accessor :latitude, :longitude, :points, :bounds
4
4
 
5
- def initialize(point, distance, options = {})
5
+ def initialize(point, options = {})
6
6
  @latitude = point.latitude
7
7
  @longitude = point.longitude
8
8
  @points = [point]
9
9
  @options = options
10
+
11
+ lat_dist = options[:latitude_distance] || 10
12
+ lng_dist = options[:longitude_distance] || 10
10
13
  @bounds = OpenStruct.new(
11
- latitude: (latitude - distance)..(latitude + distance),
12
- longitude: (longitude - distance)..(longitude + distance)
14
+ latitude: (latitude - lat_dist)..(latitude + lat_dist),
15
+ longitude: (longitude - lng_dist)..(longitude + lng_dist)
13
16
  )
14
17
  end
15
18
 
@@ -51,7 +54,7 @@ module Clumpy
51
54
  },
52
55
  southwest: {
53
56
  latitude: bounds.latitude.min,
54
- longitude: bounds.longitude.max
57
+ longitude: bounds.longitude.min
55
58
  }
56
59
  }
57
60
  end
@@ -1,3 +1,3 @@
1
1
  module Clumpy
2
- VERSION = "0.2.2"
2
+ VERSION = "0.2.3"
3
3
  end
@@ -25,7 +25,7 @@ describe Clumpy::Builder do
25
25
 
26
26
  it "passes the values threshold through to the cluster" do
27
27
  builder = Clumpy::Builder.new([point1], values_threshold: 100, include_values: true)
28
- builder.cluster_options.should eq({ values_threshold: 100, include_values: true })
28
+ builder.cluster_options.should eq({ values_threshold: 100, include_values: true, latitude_distance: 34.01023, longitude_distance: 36 })
29
29
  clusters = builder.cluster
30
30
  clusters.first.instance_variable_get(:@options).should eq builder.cluster_options
31
31
  end
@@ -44,7 +44,7 @@ describe Clumpy::Builder do
44
44
  end
45
45
 
46
46
  it "appends markers to a existing cluster if they match" do
47
- builder.clusters << Clumpy::Cluster.new(point1, builder.cluster_distance)
47
+ builder.clusters << Clumpy::Cluster.new(point1, builder.cluster_options)
48
48
  builder.clusters.size.should eq 1
49
49
  builder.clusters.first.points.size.should eq 1
50
50
  builder.add_to_cluster(point2)
@@ -3,7 +3,7 @@ require 'spec_helper'
3
3
  describe Clumpy::ClusterBehavior do
4
4
  let(:point) { OpenStruct.new(latitude: 15, longitude: 20) }
5
5
  let(:other_point) { OpenStruct.new(latitude: 40, longitude: 40) }
6
- let(:cluster) { Clumpy::Cluster.new(point, 10) }
6
+ let(:cluster) { Clumpy::Cluster.new(point, latitude_distance: 10, longitude_distance: 10) }
7
7
 
8
8
  it "has a nicish to_s representation" do
9
9
  cluster.to_s.should include '# size: 1'
@@ -27,23 +27,23 @@ describe Clumpy::ClusterBehavior do
27
27
 
28
28
  context "#value_list" do
29
29
  it "returns an empty array if threshold isn't reached" do
30
- cluster = Clumpy::Cluster.new(point, 10, values_threshold: 1)
30
+ cluster = Clumpy::Cluster.new(point, values_threshold: 1)
31
31
  cluster.points << other_point
32
32
  cluster.value_list.should eq []
33
33
  end
34
34
 
35
35
  it "returns an array of json points if under threshold" do
36
- cluster = Clumpy::Cluster.new(point, 10, values_threshold: 1)
36
+ cluster = Clumpy::Cluster.new(point, values_threshold: 1)
37
37
  cluster.value_list.should eq [point]
38
38
  end
39
39
 
40
40
  it "returns a list of values if include_values is true" do
41
- cluster = Clumpy::Cluster.new(point, 10, values_threshold: 0, include_values: true)
41
+ cluster = Clumpy::Cluster.new(point, values_threshold: 0, include_values: true)
42
42
  cluster.value_list.should eq [point]
43
43
  end
44
44
 
45
45
  it "returns a empty list if include_values is false" do
46
- cluster = Clumpy::Cluster.new(point, 10, values_threshold: 10, include_values: false)
46
+ cluster = Clumpy::Cluster.new(point, values_threshold: 10, include_values: false)
47
47
  cluster.value_list.should eq []
48
48
  end
49
49
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clumpy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
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: 2013-04-20 00:00:00.000000000 Z
12
+ date: 2013-04-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -113,7 +113,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
113
113
  version: '0'
114
114
  segments:
115
115
  - 0
116
- hash: 3119910671482455644
116
+ hash: -2427505316629763450
117
117
  required_rubygems_version: !ruby/object:Gem::Requirement
118
118
  none: false
119
119
  requirements:
@@ -122,7 +122,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
122
122
  version: '0'
123
123
  segments:
124
124
  - 0
125
- hash: 3119910671482455644
125
+ hash: -2427505316629763450
126
126
  requirements: []
127
127
  rubyforge_project:
128
128
  rubygems_version: 1.8.25