e9_vendors 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.
Files changed (67) hide show
  1. data/.gitignore +4 -0
  2. data/Gemfile +4 -0
  3. data/README.markdown +6 -0
  4. data/Rakefile +1 -0
  5. data/app/controllers/e9_vendors/settings_controller.rb +11 -0
  6. data/app/controllers/e9_vendors/vendor_categories_controller.rb +36 -0
  7. data/app/controllers/e9_vendors/vendor_members_controller.rb +61 -0
  8. data/app/controllers/e9_vendors/vendor_proxies_controller.rb +38 -0
  9. data/app/controllers/e9_vendors/vendors_controller.rb +22 -0
  10. data/app/decorators/vendor_category_decorator.rb +10 -0
  11. data/app/decorators/vendor_member_decorator.rb +55 -0
  12. data/app/decorators/vendor_proxy_decorator.rb +74 -0
  13. data/app/decorators/vendors_decorator.rb +27 -0
  14. data/app/models/vendor.rb +23 -0
  15. data/app/models/vendor_category.rb +17 -0
  16. data/app/models/vendor_member.rb +21 -0
  17. data/app/models/vendor_proxy.rb +39 -0
  18. data/app/observers/vendor_member_observer.rb +17 -0
  19. data/app/observers/vendor_observer.rb +18 -0
  20. data/app/uploaders/logo_uploader.rb +14 -0
  21. data/app/views/e9_vendors/settings/_form.html.haml +18 -0
  22. data/app/views/e9_vendors/settings/show.html.haml +2 -0
  23. data/app/views/e9_vendors/vendor_categories/_form.html.haml +7 -0
  24. data/app/views/e9_vendors/vendor_categories/_table.html.haml +21 -0
  25. data/app/views/e9_vendors/vendor_categories/destroy.js.erb +3 -0
  26. data/app/views/e9_vendors/vendor_categories/edit.html.haml +2 -0
  27. data/app/views/e9_vendors/vendor_categories/index.html.haml +4 -0
  28. data/app/views/e9_vendors/vendor_categories/index.js.erb +1 -0
  29. data/app/views/e9_vendors/vendor_categories/new.html.haml +2 -0
  30. data/app/views/e9_vendors/vendor_members/_form.html.haml +49 -0
  31. data/app/views/e9_vendors/vendor_members/_table.html.haml +21 -0
  32. data/app/views/e9_vendors/vendor_members/_vendors.html.haml +24 -0
  33. data/app/views/e9_vendors/vendor_members/destroy.js.erb +3 -0
  34. data/app/views/e9_vendors/vendor_members/edit.html.haml +2 -0
  35. data/app/views/e9_vendors/vendor_members/index.html.haml +4 -0
  36. data/app/views/e9_vendors/vendor_members/index.js.erb +1 -0
  37. data/app/views/e9_vendors/vendor_members/new.html.haml +2 -0
  38. data/app/views/e9_vendors/vendor_members/widget_code.html.haml +3 -0
  39. data/app/views/e9_vendors/vendor_proxies/_form.html.haml +28 -0
  40. data/app/views/e9_vendors/vendor_proxies/_table.html.haml +16 -0
  41. data/app/views/e9_vendors/vendor_proxies/_table_row.html.haml +11 -0
  42. data/app/views/e9_vendors/vendor_proxies/destroy.js.erb +3 -0
  43. data/app/views/e9_vendors/vendor_proxies/edit.html.haml +2 -0
  44. data/app/views/e9_vendors/vendor_proxies/index.html.haml +1 -0
  45. data/app/views/e9_vendors/vendor_proxies/index.js.erb +1 -0
  46. data/app/views/e9_vendors/vendor_proxies/new.html.haml +2 -0
  47. data/app/views/e9_vendors/vendor_proxies/update.js.erb +7 -0
  48. data/app/views/e9_vendors/vendors/_form.html.haml +91 -0
  49. data/app/views/e9_vendors/vendors/_table.html.haml +20 -0
  50. data/app/views/e9_vendors/vendors/destroy.js.erb +3 -0
  51. data/app/views/e9_vendors/vendors/edit.html.haml +2 -0
  52. data/app/views/e9_vendors/vendors/index.html.haml +4 -0
  53. data/app/views/e9_vendors/vendors/index.js.erb +1 -0
  54. data/app/views/e9_vendors/vendors/new.html.haml +2 -0
  55. data/config/locales/vendorboon.en.yml +61 -0
  56. data/config/routes.rb +38 -0
  57. data/e9_vendors.gemspec +20 -0
  58. data/lib/e9_vendors.rb +24 -0
  59. data/lib/e9_vendors/controller.rb +18 -0
  60. data/lib/e9_vendors/model.rb +13 -0
  61. data/lib/e9_vendors/version.rb +3 -0
  62. data/lib/generators/e9_vendors/install_generator.rb +31 -0
  63. data/lib/generators/e9_vendors/templates/javascript.js +16 -0
  64. data/lib/generators/e9_vendors/templates/migration.rb +84 -0
  65. data/lib/generators/e9_vendors/templates/stylesheets/vb-widget-ie.scss +21 -0
  66. data/lib/generators/e9_vendors/templates/stylesheets/vb-widget.scss +151 -0
  67. metadata +129 -0
