rails_admin_place_field 0.0.8

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8f43dc0c284e2982ee9d6a4ad25f28f543af39d9
4
+ data.tar.gz: 19b3dc88b7bf3473cf9178af8012f89b245b4ed6
5
+ SHA512:
6
+ metadata.gz: 352c1570bbf58f106b6b5d72125e57e3612df581f3b696758e101ac7899f7d3f29f5a2a3f1ffb4c4045bc4b1df8e67561be6d7548bb34e4109f2515ae4f285a0
7
+ data.tar.gz: 0e00a819ac8395d726f672cbf2faf67db92d12bf639b8686b33caf299168e1f144a18a3ed9dbd3e0b5de32555b6f006eefdd3a19c260fc9e8fe19b509c0db53d
data/README.md ADDED
@@ -0,0 +1,65 @@
1
+ # Rails Admin Place Field
2
+
3
+ rails_admin_place_field is a gem that works with [rails_admin](https://github.com/sferik/rails_admin) to provide an easy to use Google Maps interface for displaying and setting geographic co-ordinates in a model and then performing lookups for associations to a nearby Google Place or Foursquare Venue
4
+
5
+ Where a latitude and longitude is set on the model, it is indicated by a marker shown on a Google map centered at the marker. The administrator can change the value of these fields by clicking on the desired new location on the map.
6
+
7
+
8
+ ## Usage
9
+
10
+ rails_admin_place_field expects that the model will have two attributes, one for latitude and one for longitude of the point represented. To enable rails_admin_place_field, add the following to your `Gemfile`:
11
+
12
+ ```ruby
13
+ gem "rails_admin_place_field", :git => "git://github.com/thinkclay/rails_admin_place_field.git"
14
+ ```
15
+
16
+ Then, add in your `config/initializers/rails_admin.rb` initializer:
17
+
18
+ ```ruby
19
+ RailsAdmin.config do |config|
20
+ config.model Place do
21
+ edit do
22
+ field :latitude, :place
23
+ field :longitude, :hidden
24
+ end
25
+ end
26
+ end
27
+ ```
28
+
29
+ **Note**: The field which is set as a :place field must be the latitude field, not the longitude.
30
+
31
+
32
+ ## Configuration
33
+
34
+ For different configurations, rails_admin_place_field can be configured with the following:
35
+
36
+ - `longitude_field` - the name of the longitude field that forms the the co-ordinate with the latitude field specified. Defaults to "longitude"
37
+ - `google_api_key` - if you use a Google Maps API Key, it can be specified here, otherwise the maps will do limited lookups without a key
38
+ - `foursquare_api_key` - this api will be disabled until a valid key is provided
39
+ - `places_api_key` - this api will be disabled until a valid key is provided
40
+ - `default_latitude` - the latitude to center the map shown on if the latitude field is blank. Defaults to 51.5, the latitude of London, UK.
41
+ - `default_longitude` - the longitude used if the longitude field is blank. Defaults to -0.126, the longitude of London, UK.
42
+
43
+ A more complicated configuration example:
44
+
45
+ ```ruby
46
+ RailsAdmin.config do |config|
47
+ config.model Place do
48
+ edit do
49
+ field :latitude, :place do
50
+ longitude_field :longitude
51
+ google_api_key "a1b2c3d4e5f6deadbeef"
52
+ places_api_key "a1b2c3d4e5f6deadbeef"
53
+ foursquare_api_key "a1b2c3d4e5f6deadbeef"
54
+ default_latitude -34.0
55
+ default_longitude 151.0
56
+ end
57
+ end
58
+ end
59
+ end
60
+ ```
61
+
62
+ -------
63
+ rails_admin_place_field is licensed under the MIT license.
64
+
65
+ Kudos and credit to [beyondthestory](https://github.com/beyondthestory/rails_admin_map_field) for his map_field which gave me the starting point to learn how to make this field
@@ -0,0 +1,88 @@
1
+ = javascript_include_tag ("//maps.googleapis.com/maps/api/js?key=#{field.google_api_key}&sensor=false&callback=init_map_field")
2
+
3
+ = javascript_tag do
4
+ :plain
5
+ function init_map_field()
6
+ {
7
+ jQuery(function() {
8
+ var marker = null;
9
+ var latlng = new google.maps.LatLng(
10
+ #{form.object.send(field.name) || field.default_latitude},
11
+ #{form.object.send(field.longitude_field) || field.default_longitude}
12
+ );
13
+
14
+ var myOptions = {
15
+ zoom: #{field.default_zoom_level},
16
+ center: latlng,
17
+ mapTypeId: google.maps.MapTypeId.ROADMAP
18
+ };
19
+
20
+ var map = new google.maps.Map(document.getElementById("#{field.dom_name}"), myOptions);
21
+
22
+ - if form.object.send(field.name) && form.object.send(field.longitude_field)
23
+ :plain
24
+ marker = new google.maps.Marker({
25
+ position: new google.maps.LatLng(#{form.object.send(field.name)},#{form.object.send(field.longitude_field)}),
26
+ map: map
27
+ });
28
+
29
+ :plain
30
+ google.maps.event.addListener(map, 'click', function(e) {
31
+ map_update(e.latLng);
32
+ foursquare_search(e.latLng.lat() + ',' + e.latLng.lng());
33
+ });
34
+
35
+ function map_update(location)
36
+ {
37
+ if (marker)
38
+ {
39
+ marker.setPosition(location);
40
+ }
41
+ else
42
+ {
43
+ marker = new google.maps.Marker({
44
+ position: location,
45
+ map: map
46
+ });
47
+ }
48
+
49
+ map.setCenter(location);
50
+ jQuery("##{field.latitude_dom_name}").val(location.lat());
51
+ jQuery("##{field.longitude_dom_name}").val(location.lng());
52
+ }
53
+
54
+ function foursquare_search(location)
55
+ {
56
+ var foursquare_url = 'https://api.foursquare.com/v2/venues/search?ll='+ location + '&intent=checkin'
57
+ + '&client_id=' + "#{field.foursquare_api_key}"
58
+ + '&client_secret=' + "#{field.foursquare_api_secret}"
59
+ + '&v=' + "#{Time.new.strftime("%Y%m%d")}";
60
+
61
+ $.get(
62
+ foursquare_url,
63
+ function(response) {
64
+ if ( response && response.meta.code == 200 )
65
+ {
66
+ response.response.venues.forEach(function(venue) {
67
+ jQuery('#foursquare_venue').append('<option value="'+venue.id+'">'+venue.name+'</option>').change(function() {
68
+ jQuery("##{field.foursquare_dom_name}").val($(this).val());
69
+ });
70
+ });
71
+ }
72
+ else
73
+ {
74
+ alert('foursquare venue lookup failed');
75
+ }
76
+ });
77
+ }
78
+
79
+ })};
80
+
81
+
82
+ %div.ramf-map-container{:id => field.dom_name, :style => "width:300px;height:200px"}
83
+ %select#foursquare_venue
84
+ %option
85
+
86
+ = form.send :hidden_field, field.foursquare_field, :id => field.foursquare_dom_name
87
+ = form.send :hidden_field, field.name, :id => field.latitude_dom_name
88
+ = form.send :hidden_field, field.longitude_field, :id => field.longitude_dom_name
@@ -0,0 +1,7 @@
1
+ require 'rails'
2
+ require 'rails_admin_place_field'
3
+
4
+ module RailsAdminPlaceField
5
+ class Engine < Rails::Engine
6
+ end
7
+ end
@@ -0,0 +1,72 @@
1
+ module RailsAdmin::Config::Fields::Types
2
+ class Place < RailsAdmin::Config::Fields::Base
3
+
4
+ RailsAdmin::Config::Fields::Types::register(:place, self)
5
+
6
+ def allowed_methods
7
+ [@name, longitude_field, foursquare_field]
8
+ end
9
+
10
+ # THe name of the corresponding longitude field to match the latitude field
11
+ # in this object.
12
+ register_instance_option(:longitude_field) do
13
+ :longitude
14
+ end
15
+
16
+ register_instance_option(:foursquare_field) do
17
+ :foursquare
18
+ end
19
+
20
+ register_instance_option(:partial) do
21
+ :place_select
22
+ end
23
+
24
+ register_instance_option(:google_api_key) do
25
+ nil
26
+ end
27
+
28
+ register_instance_option(:places_api_key) do
29
+ nil
30
+ end
31
+
32
+ register_instance_option(:foursquare_api_key) do
33
+ nil
34
+ end
35
+
36
+ register_instance_option(:foursquare_api_secret) do
37
+ nil
38
+ end
39
+
40
+ # Latitude value to display in the map if the latitude attribute is nil
41
+ # (Otherwise the location defaults to (0,0) which is in the Gulf of Guinea
42
+ register_instance_option(:default_latitude) do
43
+ 51.5 # Latitude of London, United Kingdom
44
+ end
45
+
46
+ # Longitude value to display if the longitude attribute is nil
47
+ register_instance_option(:default_longitude) do
48
+ -0.126 # Longitude of London, United Kingdom
49
+ end
50
+
51
+ # Default zoom level of the map
52
+ register_instance_option(:default_zoom_level) do
53
+ 8
54
+ end
55
+
56
+ def dom_name
57
+ @dom_name ||= "#{bindings[:form].object_name}_#{@name}_#{longitude_field}"
58
+ end
59
+
60
+ def latitude_dom_name
61
+ @lat_dom_name ||= "#{bindings[:form].object_name}_#{@name}"
62
+ end
63
+
64
+ def longitude_dom_name
65
+ @lon_dom_name ||= "#{bindings[:form].object_name}_#{longitude_field}"
66
+ end
67
+
68
+ def foursquare_dom_name
69
+ @foursquare_dom_name ||= "#{bindings[:form].object_name}_#{foursquare_field}"
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,3 @@
1
+ require 'rails_admin'
2
+ require 'rails_admin_place_field/rails_admin/config/fields/types/place'
3
+ load 'rails_admin_place_field/engine.rb'
metadata ADDED
@@ -0,0 +1,92 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rails_admin_place_field
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.8
5
+ platform: ruby
6
+ authors:
7
+ - Clay McIlrath
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-09-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec-rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '2.4'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '2.4'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rails
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: 3.0.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: 3.0.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: rails_admin
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>'
46
+ - !ruby/object:Gem::Version
47
+ version: 0.0.1
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>'
53
+ - !ruby/object:Gem::Version
54
+ version: 0.0.1
55
+ description: A place field for RailsAdmin that can be used to retrieve a google place
56
+ or foursquare venue
57
+ email:
58
+ - clay.mcilrath@gmail.com
59
+ executables: []
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - lib/rails_admin_place_field/engine.rb
64
+ - lib/rails_admin_place_field/rails_admin/config/fields/types/place.rb
65
+ - lib/rails_admin_place_field.rb
66
+ - app/views/rails_admin/main/_place_select.html.haml
67
+ - README.md
68
+ homepage: http://github.com/thinkclay/
69
+ licenses: []
70
+ metadata: {}
71
+ post_install_message:
72
+ rdoc_options: []
73
+ require_paths:
74
+ - lib
75
+ required_ruby_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - '>='
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - '>='
83
+ - !ruby/object:Gem::Version
84
+ version: 1.3.6
85
+ requirements: []
86
+ rubyforge_project: rails_admin_place_field
87
+ rubygems_version: 2.0.3
88
+ signing_key:
89
+ specification_version: 4
90
+ summary: Adds a place field to rails_admin using the Google Places and Foursquare
91
+ API's
92
+ test_files: []