refinerycms-simple_members 0.1.4

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,8 @@
1
+ module Admin
2
+ class MembersController < Admin::BaseController
3
+
4
+ crudify :member,
5
+ :title_attribute => 'first_name', :xhr_paging => true
6
+
7
+ end
8
+ end
@@ -0,0 +1,24 @@
1
+ class MembersController < ApplicationController
2
+
3
+ before_filter :find_all_members
4
+ before_filter :find_page
5
+
6
+ def index
7
+ redirect_to root_url
8
+ end
9
+
10
+ def show
11
+ redirect_to root_url
12
+ end
13
+
14
+ protected
15
+
16
+ def find_all_members
17
+ @members = Member.order('position ASC')
18
+ end
19
+
20
+ def find_page
21
+ @page = Page.where(:link_url => "/members").first
22
+ end
23
+
24
+ end
@@ -0,0 +1,8 @@
1
+ class Member < ActiveRecord::Base
2
+
3
+ acts_as_indexed :fields => [:first_name, :last_name, :email, :unique_identifier]
4
+
5
+ validates :unique_identifier, :presence => true, :uniqueness => true
6
+
7
+ default_scope order(:last_name)
8
+ end
@@ -0,0 +1,28 @@
1
+ <ul>
2
+ <% if Admin::MembersController.searchable? %>
3
+ <li>
4
+ <%= render :partial => "/shared/admin/search",
5
+ :locals => {
6
+ :url => admin_members_path
7
+ } %>
8
+ </li>
9
+ <% end %>
10
+ <li>
11
+ <%= link_to t('.create_new'), new_admin_member_path,
12
+ :class => "add_icon" %>
13
+ </li>
14
+ <% if !searching? and Admin::MembersController.sortable? and Member.count > 1 %>
15
+ <li>
16
+ <%= link_to t('.reorder', :what => "Members"),
17
+ admin_members_path,
18
+ :id => "reorder_action",
19
+ :class => "reorder_icon" %>
20
+
21
+ <%= link_to t('.reorder_done', :what => "Members"),
22
+ admin_members_path,
23
+ :id => "reorder_action_done",
24
+ :style => "display: none;",
25
+ :class => "reorder_icon" %>
26
+ </li>
27
+ <% end %>
28
+ </ul>
@@ -0,0 +1,34 @@
1
+ <%= form_for [:admin, @member] do |f| -%>
2
+ <%= render :partial => "/shared/admin/error_messages", :locals => {
3
+ :object => @member,
4
+ :include_object_name => true
5
+ } %>
6
+
7
+ <div class='field'>
8
+ <%= f.label :first_name -%>
9
+ <%= f.text_field :first_name -%>
10
+ </div>
11
+
12
+ <div class='field'>
13
+ <%= f.label :last_name -%>
14
+ <%= f.text_field :last_name -%>
15
+ </div>
16
+
17
+ <div class='field'>
18
+ <%= f.label :email -%>
19
+ <%= f.text_field :email -%>
20
+ </div>
21
+
22
+ <div class='field'>
23
+ <%= f.label :unique_identifier -%>
24
+ <%= f.text_field :unique_identifier -%>
25
+ </div>
26
+
27
+ <%= render :partial => "/shared/admin/form_actions",
28
+ :locals => {
29
+ :f => f,
30
+ :continue_editing => false,
31
+ :delete_title => t('delete', :scope => 'admin.members.member'),
32
+ :delete_confirmation => t('message', :scope => 'shared.admin.delete', :title => @member.first_name)
33
+ } %>
34
+ <% end -%>
@@ -0,0 +1,15 @@
1
+ <li class='clearfix record <%= cycle("on", "on-hover") %>' id="<%= dom_id(member) -%>">
2
+ <span class='title'>
3
+ <%= member.last_name %>, <%= member.first_name %>
4
+ <span class="preview">&nbsp;</span>
5
+ </span>
6
+ <span class='actions'>
7
+ <%= link_to refinery_icon_tag("application_edit.png"), edit_admin_member_path(member),
8
+ :title => t('.edit') %>
9
+ <%= link_to refinery_icon_tag("delete.png"), admin_member_path(member),
10
+ :class => "cancel confirm-delete",
11
+ :title => t('.delete'),
12
+ :confirm => t('message', :scope => 'shared.admin.delete', :title => member.first_name),
13
+ :method => :delete %>
14
+ </span>
15
+ </li>
@@ -0,0 +1,2 @@
1
+ <%= will_paginate @members %>
2
+ <%= render :partial => "sortable_list" %>
@@ -0,0 +1,18 @@
1
+ <% if searching? %>
2
+ <h2><%= t('results_for', :scope => 'shared.admin.search', :query => params[:search]) %></h2>
3
+ <% end %>
4
+ <% if @members.any? %>
5
+ <div class='pagination_container'>
6
+ <%= render :partial => 'members' %>
7
+ </div>
8
+ <% else %>
9
+ <p>
10
+ <% unless searching? %>
11
+ <strong>
12
+ <%= t('.no_items_yet') %>
13
+ </strong>
14
+ <% else %>
15
+ <%= t('no_results', :scope => 'shared.admin.search') %>
16
+ <% end %>
17
+ </p>
18
+ <% end %>
@@ -0,0 +1,7 @@
1
+ <ul id='sortable_list'>
2
+ <%= render :partial => 'member', :collection => @members %>
3
+ </ul>
4
+ <%= render :partial => "/shared/admin/sortable_list",
5
+ :locals => {
6
+ :continue_reordering => (local_assigns.keys.include?(:continue_reordering)) ? continue_reordering : true
7
+ } %>
@@ -0,0 +1 @@
1
+ <%= render :partial => "form" %>
@@ -0,0 +1,10 @@
1
+ <section id='records'>
2
+ <%= render :partial => 'records' %>
3
+ </section>
4
+ <aside id='actions'>
5
+ <%= render :partial => 'actions' %>
6
+ </aside>
7
+ <%= render :partial => '/shared/admin/make_sortable',
8
+ :locals => {
9
+ :tree => false
10
+ } if !searching? and Admin::MembersController.sortable? and Member.count > 1 %>
@@ -0,0 +1 @@
1
+ <%= render :partial => "form" %>
@@ -0,0 +1,11 @@
1
+ <% content_for :body_content_left do %>
2
+ <ul id="members">
3
+ <% @members.each do |member| %>
4
+ <li>
5
+ <%= link_to member.first_name, member_path(member) %>
6
+ </li>
7
+ <% end %>
8
+ </ul>
9
+ <% end %>
10
+
11
+ <%= render :partial => "/shared/content_page" %>
@@ -0,0 +1,45 @@
1
+ <% content_for :body_content_title do %>
2
+ <%= @member.first_name %>
3
+ <% end %>
4
+
5
+ <% content_for :body_content_left do %>
6
+ <section>
7
+ <h1>First Name</h1>
8
+ <p>
9
+ <%=raw @member.first_name %>
10
+ </p>
11
+ </section>
12
+ <section>
13
+ <h1>Last Name</h1>
14
+ <p>
15
+ <%=raw @member.last_name %>
16
+ </p>
17
+ </section>
18
+ <section>
19
+ <h1>Email</h1>
20
+ <p>
21
+ <%=raw @member.email %>
22
+ </p>
23
+ </section>
24
+ <section>
25
+ <h1>Unique Identifier</h1>
26
+ <p>
27
+ <%=raw @member.unique_identifier %>
28
+ </p>
29
+ </section>
30
+ <% end %>
31
+
32
+ <% content_for :body_content_right do %>
33
+ <aside>
34
+ <h2><%= t('.other') %></h2>
35
+ <ul id="members">
36
+ <% @members.each do |member| %>
37
+ <li>
38
+ <%= link_to member.first_name, member_path(member) %>
39
+ </li>
40
+ <% end %>
41
+ </ul>
42
+ </aside>
43
+ <% end %>
44
+
45
+ <%= render :partial => "/shared/content_page" %>
@@ -0,0 +1,25 @@
1
+ en:
2
+ shared:
3
+ admin:
4
+ image_picker:
5
+ image: image
6
+ plugins:
7
+ members:
8
+ title: Members
9
+ admin:
10
+ members:
11
+ actions:
12
+ create_new: Add New Member
13
+ reorder: Reorder Members
14
+ reorder_done: Done Reordering Members
15
+ records:
16
+ title: Members
17
+ sorry_no_results: Sorry! There are no results found.
18
+ no_items_yet: There are no Members yet. Click "Add New Member" to add your first member.
19
+ member:
20
+ view_live_html: View this member live <br/><em>(opens in a new window)</em>
21
+ edit: Edit this member
22
+ delete: Remove this member forever
23
+ members:
24
+ show:
25
+ other: Other Members
@@ -0,0 +1,25 @@
1
+ fr:
2
+ shared:
3
+ admin:
4
+ image_picker:
5
+ image: image
6
+ plugins:
7
+ members:
8
+ title: Members
9
+ admin:
10
+ members:
11
+ actions:
12
+ create_new: Créer un(e) nouve(au/l/lle) Member
13
+ reorder: Réordonner les Members
14
+ reorder_done: Fin de réordonnancement des Members
15
+ records:
16
+ title: Members
17
+ sorry_no_results: "Désolé ! Aucun résultat."
18
+ no_items_yet: 'Il n''y a actuellement aucun(e) Member. Cliquer sur "Créer un(e) nouve(au/l/lle) Member" pour créer votre premi(er/ère) member.'
19
+ member:
20
+ view_live_html: Voir ce(t/tte) member <br/><em>(Ouvre une nouvelle fenêtre)</em>
21
+ edit: Modifier ce(t/tte) member
22
+ delete: Supprimer définitivement ce(t/tte) member
23
+ members:
24
+ show:
25
+ other: Autres Members
@@ -0,0 +1,25 @@
1
+ lolcat:
2
+ shared:
3
+ admin:
4
+ image_picker:
5
+ image: IMAGE
6
+ plugins:
7
+ members:
8
+ title: Members
9
+ admin:
10
+ members:
11
+ actions:
12
+ create_new: CREATE NEW Member
13
+ reorder: REORDR Members
14
+ reorder_done: DUN REORDERIN Members
15
+ records:
16
+ title: Members
17
+ sorry_no_results: SRY! THAR R NO RESULTS FINDZ.
18
+ no_items_yet: THAR R NO Members YET. CLICK "CREATE NEW Member" 2 ADD UR FURST member.
19
+ member:
20
+ view_live_html: VIEW DIS member LIV <BR/><EM>(OPENS IN NEW WINDOW)</EM>
21
+ edit: EDIT DIS member
22
+ delete: REMOOV DIS member FOREVR
23
+ members:
24
+ show:
25
+ other: OTHR Members
@@ -0,0 +1,21 @@
1
+ nb:
2
+ plugins:
3
+ members:
4
+ title: Members
5
+ admin:
6
+ members:
7
+ actions:
8
+ create_new: Lag en ny Member
9
+ reorder: Endre rekkefølgen på Members
10
+ reorder_done: Ferdig å endre rekkefølgen Members
11
+ records:
12
+ title: Members
13
+ sorry_no_results: Beklager! Vi fant ikke noen resultater.
14
+ no_items_yet: Det er ingen Members enda. Klikk på "Lag en ny Member" for å legge til din første member.
15
+ member:
16
+ view_live_html: Vis hvordan denne member ser ut offentlig <br/><em>(åpner i et nytt vindu)</em>
17
+ edit: Rediger denne member
18
+ delete: Fjern denne member permanent
19
+ members:
20
+ show:
21
+ other: Andre Members
@@ -0,0 +1,21 @@
1
+ nl:
2
+ plugins:
3
+ members:
4
+ title: Members
5
+ admin:
6
+ members:
7
+ actions:
8
+ create_new: Maak een nieuwe Member
9
+ reorder: Wijzig de volgorde van de Members
10
+ reorder_done: Klaar met het wijzingen van de volgorde van de Members
11
+ records:
12
+ title: Members
13
+ sorry_no_results: Helaas! Er zijn geen resultaten gevonden.
14
+ no_items_yet: Er zijn nog geen Members. Druk op 'Maak een nieuwe Member' om de eerste aan te maken.
15
+ member:
16
+ view_live_html: Bekijk deze member op de website <br/><em>(opent een nieuw venster)</em>
17
+ edit: Bewerk deze member
18
+ delete: Verwijder deze member voor eeuwig
19
+ members:
20
+ show:
21
+ other: Andere Members
data/config/routes.rb ADDED
@@ -0,0 +1,11 @@
1
+ ::Refinery::Application.routes.draw do
2
+ resources :members, :only => [:index, :show]
3
+
4
+ scope(:path => 'refinery', :as => 'admin', :module => 'admin') do
5
+ resources :members, :except => :show do
6
+ collection do
7
+ post :update_positions
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,6 @@
1
+ class RefinerycmsSimpleMembers < Refinery::Generators::EngineInstaller
2
+
3
+ source_root File.expand_path('../../../', __FILE__)
4
+ engine_name "simple_members"
5
+
6
+ end
@@ -0,0 +1,36 @@
1
+ module MembersFromCSV
2
+ extend self
3
+
4
+ def populate(file)
5
+ require 'csv'
6
+ CSV.new(file).drop(1).each do |last_name, first_name, unique_identifier|
7
+ add_member_from_csv first_name, last_name, unique_identifier
8
+ end
9
+ end
10
+
11
+ private
12
+
13
+ def add_member_from_csv(first_name, last_name, unique_identifier)
14
+ if unique_identifier.nil?
15
+ return if db_already_has_someone_named? first_name, last_name
16
+ unique_identifier = mock_unique_identifier
17
+ warn_that_we_mocked_unique_identifier_for first_name, last_name, unique_identifier
18
+ end
19
+ Member.create :first_name => first_name, :last_name => last_name, :unique_identifier => unique_identifier
20
+ end
21
+
22
+ def warn_that_we_mocked_unique_identifier_for(first_name, last_name, unique_identifier)
23
+ $stderr.puts "#{first_name}, #{last_name} has been assigned the identifier #{unique_identifier} as theirs is missing from the CSV file.\n"
24
+ end
25
+
26
+ def db_already_has_someone_named?(first_name, last_name)
27
+ Member.where(:first_name => first_name, :last_name => last_name).first
28
+ end
29
+
30
+ def mock_unique_identifier
31
+ (1..Float::INFINITY).find do |potential_identifier|
32
+ !Member.find_by_unique_identifier(potential_identifier)
33
+ end
34
+ end
35
+
36
+ end
@@ -0,0 +1,30 @@
1
+ require 'refinerycms-base'
2
+
3
+ module Refinery
4
+ module SimpleMembers
5
+
6
+ class << self
7
+ attr_accessor :root
8
+ def root
9
+ @root ||= Pathname.new(File.expand_path('../../', __FILE__))
10
+ end
11
+ end
12
+
13
+ class Engine < Rails::Engine
14
+ initializer "static assets" do |app|
15
+ app.middleware.insert_after ::ActionDispatch::Static, ::ActionDispatch::Static, "#{root}/public"
16
+ end
17
+
18
+ config.after_initialize do
19
+ Refinery::Plugin.register do |plugin|
20
+ plugin.name = "members"
21
+ plugin.pathname = root
22
+ plugin.activity = {
23
+ :class => Member,
24
+ :title => 'first_name'
25
+ }
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,15 @@
1
+ namespace :refinery do
2
+ namespace :simple_members do
3
+
4
+ desc 'Populate the database from a CSV file where each line is a member of the format "last_name,first_name,unique_id"'
5
+ task :populate_from_csv => :environment do
6
+ require 'member'
7
+ require 'members_from_csv'
8
+ csv_name = ENV['csv']
9
+ unless csv_name && File.exists?(csv_name)
10
+ raise "Invoke like `$ rake refinery:simple_members:populate_from_csv csv=BlueMaxRoster.csv`\nNOTE: should be relative to dir of Rakefile"
11
+ end
12
+ File.open csv_name, &MembersFromCSV.method(:populate)
13
+ end
14
+ end
15
+ end
metadata ADDED
@@ -0,0 +1,68 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: refinerycms-simple_members
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.4
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Josh Cheek
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-09-19 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Ruby on Rails Members engine for Refinery CMS
15
+ email:
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/generators/refinerycms_simple_members_generator.rb
21
+ - lib/members_from_csv.rb
22
+ - lib/refinerycms-simple_members.rb
23
+ - lib/tasks/members.rake
24
+ - config/locales/en.yml
25
+ - config/locales/fr.yml
26
+ - config/locales/lolcat.yml
27
+ - config/locales/nb.yml
28
+ - config/locales/nl.yml
29
+ - config/routes.rb
30
+ - app/controllers/admin/members_controller.rb
31
+ - app/controllers/members_controller.rb
32
+ - app/models/member.rb
33
+ - app/views/admin/members/_actions.html.erb
34
+ - app/views/admin/members/_form.html.erb
35
+ - app/views/admin/members/_member.html.erb
36
+ - app/views/admin/members/_members.html.erb
37
+ - app/views/admin/members/_records.html.erb
38
+ - app/views/admin/members/_sortable_list.html.erb
39
+ - app/views/admin/members/edit.html.erb
40
+ - app/views/admin/members/index.html.erb
41
+ - app/views/admin/members/new.html.erb
42
+ - app/views/members/index.html.erb
43
+ - app/views/members/show.html.erb
44
+ homepage:
45
+ licenses: []
46
+ post_install_message:
47
+ rdoc_options: []
48
+ require_paths:
49
+ - lib
50
+ required_ruby_version: !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ required_rubygems_version: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ requirements: []
63
+ rubyforge_project:
64
+ rubygems_version: 1.8.10
65
+ signing_key:
66
+ specification_version: 3
67
+ summary: Simple list of members that have first/last name, email, and a unique identifier.
68
+ test_files: []