spree_retailers 0.40.0.1 → 0.40.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  Spree Retailers
2
- ---------------
2
+ ===============
3
3
 
4
- Spree Retailers is a simple Spree Extension.
4
+ Spree Retailers is a simple Spree Extension that adds a retailers page as well as a retailers admin.
5
5
 
6
6
 
7
7
  Demo
@@ -12,26 +12,24 @@ To create a spree retailers demo app, run the following:
12
12
  rails new spree_retailers_example
13
13
  cd spree_retailers_example
14
14
  echo "gem 'spree', '0.40.2'" >> Gemfile
15
- echo "gem 'spree_retailers', :git => 'git://github.com/citrus/spree_retailers.git'" >> Gemfile
16
- rm public/index.html
17
- bundle install
15
+ echo "gem 'spree_retailers'" >> Gemfile
16
+ rm public/index.html
17
+ bundle install
18
18
  rake spree:install spree_retailers:install db:migrate db:seed db:admin:create
19
19
 
20
-
21
20
  Or all at once:
22
21
 
23
- rails new spree_retailers_example; cd spree_retailers_example; echo "gem 'spree', '0.40.2'" >> Gemfile; echo "gem 'spree_retailers', :git => 'git://github.com/citrus/spree_retailers.git'" >> Gemfile; rm public/index.html; bundle install; rake spree:install spree_retailers:install db:migrate db:seed db:admin:create
22
+ rails new spree_retailers_example; cd spree_retailers_example; echo "gem 'spree', '0.40.2'" >> Gemfile; echo "gem 'spree_retailers'" >> Gemfile; rm public/index.html; bundle install; rake spree:install spree_retailers:install db:migrate db:seed db:admin:create
24
23
 
25
- `rake db:sample` if you want to...
24
+ `rake spree_sample:install db:sample` if you want to...
26
25
 
27
26
  Then start the server with `rails s`
28
27
 
29
28
 
30
-
31
29
  To Do
32
30
  -----
33
31
 
34
- * Write real tests
32
+ * Write controller tests
35
33
 
36
34
  License
37
35
  -------
data/Rakefile CHANGED
@@ -1,75 +1,51 @@
1
- require 'bundler'
1
+ # encoding: UTF-8
2
+ require 'rubygems'
3
+ begin
4
+ require 'bundler/setup'
5
+ rescue LoadError
6
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
7
+ end
8
+
9
+ require 'rake'
2
10
  require 'rake/testtask'
11
+ #require 'rake/rdoctask'
12
+
3
13
  Bundler::GemHelper.install_tasks
4
14
 
5
- Rake::TestTask.new do |t|
6
- t.libs << "lib"
15
+ Rake::TestTask.new(:test) do |t|
16
+ t.libs << 'lib'
17
+ t.libs << 'test'
7
18
  t.pattern = 'test/**/*_test.rb'
8
- t.verbose = true
19
+ t.verbose = false
9
20
  end
10
21
 
11
- desc "Default Task"
12
- task :default => [ :test ]
13
-
14
-
15
-
22
+ task :default => :test
16
23
 
17
24
 
18
-
19
-
20
-
21
- # TODO: pull in the spree/core/Rakefile bits that set up for testing
22
- desc "Regenerates a Rails 3 app for testing"
25
+ desc "Builds dummy app for testing"
23
26
  task :test_app do
24
- # TODO - this path requires a certain directory structure -- need
25
- # to think about how to refactor
26
-
27
-
28
- files = `gem contents spree`.split("\n").select{|file| file.match("test_app_generator")}
29
- if files.length == 1
30
- require files.first
31
- class SpreeRetailersTestAppGenerator < Spree::Generators::TestAppGenerator
32
- def tweak_gemfile
33
- append_file "Gemfile" ,
34
- <<-gems
35
- gem 'activemerchant'
36
- gem 'spree_core', '>=0.40.2'
37
- gem 'spree_auth', '>=0.40.2'
38
- gem 'spree_retailers', :path => "#{File.dirname(__FILE__)}"
39
- gems
40
- end
41
-
42
- def install_spree_gems
43
-
44
- puts "-----------------------------------------"
45
- puts "Installing gems..."
46
- `bundle install --gemfile=spec/test_app/Gemfile`
47
- puts "-----------------------------------------"
48
-
49
- inside "test_app" do
50
- run 'rake spree_core:install'
51
- run 'rake spree_auth:install'
52
- run 'rake spree_retailers:install'
53
- end
54
- end
55
-
56
- def migrate_db
57
- run_migrations
58
- end
59
- end
60
-
61
- SpreeRetailersTestAppGenerator.start
62
-
63
- puts "spec/test_app created. "
64
-
65
- else
66
- puts "Failed: Could not find lib/generators/spree/test_app_generator.rb"
67
- end
27
+ require 'spree_retailers/generators/test_app_generator'
28
+ SpreeRetailers::Generators::TestAppGenerator.start
68
29
  end
