clumpy 0.2.3 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 2c9b3590d403a8d17022234a9c010d77afb868ba
4
+ data.tar.gz: 2c6c5d30ecaab4b5e7b9860da3503a26cd7e4376
5
+ SHA512:
6
+ metadata.gz: aa62267024945a10872876e7051bc1c7d5323c7fcb0434cb05255366e59e8ba639e5a96845c090106475f90bd576c584728c5641c5d9a6cc479ff15cd13b6d51
7
+ data.tar.gz: 86aab5b639351c14244a2ec557e5f387efabbbefeff727131c615035e6290284ce9e9bcaf93c8cc9a7f1b6475807ff37bbcb4b0b1bdc317b29db19209d977de1
@@ -0,0 +1 @@
1
+ clumpy
@@ -0,0 +1 @@
1
+ ruby-2.0.0
data/README.md CHANGED
@@ -1,30 +1,49 @@
1
1
  # Clumpy
2
2
 
3
- Little gem to cluster markers, points or anything that responds to `lat` and `lng`.
3
+ Cluster markers, geocoordinates or anything that responds to `latitude` and `longitude`.
4
4
 
5
- ## Installation
5
+ ## Why serverside clustering
6
6
 
7
- Add this line to your application's Gemfile:
7
+ Of cause there are lots of libs to cluster large amounts of markers in the frontend, but the expensive part is to
8
+ transfer all those markers to the client. In my case it was the difference between sending 10_000 markers - or 20.
8
9
 
9
- gem 'clumpy'
10
+ ## Installation
10
11
 
11
- And then execute:
12
+ As part of the Gemfile or by hand, nothing unusual here.
12
13
 
13
- $ bundle
14
+ ## Usage
14
15
 
15
- Or install it yourself as:
16
+ Clumpy takes points, typically geocoordinates, and puts them together into clusters.
16
17
 
17
- $ gem install clumpy
18
+ It requires the given points to be ruby objects, responding to `latitude` and `longitude` methods.
18
19
 
19
- ## Usage
20
+ ```ruby
21
+ require 'ostruct'
22
+
23
+ Point = Struct.new(:latitude, :longitude)
24
+ points = [
25
+ Point.new(latitude: 101, longitude: 11),
26
+ Point.new(latitude: 102, longitude: 12),
27
+ Point.new(latitude: 201, longitude: 21)
28
+ ]
29
+ ```
20
30
 
21
- It's dead easy:
31
+ Now those points may be clustered easily:
22
32
 
23
33
  ```ruby
24
34
  builder = Clumpy::Builder.new(points)
25
35
  clusters = builder.cluster
36
+
37
+ cluster = clusters.first
38
+ cluster.size # => 2
39
+ cluster.latitude # => 101.5
40
+ cluster.longitude # => 11.5
41
+ cluster.points # => points 1 and 2 from above
42
+ cluster.bounds # => represents the area this cluster covers
43
+ cluster.to_json # => well, json representation of that.
26
44
  ```
27
45
 
46
+
28
47
  Optionally you could add a `precision: :high` option to the builder initialization to move the cluster a little bit after all points were assigned.
29
48
 
30
49
  ## Contributing
@@ -2,14 +2,14 @@ module Clumpy
2
2
  class Builder
3
3
  MAX_LATITUDE_DISTANCE = 170.05115
4
4
  MAX_LONGITUDE_DISTANCE = 360
5
- DISTANCE_MODIFIER = 5
6
5
 
7
6
  attr_accessor :points, :options, :clusters
8
7
 
9
8
  def initialize(points, options = {})
10
- @points = points
11
- @options = options || {}
12
- @clusters = []
9
+ @points = points
10
+ @options = options || {}
11
+ @distance_modifier = options.fetch(:distance_modifier) { 5 }
12
+ @clusters = []
13
13
  end
14
14
 
15
15
  # Clusters the given points
@@ -43,11 +43,11 @@ module Clumpy
43
43
  end
44
44
 
45
45
  def cluster_latitude_distance
46
- latitude_distance / DISTANCE_MODIFIER
46
+ latitude_distance / @distance_modifier
47
47
  end
48
48
 
49
49
  def cluster_longitude_distance
50
- longitude_distance / (DISTANCE_MODIFIER * 2)
50
+ longitude_distance / (@distance_modifier * 2)
51
51
  end
52
52
 
53
53
  def cluster_options
@@ -1,3 +1,3 @@
1
1
  module Clumpy
2
- VERSION = "0.2.3"
2
+ VERSION = "0.2.4"
3
3
  end
@@ -14,6 +14,16 @@ describe Clumpy::Builder do
14
14
  builder.options.should eq({ foo: :bar })
15
15
  end
16
16
 
17
+ it "initializes the distance_modifier is none was given" do
18
+ builder = Clumpy::Builder.new([])
19
+ builder.instance_variable_get(:@distance_modifier).should_not be_nil
20
+ end
21
+
22
+ it 'takes the given distance modifier' do
23
+ builder = Clumpy::Builder.new([], distance_modifier: 12)
24
+ builder.instance_variable_get(:@distance_modifier).should eq 12
25
+ end
26
+
17
27
  context "#cluster" do
18
28
  it "creates clusters from points" do
19
29
  clusters = builder.cluster
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clumpy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
5
- prerelease:
4
+ version: 0.2.4
6
5
  platform: ruby
7
6
  authors:
8
7
  - Johannes Opper
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-04-23 00:00:00.000000000 Z
11
+ date: 2014-03-04 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: bundler
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,49 +27,43 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rake
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rspec
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: simplecov
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - '>='
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - '>='
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  description: Cluster points e.g. for a map
@@ -83,6 +74,8 @@ extensions: []
83
74
  extra_rdoc_files: []
84
75
  files:
85
76
  - .gitignore
77
+ - .ruby-gemset
78
+ - .ruby-version
86
79
  - Gemfile
87
80
  - LICENSE.txt
88
81
  - README.md
@@ -101,33 +94,26 @@ files:
101
94
  homepage: http://github.com/xijo/clumpy
102
95
  licenses:
103
96
  - WTFPL
97
+ metadata: {}
104
98
  post_install_message:
105
99
  rdoc_options: []
106
100
  require_paths:
107
101
  - lib
108
102
  required_ruby_version: !ruby/object:Gem::Requirement
109
- none: false
110
103
  requirements:
111
- - - ! '>='
104
+ - - '>='
112
105
  - !ruby/object:Gem::Version
113
106
  version: '0'
114
- segments:
115
- - 0
116
- hash: -2427505316629763450
117
107
  required_rubygems_version: !ruby/object:Gem::Requirement
118
- none: false
119
108
  requirements:
120
- - - ! '>='
109
+ - - '>='
121
110
  - !ruby/object:Gem::Version
122
111
  version: '0'
123
- segments:
124
- - 0
125
- hash: -2427505316629763450
126
112
  requirements: []
127
113
  rubyforge_project:
128
- rubygems_version: 1.8.25
114
+ rubygems_version: 2.1.11
129
115
  signing_key:
130
- specification_version: 3
116
+ specification_version: 4
131
117
  summary: Cluster a bunch of points
132
118
  test_files:
133
119
  - spec/builder_spec.rb