spree_city_zones 0.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.
@@ -0,0 +1,12 @@
1
+ class Admin::CitiesController < Admin::BaseController
2
+ resource_controller
3
+ layout 'admin'
4
+
5
+ def index
6
+ @cities = City.all
7
+ end
8
+
9
+ create.wants.html { redirect_to admin_cities_url }
10
+ update.wants.html { redirect_to admin_cities_url }
11
+
12
+ end
@@ -0,0 +1,2 @@
1
+ module Admin::CitiesHelper
2
+ end
@@ -0,0 +1,16 @@
1
+ class City < ActiveRecord::Base
2
+
3
+ has_one :zone_member, :as => :zoneable
4
+ has_one :zone, :through => :zone_member
5
+
6
+ validates :name, :presence => true
7
+
8
+ def <=>(other)
9
+ name <=> other.name
10
+ end
11
+
12
+ def to_s
13
+ name
14
+ end
15
+
16
+ end
@@ -0,0 +1,4 @@
1
+ <% f.field_container :name do %>
2
+ <%= f.label :name, t('name') %><br />
3
+ <%= f.text_field :name %>
4
+ <% end %>
@@ -0,0 +1,11 @@
1
+ <%= render :partial => 'admin/shared/configuration_menu' %>
2
+
3
+ <h1><%= t('editing_city') %></h1>
4
+
5
+ <%= error_messages_for :city %>
6
+
7
+ <% form_for(:city, :url => object_url, :html => { :method => :put }) do |f| %>
8
+ <%= render :partial => 'form', :locals => { :f => f } %>
9
+ <%= render :partial => 'admin/shared/edit_resource_links' %>
10
+ <% end %>
11
+
@@ -0,0 +1,32 @@
1
+ <%= render :partial => 'admin/shared/configuration_menu' %>
2
+
3
+ <h1><%= t('cities') %></h1>
4
+
5
+ <table class="index">
6
+ <thead>
7
+ <tr>
8
+ <th><%= t('name') %></th>
9
+ <th><%= t('action') %></th>
10
+ </tr>
11
+ </thead>
12
+ <tbody>
13
+ <% @cities.each do |city| %>
14
+ <tr>
15
+ <td><%= city.name %></td>
16
+ <td class="actions">
17
+ <%= link_to_with_icon 'edit', t('edit'), edit_admin_city_url(city) %>
18
+ &nbsp;
19
+ <%= link_to_with_icon 'delete', t('delete'), object_url(city), :method => :delete %>
20
+ </td>
21
+ </tr>
22
+ <% end %>
23
+ <% if @cities.empty? %>
24
+ <tr><td colspan="3"><%= t('none') %></td></tr>
25
+ <% end %>
26
+ </tbody>
27
+ </table>
28
+
29
+ <p>
30
+ <%= button_link_to t('new_city'), new_admin_city_url, :icon => 'add' %>
31
+ </p>
32
+
@@ -0,0 +1,11 @@
1
+ <%= render :partial => 'admin/shared/configuration_menu' %>
2
+
3
+ <h1><%= t('new_city') %></h1>
4
+
5
+ <%= error_messages_for :city %>
6
+
7
+ <% form_for(:city, :url => collection_url) do |f| %>
8
+ <%= render :partial => 'form', :locals => { :f => f } %>
9
+ <%= render :partial => 'admin/shared/new_resource_links' %>
10
+ <% end %>
11
+
@@ -0,0 +1,5 @@
1
+ <li>
2
+ <%= f.hidden_field :zoneable_type, :value => "City" %>
3
+ <%= f.collection_select(:zoneable_id, @cities, :id, :name, :include_blank => true) %>
4
+ <%= remove_nested f %>
5
+ </li>
@@ -0,0 +1,34 @@
1
+ <% zone_form.field_container :name do %>
2
+ <%= zone_form.label :name, t("name") %><br />
3
+ <%=zone_form.text_field :name %>
4
+ <% end %>
5
+
6
+ <% zone_form.field_container :description do %>
7
+ <%= zone_form.label :description, t("description") %><br />
8
+ <%=zone_form.text_field :description %>
9
+ <% end %>
10
+
11
+ <p>
12
+ <label><%= t("type") %></label><br />
13
+ <label class="sub">
14
+ <%= zone_form.radio_button("kind", "country", {:id => "country_based"}) %>
15
+ <%= t("country_based") %>
16
+ </label> &nbsp;
17
+ <label class="sub">
18
+ <%= zone_form.radio_button("kind", "state", {:id => "state_based"}) %>
19
+ <%= t("state_based") %>
20
+ </label> &nbsp;
21
+ <label class="sub">
22
+ <%= zone_form.radio_button("kind", "city", {:id => "city_based"}) %>
23
+ <%= t("city_based") %>
24
+ </label>
25
+ <label class="sub">
26
+ <%= zone_form.radio_button("kind", "zone", {:id => "zone_based"}) %>
27
+ <%= t("zone_based") %>
28
+ </label>
29
+ </p>
30
+
31
+ <%= render "member_type", :type => "country", :zone_form => zone_form %>
32
+ <%= render "member_type", :type => "state", :zone_form => zone_form %>
33
+ <%= render "member_type", :type => "city", :zone_form => zone_form %>
34
+ <%= render "member_type", :type => "zone", :zone_form => zone_form %>
data/config/routes.rb ADDED
@@ -0,0 +1,6 @@
1
+ # Put your extension routes here.
2
+ Rails.application.routes.draw do
3
+ namespace :admin do
4
+ resources :cities
5
+ end
6
+ end
@@ -0,0 +1,63 @@
1
+ require 'spree_core'
2
+ require 'spree_city_zones_hooks'
3
+
4
+ module SpreeCityZones
5
+ class Engine < Rails::Engine
6
+
7
+ def self.activate
8
+
9
+ # This is mostly copied from the Spree Zone methods,
10
+ # with added support for City zone members
11
+ Zone.class_eval do
12
+
13
+ def kind
14
+ member = self.members.last
15
+ case member && member.zoneable_type
16
+ when "State" then "state"
17
+ when "Zone" then "zone"
18
+ when "City" then "city"
19
+ else
20
+ "country"
21
+ end
22
+ end
23
+
24
+ # Check for whether an address.city is available
25
+ def include?(address)
26
+ return false unless address
27
+
28
+ members.any? do |zone_member|
29
+ case zone_member.zoneable_type
30
+ when "Zone"
31
+ zone_member.zoneable.include?(address)
32
+ when "Country"
33
+ zone_member.zoneable == address.country
34
+ when "State"
35
+ zone_member.zoneable == address.state
36
+ when "City"
37
+ zone_member.zoneable.name == address.city
38
+ else
39
+ false
40
+ end
41
+ end
42
+ end
43
+
44
+ end # Zone
45
+
46
+ Admin::ZonesController.class_eval do
47
+
48
+ def load_data
49
+ @countries = Country.all.sort
50
+ @states = State.all.sort
51
+ @cities = City.all.sort
52
+ @zones = Zone.all.sort
53
+ end
54
+
55
+ end # Admin::ZonesController
56
+
57
+ end
58
+
59
+ config.to_prepare &method(:activate).to_proc
60
+
61
+ end
62
+ end
63
+
@@ -0,0 +1,8 @@
1
+ class SpreeCityZonesHooks < Spree::ThemeSupport::HookListener
2
+ insert_after :admin_configurations_menu do
3
+ "<tr>" +
4
+ "<td><%= link_to t('cities'), admin_cities_path %></td>" +
5
+ "<td><%= t('cities_description') %></td>" +
6
+ "</tr>"
7
+ end
8
+ end
@@ -0,0 +1,26 @@
1
+ namespace :spree_city_zones do
2
+ desc "Copies all migrations and assets (NOTE: This will be obsolete with Rails 3.1)"
3
+ task :install do
4
+ Rake::Task['spree_city_zones:install:migrations'].invoke
5
+ Rake::Task['spree_city_zones:install:assets'].invoke
6
+ end
7
+
8
+ namespace :install do
9
+
10
+ desc "Copies all migrations (NOTE: This will be obsolete with Rails 3.1)"
11
+ task :migrations do
12
+ source = File.join(File.dirname(__FILE__), '..', '..', 'db')
13
+ destination = File.join(Rails.root, 'db')
14
+ Spree::FileUtilz.mirror_files(source, destination)
15
+ end
16
+
17
+ desc "Copies all assets (NOTE: This will be obsolete with Rails 3.1)"
18
+ task :assets do
19
+ source = File.join(File.dirname(__FILE__), '..', '..', 'public')
20
+ destination = File.join(Rails.root, 'public')
21
+ puts "INFO: Mirroring assets from #{source} to #{destination}"
22
+ Spree::FileUtilz.mirror_files(source, destination)
23
+ end
24
+
25
+ end
26
+ end
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: spree_city_zones
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Chetan Mittal
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-04-02 00:00:00 +05:30
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: spree_core
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: 0.40.0
25
+ type: :runtime
26
+ version_requirements: *id001
27
+ description: Allows zones to be created by city
28
+ email: chetan.mittal@niamtech.com
29
+ executables: []
30
+
31
+ extensions: []
32
+
33
+ extra_rdoc_files: []
34
+
35
+ files:
36
+ - lib/tasks/install.rake
37
+ - lib/spree_city_zones_hooks.rb
38
+ - lib/spree_city_zones.rb
39
+ - app/views/admin/zones/_form.html.erb
40
+ - app/views/admin/zones/_city_member.html.erb
41
+ - app/views/admin/cities/edit.html.erb
42
+ - app/views/admin/cities/new.html.erb
43
+ - app/views/admin/cities/_form.html.erb
44
+ - app/views/admin/cities/index.html.erb
45
+ - app/models/city.rb
46
+ - app/controllers/admin/cities_controller.rb
47
+ - app/helpers/admin/cities_helper.rb
48
+ - config/routes.rb
49
+ has_rdoc: true
50
+ homepage: http://www.niamtech.com
51
+ licenses: []
52
+
53
+ post_install_message:
54
+ rdoc_options: []
55
+
56
+ require_paths:
57
+ - lib
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ none: false
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: 1.8.7
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: "0"
70
+ requirements:
71
+ - none
72
+ rubyforge_project: spree_city_zones
73
+ rubygems_version: 1.5.0
74
+ signing_key:
75
+ specification_version: 3
76
+ summary: Allows zones to be created by city
77
+ test_files: []
78
+