69
30
 
70
- namespace :test_app do
71
- desc 'Rebuild test database'
72
- task :rebuild_db do
73
- system("cd spec/test_app && rake db:drop db:migrate RAILS_ENV=test")
74
- end
75
- end
31
+
32
+
33
+ #require 'bundler'
34
+ #require 'rake/testtask'
35
+ #Bundler::GemHelper.install_tasks
36
+ #
37
+ #Rake::TestTask.new do |t|
38
+ # t.libs << "lib"
39
+ # t.pattern = 'test/**/*_test.rb'
40
+ # t.verbose = true
41
+ #end
42
+ #
43
+ #desc "Default Task"
44
+ #task :default => [ :test ]
45
+ #
46
+ #
47
+ #desc "Builds dummy app for testing"
48
+ #task :test_app do
49
+ # require 'spree_retailers/generators/test_app_generator'
50
+ # SpreeRetailers::Generators::TestAppGenerator.start
51
+ #end
@@ -1,10 +1,7 @@
1
1
  class RetailersController < Spree::BaseController
2
2
 
3
3
  def index
4
- @retailers = Retailer.order(:name)
5
- #if request.xhr?
6
- # render :partial => 'list', :layout => false, :locals => { :retailers => @retailers }
7
- #end
4
+ @retailers = Retailer.order(:state, :name)
8
5
  end
9
6
 
10
7
  end
@@ -0,0 +1,9 @@
1
+ module RetailersHelper
2
+
3
+ def state_nav_helper
4
+ retailers = Retailer.select(:state).group(:state).order(:state).all
5
+ return "" unless 1 < retailers.length
6
+ retailers.collect{|retailer| link_to(retailer.state, "##{retailer.state.downcase}") }.join(" | ").html_safe
7
+ end
8
+
9
+ end
@@ -1,6 +1,19 @@
1
1
  class Retailer < ActiveRecord::Base
2
2
 
3
3
  validates_presence_of :name, :address, :city, :state, :zipcode
4
+ validates :email, :email => true, :allow_blank => true
5
+
6
+ validates_numericality_of :latitude, :longitude, :allow_blank => true
7
+
8
+ before_validation :geocode, :if => :geocode?
9
+
10
+
11
+ has_attached_file :logo,
12
+ :styles => { :mini => '48x48>', :thumb => '120x100#', :large => '450x400#' },
13
+ :default_style => :thumb,
14
+ :url => "/assets/retailers/:id/:style/:basename.:extension",
15
+ :path => ":rails_root/public/assets/retailers/:id/:style/:basename.:extension"
16
+
4
17
 
5
18
  [:address2, :phone, :email].each do |property|
6
19
  define_method "has_#{property.to_s}?" do
@@ -10,16 +23,60 @@ class Retailer < ActiveRecord::Base
10
23
  end
11
24
 
12
25
  def has_url?
13
- (self.url.nil? || self.url.empty?) && self.url != "http://"
26
+ !(self.url.nil? || self.url.empty? || self.url == "http://")
14
27
  end
15
28
 
29
+ def has_logo?
30
+ !self.logo_file_name.blank?
31
+ end
16
32
 
17
33
  def url=(value)
