campfire_logic 2.0.0 → 2.0.1
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.
- data/VERSION +1 -1
- data/app/controllers/directory_controller.rb +1 -0
- data/app/models/location.rb +6 -6
- data/app/views/directory/_search_form.html.erb +4 -4
- data/app/views/directory/_show_children.html.erb +14 -14
- data/app/views/directory/_show_location.html.erb +7 -9
- data/app/views/directory/search.html.erb +11 -11
- data/app/views/directory/show.html.erb +13 -13
- data/app/views/layouts/application.html.erb +19 -19
- data/app/views/locations/_form.html.erb +33 -33
- data/app/views/locations/edit.html.erb +2 -2
- data/app/views/locations/export.erb +3 -3
- data/app/views/locations/import.html.erb +6 -6
- data/app/views/locations/index.html.erb +22 -22
- data/app/views/locations/new.html.erb +2 -2
- data/app/views/locations/show.html.erb +16 -16
- data/app/views/services/_form.html.erb +14 -14
- data/app/views/services/edit.html.erb +2 -2
- data/app/views/services/index.html.erb +13 -13
- data/app/views/services/new.html.erb +2 -2
- data/app/views/services/show.html.erb +6 -6
- data/app/views/shared/_location.html.erb +9 -9
- data/app/views/shared/_map.html.erb +13 -8
- data/app/views/shared/_nav_tabs.html.erb +3 -3
- data/campfire_logic.gemspec +2 -2
- data/spec/models/location_import_spec.rb +1 -1
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.0.
|
1
|
+
2.0.1
|
data/app/models/location.rb
CHANGED
@@ -91,6 +91,10 @@ class Location
|
|
91
91
|
self[:city] = value
|
92
92
|
end
|
93
93
|
|
94
|
+
def phone= value
|
95
|
+
self[:phone] = value.gsub /[a-z\.\(\) -]+/,'' if value.present?
|
96
|
+
end
|
97
|
+
|
94
98
|
def state=(value)
|
95
99
|
clear_geocoding if self.state != value
|
96
100
|
self[:state] = value
|
@@ -113,7 +117,7 @@ class Location
|
|
113
117
|
# Geocodes this location.
|
114
118
|
def call_geocode
|
115
119
|
return :new if self.geocoding_address.blank?
|
116
|
-
geocode
|
120
|
+
geocode unless geocoded?
|
117
121
|
return :new unless Geocoder::Configuration.lookup == :google
|
118
122
|
audit_address
|
119
123
|
self.geocoder_result.try(:partial_match?) ? :partial_match : :validated
|
@@ -129,14 +133,10 @@ class Location
|
|
129
133
|
geocoder_result.blank? || self.send(attribute) == geocoder_result.send(GOOGLE_MAPS_GEOCODER_FIELDS_BY_LOCATION_FIELD[attribute])
|
130
134
|
end
|
131
135
|
|
132
|
-
# Returns the n nearest locations.
|
133
|
-
def nearby_locations(n = 5)
|
134
|
-
Location.near(:coordinates => self.coordinates).limit(n + 1).select{ |l| l != self }
|
135
|
-
end
|
136
|
-
|
137
136
|
# Instance methods: Locales ======================================================================
|
138
137
|
|
139
138
|
def localize
|
139
|
+
return if geocoding_address.blank?
|
140
140
|
self.save
|
141
141
|
self.locale ? update_locales : create_locales
|
142
142
|
self.save
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<%= form_tag "/#{CampfireLogic.directory_slug}/search", :method => :get, :id => 'search-form' do
|
2
|
-
<%= text_field_tag 'criteria', params[:criteria], :id => 'search-input', :maxlength => 40
|
3
|
-
<%= submit_tag 'Search'
|
4
|
-
|
1
|
+
<%= form_tag "/#{CampfireLogic.directory_slug}/search", :method => :get, :id => 'search-form' do %>
|
2
|
+
<%= text_field_tag 'criteria', params[:criteria], :id => 'search-input', :maxlength => 40 %>
|
3
|
+
<%= submit_tag 'Search' %>
|
4
|
+
<% end %>
|
@@ -1,29 +1,29 @@
|
|
1
|
-
|
1
|
+
<%
|
2
2
|
subtitle = " - #{@locale.location ? @locale.location.name : @locale.name}" unless @locale.planet?
|
3
3
|
set_title "Location Directory#{subtitle}"
|
4
|
-
|
4
|
+
%>
|
5
5
|
|
6
6
|
<br style="clear: both;" />
|
7
7
|
<br style="clear: both;" />
|
8
8
|
|
9
|
-
|
10
|
-
|
9
|
+
<% unless @locale.children.blank? %>
|
10
|
+
<% if @locale.root? %>
|
11
11
|
<h2>Select a State/Province</h2>
|
12
|
-
|
12
|
+
<% elsif @locale.country? %>
|
13
13
|
<h2>Select a State</h2>
|
14
|
-
|
14
|
+
<% elsif @locale.state? %>
|
15
15
|
<h2>Select a City</h2>
|
16
|
-
|
16
|
+
<% else %>
|
17
17
|
<h2>Select a Location</h2>
|
18
|
-
|
18
|
+
<% end %>
|
19
19
|
|
20
20
|
<div>
|
21
|
-
|
21
|
+
<% @locale.sorted_children.in_groups(2, false).each do |group| %>
|
22
22
|
<ul style="float: left; margin-right: 1em; width: 40%;">
|
23
|
-
|
24
|
-
<li><%= link_to _child.name, _child.to_param
|
25
|
-
|
23
|
+
<% group.each do |_child| %>
|
24
|
+
<li><%= link_to _child.name, _child.to_param %></li>
|
25
|
+
<% end %>
|
26
26
|
</ul>
|
27
|
-
|
27
|
+
<% end %>
|
28
28
|
</div><br style="clear: both;" />
|
29
|
-
|
29
|
+
<% end %>
|
@@ -1,14 +1,12 @@
|
|
1
|
-
|
1
|
+
<% set_title "Location Directory - #{ @location.name }" %>
|
2
2
|
|
3
|
-
<%= render 'shared/location'
|
3
|
+
<%= render 'shared/location' %><br style="clear: both;" />
|
4
4
|
<br style="clear: both;" />
|
5
5
|
|
6
6
|
<h2>Nearby Locations</h2>
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
</ul>
|
14
|
-
<%- end -%>
|
8
|
+
<ul style="float: left; margin-right: 1em; width: 40%;">
|
9
|
+
<% @location.nearbys(100).limit(5).each do |@location| %>
|
10
|
+
<li><%= render 'shared/location' %></li>
|
11
|
+
<% end %>
|
12
|
+
</ul>
|
@@ -1,31 +1,31 @@
|
|
1
|
-
|
1
|
+
<% set_title 'Location Directory - Search' %>
|
2
2
|
|
3
3
|
<div id="map_canvas" style="border: solid black 1px; width: 100%; height: 300px"></div><br />
|
4
4
|
|
5
|
-
<%= render 'search_form'
|
5
|
+
<%= render 'search_form' %><br style="clear: both;" />
|
6
6
|
<br style="clear: both;" />
|
7
7
|
|
8
8
|
<div id="directions_panel"></div>
|
9
9
|
|
10
|
-
|
10
|
+
<% if @locations.empty? %>
|
11
11
|
<p>No matching locations found. Please try again.</p>
|
12
12
|
</em></p>
|
13
|
-
|
14
|
-
<h2><%= controller.searching_by_zip? ? 'Locations nearest' : "#{@locations.size} locations match"
|
13
|
+
<% else %>
|
14
|
+
<h2><%= controller.searching_by_zip? ? 'Locations nearest' : "#{@locations.size} locations match" %> "<%= params[:criteria] %>"</h2>
|
15
15
|
|
16
|
-
|
17
|
-
<%= render 'shared/location'
|
18
|
-
|
19
|
-
|
16
|
+
<% for @location in @locations %>
|
17
|
+
<%= render 'shared/location' %>
|
18
|
+
<% end %>
|
19
|
+
<% end %>
|
20
20
|
|
21
21
|
<br style="clear: both;" />
|
22
22
|
|
23
|
-
<%= render :partial => 'shared/map', :locals => {:locations => @locations, :place => Locale.us.first}
|
23
|
+
<%= render :partial => 'shared/map', :locals => {:locations => @locations, :place => Locale.us.first} %>
|
24
24
|
|
25
25
|
<script type="text/javascript">
|
26
26
|
initializeMap();
|
27
27
|
|
28
28
|
$('#search-form')[0].addEventListener('submit', function (e) {
|
29
|
-
window.location = '<%= directory_search_root_url
|
29
|
+
window.location = '<%= directory_search_root_url %>/' + $('#search-input')[0].value;
|
30
30
|
}, false);
|
31
31
|
</script>
|
@@ -1,24 +1,24 @@
|
|
1
1
|
<div id="map_canvas" style="border: solid black 1px; width: 100%; height: 300px"></div><br />
|
2
2
|
|
3
|
-
<%= render 'search_form'
|
3
|
+
<%= render 'search_form' %>
|
4
4
|
|
5
5
|
<div id="directions_panel" style="margin-bottom: 1em;"></div>
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
<% if Locale.count <= 1 %>
|
8
|
+
<% set_title 'Location Directory' %>
|
9
9
|
|
10
|
-
<p>No locations found. Why don't you <%= link_to 'import', import_locations_path
|
11
|
-
|
12
|
-
|
13
|
-
<%= render :partial => 'show_location'
|
14
|
-
|
15
|
-
<%= render :partial => 'show_children'
|
16
|
-
|
17
|
-
|
10
|
+
<p>No locations found. Why don't you <%= link_to 'import', import_locations_path %> some?</p>
|
11
|
+
<% else %>
|
12
|
+
<% if @locale.location? %>
|
13
|
+
<%= render :partial => 'show_location' %>
|
14
|
+
<% else %>
|
15
|
+
<%= render :partial => 'show_children' %>
|
16
|
+
<% end %>
|
17
|
+
<% end %>
|
18
18
|
|
19
19
|
<br style="clear: both;" />
|
20
20
|
|
21
|
-
<%= render :partial => 'shared/map', :locals => {:locations => @locale.locations, :place => @locale.root? ? Locale.us.first : @locale}
|
21
|
+
<%= render :partial => 'shared/map', :locals => {:locations => @locale.locations, :place => @locale.root? ? Locale.us.first : @locale} %>
|
22
22
|
|
23
23
|
<script type="text/javascript">
|
24
24
|
initializeMap();
|
@@ -27,6 +27,6 @@
|
|
27
27
|
$('#search-form')[0].action = 'javascript:return(false);';
|
28
28
|
|
29
29
|
$('#search-form')[0].addEventListener('submit', function (e) {
|
30
|
-
window.location = '<%= directory_search_root_url
|
30
|
+
window.location = '<%= directory_search_root_url %>/' + $('#search-input')[0].value;
|
31
31
|
}, false);
|
32
32
|
</script>
|
@@ -1,48 +1,48 @@
|
|
1
1
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
2
2
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
3
3
|
<head>
|
4
|
-
<title><%= yield(:title)
|
4
|
+
<title><%= yield(:title) %></title>
|
5
5
|
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
6
6
|
<meta name="description" content="" />
|
7
7
|
<meta name="keywords" content="" />
|
8
|
-
<link rel="canonical" href="<%= request.url
|
8
|
+
<link rel="canonical" href="<%= request.url %>" />
|
9
9
|
<link rel="shortcut icon" href="/favicon.ico" />
|
10
|
-
<%= stylesheet_link_tag 'core', 'application', :cache => true
|
10
|
+
<%= stylesheet_link_tag 'core', 'application', :cache => true %>
|
11
11
|
<!--[if IE]>
|
12
|
-
<%= stylesheet_link_tag 'core_ie', :media => :all
|
12
|
+
<%= stylesheet_link_tag 'core_ie', :media => :all %>
|
13
13
|
<![endif]-->
|
14
|
-
<%= csrf_meta_tag
|
14
|
+
<%= csrf_meta_tag %>
|
15
15
|
</head>
|
16
16
|
<body>
|
17
17
|
<div id="container">
|
18
18
|
<div id="header">
|
19
19
|
<div id="branding"></div>
|
20
|
-
<div id="navigation"><%= render :partial => 'shared/nav_tabs'
|
20
|
+
<div id="navigation"><%= render :partial => 'shared/nav_tabs' %></div>
|
21
21
|
</div>
|
22
22
|
<div id="page_header">
|
23
|
-
<h1><%= yield(:page_title)
|
24
|
-
<div id="breadcrumbs"><%= breadcrumbs
|
23
|
+
<h1><%= yield(:page_title) %></h1>
|
24
|
+
<div id="breadcrumbs"><%= breadcrumbs %></div>
|
25
25
|
</div>
|
26
26
|
<div id="content_area">
|
27
27
|
<div id="washout" style="display:none;"></div>
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
<%= content_tag :div, msg, :id => "flash_#{name}", :class => "flash_#{name}", :style => "display:none;"
|
29
|
+
<% flash.each do |name, msg| %>
|
30
|
+
<% if name == :notice %>
|
31
|
+
<%= content_tag :div, msg, :id => "flash_#{name}", :class => "flash_#{name}", :style => "display:none;" %>
|
32
32
|
<script type="text/javascript">
|
33
33
|
$('washout').toggle();
|
34
34
|
$('flash_notice').toggle();
|
35
|
-
<%= visual_effect(:fade, 'flash_notice', :duration => 1.0, :delay => 1.0).html_safe
|
36
|
-
<%= visual_effect(:fade, 'washout', :duration => 1.0, :delay => 1.0).html_safe
|
35
|
+
<%= visual_effect(:fade, 'flash_notice', :duration => 1.0, :delay => 1.0).html_safe %>
|
36
|
+
<%= visual_effect(:fade, 'washout', :duration => 1.0, :delay => 1.0).html_safe %>
|
37
37
|
</script>
|
38
|
-
|
39
|
-
<%= content_tag :div, msg, :id => "flash_#{name}", :class => "flash_#{name}"
|
40
|
-
|
41
|
-
|
42
|
-
<%= yield
|
38
|
+
<% else %>
|
39
|
+
<%= content_tag :div, msg, :id => "flash_#{name}", :class => "flash_#{name}" %>
|
40
|
+
<% end %>
|
41
|
+
<% end %>
|
42
|
+
<%= yield %>
|
43
43
|
<br style="clear: both;" />
|
44
44
|
</div>
|
45
|
-
<div id="footer"><p>© <%= Time.zone.now.year
|
45
|
+
<div id="footer"><p>© <%= Time.zone.now.year %> SEO Logic. All rights reserved.</p></div>
|
46
46
|
</div>
|
47
47
|
</body>
|
48
48
|
</html>
|
@@ -1,24 +1,24 @@
|
|
1
|
-
<%= form_for(@location) do |f|
|
2
|
-
|
1
|
+
<%= form_for(@location) do |f| %>
|
2
|
+
<% if @location.errors.any? %>
|
3
3
|
<div id="error_explanation">
|
4
4
|
<h2>Please correct the following errors:</h2>
|
5
|
-
|
5
|
+
<% @location.errors.to_a.in_groups(2, false).each do |group| %>
|
6
6
|
<ul>
|
7
|
-
|
8
|
-
<li><%= msg
|
9
|
-
|
7
|
+
<% group.each do |msg| %>
|
8
|
+
<li><%= msg %></li>
|
9
|
+
<% end %>
|
10
10
|
</ul>
|
11
|
-
|
11
|
+
<% end %>
|
12
12
|
<br style="clear: both;" />
|
13
13
|
</div>
|
14
14
|
<br style="clear: both;" />
|
15
|
-
|
15
|
+
<% end %>
|
16
16
|
|
17
17
|
<fieldset class="form_container">
|
18
|
-
<%= legend_tag 'About This Location'
|
18
|
+
<%= legend_tag 'About This Location' %>
|
19
19
|
<div class="form_column">
|
20
|
-
<%= f.text_field :name
|
21
|
-
<%= f.check_box :active, :inline_label => 'Yes'
|
20
|
+
<%= f.text_field :name %>
|
21
|
+
<%= f.check_box :active, :inline_label => 'Yes' %>
|
22
22
|
</div>
|
23
23
|
|
24
24
|
<div class="form_column">
|
@@ -27,42 +27,42 @@
|
|
27
27
|
</fieldset>
|
28
28
|
|
29
29
|
<fieldset class="form_container">
|
30
|
-
<%= legend_tag 'Address'
|
30
|
+
<%= legend_tag 'Address' %>
|
31
31
|
<div class="form_column">
|
32
|
-
<%= f.text_field :address1
|
33
|
-
<%= f.text_field :address2
|
34
|
-
<%= f.text_field :city
|
35
|
-
<%= f.text_field :state
|
36
|
-
<%= f.text_field :zip
|
32
|
+
<%= f.text_field :address1 %>
|
33
|
+
<%= f.text_field :address2 %>
|
34
|
+
<%= f.text_field :city %>
|
35
|
+
<%= f.text_field :state %>
|
36
|
+
<%= f.text_field :zip %>
|
37
37
|
</div>
|
38
38
|
<div class="form_column">
|
39
|
-
<%= f.text_field :phone
|
40
|
-
<%= f.text_field :fax
|
41
|
-
<%= f.text_field :email
|
39
|
+
<%= f.text_field :phone %>
|
40
|
+
<%= f.text_field :fax %>
|
41
|
+
<%= f.text_field :email %>
|
42
42
|
</div>
|
43
43
|
</fieldset>
|
44
44
|
|
45
45
|
<fieldset class="form_container">
|
46
|
-
<%= legend_tag 'Services Offered'
|
47
|
-
|
48
|
-
|
46
|
+
<%= legend_tag 'Services Offered' %>
|
47
|
+
<% i = 0 %>
|
48
|
+
<% Service.all.to_a.in_groups(2, false) do |column| %>
|
49
49
|
<div class="form_column">
|
50
|
-
|
50
|
+
<% column.each do |service| %>
|
51
51
|
<fieldset>
|
52
|
-
<%= check_box_tag 'location[service_ids][]', service.id, @location.services.include?(service), :id => "service_#{i}"
|
53
|
-
<%= service.name
|
52
|
+
<%= check_box_tag 'location[service_ids][]', service.id, @location.services.include?(service), :id => "service_#{i}" %>
|
53
|
+
<%= service.name %>
|
54
54
|
</fieldset>
|
55
|
-
|
56
|
-
|
55
|
+
<% i += 1 %>
|
56
|
+
<% end %>
|
57
57
|
</div>
|
58
|
-
|
58
|
+
<% end %>
|
59
59
|
</fieldset>
|
60
60
|
|
61
|
-
<%= f.submit 'Save', :class => 'button'
|
62
|
-
<%= link_to 'Cancel', @location, :class => 'button'
|
63
|
-
|
61
|
+
<%= f.submit 'Save', :class => 'button' %>
|
62
|
+
<%= link_to 'Cancel', @location, :class => 'button' %>
|
63
|
+
<% end %>
|
64
64
|
|
65
|
-
<%= render :partial => 'shared/map', :locals => {:place => @location.locale}
|
65
|
+
<%= render :partial => 'shared/map', :locals => {:place => @location.locale} %>
|
66
66
|
|
67
67
|
<script type="text/javascript">
|
68
68
|
initializeMap();
|
@@ -1,3 +1,3 @@
|
|
1
|
-
|
1
|
+
<% set_title "Editing #{@location.name}" %>
|
2
2
|
|
3
|
-
<%= render :partial => 'form'
|
3
|
+
<%= render :partial => 'form' %>
|
@@ -1,4 +1,4 @@
|
|
1
1
|
Location # Name Address 1 Address 2 City State Postal Code Country Code Phone Email Description
|
2
|
-
|
3
|
-
<%= l.location_number
|
4
|
-
|
2
|
+
<% @locations.each do |l| %>
|
3
|
+
<%= l.location_number %> <%= l.name %> <%= l.address1 %> <%= l.address2 %> <%= l.city %> <%= l.state %> <%= l.zip %> <%= l.country %> <%= l.phone %> <%= l.email %> <%= l.meta_description %>
|
4
|
+
<% end %>
|
@@ -1,13 +1,13 @@
|
|
1
|
-
|
1
|
+
<% set_title 'Import Locations' %>
|
2
2
|
|
3
|
-
<%= form_tag upload_locations_path, :method => :post, :multipart => true do
|
3
|
+
<%= form_tag upload_locations_path, :method => :post, :multipart => true do %>
|
4
4
|
<fieldset class="form_container">
|
5
|
-
<p>To import locations, upload the import file below. Make sure the file follows this <%= link_to 'format', '/sample-locations.xls'
|
5
|
+
<p>To import locations, upload the import file below. Make sure the file follows this <%= link_to 'format', '/sample-locations.xls' %>: it must be tab-delimited and the column names must match exactly. Otherwise, your data won't be processed correctly.</p>
|
6
6
|
|
7
7
|
<fieldset>
|
8
|
-
<%= file_field 'upload', 'datafile'
|
8
|
+
<%= file_field 'upload', 'datafile' %>
|
9
9
|
</fieldset>
|
10
10
|
</fieldset>
|
11
11
|
|
12
|
-
<%= submit_tag 'Upload', :class => 'button'
|
13
|
-
|
12
|
+
<%= submit_tag 'Upload', :class => 'button' %>
|
13
|
+
<% end %>
|
@@ -1,37 +1,37 @@
|
|
1
|
-
|
1
|
+
<% set_title 'Locations' %>
|
2
2
|
|
3
|
-
|
4
|
-
<%= @errors * '<br />'
|
5
|
-
|
3
|
+
<% unless @errors.blank? %>
|
4
|
+
<%= @errors * '<br />' %>
|
5
|
+
<% end %>
|
6
6
|
|
7
|
-
|
8
|
-
<p><em>No locations found. Why don't you <%= link_to 'import', import_locations_path
|
7
|
+
<% if @locations.empty? %>
|
8
|
+
<p><em>No locations found. Why don't you <%= link_to 'import', import_locations_path %> some?
|
9
9
|
</em></p>
|
10
|
-
|
10
|
+
<% else %>
|
11
11
|
<table class="standard">
|
12
12
|
<tr>
|
13
|
-
<th><%= sort_link('locations', 'location_number', params)
|
14
|
-
<th><%= sort_link('locations', 'name', params)
|
13
|
+
<th><%= sort_link('locations', 'location_number', params) %></th>
|
14
|
+
<th><%= sort_link('locations', 'name', params) %></th>
|
15
15
|
<th>Address</th>
|
16
16
|
<th>URL</th>
|
17
17
|
<th> </th>
|
18
18
|
</tr>
|
19
19
|
|
20
|
-
|
21
|
-
<tr class="<%= cycle('odd', 'even')
|
22
|
-
<td><%= link_to location.location_number, location
|
23
|
-
<td><%= link_to location.name, location
|
24
|
-
<td><%= location.geocoding_address
|
20
|
+
<% for location in @locations %>
|
21
|
+
<tr class="<%= cycle('odd', 'even') %>">
|
22
|
+
<td><%= link_to location.location_number, location %></td>
|
23
|
+
<td><%= link_to location.name, location %></td>
|
24
|
+
<td><%= location.geocoding_address %></td>
|
25
25
|
<td>
|
26
|
-
|
27
|
-
<%= link_to location.locale.to_param, location.locale.to_param
|
28
|
-
|
26
|
+
<% if location.locale %>
|
27
|
+
<%= link_to location.locale.to_param, location.locale.to_param %>
|
28
|
+
<% end %>
|
29
29
|
</td>
|
30
|
-
<td class="crud_links"><%= crud_links(location, [:show, :edit, :destroy])
|
30
|
+
<td class="crud_links"><%= crud_links(location, [:show, :edit, :destroy]) %></td>
|
31
31
|
</tr>
|
32
|
-
|
32
|
+
<% end %>
|
33
33
|
</table>
|
34
|
-
|
34
|
+
<% end %>
|
35
35
|
|
36
|
-
<%= link_to 'Import', import_locations_path, :class => 'button'
|
37
|
-
<%= link_to 'Export', export_locations_path, :class => 'button'
|
36
|
+
<%= link_to 'Import', import_locations_path, :class => 'button' %>
|
37
|
+
<%= link_to 'Export', export_locations_path, :class => 'button' %>
|
@@ -1,3 +1,3 @@
|
|
1
|
-
|
1
|
+
<% set_title 'Create a New Location' %>
|
2
2
|
|
3
|
-
<%= render :partial => 'form'
|
3
|
+
<%= render :partial => 'form' %>
|
@@ -1,16 +1,16 @@
|
|
1
|
-
|
1
|
+
<% set_title "Location: #{@location.name}" %>
|
2
2
|
|
3
3
|
<fieldset class="form_container">
|
4
|
-
<%= legend_tag "About This Location"
|
4
|
+
<%= legend_tag "About This Location" %>
|
5
5
|
|
6
6
|
<div class="form_column">
|
7
7
|
<fieldset>
|
8
8
|
<label>Name:</label><br />
|
9
|
-
<div class="faux_field"><%=h @location.name
|
9
|
+
<div class="faux_field"><%=h @location.name %></div>
|
10
10
|
</fieldset>
|
11
11
|
<fieldset>
|
12
12
|
<label>Status:</label><br />
|
13
|
-
<div class="faux_field"><%=h @location.active? ? "Active" : "Inactive"
|
13
|
+
<div class="faux_field"><%=h @location.active? ? "Active" : "Inactive" %></div>
|
14
14
|
</fieldset>
|
15
15
|
</div>
|
16
16
|
|
@@ -20,50 +20,50 @@
|
|
20
20
|
</fieldset>
|
21
21
|
|
22
22
|
<fieldset class="form_container">
|
23
|
-
<%= legend_tag "Address"
|
23
|
+
<%= legend_tag "Address" %>
|
24
24
|
<div class="form_column">
|
25
25
|
<fieldset>
|
26
26
|
<label>Address 1:</label><br />
|
27
|
-
<div class="faux_field"><%=h @location.address1
|
27
|
+
<div class="faux_field"><%=h @location.address1 %></div>
|
28
28
|
</fieldset>
|
29
29
|
<fieldset>
|
30
30
|
<label>Address 2:</label><br />
|
31
|
-
<div class="faux_field"><%=h @location.address2
|
31
|
+
<div class="faux_field"><%=h @location.address2 %></div>
|
32
32
|
</fieldset>
|
33
33
|
<fieldset>
|
34
34
|
<label>City:</label><br />
|
35
|
-
<div class="faux_field"><%=h @location.city
|
35
|
+
<div class="faux_field"><%=h @location.city %></div>
|
36
36
|
</fieldset>
|
37
37
|
<fieldset>
|
38
38
|
<label>State:</label><br />
|
39
|
-
<div class="faux_field"><%=h @location.state
|
39
|
+
<div class="faux_field"><%=h @location.state %></div>
|
40
40
|
</fieldset>
|
41
41
|
<fieldset>
|
42
42
|
<label>Zip:</label><br />
|
43
|
-
<div class="faux_field"><%=h @location.zip
|
43
|
+
<div class="faux_field"><%=h @location.zip %></div>
|
44
44
|
</fieldset>
|
45
45
|
</div>
|
46
46
|
|
47
47
|
<div class="form_column">
|
48
48
|
<fieldset>
|
49
49
|
<label>Phone:</label><br />
|
50
|
-
<div class="faux_field"><%=h @location.phone
|
50
|
+
<div class="faux_field"><%=h @location.phone %></div>
|
51
51
|
</fieldset>
|
52
52
|
<fieldset>
|
53
53
|
<label>Fax:</label><br />
|
54
|
-
<div class="faux_field"><%=h @location.fax
|
54
|
+
<div class="faux_field"><%=h @location.fax %></div>
|
55
55
|
</fieldset>
|
56
56
|
<fieldset>
|
57
57
|
<label>Email:</label><br />
|
58
|
-
<div class="faux_field"><%=h @location.email
|
58
|
+
<div class="faux_field"><%=h @location.email %></div>
|
59
59
|
</fieldset>
|
60
60
|
</div>
|
61
61
|
</fieldset>
|
62
62
|
|
63
|
-
<%= link_to 'Edit', edit_location_path(@location), :class => 'button'
|
64
|
-
<%= link_to 'Back to Locations', locations_path, :class => 'button'
|
63
|
+
<%= link_to 'Edit', edit_location_path(@location), :class => 'button' %>
|
64
|
+
<%= link_to 'Back to Locations', locations_path, :class => 'button' %>
|
65
65
|
|
66
|
-
<%= render :partial => 'shared/map', :locals => {:place => @location.locale}
|
66
|
+
<%= render :partial => 'shared/map', :locals => {:place => @location.locale} %>
|
67
67
|
|
68
68
|
<script type="text/javascript">
|
69
69
|
initializeMap();
|
@@ -1,29 +1,29 @@
|
|
1
|
-
<%= form_for @service do |f|
|
2
|
-
|
1
|
+
<%= form_for @service do |f| %>
|
2
|
+
<% if @service.errors.any? %>
|
3
3
|
<div id="error_explanation">
|
4
4
|
<h2>Please correct the following errors:</h2>
|
5
|
-
|
5
|
+
<% @service.errors.to_a.in_groups(2, false).each do |group| %>
|
6
6
|
<ul>
|
7
|
-
|
8
|
-
<li><%= msg
|
9
|
-
|
7
|
+
<% group.each do |msg| %>
|
8
|
+
<li><%= msg %></li>
|
9
|
+
<% end %>
|
10
10
|
</ul>
|
11
|
-
|
11
|
+
<% end %>
|
12
12
|
<br style="clear: both;" />
|
13
13
|
</div>
|
14
14
|
<br style="clear: both;" />
|
15
|
-
|
15
|
+
<% end %>
|
16
16
|
|
17
17
|
<fieldset class="form_container">
|
18
|
-
<%= legend_tag 'About This Service'
|
18
|
+
<%= legend_tag 'About This Service' %>
|
19
19
|
|
20
20
|
<div class="form_column">
|
21
|
-
<%= f.text_field :name
|
22
|
-
<%= f.text_area :description
|
21
|
+
<%= f.text_field :name %>
|
22
|
+
<%= f.text_area :description %>
|
23
23
|
</div>
|
24
24
|
</fieldset>
|
25
25
|
|
26
|
-
<%= f.submit 'Save', :class => 'button'
|
27
|
-
<%= link_to 'Cancel', services_path, :class => 'button'
|
26
|
+
<%= f.submit 'Save', :class => 'button' %>
|
27
|
+
<%= link_to 'Cancel', services_path, :class => 'button' %>
|
28
28
|
<br style="clear: both;" />
|
29
|
-
|
29
|
+
<% end %>
|
@@ -1,3 +1,3 @@
|
|
1
|
-
|
1
|
+
<% set_title 'Edit a Service' %>
|
2
2
|
|
3
|
-
<%= render 'form'
|
3
|
+
<%= render 'form' %>
|
@@ -1,25 +1,25 @@
|
|
1
|
-
|
1
|
+
<% set_title 'Services' %>
|
2
2
|
|
3
|
-
|
3
|
+
<% if @services.empty? %>
|
4
4
|
<p><em>No services have been created yet.</em></p>
|
5
|
-
|
5
|
+
<% else %>
|
6
6
|
<table class="standard">
|
7
7
|
<tr>
|
8
|
-
<th><%= sort_link('services', 'name', params)
|
9
|
-
<th><%= sort_link('services', 'description', params)
|
8
|
+
<th><%= sort_link('services', 'name', params) %></th>
|
9
|
+
<th><%= sort_link('services', 'description', params) %></th>
|
10
10
|
<th> </th>
|
11
11
|
</tr>
|
12
12
|
|
13
|
-
|
14
|
-
<tr class="<%= cycle('odd', 'even')
|
15
|
-
<td><%= service.name
|
16
|
-
<td><%= service.description
|
17
|
-
<td class="crud_links"><%= crud_links(service, [:show, :edit, :destroy])
|
13
|
+
<% @services.each do |service| %>
|
14
|
+
<tr class="<%= cycle('odd', 'even') %>">
|
15
|
+
<td><%= service.name %></td>
|
16
|
+
<td><%= service.description %></td>
|
17
|
+
<td class="crud_links"><%= crud_links(service, [:show, :edit, :destroy]) %></td>
|
18
18
|
</tr>
|
19
|
-
|
19
|
+
<% end %>
|
20
20
|
</table>
|
21
|
-
|
21
|
+
<% end %>
|
22
22
|
|
23
23
|
<br />
|
24
24
|
|
25
|
-
<%= link_to 'New Service', new_service_path, :class => 'button'
|
25
|
+
<%= link_to 'New Service', new_service_path, :class => 'button' %>
|
@@ -1,3 +1,3 @@
|
|
1
|
-
|
1
|
+
<% set_title 'Create a Service' %>
|
2
2
|
|
3
|
-
<%= render 'form'
|
3
|
+
<%= render 'form' %>
|
@@ -1,15 +1,15 @@
|
|
1
|
-
|
1
|
+
<% set_title 'Service Details' %>
|
2
2
|
|
3
3
|
<fieldset class="form_container">
|
4
|
-
<%= legend_tag 'About This Service'
|
4
|
+
<%= legend_tag 'About This Service' %>
|
5
5
|
|
6
6
|
<div class="form_column">
|
7
|
-
<%= faux_field 'Name', @service.name
|
7
|
+
<%= faux_field 'Name', @service.name %>
|
8
8
|
</div>
|
9
9
|
<div class="form_column">
|
10
|
-
<%= faux_field 'Description', @service.description
|
10
|
+
<%= faux_field 'Description', @service.description %>
|
11
11
|
</div>
|
12
12
|
</fieldset>
|
13
13
|
|
14
|
-
<%= link_to 'Edit', edit_service_path(@service), :class => 'button'
|
15
|
-
<%= link_to 'Back', services_path, :class => 'button'
|
14
|
+
<%= link_to 'Edit', edit_service_path(@service), :class => 'button' %>
|
15
|
+
<%= link_to 'Back', services_path, :class => 'button' %>
|
@@ -1,18 +1,18 @@
|
|
1
1
|
<div class=vcard>
|
2
|
-
<div class="fn org"><%= link_to @location.name, @location.locale.to_param
|
2
|
+
<div class="fn org"><%= link_to @location.name, @location.locale.to_param %></div>
|
3
3
|
<p class=adr>
|
4
|
-
<span class=street-address><%= h @location.street_address('<br/>')
|
5
|
-
<span class=locality><%= h @location.city
|
6
|
-
<span class=region><%= h @location.state.upcase
|
7
|
-
<span class=postal-code><%= h @location.zip
|
4
|
+
<span class=street-address><%= h @location.street_address('<br/>') %></span><br />
|
5
|
+
<span class=locality><%= h @location.city %></span>,
|
6
|
+
<span class=region><%= h @location.state.upcase %></span>
|
7
|
+
<span class=postal-code><%= h @location.zip %></span><br />
|
8
8
|
<span class=tel>Phone
|
9
9
|
<span class=type style="display: none;">Work</span>
|
10
|
-
<span class=value><%= h @location.phone
|
10
|
+
<span class=value><%= h @location.phone %></span>
|
11
11
|
</span><br />
|
12
|
-
|
12
|
+
<% if @location.fax && @location.fax.size > 3 %>
|
13
13
|
<span class=tel>Fax
|
14
|
-
<span class=value><%= h @location.fax
|
14
|
+
<span class=value><%= h @location.fax %></span>
|
15
15
|
</span><br />
|
16
|
-
|
16
|
+
<% end %>
|
17
17
|
</p>
|
18
18
|
</div>
|
@@ -1,14 +1,19 @@
|
|
1
|
-
<%#
|
2
|
-
|
3
|
-
|
1
|
+
<%#
|
2
|
+
requires:
|
3
|
+
|
4
|
+
* local variables: locations AND place (but latter can be nil)
|
5
|
+
* <script src="http://maps.google.com/maps/api/js?sensor=false"></script>
|
6
|
+
|
7
|
+
Adapted from http://code.google.com/apis/maps/documentation/javascript/examples/icon-complex.html
|
8
|
+
%><script>
|
4
9
|
var directionsDisplay = new google.maps.DirectionsRenderer();
|
5
10
|
var directionsService = new google.maps.DirectionsService();
|
6
11
|
var locations = [
|
7
|
-
|
8
|
-
<%= raw "['#{h(escape_javascript place.location.name)}', #{place.coordinates[1]}, #{place.coordinates[0]}, '#{h(escape_javascript place.location.name)}<br />#{h(escape_javascript place.location.address1)}<br />#{h(escape_javascript place.location.city)}, #{h(escape_javascript place.location.state)} #{h(escape_javascript place.location.zip)}<br /><br />Directions: <a href=\"javascript:showDirectionsTo(0)\">To here<\/a> / <a href=\"javascript:showDirectionsFrom(0)\">From here<\/a>']"
|
9
|
-
|
10
|
-
<%= raw locations.select{ |l| l.geocoded? }.inject([]) { |a, l| i = a.size; a << "['#{h(escape_javascript l.name)}', #{l.coordinates[1]}, #{l.coordinates[0]}, '#{link_to h(escape_javascript l.name), l.locale.to_param}<br />#{h(escape_javascript l.address1)}<br />#{h(escape_javascript l.city)}, #{h(escape_javascript l.state)} #{h(escape_javascript l.zip)}<br /><br />Directions: <a href=\"javascript:showDirectionsTo(#{i})\">To here<\/a> / <a href=\"javascript:showDirectionsFrom(#{i})\">From here<\/a>']"; a } * ",\r"
|
11
|
-
|
12
|
+
<% if place && place.location? && place.geocoded? %>
|
13
|
+
<%= raw "['#{h(escape_javascript place.location.name)}', #{place.coordinates[1]}, #{place.coordinates[0]}, '#{h(escape_javascript place.location.name)}<br />#{h(escape_javascript place.location.address1)}<br />#{h(escape_javascript place.location.city)}, #{h(escape_javascript place.location.state)} #{h(escape_javascript place.location.zip)}<br /><br />Directions: <a href=\"javascript:showDirectionsTo(0)\">To here<\/a> / <a href=\"javascript:showDirectionsFrom(0)\">From here<\/a>']" %>
|
14
|
+
<% else %>
|
15
|
+
<%= raw locations.select{ |l| l.geocoded? }.inject([]) { |a, l| i = a.size; a << "['#{h(escape_javascript l.name)}', #{l.coordinates[1]}, #{l.coordinates[0]}, '#{link_to h(escape_javascript l.name), l.locale.to_param}<br />#{h(escape_javascript l.address1)}<br />#{h(escape_javascript l.city)}, #{h(escape_javascript l.state)} #{h(escape_javascript l.zip)}<br /><br />Directions: <a href=\"javascript:showDirectionsTo(#{i})\">To here<\/a> / <a href=\"javascript:showDirectionsFrom(#{i})\">From here<\/a>']"; a } * ",\r" %>
|
16
|
+
<% end %>
|
12
17
|
];
|
13
18
|
var map;
|
14
19
|
var markers = [];
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<ul>
|
2
|
-
<%= tab_for( root_path, 'Home', 'home' ).html_safe
|
3
|
-
<%= tab_for( locations_path, 'Locations', 'locations' ).html_safe
|
4
|
-
<%= tab_for( services_path, 'Services', 'services' ).html_safe
|
2
|
+
<%= tab_for( root_path, 'Home', 'home' ).html_safe %>
|
3
|
+
<%= tab_for( locations_path, 'Locations', 'locations' ).html_safe %>
|
4
|
+
<%= tab_for( services_path, 'Services', 'services' ).html_safe %>
|
5
5
|
</ul>
|
data/campfire_logic.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "campfire_logic"
|
8
|
-
s.version = "2.0.
|
8
|
+
s.version = "2.0.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Roderick Monje"]
|
12
|
-
s.date = "2012-
|
12
|
+
s.date = "2012-02-18"
|
13
13
|
s.description = "Users can browse locations by country, city, and state and search locations by string or zip code. Administrators can manage locations and the services they offer."
|
14
14
|
s.email = "rod@seologic.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -23,7 +23,7 @@ describe LocationImport do
|
|
23
23
|
@location.city.should == 'Commack'
|
24
24
|
@location.state_long_name.should == 'New York'
|
25
25
|
@location.zip.should == '11725'
|
26
|
-
@location.phone.should == '
|
26
|
+
@location.phone.should == '8773000059'
|
27
27
|
@location.email.should == 'sales@mobilemini.com'
|
28
28
|
@location.meta_description.should == 'Long Island portable storage rentals. Secure mobile storage units or pods, shipping container rentals, and custom mobile office trailers shipped to your home or construction site.'
|
29
29
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: campfire_logic
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 13
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 2.0.
|
9
|
+
- 1
|
10
|
+
version: 2.0.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Roderick Monje
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-
|
18
|
+
date: 2012-02-18 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: bson_ext
|