cafepress_wrapper 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 +33 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +3 -0
- data/Rakefile +33 -0
- data/app/controllers/content_controller.rb +26 -0
- data/app/controllers/products_controller.rb +30 -0
- data/app/controllers/sitemap_controller.rb +26 -0
- data/app/controllers/stores_controller.rb +37 -0
- data/app/models/image_url.rb +3 -0
- data/app/models/product.rb +89 -0
- data/app/models/size.rb +3 -0
- data/app/models/store.rb +91 -0
- data/app/models/user_token.rb +36 -0
- data/app/views/content/about.html.erb +71 -0
- data/app/views/content/contact.html.erb +30 -0
- data/app/views/layouts/cafepress_wrapper.html.erb +75 -0
- data/app/views/products/show.rjs +14 -0
- data/app/views/sitemap/index.xml.erb +39 -0
- data/app/views/stores/_front_back_image.html.erb +15 -0
- data/app/views/stores/_product_details.html.erb +71 -0
- data/app/views/stores/feed.rss.builder +43 -0
- data/app/views/stores/index.html.erb +45 -0
- data/app/views/stores/show.html.erb +83 -0
- data/config/initializers/cafepress.rb +23 -0
- data/config/routes.rb +13 -0
- data/lib/cafepress_wrapper.rb +21 -0
- data/lib/db/migrate/20101103152700_create_user_tokens.rb +13 -0
- data/lib/db/migrate/20101104032051_create_stores.rb +13 -0
- data/lib/db/migrate/20101104032412_create_products.rb +16 -0
- data/lib/db/migrate/20101111004355_add_description_to_store.rb +9 -0
- data/lib/db/migrate/20101111025931_add_cafepress_design_id_to_products.rb +9 -0
- data/lib/db/migrate/20101119163852_add_cafepress_design_url_to_stores.rb +9 -0
- data/lib/db/migrate/20101119171328_add_design_background_color_to_stores.rb +9 -0
- data/lib/db/migrate/20101120003908_add_cafepress_back_design_id_to_products.rb +9 -0
- data/lib/db/migrate/20101123021036_add_cafepress_back_design_url_to_stores.rb +9 -0
- data/lib/db/migrate/20110301072358_add_gender_to_products.rb +9 -0
- data/lib/db/migrate/20110302191748_create_thumbnail_urls.rb +14 -0
- data/lib/db/migrate/20110302195801_add_view_to_thumbnail_urls.rb +9 -0
- data/lib/db/migrate/20110305004142_rename_thumbnail_urls_to_image_urls.rb +9 -0
- data/lib/db/migrate/20110305004402_add_image_size_to_image_urls.rb +9 -0
- data/lib/db/migrate/20110307005237_add_cafepress_merchandise_id_to_products.rb +9 -0
- data/lib/db/migrate/20110307014703_add_default_color_id_to_products.rb +9 -0
- data/lib/db/migrate/20110307063709_create_sizes.rb +16 -0
- data/lib/db/migrate/20110307064131_add_default_cafepress_size_id_to_products.rb +9 -0
- data/lib/db/migrate/20110308010304_add_title_to_stores.rb +9 -0
- data/lib/db/migrate/20110308050955_add_price_to_products.rb +9 -0
- data/lib/tasks/cafepress_wrapper.rake +48 -0
- data/public/images/ajax-loader.gif +0 -0
- data/public/images/back_bg.png +0 -0
- data/public/images/cart.png +0 -0
- data/public/images/fabric_bg.png +0 -0
- data/public/images/footer_bg.png +0 -0
- data/public/images/front_bg.png +0 -0
- data/public/images/header_bg.png +0 -0
- data/public/javascripts/cafepress_wrapper.js +118 -0
- data/public/stylesheets/cafepress_wrapper.css +473 -0
- metadata +137 -0
data/Gemfile
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
source 'http://rubygems.org'
|
2
|
+
gemspec
|
3
|
+
# gem 'rails', '3.0.1'
|
4
|
+
#
|
5
|
+
# # Bundle edge Rails instead:
|
6
|
+
# # gem 'rails', :git => 'git://github.com/rails/rails.git'
|
7
|
+
#
|
8
|
+
# #gem 'sqlite3-ruby', :require => 'sqlite3'
|
9
|
+
# gem 'pg'
|
10
|
+
#
|
11
|
+
# # Use unicorn as the web server
|
12
|
+
# # gem 'unicorn'
|
13
|
+
#
|
14
|
+
# # Deploy with Capistrano
|
15
|
+
# # gem 'capistrano'
|
16
|
+
#
|
17
|
+
# # To use debugger
|
18
|
+
# gem 'ruby-debug'
|
19
|
+
#
|
20
|
+
# # Bundle the extra gems:
|
21
|
+
# # gem 'bj'
|
22
|
+
# # gem 'nokogiri'
|
23
|
+
# # gem 'sqlite3-ruby', :require => 'sqlite3'
|
24
|
+
# # gem 'aws-s3', :require => 'aws/s3'
|
25
|
+
#
|
26
|
+
# # Bundle gems for the local environment. Make sure to
|
27
|
+
# # put test-only gems in this group so their generators
|
28
|
+
# # and rake tasks are available in development mode:
|
29
|
+
# # group :development, :test do
|
30
|
+
# # gem 'webrat'
|
31
|
+
# # end
|
32
|
+
#
|
33
|
+
# gem 'cafepress_api'
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2011 YOURNAME
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'rubygems'
|
3
|
+
|
4
|
+
require 'rake'
|
5
|
+
require 'rake/rdoctask'
|
6
|
+
|
7
|
+
require 'rake/testtask'
|
8
|
+
|
9
|
+
begin
|
10
|
+
require 'bundler/setup'
|
11
|
+
rescue LoadError
|
12
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
13
|
+
end
|
14
|
+
|
15
|
+
Rake::TestTask.new(:test) do |t|
|
16
|
+
t.libs << 'lib'
|
17
|
+
t.libs << 'test'
|
18
|
+
t.pattern = 'test/**/*_test.rb'
|
19
|
+
t.verbose = false
|
20
|
+
end
|
21
|
+
|
22
|
+
task :default => :test
|
23
|
+
|
24
|
+
Rake::RDocTask.new(:rdoc) do |rdoc|
|
25
|
+
rdoc.rdoc_dir = 'rdoc'
|
26
|
+
rdoc.title = 'CafepressWrapper'
|
27
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
28
|
+
rdoc.rdoc_files.include('README.rdoc')
|
29
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
30
|
+
end
|
31
|
+
|
32
|
+
require 'bundler'
|
33
|
+
Bundler::GemHelper.install_tasks
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# Copyright 2010 Benjamin Lee Smith <benjamin.lee.smith@gmail.com>
|
2
|
+
#
|
3
|
+
# This file is part of CafePress Wrapper.
|
4
|
+
# CafePress Wrapper is free software: you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
7
|
+
# (at your option) any later version.
|
8
|
+
#
|
9
|
+
# CafePress Wrapper is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with CafePress Wrapper. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
|
17
|
+
class ContentController < ApplicationController
|
18
|
+
layout 'cafepress_wrapper'
|
19
|
+
|
20
|
+
def about
|
21
|
+
end
|
22
|
+
|
23
|
+
def contact
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# Copyright 2010 Benjamin Lee Smith <benjamin.lee.smith@gmail.com>
|
2
|
+
#
|
3
|
+
# This file is part of CafePress Wrapper.
|
4
|
+
# CafePress Wrapper is free software: you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
7
|
+
# (at your option) any later version.
|
8
|
+
#
|
9
|
+
# CafePress Wrapper is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with CafePress Wrapper. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
|
17
|
+
class ProductsController < ApplicationController
|
18
|
+
layout 'cafepress_wrapper'
|
19
|
+
|
20
|
+
respond_to :js
|
21
|
+
def show
|
22
|
+
respond_to do |format|
|
23
|
+
format.js {@product = Product.find(params[:id])}
|
24
|
+
format.html {
|
25
|
+
product = Product.find(params[:id])
|
26
|
+
redirect_to store_url(product.store, :product_id => product.id)
|
27
|
+
}
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# Copyright 2010 Benjamin Lee Smith <benjamin.lee.smith@gmail.com>
|
2
|
+
#
|
3
|
+
# This file is part of CafePress Wrapper.
|
4
|
+
# CafePress Wrapper is free software: you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
7
|
+
# (at your option) any later version.
|
8
|
+
#
|
9
|
+
# CafePress Wrapper is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with CafePress Wrapper. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
|
17
|
+
class SitemapController < ApplicationController
|
18
|
+
layout nil
|
19
|
+
|
20
|
+
def index
|
21
|
+
headers['Content-Type'] = 'application/xml'
|
22
|
+
respond_to do |format|
|
23
|
+
format.xml { @stores = Store.all }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# Copyright 2010 Benjamin Lee Smith <benjamin.lee.smith@gmail.com>
|
2
|
+
#
|
3
|
+
# This file is part of CafePress Wrapper.
|
4
|
+
# CafePress Wrapper is free software: you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
7
|
+
# (at your option) any later version.
|
8
|
+
#
|
9
|
+
# CafePress Wrapper is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with CafePress Wrapper. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
|
17
|
+
class StoresController < ApplicationController
|
18
|
+
layout 'cafepress_wrapper'
|
19
|
+
|
20
|
+
def show
|
21
|
+
@store = Store.find(params[:id])
|
22
|
+
if params[:product_id]
|
23
|
+
@product = Product.find(params[:product_id])
|
24
|
+
else
|
25
|
+
@product = @store.mens_products.first || @store.womens_products.first || @store.unisex_products.first
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
def index
|
31
|
+
@stores = Store.all(:order => 'updated_at DESC')
|
32
|
+
end
|
33
|
+
|
34
|
+
def feed
|
35
|
+
@stores = Store.all(:order => 'created_at DESC')
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
# Copyright 2010 Benjamin Lee Smith <benjamin.lee.smith@gmail.com>
|
2
|
+
#
|
3
|
+
# This file is part of CafePress Wrapper.
|
4
|
+
# CafePress Wrapper is free software: you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
7
|
+
# (at your option) any later version.
|
8
|
+
#
|
9
|
+
# CafePress Wrapper is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with CafePress Wrapper. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
|
17
|
+
class Product < ActiveRecord::Base
|
18
|
+
belongs_to :store
|
19
|
+
has_many :image_urls, :dependent => :destroy
|
20
|
+
has_many :sizes, :dependent => :destroy
|
21
|
+
|
22
|
+
THUMBNAIL_IMAGE_SIZE = '100'
|
23
|
+
LARGE_IMAGE_SIZE = '350'
|
24
|
+
|
25
|
+
def front_thumbnail_urls
|
26
|
+
image_urls.find_all_by_view_and_size(CafePressAPI::FRONT_PRODUCT_VIEW, THUMBNAIL_IMAGE_SIZE)
|
27
|
+
end
|
28
|
+
|
29
|
+
def default_front_image
|
30
|
+
if default_color_id
|
31
|
+
image_urls.find_by_view_and_size_and_color_id(CafePressAPI::FRONT_PRODUCT_VIEW, LARGE_IMAGE_SIZE, default_color_id)
|
32
|
+
else
|
33
|
+
# Sometimes there is no default color returned from the API, so just pick one
|
34
|
+
image_urls.find_by_view_and_size(CafePressAPI::FRONT_PRODUCT_VIEW, LARGE_IMAGE_SIZE)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def default_back_image
|
39
|
+
if default_color_id
|
40
|
+
image_urls.find_by_view_and_size_and_color_id(CafePressAPI::BACK_PRODUCT_VIEW, LARGE_IMAGE_SIZE, default_color_id)
|
41
|
+
else
|
42
|
+
# Sometimes there is no default color returned from the API, so just pick one
|
43
|
+
image_urls.find_by_view_and_size(CafePressAPI::BACK_PRODUCT_VIEW, LARGE_IMAGE_SIZE)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
def front_image_url_for_color(color_id)
|
49
|
+
image_urls.find_by_view_and_size_and_color_id(CafePressAPI::FRONT_PRODUCT_VIEW, LARGE_IMAGE_SIZE, color_id).url
|
50
|
+
end
|
51
|
+
|
52
|
+
def back_image_url_for_color(color_id)
|
53
|
+
image_urls.find_by_view_and_size_and_color_id(CafePressAPI::BACK_PRODUCT_VIEW, LARGE_IMAGE_SIZE, color_id).url
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
def color_ids
|
58
|
+
front_thumbnail_urls.map(&:color_id)
|
59
|
+
end
|
60
|
+
|
61
|
+
def default_front_thumbnail_url
|
62
|
+
if default_color_id
|
63
|
+
image_urls.find_by_view_and_size_and_color_id(CafePressAPI::FRONT_PRODUCT_VIEW, THUMBNAIL_IMAGE_SIZE, default_color_id).url
|
64
|
+
else
|
65
|
+
# Sometimes there is no default color returned from the API, so just pick one
|
66
|
+
image_urls.find_by_view_and_size(CafePressAPI::FRONT_PRODUCT_VIEW, THUMBNAIL_IMAGE_SIZE).url
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def sizes_array
|
71
|
+
sizes.collect{|s| [s.full_name, s.cafepress_size_id]}
|
72
|
+
end
|
73
|
+
|
74
|
+
def available_in_multiple_colors?
|
75
|
+
color_ids.length > 1
|
76
|
+
end
|
77
|
+
|
78
|
+
def has_sizes?
|
79
|
+
sizes.length > 0
|
80
|
+
end
|
81
|
+
|
82
|
+
def better_default_caption
|
83
|
+
default_caption.gsub('(dark)','').strip
|
84
|
+
end
|
85
|
+
|
86
|
+
def has_back_design?
|
87
|
+
store.cafepress_back_design_url
|
88
|
+
end
|
89
|
+
end
|
data/app/models/size.rb
ADDED
data/app/models/store.rb
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
# Copyright 2010 Benjamin Lee Smith <benjamin.lee.smith@gmail.com>
|
2
|
+
#
|
3
|
+
# This file is part of CafePress Wrapper.
|
4
|
+
# CafePress Wrapper is free software: you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
7
|
+
# (at your option) any later version.
|
8
|
+
#
|
9
|
+
# CafePress Wrapper is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with CafePress Wrapper. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
|
17
|
+
class Store < ActiveRecord::Base
|
18
|
+
validates_uniqueness_of :cafepress_store_id
|
19
|
+
has_many :products
|
20
|
+
|
21
|
+
def self.load_cafepress_store(cafepress_store_id)
|
22
|
+
store = Store.find_or_create_by_cafepress_store_id(cafepress_store_id)
|
23
|
+
cafepress_store_attributes = CafePressAPI.get_store(cafepress_store_id)
|
24
|
+
store.description = cafepress_store_attributes[:description]
|
25
|
+
store.title = cafepress_store_attributes[:title]
|
26
|
+
store.save!
|
27
|
+
store
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.load_cafepress_store_and_products(cafepress_store_id)
|
31
|
+
store = Store.load_cafepress_store(cafepress_store_id)
|
32
|
+
|
33
|
+
store.products.destroy_all
|
34
|
+
|
35
|
+
cafepress_store_products = CafePressAPI.get_store_products(cafepress_store_id)
|
36
|
+
|
37
|
+
cafepress_store_products.each do |cp_product_attributes|
|
38
|
+
# pull thumbnails out of hash
|
39
|
+
image_urls = cp_product_attributes.delete(:image_urls)
|
40
|
+
|
41
|
+
# pull sizes out of hash
|
42
|
+
sizes = cp_product_attributes.delete(:sizes)
|
43
|
+
|
44
|
+
# create product
|
45
|
+
product = store.products.build(cp_product_attributes)
|
46
|
+
|
47
|
+
# add thumbnails to product
|
48
|
+
image_urls.each do |image_url_attributes|
|
49
|
+
product.image_urls.build(image_url_attributes)
|
50
|
+
end
|
51
|
+
|
52
|
+
# add sizes to product
|
53
|
+
sizes.each do |size_attributes|
|
54
|
+
product.sizes.build(size_attributes)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
store.save!
|
59
|
+
store
|
60
|
+
|
61
|
+
design_url = CafePressAPI.get_design_url(store.products.first.cafepress_design_id)
|
62
|
+
store.update_attributes(:cafepress_design_url => design_url)
|
63
|
+
|
64
|
+
if store.products.first.cafepress_back_design_id
|
65
|
+
design_url = CafePressAPI.get_design_url(store.products.first.cafepress_back_design_id)
|
66
|
+
store.update_attributes(:cafepress_back_design_url => design_url)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def mens_products
|
71
|
+
products.find_all_by_gender(CafePressAPI::MALE)
|
72
|
+
end
|
73
|
+
|
74
|
+
def womens_products
|
75
|
+
products.find_all_by_gender(CafePressAPI::FEMALE)
|
76
|
+
end
|
77
|
+
|
78
|
+
def unisex_products
|
79
|
+
products.find_all_by_gender(CafePressAPI::UNISEX)
|
80
|
+
end
|
81
|
+
|
82
|
+
def load_cafepress_data
|
83
|
+
Store.load_cafepress_store_and_products(self.cafepress_store_id)
|
84
|
+
end
|
85
|
+
|
86
|
+
def self.load_all_stores_cafepress_data
|
87
|
+
Store.all.each do |store|
|
88
|
+
store.load_cafepress_data
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# Copyright 2010 Benjamin Lee Smith <benjamin.lee.smith@gmail.com>
|
2
|
+
#
|
3
|
+
# This file is part of CafePress Wrapper.
|
4
|
+
# CafePress Wrapper is free software: you can redistribute it and/or modify
|
5
|
+
# it under the terms of the GNU General Public License as published by
|
6
|
+
# the Free Software Foundation, either version 3 of the License, or
|
7
|
+
# (at your option) any later version.
|
8
|
+
#
|
9
|
+
# CafePress Wrapper is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with CafePress Wrapper. If not, see <http://www.gnu.org/licenses/>.
|
16
|
+
|
17
|
+
class UserToken < ActiveRecord::Base
|
18
|
+
def self.set_token(user_token)
|
19
|
+
if (ut = UserToken.first)
|
20
|
+
ut.update_attributes(:token => user_token)
|
21
|
+
else
|
22
|
+
ut = UserToken.create(:token => user_token)
|
23
|
+
end
|
24
|
+
ut
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.get_user_token
|
28
|
+
ut = UserToken.first
|
29
|
+
if ut && 30.minutes.ago < ut.updated_at
|
30
|
+
user_token = ut.token
|
31
|
+
else
|
32
|
+
user_token = UserToken.set_token(CafePress.user_token).token
|
33
|
+
end
|
34
|
+
user_token
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
<%
|
2
|
+
# Copyright 2010 Benjamin Lee Smith <benjamin.lee.smith@gmail.com>
|
3
|
+
#
|
4
|
+
# This file is part of CafePress Wrapper.
|
5
|
+
# CafePress Wrapper is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation, either version 3 of the License, or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# CafePress Wrapper is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
#
|
15
|
+
# You should have received a copy of the GNU General Public License
|
16
|
+
# along with CafePress Wrapper. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
%>
|
18
|
+
|
19
|
+
<% content_for :title, 'About the shirts, the creator, and the site.' %>
|
20
|
+
|
21
|
+
<div id="about">
|
22
|
+
<h1>About the Shirts</h1>
|
23
|
+
<p>
|
24
|
+
All designs are available in a variety of sizes and colors for both men and
|
25
|
+
women via <%= link_to 'CafePress', 'http://www.cafepress.com/', :target => '_new' %>.
|
26
|
+
CafePress does an excellent job of printing shirts. The designs are very durable,
|
27
|
+
and will often out last the shirt fabric they are printed on.
|
28
|
+
</p>
|
29
|
+
<p>
|
30
|
+
The prices range from $10 for a basic Jersey Ringer style shirt, to $38 for a
|
31
|
+
Hoodie. Sadly, the prices are on the expensive side. Even more sad is the fact
|
32
|
+
that I only make 10% of each sale while the rest goes to CafePress.
|
33
|
+
</p>
|
34
|
+
<p>
|
35
|
+
One day, I would love to print these shirts myself. Or maybe a company like
|
36
|
+
Black Diamond or Metolius will pay me to design shirts for them! Until then,
|
37
|
+
CafePress will have to do.
|
38
|
+
</p>
|
39
|
+
|
40
|
+
<h1>About Me</h1>
|
41
|
+
<p>
|
42
|
+
My name is Benjamin Smith. I am, of course, an avid climber. Ever since June
|
43
|
+
6th of 2010, my girlfriend Erin and I have been on a road trip around the US
|
44
|
+
and Canada, climbing, surfing, and searching for a new place to live. You can
|
45
|
+
read about our travels on our blog: <%= link_to 'benanderininabus.com', 'http://benanderininabus.com/', :target => '_blog' %>
|
46
|
+
</p>
|
47
|
+
|
48
|
+
<p>
|
49
|
+
When I'm not traveling, I work as a web developer usually doing Ruby on Rails
|
50
|
+
work. You can check me out on <%= link_to 'LinkedIn', 'http://www.linkedin.com/in/benjaminleesmith', :target => '_linkedin' %>,
|
51
|
+
or check out my open source projects on <%= link_to 'GitHub', 'https://github.com/benjaminleesmith', :target => '_github' %>.
|
52
|
+
I also dabble in a bit of photography. Mostly as a hobby which doesn't make me
|
53
|
+
much money, but I do enjoy it. Especially when I combine it with climbing:
|
54
|
+
<%= link_to 'benjaminsmithphotography.com', 'http://benjaminsmithphotography.com/', :target => '_portfolio' %>
|
55
|
+
</p>
|
56
|
+
|
57
|
+
<h1>About the Site</h1>
|
58
|
+
<p>
|
59
|
+
The site was built using <%= link_to('Rails 3', 'http://www.rubyonrails.org/', :target => '_rails') %>,
|
60
|
+
is deployed on <%= link_to('Heroku', 'http://heroku.com/', :target => '_heroku') %>,
|
61
|
+
and is a work in progress. It uses the <%= link_to('CafePress API', 'http://developer.cafepress.com/docs', :target => '_cafepress') %>
|
62
|
+
to pull resources for the shirt design. The source code for the site can be found
|
63
|
+
on GitHub: <%= link_to('https://github.com/benjaminleesmith/cafepress_wrapper', 'https://github.com/benjaminleesmith/cafepress_wrapper', :target => '_github') %>
|
64
|
+
</p>
|
65
|
+
|
66
|
+
<p>
|
67
|
+
The picture at the top of the site is The Elephant Perch in the Sawtooth Mountains
|
68
|
+
in Idaho. The silhouette at the bottom of the site is Castleton Tower, The Priest
|
69
|
+
and The Rectory in Moab, Utah.
|
70
|
+
</p>
|
71
|
+
</div>
|
@@ -0,0 +1,30 @@
|
|
1
|
+
<%
|
2
|
+
# Copyright 2010 Benjamin Lee Smith <benjamin.lee.smith@gmail.com>
|
3
|
+
#
|
4
|
+
# This file is part of CafePress Wrapper.
|
5
|
+
# CafePress Wrapper is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation, either version 3 of the License, or
|
8
|
+
# (at your option) any later version.
|
9
|
+
#
|
10
|
+
# CafePress Wrapper is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU General Public License for more details.
|
14
|
+
#
|
15
|
+
# You should have received a copy of the GNU General Public License
|
16
|
+
# along with CafePress Wrapper. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
%>
|
18
|
+
|
19
|
+
<% content_for :title, 'Contact' %>
|
20
|
+
|
21
|
+
<div id="contact">
|
22
|
+
<h1>Contact</h1>
|
23
|
+
<p>
|
24
|
+
You can email me at <%= link_to('benjamin.lee.smith@gmail.com', 'mailto:benjamin.lee.smith@gmail.com') %>
|
25
|
+
or just look for my ugly mug at the crag...
|
26
|
+
</p>
|
27
|
+
<p>
|
28
|
+
<a href="http://www.flickr.com/photos/benjaminsmith/4839622122/" title="Lover's Leap by benjamin.smith, on Flickr"><img src="http://farm5.static.flickr.com/4091/4839622122_a2b5cc5a97.jpg" width="375" height="500" alt="Lover's Leap" /></a>
|
29
|
+
</p>
|
30
|
+
</div>
|
@@ -0,0 +1,75 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<%
|
3
|
+
# Copyright 2010 Benjamin Lee Smith <benjamin.lee.smith@gmail.com>
|
4
|
+
#
|
5
|
+
# This file is part of CafePress Wrapper.
|
6
|
+
# CafePress Wrapper is free software: you can redistribute it and/or modify
|
7
|
+
# it under the terms of the GNU General Public License as published by
|
8
|
+
# the Free Software Foundation, either version 3 of the License, or
|
9
|
+
# (at your option) any later version.
|
10
|
+
#
|
11
|
+
# CafePress Wrapper is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with CafePress Wrapper. If not, see <http://www.gnu.org/licenses/>.
|
18
|
+
%>
|
19
|
+
<html>
|
20
|
+
<head>
|
21
|
+
<title>Rock Climbing Shirts - <%= yield :title %></title>
|
22
|
+
<%= stylesheet_link_tag :all %>
|
23
|
+
<%= javascript_include_tag :defaults %>
|
24
|
+
<%= javascript_include_tag 'cafepress_wrapper' %>
|
25
|
+
<%= csrf_meta_tag %>
|
26
|
+
<meta name="description" content="Hilarious, sweet, and all around kickass shirts for every type of rock climber." />
|
27
|
+
<link rel="alternate" type="application/rss+xml" title="Rock Climbing Shirts - <%= yield :title %>" href="/feed.rss" />
|
28
|
+
<script type="text/javascript">
|
29
|
+
|
30
|
+
var _gaq = _gaq || [];
|
31
|
+
_gaq.push(['_setAccount', '<%= ::CAFEPRESS_CONFIG['google_analytics'] %>']);
|
32
|
+
_gaq.push(['_trackPageview']);
|
33
|
+
|
34
|
+
(function() {
|
35
|
+
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
36
|
+
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
37
|
+
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
38
|
+
})();
|
39
|
+
|
40
|
+
</script>
|
41
|
+
</head>
|
42
|
+
<body>
|
43
|
+
<div id="header">
|
44
|
+
<div class="menu">
|
45
|
+
<ul>
|
46
|
+
<li class="first"><%= link_to 'Home', root_url %></li>
|
47
|
+
<li><%= link_to 'Photos', 'http://www.flickr.com/photos/benjaminsmith/tags/tshirt/show/', :target => '_flickr' %></li>
|
48
|
+
<li><%= link_to 'About', content_about_path %></li>
|
49
|
+
<li><%= link_to 'Contact', content_contact_path %></li>
|
50
|
+
<li><%= link_to 'RSS', '/feed.rss' %></li>
|
51
|
+
</ul>
|
52
|
+
</div>
|
53
|
+
</div>
|
54
|
+
<div id="content">
|
55
|
+
<div id="cart">
|
56
|
+
<%= link_to("#{CafePressAPI::VIEW_CART_BASE_URL}?s=search&keepshopping=#{u(request.url)}") do%>
|
57
|
+
<div class="text">Checkout/View Cart</div>
|
58
|
+
<div class="image"><%= image_tag('cart.png', :width => '32px', :height => '32px') %></div>
|
59
|
+
<% end %>
|
60
|
+
</div>
|
61
|
+
<%= yield %>
|
62
|
+
</div>
|
63
|
+
<div id="footer">
|
64
|
+
<div class="menu">
|
65
|
+
<ul>
|
66
|
+
<li><%= link_to 'Home', root_url %></li>
|
67
|
+
<li><%= link_to 'Photos', 'http://www.flickr.com/photos/benjaminsmith/tags/tshirt/show/', :target => '_flickr' %></li>
|
68
|
+
<li><%= link_to 'About', content_about_path %></li>
|
69
|
+
<li><%= link_to 'Contact', content_contact_path %></li>
|
70
|
+
<li><%= link_to 'RSS', '/feed.rss' %></li>
|
71
|
+
</ul>
|
72
|
+
</div>
|
73
|
+
</div>
|
74
|
+
</body>
|
75
|
+
</html>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# this should be refactored.
|
2
|
+
# if a color id was passed in, just replace the image
|
3
|
+
# else replace the whole product
|
4
|
+
if params[:color_id]
|
5
|
+
if @product.has_back_design?
|
6
|
+
page.replace_html 'image', render(:partial => '/stores/front_back_image', :locals => {:product => @product, :color_id => params[:color_id]})
|
7
|
+
else
|
8
|
+
page.replace_html 'image', image_tag(@product.front_image_url_for_color(params[:color_id]), :alt => '')
|
9
|
+
end
|
10
|
+
page.call 'CPW.update_selected_color', params[:color_id]
|
11
|
+
else
|
12
|
+
page.replace_html 'moving_div', render(:partial => '/stores/product_details', :locals => {:product => @product})
|
13
|
+
page.call 'CPW.bind_color_name_events'
|
14
|
+
end
|