18
- val = value.strip.downcase
34
+ val = value.to_s.strip.downcase
19
35
  if val.match(/^http(s)?:\/\//) == nil
20
36
  val = "http://" + val
21
37
  end
22
38
  write_attribute :url, val
23
39
  end
24
40
 
41
+ def full_address
42
+ "#{address} #{address2} #{city}, #{state} #{zipcode}"
43
+ end
44
+
45
+ def geocode?
46
+ (new_record? || changed?) && !address.blank?
47
+ end
48
+
49
+ def geocoded?
50
+ geokit_success && !(latitude.nil? || longitude.nil?)
51
+ end
52
+
53
+ private
54
+
55
+ def geocode
56
+ geo = Geokit::Geocoders::MultiGeocoder.geocode(full_address)
57
+ if geo.success
58
+ self.attributes = {
59
+ :address => geo.street_address,
60
+ :city => geo.city,
61
+ :state => geo.state,
62
+ :zipcode => geo.zip,
63
+ :latitude => geo.lat,
64
+ :longitude => geo.lng,
65
+ :geokit_provider => geo.provider,
66
+ :geokit_precision => geo.precision,
67
+ :geokit_accuracy => geo.accuracy,
68
+ :geokit_success => true
69
+ }
70
+ else
71
+ self.attributes = {
72
+ :latitude => nil,
73
+ :longitude => nil,
74
+ :geokit_provider => nil,
75
+ :geokit_precision => nil,
76
+ :geokit_accuracy => nil,
77
+ :geokit_success => false
78
+ }
79
+ end
80
+ end
81
+
25
82
  end
@@ -0,0 +1,20 @@
1
+ class EmailValidator < ActiveModel::EachValidator
2
+ def validate_each(record,attribute,value)
3
+ begin
4
+ m = Mail::Address.new(value)
5
+ # We must check that value contains a domain and that value is an email address
6
+ r = m.domain && m.address == value
7
+ t = m.__send__(:tree)
8
+ # We need to dig into treetop
9
+ # A valid domain must have dot_atom_text elements size > 1
10
+ # user@localhost is excluded
11
+ # treetop must respond to domain
12
+ # We exclude valid email values like <user@localhost.com>
13
+ # Hence we use m.__send__(tree).domain
14
+ r &&= (t.domain.dot_atom_text.elements.size > 1)
15
+ rescue Exception => e
16
+ r = false
17
+ end
18
+ record.errors[attribute] << (options[:message] || I18n.t(:invalid_email, :scope => [:activerecord, :errors, :messages])) unless r
19
+ end
20
+ end
@@ -1,6 +1,6 @@
1
1
  <%= f.field_container :name do %>
2
2
  <%= f.label :name, "Name" %><br />
3
- <%= f.text_field :name %>
3
+ <%= f.text_field :name, :class => 'title' %>
4
4
  <%= error_message_on :retailer, :name %>
5
5
  <% end %>
6
6
 
@@ -55,3 +55,9 @@
55
55
  <%= f.text_field :url %>
56
56
  <%= error_message_on :retailer, :url %>
57
57
  <% end %>
58
+
59
+ <%= f.field_container :logo do %>
60
+ <%= f.label :logo, "Logo Image:" %><br />
61
+ <%= f.file_field :logo %>
62
+ <%= error_message_on :retailer, :logo %>
63
+ <% end %>
@@ -45,7 +45,7 @@
45
45
  <div class="box">
46
46
  <h3><%= t(:search) %></h3>
47
47
  <p>
48
- <%= t("title") %><br />
48
+ <%= t("name") %><br />
49
49
  <%= f.text_field :name_contains, :size=> 18 %>
50
50
  </p>
51
51
  <p><%= button t("search") %></p>
@@ -1,33 +1,48 @@
1
1
  <h1><%= @retailer.name %></h1>
2
+
3
+ <%= image_tag @retailer.logo.url if @retailer.has_logo? %>
4
+
2
5
  <p>
3
- <%= @retailer.address %>
4
-
6
+ <b>Address:</b><br/>
7
+ <%= @retailer.address %>
5
8
  <% if @retailer.has_address2? %>
6
9
  <br/>
7
10
  <%= @retailer.address2 %>
8
11
  <% end %>
9
-
10
12
  <br/>
11
-
12
13
  <%= @retailer.city %>,
13
- <%= @retailer.state %>
14
- <%= @retailer.zipcode %>
15
-
16
- <% if @retailer.has_phone? %>
17
- <br/>
18
- <%= @retailer.phone %>
19
- <% end %>
14
+ <%= @retailer.state %> <%= @retailer.zipcode %>
15
+ </p>
16
+ <% if @retailer.has_phone? %>
17
+ <p>
18
+ <b>Phone:</b> <%= @retailer.phone %>
19
+ </p>
20
+ <% end %>
21
+
22
+ <% if @retailer.has_email? %>
23
+ <p>
24
+ <b>Email:</b> <%= mail_to @retailer.email %>
25
+ </p>
26
+ <% end %>
27
+
28
+ <% if @retailer.has_url? %>
29
+ <p>
30
+ <b>Website URL:</b>: <%= link_to @retailer.url, @retailer.url, :class => 'popup' %>
31
+ </p>
32
+ <% end %>
20
33
 
21
- <% if @retailer.has_email? %>
22
- <br/>
23
- <%= mail_to @retailer.email %>
24
- <% end %>
25
34
 
26
- <% if @retailer.has_url? %>
35
+ <% if @retailer.geocoded? %>
36
+ <p>
37
+ <b>Latitude:</b> <%= @retailer.latitude %>&deg;
27
38
  <br/>
28
- <%= link_to @retailer.url, @retailer.url, :class => 'popup' %>
29
- <% end %>
30
- </p>
39
+ <b>Longitude:</b> <%= @retailer.longitude %>&deg;
40
+ <br/>
41
+ <b>Precision:</b> <%= @retailer.geokit_precision %>
42
+ <br/>
43
+ <b>Provider:</b> <%= @retailer.geokit_provider %>
44
+ </p>
45
+ <% end %>
31
46
 
32
47
 
33
48
  <p>
@@ -1,6 +1,16 @@
1
1
  <% if defined? retailers %>
2
2
  <div class="retailers">
3
3
  <h3>Find <%= Spree::Config[:site_name] %> at the following retail locations:</h3>
4
- <%= render :partial => 'retailer', :collection => retailers %>
4
+
5
+ <div class="state-nav">
6
+ <%= state_nav_helper %>
7
+ </div>
8
+
9
+ <% retailers.group_by(&:state).each do |state, state_retailers| %>
10
+ <hr/>
11
+ <h4 id="<%= state.downcase %>"><%= state %></h4>
12
+ <%= render :partial => 'retailer', :collection => state_retailers %>
13
+ <% end %>
14
+
5
15
  </div>
6
16
  <% end %>
@@ -1,5 +1,6 @@
1
1
  <% if defined? retailer %>
2
2
  <div class="retailer">
3
+ <%= image_tag retailer.logo.url, :alt => retailer.name, :class => 'thumb' if retailer.has_logo? %>
3
4
  <p>
4
5
  <b><%= retailer.has_url? ? link_to(retailer.name, retailer.url, :class => 'popup') : retailer.name %></b><br/>
5
6
  <%= retailer.address %>
@@ -1,18 +1,17 @@
1
+ <h1><%= t('retailers') %></h1>
2
+
1
3
  <div class="left">
2
4
  <%= hook :retailers_static_content do %>
3
- <h1><%= t('retailers') %></h1>
4
5
  <p>Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin vel ante a orci tempus eleifend ut et magna. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus luctus urna sed urna ultricies ac tempor dui sagittis. In condimentum facilisis porta. Sed nec diam eu diam mattis viverra. Nulla fringilla, orci ac euismod semper, magna diam porttitor mauris, quis sollicitudin sapien justo in libero. Vestibulum mollis mauris enim. Morbi euismod magna ac lorem rutrum elementum. Donec viverra auctor lobortis. Pellentesque eu est.</p>
5
6
  <% end %>
6
7
  </div>
7
8
 
8
9
  <div class="right">
9
-
10
10
  <%= hook :retailers_list do %>
11
11
  <% unless !@retailers || @retailers.empty? %>
12
12
  <%= render 'list', :retailers => @retailers %>
13
13
  <% end %>
14
14
  <% end %>
15
-
16
15
  </div>
17
16
 
18
17
  <div class="clear">&nbsp;</div>
@@ -11,6 +11,19 @@ class InstallSpreeRetailers < ActiveRecord::Migration
11
11
  t.string :phone
12
12
  t.string :email
13
13
  t.string :url
14
+
15
+ # geokit
16
+ t.float :latitude
17
+ t.float :longitude
18
+ t.string :geokit_precision, :geokit_provider, :geokit_accuracy
19
+ t.boolean :geokit_success, :default => false
20
+
21
+ # paperclip
22
+ t.string :logo_file_name
23
+ t.string :logo_content_type
24
+ t.string :logo_file_size
25
+ t.datetime :logo_updated_at
26
+
14
27
  t.timestamps
15
28
  end
16
29
  end
@@ -0,0 +1,69 @@
1
+ require 'spree'
2
+ require 'generators/spree/test_app_generator'
3
+
4
+ module SpreeRetailers
5
+ module Generators
6
+ class TestAppGenerator < Spree::Generators::TestAppGenerator
7
+
8
+ class_option :app_name, :type => :string,
9
+ :desc => "The name of the test rails app to generate. Defaults to test_app.",
10
+ :default => "dummy"
11
+
12
+
13
+ source_paths << File.expand_path("../../templates", __FILE__)
14
+
15
+ def install_spree_core
16
+ inside "test/#{test_app}" do
17
+ run 'rake spree_core:install'
18
+ run 'rake spree_auth:install'
19
+ run 'rake spree_retailers:install'
20
+ end
21
+ end
22
+
23
+ def generate_app
24
+ silence_stream(STDOUT) {
25
+ remove_directory_if_exists("test/#{test_app}")
26
+ inside "test" do
27
+ run "rails new #{test_app} -GJTq --skip-gemfile"
28
+ end
29
+ }
30
+ end
31
+
32
+ def replace_gemfile
33
+ true
34
+ end
35
+
36
+ def setup_environments
37
+ remove_file 'config/boot.rb'
38
+ template 'config/boot.rb'
39
+ end
40
+
41
+ def tweak_gemfile
42
+ true
43
+ end
44
+
45
+ def create_rspec_gemfile
46
+ true
47
+ end
48
+
49
+ def create_root
50
+ self.destination_root = File.expand_path("test/#{test_app}", destination_root)
51
+ end
52
+
53
+ def migrate_db
54
+ run_migrations
55
+ end
56
+
57
+ protected
58
+
59
+ def full_path_for_local_gems
60
+ <<-gems
61
+ gem 'spree_core', '>= 0.40.2'
62
+ gem 'spree_auth', '>= 0.40.2'
63
+ gem 'spree_retailers', :path => File.expand_path('../../../../', __FILE__)
64
+ gem 'geokit', '>= 1.5.0'
65
+ gems
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,13 @@
1
+ require 'rubygems'
2
+
3
+ # Set up gems listed in the Gemfile.
4
+ gemfile = File.expand_path('../../Gemfile', __FILE__)
5
+ begin
6
+ ENV['BUNDLE_GEMFILE'] = gemfile
7
+ require 'bundler'
8
+ Bundler.setup
9
+ rescue Bundler::GemNotFound => e
10
+ STDERR.puts e.message
11
+ STDERR.puts "Try running `bundle install`."
12
+ exit!
13
+ end if File.exist?(gemfile)
@@ -1,3 +1,3 @@
1
1
  module SpreeRetailers
2
- VERSION = "0.40.0.1"
2
+ VERSION = "0.40.0.2"
3
3
  end
@@ -1,3 +1,9 @@
1
+ if ENV["RAILS_ENV"] != "production"
2
+ require 'spree_core'
3
+ require 'spree_auth'
4
+ require 'geokit'
5
+ end
6
+
1
7
  require 'spree_retailers/version'
2
8
  require 'spree_retailers/custom_hooks'
3
9
 
@@ -7,17 +13,5 @@ module SpreeRetailers
7
13
 
8
14
  config.autoload_paths += %W(#{config.root}/lib)
9
15
 
10
- #initializer "static assets" do |app|
11
- # app.middleware.insert_after ::ActionDispatch::Static, ::ActionDispatch::Static, "#{config.root}/public"
12
- #end
13
-
14
- #def self.activate
15
- # #Dir["../app/**/*.rb"].each do |c|
16
- # # puts c
17
- # # #Rails.env.production? ? require(c) : load(c)
18
- # #end
19
- #end
20
-
21
- #config.to_prepare &method(:activate).to_proc
22
16
  end
23
17
  end
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_retailers
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 40
8
- - 0
9
- - 1
10
- version: 0.40.0.1
4
+ prerelease:
5
+ version: 0.40.0.2
11
6
  platform: ruby
12
7
  authors:
13
8
  - Spencer Steffen
@@ -15,40 +10,87 @@ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2011-01-27 00:00:00 -08:00
13
+ date: 2011-02-08 00:00:00 -08:00
19
14
  default_executable:
20
15
  dependencies:
21
16
  - !ruby/object:Gem::Dependency
22
17
  name: spree_core
23
- prerelease: false
24
18
  requirement: &id001 !ruby/object:Gem::Requirement
25
19
  none: false
26
20
  requirements:
27
21
  - - ">="
28
22
  - !ruby/object:Gem::Version
29
- segments:
30
- - 0
31
- - 40
32
- - 2
33
23
  version: 0.40.2
34
24
  type: :runtime
25
+ prerelease: false
35
26
  version_requirements: *id001
36
27
  - !ruby/object:Gem::Dependency
37
28
  name: spree_auth
38
- prerelease: false
39
29
  requirement: &id002 !ruby/object:Gem::Requirement
40
30
  none: false
41
31
  requirements:
42
32
  - - ">="
43
33
  - !ruby/object:Gem::Version
44
- segments:
45
- - 0
46
- - 40
47
- - 2
48
34
  version: 0.40.2
49
35
  type: :runtime
36
+ prerelease: false
50
37
  version_requirements: *id002
51
- description: ""
38
+ - !ruby/object:Gem::Dependency
39
+ name: mail
40
+ requirement: &id003 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: 2.2.0
46
+ type: :runtime
47
+ prerelease: false
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
+ name: geokit
51
+ requirement: &id004 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: 1.5.0
57
+ type: :runtime
58
+ prerelease: false
59
+ version_requirements: *id004
60
+ - !ruby/object:Gem::Dependency
61
+ name: spree
62
+ requirement: &id005 !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: 0.40.2
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: *id005
71
+ - !ruby/object:Gem::Dependency
72
+ name: shoulda
73
+ requirement: &id006 !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: 2.11.3
79
+ type: :development
80
+ prerelease: false
81
+ version_requirements: *id006
82
+ - !ruby/object:Gem::Dependency
83
+ name: sqlite3-ruby
84
+ requirement: &id007 !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: 1.3.2
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: *id007
93
+ description: Spree Retailers adds a retailer page and admin to Spree.
52
94
  email:
53
95
  - spencer@citrusme.com
54
96
  executables: []
@@ -62,12 +104,16 @@ files:
62
104
  - config/locales/en.yml
63
105
  - config/routes.rb
64
106
  - lib/spree_retailers/custom_hooks.rb
107
+ - lib/spree_retailers/generators/test_app_generator.rb
108
+ - lib/spree_retailers/templates/config/boot.rb
65
109
  - lib/spree_retailers/version.rb
66
110
  - lib/spree_retailers.rb
67
111
  - lib/tasks/install.rake
68
112
  - app/controllers/admin/retailers_controller.rb
69
113
  - app/controllers/retailers_controller.rb
114
+ - app/helpers/retailers_helper.rb
70
115
  - app/models/retailer.rb
116
+ - app/validators/email_validator.rb
71
117
  - app/views/admin/hooks/_retailers_tab.html.erb
72
118
  - app/views/admin/retailers/_form.html.erb
73
119
  - app/views/admin/retailers/edit.html.erb
@@ -79,7 +125,7 @@ files:
79
125
  - app/views/retailers/index.html.erb
80
126
  - db/migrate/install_spree_retailers.rb
81
127
  - Rakefile
82
- has_rdoc: false
128
+ has_rdoc: true
83
129
  homepage: http://github.com/citrus/spree_retailers
84
130
  licenses: []
85
131
 
@@ -93,6 +139,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
93
139
  requirements:
94
140
  - - ">="
95
141
  - !ruby/object:Gem::Version
142
+ hash: 1791211122067461475
96
143
  segments:
97
144
  - 0
98
145
  version: "0"
@@ -101,13 +148,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
148
  requirements:
102
149
  - - ">="
103
150
  - !ruby/object:Gem::Version
151
+ hash: 1791211122067461475
104
152
  segments:
105
153
  - 0
106
154
  version: "0"
107
155
  requirements: []
108
156
 
109
157
  rubyforge_project:
110
- rubygems_version: 1.3.7
158
+ rubygems_version: 1.5.0
111
159
  signing_key:
112
160
  specification_version: 3
113
161
  summary: Spree Retailers adds a retailer admin to Spree.