deals 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.
- data/Gemfile +17 -0
- data/Gemfile.lock +153 -0
- data/LICENSE +339 -0
- data/README.md +60 -0
- data/Rakefile +40 -0
- data/app/assets/javascripts/deals/application.js +15 -0
- data/app/assets/stylesheets/deals/application.css +13 -0
- data/app/controllers/application_controller.rb +5 -0
- data/app/controllers/categories_controller.rb +8 -0
- data/app/controllers/deals/application_controller.rb +4 -0
- data/app/controllers/deals_controller.rb +30 -0
- data/app/controllers/home_controller.rb +8 -0
- data/app/controllers/places_controller.rb +8 -0
- data/app/helpers/deals/application_helper.rb +4 -0
- data/app/models/category.rb +4 -0
- data/app/models/deal.rb +9 -0
- data/app/models/place.rb +4 -0
- data/app/uploaders/photo_uploader.rb +55 -0
- data/app/views/layouts/deals/application.html.erb +14 -0
- data/bin/deals +12 -0
- data/config/routes.rb +7 -0
- data/db/migrate/20121212014610_create_deals.rb +20 -0
- data/db/migrate/20121212015114_create_categories.rb +10 -0
- data/db/migrate/20121212015129_create_places.rb +10 -0
- data/db/migrate/20121218023245_add_photo_to_deals.rb +5 -0
- data/lib/deals.rb +4 -0
- data/lib/deals/cli.rb +96 -0
- data/lib/deals/engine.rb +5 -0
- data/lib/deals/version.rb +3 -0
- data/lib/tasks/deals_tasks.rake +4 -0
- data/test/deals_test.rb +7 -0
- data/test/dummy/README.rdoc +261 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/javascripts/application.js +15 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +59 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +67 -0
- data/test/dummy/config/environments/test.rb +37 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +4 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +25 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/integration/navigation_test.rb +10 -0
- data/test/test_helper.rb +15 -0
- metadata +202 -0
data/README.md
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
Deals Gem (Engine)
|
2
|
+
========
|
3
|
+
|
4
|
+
Modular / mountable Deals API. Features:
|
5
|
+
|
6
|
+
* RESTful webservice for accessing deals
|
7
|
+
|
8
|
+
* Fully defined backend RailsAdmin interface for adding deals on the backend
|
9
|
+
|
10
|
+
|
11
|
+
Announcements
|
12
|
+
========
|
13
|
+
|
14
|
+
* Review the installation process below.
|
15
|
+
|
16
|
+
|
17
|
+
Installation
|
18
|
+
========
|
19
|
+
|
20
|
+
* First create a new rails project:
|
21
|
+
rails new sweet_app
|
22
|
+
|
23
|
+
* Config your database.yml and create the databases
|
24
|
+
|
25
|
+
* Add to Gemfile:
|
26
|
+
|
27
|
+
gem "deals"
|
28
|
+
|
29
|
+
* Next, run bundle install:
|
30
|
+
|
31
|
+
bundle install
|
32
|
+
|
33
|
+
* Next, run the deals install command:
|
34
|
+
|
35
|
+
deals install
|
36
|
+
|
37
|
+
(NOTE: If you run into an error saying that deals gem is missing, use bundle exec deals install)
|
38
|
+
|
39
|
+
* Deals is now installed and ready
|
40
|
+
|
41
|
+
* Deals API is located at /deals
|
42
|
+
|
43
|
+
* To view API end points run: rake routes
|
44
|
+
|
45
|
+
More Details
|
46
|
+
========
|
47
|
+
|
48
|
+
Visit the project website [here][project-website].
|
49
|
+
|
50
|
+
[project-website]: http://deals.barrettgriffith.com/
|
51
|
+
|
52
|
+
TODO
|
53
|
+
========
|
54
|
+
|
55
|
+
* Add multiple photos for each deal
|
56
|
+
|
57
|
+
Copyright
|
58
|
+
========
|
59
|
+
|
60
|
+
Copyright (c) 2012 Barrett Griffith. See LICENSE.txt for further details.
|
data/Rakefile
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
begin
|
3
|
+
require 'bundler/setup'
|
4
|
+
rescue LoadError
|
5
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
6
|
+
end
|
7
|
+
begin
|
8
|
+
require 'rdoc/task'
|
9
|
+
rescue LoadError
|
10
|
+
require 'rdoc/rdoc'
|
11
|
+
require 'rake/rdoctask'
|
12
|
+
RDoc::Task = Rake::RDocTask
|
13
|
+
end
|
14
|
+
|
15
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
16
|
+
rdoc.rdoc_dir = 'rdoc'
|
17
|
+
rdoc.title = 'Deals'
|
18
|
+
rdoc.options << '--line-numbers'
|
19
|
+
rdoc.rdoc_files.include('README.rdoc')
|
20
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
21
|
+
end
|
22
|
+
|
23
|
+
APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
|
24
|
+
load 'rails/tasks/engine.rake'
|
25
|
+
|
26
|
+
|
27
|
+
|
28
|
+
Bundler::GemHelper.install_tasks
|
29
|
+
|
30
|
+
require 'rake/testtask'
|
31
|
+
|
32
|
+
Rake::TestTask.new(:test) do |t|
|
33
|
+
t.libs << 'lib'
|
34
|
+
t.libs << 'test'
|
35
|
+
t.pattern = 'test/**/*_test.rb'
|
36
|
+
t.verbose = false
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
task :default => :test
|
@@ -0,0 +1,15 @@
|
|
1
|
+
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
2
|
+
// listed below.
|
3
|
+
//
|
4
|
+
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
5
|
+
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
|
6
|
+
//
|
7
|
+
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
8
|
+
// the compiled file.
|
9
|
+
//
|
10
|
+
// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
|
11
|
+
// GO AFTER THE REQUIRES BELOW.
|
12
|
+
//
|
13
|
+
//= require jquery
|
14
|
+
//= require jquery_ujs
|
15
|
+
//= require_tree .
|
@@ -0,0 +1,13 @@
|
|
1
|
+
/*
|
2
|
+
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
3
|
+
* listed below.
|
4
|
+
*
|
5
|
+
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
+
* or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
|
7
|
+
*
|
8
|
+
* You're free to add application-wide styles to this file and they'll appear at the top of the
|
9
|
+
* compiled file, but it's generally better to create a new file per style scope.
|
10
|
+
*
|
11
|
+
*= require_self
|
12
|
+
*= require_tree .
|
13
|
+
*/
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class DealsController < ActionController::Base
|
2
|
+
respond_to :json
|
3
|
+
|
4
|
+
def index
|
5
|
+
place = params[:place]
|
6
|
+
category = params[:category]
|
7
|
+
|
8
|
+
if place.present?
|
9
|
+
places = Place.where(:slug => place)
|
10
|
+
place_id = places.first.id if places.any?
|
11
|
+
end
|
12
|
+
|
13
|
+
if category.present?
|
14
|
+
categories = Category.where(:slug => category)
|
15
|
+
category_id = categories.first.id if categories.any?
|
16
|
+
end
|
17
|
+
|
18
|
+
if place_id.present? && category_id.present?
|
19
|
+
@deals = Deal.where(:place_id => place_id, :category_id => category_id)
|
20
|
+
elsif place_id.present?
|
21
|
+
@deals = Deal.where(:place_id => place_id)
|
22
|
+
elsif category_id.present?
|
23
|
+
@deals = Deal.where(:category_id => category_id)
|
24
|
+
else
|
25
|
+
@deals = Deal.all
|
26
|
+
end
|
27
|
+
|
28
|
+
respond_with(@deals)
|
29
|
+
end
|
30
|
+
end
|
data/app/models/deal.rb
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
class Deal < ActiveRecord::Base
|
2
|
+
mount_uploader :photo, PhotoUploader
|
3
|
+
|
4
|
+
belongs_to :place
|
5
|
+
belongs_to :category
|
6
|
+
attr_accessible :photo, :photo_cache, :remove_photo, :commission, :deleted_at, :place_id, :category_id, :description, :email, :first_line, :phone, :second_line, :website
|
7
|
+
|
8
|
+
|
9
|
+
end
|
data/app/models/place.rb
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
class PhotoUploader < CarrierWave::Uploader::Base
|
4
|
+
|
5
|
+
# Include RMagick or MiniMagick support:
|
6
|
+
# include CarrierWave::RMagick
|
7
|
+
# include CarrierWave::MiniMagick
|
8
|
+
|
9
|
+
# Include the Sprockets helpers for Rails 3.1+ asset pipeline compatibility:
|
10
|
+
# include Sprockets::Helpers::RailsHelper
|
11
|
+
# include Sprockets::Helpers::IsolatedHelper
|
12
|
+
|
13
|
+
# Choose what kind of storage to use for this uploader:
|
14
|
+
storage :file
|
15
|
+
# storage :fog
|
16
|
+
|
17
|
+
# Override the directory where uploaded files will be stored.
|
18
|
+
# This is a sensible default for uploaders that are meant to be mounted:
|
19
|
+
def store_dir
|
20
|
+
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
|
21
|
+
end
|
22
|
+
|
23
|
+
# Provide a default URL as a default if there hasn't been a file uploaded:
|
24
|
+
# def default_url
|
25
|
+
# # For Rails 3.1+ asset pipeline compatibility:
|
26
|
+
# # asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
|
27
|
+
#
|
28
|
+
# "/images/fallback/" + [version_name, "default.png"].compact.join('_')
|
29
|
+
# end
|
30
|
+
|
31
|
+
# Process files as they are uploaded:
|
32
|
+
# process :scale => [200, 300]
|
33
|
+
#
|
34
|
+
# def scale(width, height)
|
35
|
+
# # do something
|
36
|
+
# end
|
37
|
+
|
38
|
+
# Create different versions of your uploaded files:
|
39
|
+
# version :thumb do
|
40
|
+
# process :scale => [50, 50]
|
41
|
+
# end
|
42
|
+
|
43
|
+
# Add a white list of extensions which are allowed to be uploaded.
|
44
|
+
# For images you might use something like this:
|
45
|
+
def extension_white_list
|
46
|
+
%w(jpg jpeg gif png)
|
47
|
+
end
|
48
|
+
|
49
|
+
# Override the filename of the uploaded files:
|
50
|
+
# Avoid using model.id or version_name here, see uploader/store.rb for details.
|
51
|
+
# def filename
|
52
|
+
# "something.jpg" if original_filename
|
53
|
+
# end
|
54
|
+
|
55
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Deals</title>
|
5
|
+
<%= stylesheet_link_tag "deals/application", :media => "all" %>
|
6
|
+
<%= javascript_include_tag "deals/application" %>
|
7
|
+
<%= csrf_meta_tags %>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
|
11
|
+
<%= yield %>
|
12
|
+
|
13
|
+
</body>
|
14
|
+
</html>
|
data/bin/deals
ADDED
data/config/routes.rb
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
Deals::Engine.routes.draw do
|
2
|
+
match '/places' => 'places#index', :defaults => { :format => 'json' }
|
3
|
+
match '/categories' => 'categories#index', :defaults => { :format => 'json' }
|
4
|
+
match '/for/:category' => 'deals#index', :defaults => { :format => 'json' }
|
5
|
+
match '/:place' => 'deals#index', :defaults => { :format => 'json' }
|
6
|
+
match '/:place/:category' => 'deals#index', :defaults => { :format => 'json' }
|
7
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class CreateDeals < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :deals do |t|
|
4
|
+
t.string :first_line
|
5
|
+
t.string :second_line
|
6
|
+
t.text :description
|
7
|
+
t.string :email
|
8
|
+
t.string :phone
|
9
|
+
t.string :website
|
10
|
+
t.float :commission
|
11
|
+
t.datetime :deleted_at
|
12
|
+
t.references :place
|
13
|
+
t.references :category
|
14
|
+
|
15
|
+
t.timestamps
|
16
|
+
end
|
17
|
+
add_index :deals, :place_id
|
18
|
+
add_index :deals, :category_id
|
19
|
+
end
|
20
|
+
end
|
data/lib/deals.rb
ADDED
data/lib/deals/cli.rb
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
require 'thor'
|
2
|
+
|
3
|
+
module Deals
|
4
|
+
class CLI < Thor
|
5
|
+
include Thor::Actions
|
6
|
+
|
7
|
+
desc "install", "install and configure deals"
|
8
|
+
def install
|
9
|
+
if already_installed?
|
10
|
+
update
|
11
|
+
else
|
12
|
+
inject_devise
|
13
|
+
inject_rails_admin
|
14
|
+
inject_carrierwave
|
15
|
+
run('bundle install')
|
16
|
+
run('rake deals:install:migrations')
|
17
|
+
run('rake db:migrate')
|
18
|
+
run('rails generate devise:install')
|
19
|
+
run('rails generate devise User')
|
20
|
+
run('rake db:migrate')
|
21
|
+
run('rails g rails_admin:install')
|
22
|
+
run('rake db:migrate')
|
23
|
+
mount_deals_route
|
24
|
+
welcome
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
desc "update", "update deals"
|
29
|
+
def update
|
30
|
+
say "Deals install detected"
|
31
|
+
say "Updating current Deals install"
|
32
|
+
run('rake deals:install:migrations')
|
33
|
+
say_upgraded
|
34
|
+
end
|
35
|
+
|
36
|
+
desc "inject_devise", "add devise"
|
37
|
+
def inject_devise
|
38
|
+
puts 'add reference to devise in GEMFILE'
|
39
|
+
insert_into_file "Gemfile", "gem 'devise'\n", :after => "source 'https://rubygems.org'\n"
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
desc "inject_rails_admin", "add rails_admin"
|
44
|
+
def inject_rails_admin
|
45
|
+
puts 'add reference to rails_admin in GEMFILE'
|
46
|
+
insert_into_file "Gemfile", "gem 'rails_admin'\n", :after => "gem 'devise'\n"
|
47
|
+
end
|
48
|
+
|
49
|
+
desc "inject_carrierwave", "add carrierwave"
|
50
|
+
def inject_carrierwave
|
51
|
+
puts 'add reference to carrierwave in GEMFILE'
|
52
|
+
insert_into_file "Gemfile", "gem 'carrierwave'\n", :after => "gem 'rails_admin'\n"
|
53
|
+
create_file "config/initializers/carrierwave.rb", "require 'carrierwave/orm/activerecord'"
|
54
|
+
end
|
55
|
+
|
56
|
+
desc "mount_deals_route", "mount deals route"
|
57
|
+
def mount_deals_route
|
58
|
+
insert_into_file "config/routes.rb", "\n mount Deals::Engine => '/deals', :as => 'deals'\n", :after => "Application.routes.draw do\n"
|
59
|
+
end
|
60
|
+
|
61
|
+
desc "create user class", "Create a user class"
|
62
|
+
def create_user_class
|
63
|
+
run('rails generate model User')
|
64
|
+
end
|
65
|
+
|
66
|
+
desc "welcome", "invite to deals"
|
67
|
+
def welcome
|
68
|
+
say ""
|
69
|
+
say ""
|
70
|
+
say ""
|
71
|
+
say "******************************************************************"
|
72
|
+
say "******************************************************************"
|
73
|
+
say "Deals Successfully Installed!"
|
74
|
+
say "******************************************************************"
|
75
|
+
end
|
76
|
+
|
77
|
+
desc "say_upgraded", "deals upgraded"
|
78
|
+
def say_upgraded
|
79
|
+
say ""
|
80
|
+
say ""
|
81
|
+
say ""
|
82
|
+
say "******************************************************************"
|
83
|
+
say "******************************************************************"
|
84
|
+
say "Deals Successfully Upgraded!"
|
85
|
+
say "******************************************************************"
|
86
|
+
end
|
87
|
+
|
88
|
+
private
|
89
|
+
|
90
|
+
def already_installed?
|
91
|
+
open('config/routes.rb') { |f| f.grep(/Deals\:\:Engine/) }.any?
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
end
|
96
|
+
end
|