@@ -0,0 +1,20 @@
1
+ %table.records
2
+ %thead
3
+ %tr
4
+ %th= resource_humanize(:name)
5
+ %th= resource_humanize(:vendor_category)
6
+ %th= e9_t(:actions)
7
+ %tbody
8
+ - if collection.empty?
9
+ %tr
10
+ %td{:colspan => 3}= e9_t(:no_records_text)
11
+ - else
12
+ - collection.each do |record|
13
+ %tr{:id => "ids_#{record.id}", :class => cycle('odd', 'even')}
14
+ %td.txt
15
+ = record.name
16
+ %td.txt
17
+ = record.vendor_categories.order(:name).map(&:name).join(", ").html_safe
18
+ %td.links
19
+ = link_to_edit_resource(record)
20
+ = link_to_destroy_resource(record)
@@ -0,0 +1,3 @@
1
+ <% if !resource.errors.any? %>
2
+ $("#ids_<%= resource.id %>").fadeOut();
3
+ <% end %>
@@ -0,0 +1,2 @@
1
+ = title e9_t(:edit_title)
2
+ = render_admin_form
@@ -0,0 +1,4 @@
1
+ - content_for :toolbar_right do
2
+ = link_to_new_resource(resource_class)
3
+
4
+ = render 'shared/admin/index', :collection => collection
@@ -0,0 +1 @@
1
+ $("#records_table").html("<%= escape_javascript(render('table', :collection => collection)) %>");
@@ -0,0 +1,2 @@
1
+ = title e9_t(:new_title)
2
+ = render_admin_form
@@ -0,0 +1,61 @@
1
+ en:
2
+ activerecord:
3
+ # Translate model names. Used in Model.human_name().
4
+ models:
5
+ vendor_proxy: Vendor
6
+ vendor_category: Vendor Category
7
+ vendor_member: Member
8
+
9
+ # Translate model attribute names. Used in Model.human_attribute_name(attribute).
10
+ attributes:
11
+ vendor:
12
+ vendor_category: Category
13
+ discount_percentage: Default Member Discount
14
+ settings:
15
+ e9_vendors_email_to: Email To
16
+ e9_vendors_email_from: Email From
17
+ e9_vendors_email_subject: Email Subject
18
+ e9_vendors_email_intro: Email Introduction
19
+ e9_vendors_widget_title: Widget Title
20
+ e9_vendors_widget_form_title: Widget Form Title
21
+ e9_vendors_widget_form_text: Form Introduction
22
+ e9_vendors_widget_settings: Widget Settings
23
+ e9_vendors_widget_help: |
24
+ <h3>Variables usable in short and long descriptions:</h3>
25
+ <ul>
26
+ <li>&#123;&#123;member_name&#125;&#125;</li>
27
+ <li>&#123;&#123;member_nickname&#125;&#125;</li>
28
+ <li>&#123;&#123;vendor_discount_code&#125;&#125;</li>
29
+ <li>&#123;&#123;vendor_discount_percentage&#125;&#125;</li>
30
+ <li>&#123;&#123;vendor_landing_page&#125;&#125;</li>
31
+ <li>&#123;&#123;vendor_name&#125;&#125;</li>
32
+ <li>&#123;&#123;vendor_nickname&#125;&#125;</li>
33
+ <li>&#123;&#123;vendor_sales_email&#125;&#125;</li>
34
+ <li>&#123;&#123;vendor_sales_full_name&#125;&#125;</li>
35
+ <li>&#123;&#123;vendor_sales_phone&#125;&#125;</li>
36
+ <li>&#123;&#123;vendor_sales_title&#125;&#125;</li>
37
+ </ul>
38
+
39
+ e9:
40
+ e9_vendors:
41
+ vendor_members:
42
+ manage: Manage Vendors
43
+ get_widget_code: Get Widget Code
44
+ widget_code_title: Widget Code
45
+ vendor_proxies:
46
+ edit: Edit Vendor Details
47
+ index_title: "Manage Vendors for %{member}"
48
+ view_landing_page: View Landing Page
49
+ vendor_defaults_instructions: Leave Fields Below Blank to Use Default Values
50
+ vendor_default: "(Default: %{default_value})"
51
+ vendors:
52
+ widget_settings_legend: Widget Settings
53
+ settings:
54
+ index_title: Vendors Settings
55
+ vendorboon_widget_settings_legend: Widget Settings
56
+ widget_interpolation_instructions: |
57
+ <h3>Variables usable in all fields:</h3>
58
+ <ul>
59
+ <li>&#123;&#123;member_name&#125;&#125;</li>
60
+ <li>&#123;&#123;member_nickname&#125;&#125;</li>
61
+ </ul>
data/config/routes.rb ADDED
@@ -0,0 +1,38 @@
1
+ Rails.application.routes.draw do
2
+
3
+ base_path = 'directory'
4
+ admin_path= "admin/#{base_path}"
5
+
6
+ scope :path => admin_path, :module => :e9_vendors do
7
+ resource :settings, :only => [:show, :update], :as => :e9_vendors_settings
8
+
9
+ resources :vendor_categories, :path => :categories do
10
+ collection { post :update_order }
11
+ end
12
+
13
+ resources :vendors, :except => :show do
14
+ member do
15
+ post :upload_logo
16
+ delete :reset_logo
17
+ end
18
+ end
19
+
20
+ resources :vendor_members, :path => :members, :except => :show do
21
+ resources :vendor_proxies, :path => :vendors
22
+ member do
23
+ get :widget_code
24
+ post :upload_logo
25
+ delete :reset_logo
26
+ end
27
+ end
28
+
29
+ %w(
30
+ vendors
31
+ members
32
+ ).each do |path|
33
+ get "/#{path}/:id", :to => redirect("/#{admin_path}/#{path}/%{id}/edit"), :constraints => { :id => /\d+/ }
34
+ end
35
+ end
36
+
37
+ get "/#{base_path}/members/:id", :as => :vendor_member, :to => 'e9_vendors/vendor_members#show'
38
+ end
@@ -0,0 +1,20 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "e9_vendors/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "e9_vendors"
7
+ s.version = E9Vendors::VERSION
8
+ s.authors = ["Travis Cox"]
9
+ s.email = ["numbers1311407@gmail.com"]
10
+ s.homepage = "http://github.com/e9digital/e9_vendors"
11
+ s.summary = %q{Vendor directory with widget}
12
+ s.description = File.open('README.markdown').read rescue nil
13
+
14
+ s.rubyforge_project = "e9_vendors"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+ end
data/lib/e9_vendors.rb ADDED
@@ -0,0 +1,24 @@
1
+ module E9Vendors
2
+ autoload :VERSION, 'e9_vendors/version'
3
+ autoload :Model, 'e9_vendors/model'
4
+ autoload :Controller, 'e9_vendors/controller'
5
+
6
+ def E9Vendors.configure
7
+ yield self
8
+ end
9
+
10
+ def E9Vendors.init!
11
+ end
12
+
13
+ class Engine < ::Rails::Engine
14
+ config.e9_vendors = E9Vendors
15
+
16
+ config.active_record.observers ||= []
17
+ config.active_record.observers |= [
18
+ :vendor_member_observer,
19
+ :vendor_observer
20
+ ]
21
+
22
+ config.to_prepare { E9Vendors.init! }
23
+ end
24
+ end
@@ -0,0 +1,18 @@
1
+ module E9Vendors::Controller
2
+ extend ActiveSupport::Concern
3
+ include E9Rails::Helpers::ResourceLinks
4
+
5
+ included do
6
+ defaults
7
+ end
8
+
9
+ module ClassMethods
10
+ def defaults(hash = {})
11
+ super(hash.reverse_merge(:route_prefix => nil))
12
+ end
13
+ end
14
+
15
+ def add_index_breadcrumb
16
+ add_breadcrumb! @index_title || e9_t(:index_title), collection_path
17
+ end
18
+ end
@@ -0,0 +1,13 @@
1
+ module E9Vendors::Model
2
+ extend ActiveSupport::Concern
3
+
4
+ def role
5
+ 'administrator'.role
6
+ end
7
+
8
+ module ClassMethods
9
+ def touch_all
10
+ update_all(:updated_at => DateTime.now)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,3 @@
1
+ module E9Vendors
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,31 @@
1
+ require 'rails/generators'
2
+ require 'rails/generators/migration'
3
+
4
+ module E9Vendors
5
+ module Generators
6
+ class InstallGenerator < Rails::Generators::Base
7
+ include Rails::Generators::Migration
8
+
9
+ def self.source_root
10
+ File.join(File.dirname(__FILE__), 'templates')
11
+ end
12
+
13
+ def self.next_migration_number(dirname) #:nodoc:
14
+ if ActiveRecord::Base.timestamped_migrations
15
+ Time.now.utc.strftime("%Y%m%d%H%M%S")
16
+ else
17
+ "%.3d" % (current_migration_number(dirname) + 1)
18
+ end
19
+ end
20
+
21
+ def create_migration
22
+ migration_template 'migration.rb', 'db/migrate/create_e9_vendors.rb'
23
+ end
24
+
25
+ def copy_files
26
+ copy_file 'javascript.js', 'public/javascripts/e9_vendors.js'
27
+ directory 'stylesheets', 'app/stylesheets'
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,16 @@
1
+ ;jQuery(function($) {
2
+ $("body.controller-admin-vendor-details .links a[href$=/edit]").live('click', function(e) {
3
+ e.preventDefault();
4
+ $.fn.colorbox({ href: $(this).attr('href') });
5
+ });
6
+
7
+ // NOTE this uses livequery
8
+ $("body.controller-admin-vendor-details form.edit_vendor_detail input[type=checkbox]").livequery('change', function(e) {
9
+ $(this).closest('form').callRemote();
10
+ });
11
+
12
+ $("body.controller-admin-associations .links a[href$=/widget_code]").live('click', function(e) {
13
+ e.preventDefault();
14
+ $.fn.colorbox({ transition:'none', html:"<h1>Widget Code</h1>" + $(this).next('.tooltip').html() });
15
+ });
16
+ });
@@ -0,0 +1,84 @@
1
+ class CreateE9Vendors < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :vendor_members, :force => true do |t|
4
+ t.string "name"
5
+ t.string "nickname"
6
+ t.string "address_1"
7
+ t.string "address_2"
8
+ t.string "city"
9
+ t.string "zipcode"
10
+ t.string "country"
11
+ t.string "contact_email"
12
+ t.string "contact_full_name"
13
+ t.string "contact_title"
14
+ t.string "contact_phone"
15
+ t.string "state"
16
+ t.text "website"
17
+ t.text "admin_notes"
18
+ t.string "logo"
19
+ t.string "md5_hash"
20
+ t.timestamps
21
+ end
22
+
23
+ create_table :vendor_categories, :force => true do |t|
24
+ t.string "name"
25
+ t.integer "position"
26
+ t.timestamps
27
+ end
28
+
29
+ create_table :vendor_categories_vendors, :force => true, :id => false do |t|
30
+ t.references :vendor_category, :vendor
31
+ end
32
+
33
+ create_table :vendor_proxies, :force => true do |t|
34
+ t.references :vendor, :vendor_member
35
+ t.boolean "display_on_widget", :default => true
36
+ t.string "discount_code"
37
+ t.string "sales_full_name"
38
+ t.string "sales_title"
39
+ t.string "sales_phone"
40
+ t.string "sales_email"
41
+ t.decimal "discount_percentage", :precision => 10, :scale => 2
42
+ t.text "landing_page"
43
+ t.timestamps
44
+ end
45
+
46
+ create_table :vendors, :force => true do |t|
47
+ t.references :vendor_category
48
+ t.integer "position"
49
+ t.string "name"
50
+ t.string "nickname"
51
+ t.string "address_1"
52
+ t.string "address_2"
53
+ t.string "city"
54
+ t.string "zipcode"
55
+ t.string "country"
56
+ t.string "contact_email"
57
+ t.string "contact_full_name"
58
+ t.string "contact_title"
59
+ t.string "contact_phone"
60
+ t.string "state"
61
+ t.text "website"
62
+ t.text "admin_notes"
63
+ t.boolean "display_on_widget_contact_form", :default => true
64
+ t.string "sales_email"
65
+ t.string "sales_full_name"
66
+ t.string "sales_title"
67
+ t.string "sales_phone"
68
+ t.text "short_description"
69
+ t.text "long_description"
70
+ t.text "default_landing_page"
71
+ t.decimal "discount_percentage", :precision => 10, :scale => 2
72
+ t.decimal "member_compensation", :precision => 10, :scale => 2
73
+ t.string "logo"
74
+ t.timestamps
75
+ end
76
+
77
+ add_column :settings, :e9_vendors_widget_title, :string
78
+ add_column :settings, :e9_vendors_widget_form_title, :string
79
+ add_column :settings, :e9_vendors_widget_form_text, :text
80
+ end
81
+
82
+ def self.down
83
+ end
84
+ end
@@ -0,0 +1,21 @@
1
+ * html #vb-widget legend {
2
+ margin: 0px -8px 16px 0;
3
+ padding: 0;
4
+ }
5
+
6
+ html > #vb-widget p code {
7
+ *white-space: normal;
8
+ }
9
+
10
+ #vb-widget {
11
+ img {
12
+ -ms-interpolation-mode: bicubic;
13
+ }
14
+ textarea {
15
+ overflow: auto;
16
+ }
17
+ button {
18
+ position: relative;
19
+ top: 0.25em;
20
+ }
21
+ }
@@ -0,0 +1,151 @@
1
+ @import "compass/utilities/general/clearfix";
2
+
3
+ #vb-widget {
4
+ $input_width: 300px;
5
+ $textarea_width: 390px;
6
+ $textarea_height: 250px;
7
+ $feedback_border_color: #dddddd;
8
+ $feedback_error_color: #8a1f11;
9
+ $feedback_error_border_color: #fbc2c3;
10
+ $feedback_error_background_color: #fbe3e4;
11
+ $feedback_success_color: #264409;
12
+ $feedback_success_border_color: #c6d880;
13
+ $feedback_success_background_color: #e6efc2;
14
+ $unfocused_border_color: #bbbbbb;
15
+ $focus_border_color: #666666;
16
+ $fieldset_border_color: #cccccc;
17
+
18
+ padding: 0.5em;
19
+ label {
20
+ display: block;
21
+ }
22
+ fieldset, .vb-field {
23
+ margin: 0 0 1em 0;
24
+ }
25
+ fieldset {
26
+ padding: 0.5em 0.75em 0.75em;
27
+ .vb-field {
28
+ margin: 0 0 0.25em 0;
29
+ }
30
+ &.vb-checkbox {
31
+ input[type=checkbox] {
32
+ margin-right: 0.3em;
33
+ }
34
+ label {
35
+ margin-right: 1.25em;
36
+ display: inline;
37
+ }
38
+ }
39
+ }
40
+ input {
41
+ &[type=email], &[type=text], &[type=password] {
42
+ margin: 0 0 0.5em;
43
+ background-color: white;
44
+ padding: 5px;
45
+ }
46
+ &.title {
47
+ font-size: 1.25em;
48
+ }
49
+ &[type=checkbox], &[type=radio] {
50
+ position: relative;
51
+ top: 0.15em;
52
+ }
53
+ }
54
+ textarea {
55
+ margin: 0.5em 0;
56
+ padding: 5px;
57
+ }
58
+ select {
59
+ margin: 0.5em 0;
60
+ }
61
+ .vb-heading, .vb-subheading {
62
+ margin: 0.25em 0;
63
+ }
64
+ .vb-vendor-category {
65
+ margin: 0 0 0.5em;
66
+ padding: 0.5em 0 0;
67
+ }
68
+ .vb-vendor-category-name {
69
+ font-size: 1.1em;
70
+ margin: 0 0 0.25em 0;
71
+ }
72
+ .vb-actions {
73
+ margin: 1em 0;
74
+ }
75
+ .vb-vendor {
76
+ @include clearfix;
77
+ margin-bottom: 1em;
78
+ .vb-vendor-content {
79
+ float: none;
80
+ .vb-vendor-name {
81
+ font-size: 1.25em;
82
+ }
83
+ }
84
+ .vb-vendor-logo {
85
+ float: left;
86
+ margin-right: 0.5em;
87
+ }
88
+ }
89
+ .vb-show-desc-link {
90
+ white-space: nowrap;
91
+ }
92
+ .vb-text {
93
+ padding: 0.25em 0;
94
+ }
95
+ input {
96
+ &.text, &.title, &[type=email], &[type=text], &[type=password] {
97
+ width: $input_width;
98
+ }
99
+ }
100
+ textarea {
101
+ width: $textarea_width;
102
+ height: $textarea_height;
103
+ }
104
+
105
+ fieldset {
106
+ border: 1px solid $fieldset_border_color;
107
+ }
108
+
109
+ input.text,
110
+ input.title,
111
+ input[type=email],
112
+ input[type=text],
113
+ input[type=password],
114
+ textarea,
115
+ select {
116
+ border: 1px solid $unfocused_border_color;
117
+ &:focus {
118
+ border: 1px solid $focus_border_color;
119
+ }
120
+ }
121
+
122
+ .vb-feedback.vb-feedback-error,
123
+ .vb-field-error input[type=email],
124
+ .vb-field-error input[type=text],
125
+ .vb-field-error input[type=password] {
126
+ background-color: $feedback_error_background_color;
127
+ border-color: $feedback_error_border_color;
128
+ }
129
+ .vb-feedback.vb-feedback-error, .vb-field-error {
130
+ color: $feedback_error_color;
131
+ a {
132
+ color: $feedback_error_color;
133
+ }
134
+ }
135
+ .vb-feedback {
136
+ padding: 0.5em 0.75em;
137
+ margin-bottom: 1em;
138
+ border: 1px solid $fieldset_border_color;
139
+ &.vb-feedback-success {
140
+ background-color: $feedback_success_background_color;
141
+ border-color: $feedback_success_border_color;
142
+ color: $feedback_success_color;
143
+ a {
144
+ color: $feedback_success_color;
145
+ }
146
+ }
147
+ .vb-feedback-error-field {
148
+ margin: 0.25em 0;
149
+ }
150
+ }
151
+ }