popolo 0.0.2 → 0.0.3
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.
- checksums.yaml +7 -0
- data/README.md +65 -7
- data/app/assets/javascripts/popolo.js +1 -0
- data/app/assets/stylesheets/popolo/bootstrap.min.scss +7 -0
- data/app/assets/stylesheets/popolo/main.css.scss +14 -0
- data/app/assets/stylesheets/popolo.css +3 -0
- data/app/controllers/popolo/memberships_controller.rb +7 -0
- data/app/controllers/popolo/organizations_controller.rb +0 -39
- data/app/controllers/popolo/people_controller.rb +1 -6
- data/app/controllers/popolo/posts_controller.rb +1 -1
- data/app/helpers/popolo_helper.rb +0 -8
- data/app/models/popolo/area.rb +20 -12
- data/app/models/popolo/contact_detail.rb +22 -0
- data/app/models/popolo/count.rb +24 -0
- data/app/models/popolo/date_string.rb +23 -0
- data/app/models/popolo/group_result.rb +15 -0
- data/app/models/popolo/identifier.rb +1 -1
- data/app/models/popolo/link.rb +7 -3
- data/app/models/popolo/membership.rb +34 -9
- data/app/models/popolo/motion.rb +37 -0
- data/app/models/popolo/organization.rb +37 -16
- data/app/models/popolo/other_name.rb +5 -5
- data/app/models/popolo/person.rb +57 -27
- data/app/models/popolo/post.rb +27 -13
- data/app/models/popolo/vote.rb +28 -0
- data/app/models/popolo/vote_event.rb +35 -0
- data/app/views/popolo/contact_details/_contact_detail.html.erb +17 -0
- data/app/views/popolo/identifiers/_identifier.html.erb +2 -0
- data/app/views/popolo/links/_link.html.erb +1 -0
- data/app/views/popolo/memberships/show.html.erb +81 -0
- data/app/views/popolo/organizations/index.html.erb +16 -1
- data/app/views/popolo/organizations/show.html.erb +146 -1
- data/app/views/popolo/other_names/other_name.html.erb +9 -0
- data/app/views/popolo/people/show.html.erb +120 -0
- data/app/views/popolo/posts/show.html.erb +90 -0
- data/config/routes.rb +4 -12
- data/lib/generators/popolo_generator.rb +4 -0
- data/lib/popolo/initializers/pupa_compat.rb +11 -0
- data/lib/popolo/version.rb +1 -1
- data/lib/popolo.rb +17 -5
- data/spec/controllers/popolo/memberships_controller_spec.rb +16 -0
- data/spec/controllers/popolo/organizations_controller_spec.rb +1 -47
- data/spec/controllers/popolo/people_controller_spec.rb +0 -14
- data/spec/controllers/popolo/posts_controller_spec.rb +0 -8
- data/spec/dummy/app/assets/stylesheets/application.css +1 -0
- data/spec/dummy/app/models/cat.rb +0 -3
- data/spec/dummy/app/models/dog.rb +0 -7
- data/spec/dummy/app/views/layouts/application.html.erb +2 -0
- data/spec/dummy/config/locales/en.yml +30 -0
- data/spec/dummy/config/routes.rb +1 -1
- data/spec/dummy/log/test.log +8670 -48801
- data/spec/factories.rb +3 -8
- data/spec/models/popolo/{source_spec.rb → contact_detail_spec.rb} +2 -2
- data/spec/models/popolo/count_spec.rb +7 -0
- data/spec/models/popolo/date_string_spec.rb +121 -0
- data/spec/models/popolo/group_result_spec.rb +7 -0
- data/spec/models/popolo/membership_spec.rb +1 -17
- data/spec/models/popolo/motion_spec.rb +5 -0
- data/spec/models/popolo/organization_spec.rb +1 -19
- data/spec/models/popolo/other_name_spec.rb +1 -17
- data/spec/models/popolo/person_spec.rb +23 -19
- data/spec/models/popolo/post_spec.rb +1 -3
- data/spec/models/popolo/vote_event_spec.rb +4 -0
- data/spec/models/popolo/vote_spec.rb +4 -0
- data/spec/popolo_spec.rb +65 -0
- data/spec/routing/popolo/memberships_routing_spec.rb +11 -0
- data/spec/routing/popolo/organizations_routing_spec.rb +1 -19
- data/spec/routing/popolo/people_routing_spec.rb +1 -11
- data/spec/routing/popolo/posts_routing_spec.rb +1 -7
- data/spec/spec_helper.rb +6 -1
- data/spec/support/shared_examples.rb +19 -0
- metadata +99 -109
- data/app/assets/javascripts/popolo/application.js +0 -13
- data/app/assets/stylesheets/popolo/application.css +0 -13
- data/app/controllers/popolo/areas_controller.rb +0 -43
- data/app/models/popolo/address.rb +0 -27
- data/app/models/popolo/event.rb +0 -46
- data/app/models/popolo/source.rb +0 -29
- data/app/views/popolo/addresses/_address.html.erb +0 -16
- data/app/views/popolo/areas/index.html.erb +0 -1
- data/app/views/popolo/areas/show.html.erb +0 -1
- data/app/views/popolo/areas_or_organizations/_breadcrumb.html.erb +0 -13
- data/app/views/popolo/areas_or_organizations/_index.html.erb +0 -31
- data/app/views/popolo/areas_or_organizations/_show.html.erb +0 -18
- data/app/views/popolo/organizations/post.html.erb +0 -27
- data/app/views/popolo/organizations/posts.html.erb +0 -23
- data/app/views/popolo/people/index.html.erb +0 -0
- data/app/views/popolo/posts/index.html.erb +0 -0
- data/lib/popolo/mixins/eventable.rb +0 -15
- data/lib/popolo/mixins/sluggable.rb +0 -66
- data/spec/controllers/popolo/areas_controller_spec.rb +0 -53
- data/spec/dummy/log/development.log +0 -6
- data/spec/models/popolo/address_spec.rb +0 -4
- data/spec/models/popolo/event_spec.rb +0 -7
- data/spec/popolo/mixins/sluggable_spec.rb +0 -153
- data/spec/routing/popolo/areas_routing_spec.rb +0 -25
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
<section>
|
|
2
|
-
<% if address.type? %>
|
|
3
|
-
<header>
|
|
4
|
-
<%=t address.type, default: address.type %>
|
|
5
|
-
</header>
|
|
6
|
-
<% end %>
|
|
7
|
-
<% if address.voice? %>
|
|
8
|
-
<p>Phone: <%= address.voice %></p>
|
|
9
|
-
<% end %>
|
|
10
|
-
<% if address.fax? %>
|
|
11
|
-
<p>Fax: <%= address.fax %></p>
|
|
12
|
-
<% end %>
|
|
13
|
-
<% if address.address? %>
|
|
14
|
-
<%= simple_format address.address %>
|
|
15
|
-
<% end %>
|
|
16
|
-
</section>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<%= render partial: 'popolo/areas_or_organizations/index', locals: {collection: @areas, object: @area} %>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<%= render partial: 'popolo/areas_or_organizations/show', locals: {object: @area} %>
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
<nav>
|
|
2
|
-
<ul class="breadcrumb">
|
|
3
|
-
<li><%= link_to resource_collection_name.capitalize, collection_path %> <span class="divider">/</span></li>
|
|
4
|
-
<% ancestors = object.ancestors %>
|
|
5
|
-
<% ancestors.each_with_index do |ancestor,index| %>
|
|
6
|
-
<li>
|
|
7
|
-
<%= link_to ancestor.name, nested_resource_path(ancestors[0..index]) %>
|
|
8
|
-
<span class="divider">/</span>
|
|
9
|
-
</li>
|
|
10
|
-
<% end %>
|
|
11
|
-
<li class="active"><%= object.name %></li>
|
|
12
|
-
</ul>
|
|
13
|
-
</nav>
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
<% if object %>
|
|
2
|
-
<nav>
|
|
3
|
-
<ul class="breadcrumb">
|
|
4
|
-
<li><%= link_to resource_collection_name.capitalize, collection_path %> <span class="divider">/</span></li>
|
|
5
|
-
<% ancestors = object.ancestors %>
|
|
6
|
-
<% ancestors.each_with_index do |ancestor,index| %>
|
|
7
|
-
<li>
|
|
8
|
-
<%= link_to ancestor.name, nested_resources_path(ancestors[0..index]) %>
|
|
9
|
-
<span class="divider">/</span>
|
|
10
|
-
</li>
|
|
11
|
-
<% end %>
|
|
12
|
-
<li class="active"><%= object.name %></li>
|
|
13
|
-
</ul>
|
|
14
|
-
</nav>
|
|
15
|
-
<% end %>
|
|
16
|
-
|
|
17
|
-
<% unless collection.empty? %>
|
|
18
|
-
<% groups = collection.asc(:sort_name).group_by(&:classification) %>
|
|
19
|
-
<% groups.each do |classification,documents| %>
|
|
20
|
-
<section>
|
|
21
|
-
<header>
|
|
22
|
-
<h1><%= t(classification, scope: [:popolo, resource_collection_name, :classifications]) %></h1>
|
|
23
|
-
</header>
|
|
24
|
-
<ol>
|
|
25
|
-
<% documents.each do |document| %>
|
|
26
|
-
<li><%= link_to document.name, nested_resources_path([object, document].compact) %></li>
|
|
27
|
-
<% end %>
|
|
28
|
-
</ol>
|
|
29
|
-
</section>
|
|
30
|
-
<% end %>
|
|
31
|
-
<% end %>
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
<%= render partial: 'popolo/areas_or_organizations/breadcrumb', locals: {object: object} %>
|
|
2
|
-
|
|
3
|
-
<% collection = object.children %>
|
|
4
|
-
<% unless collection.empty? %>
|
|
5
|
-
<% groups = collection.asc(:sort_name).group_by(&:classification) %>
|
|
6
|
-
<% groups.each do |classification,documents| %>
|
|
7
|
-
<section>
|
|
8
|
-
<header>
|
|
9
|
-
<h1><%= t(classification, scope: [:popolo, resource_collection_name, :classifications]) %></h1>
|
|
10
|
-
</header>
|
|
11
|
-
<ol>
|
|
12
|
-
<% documents.each do |document| %>
|
|
13
|
-
<li><%= link_to document.name, nested_resource_path([object, document]) %></li>
|
|
14
|
-
<% end %>
|
|
15
|
-
</ol>
|
|
16
|
-
</section>
|
|
17
|
-
<% end %>
|
|
18
|
-
<% end %>
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
<%= render partial: 'popolo/areas_or_organizations/breadcrumb', locals: {object: @organization} %>
|
|
2
|
-
|
|
3
|
-
<section>
|
|
4
|
-
<div class="media">
|
|
5
|
-
<% if @post.person && @post.person.image? %>
|
|
6
|
-
<span class="pull-left">
|
|
7
|
-
<%= image_tag(@post.person.image, class: 'media-object') %>
|
|
8
|
-
</span>
|
|
9
|
-
<% end %>
|
|
10
|
-
<div class="media-body">
|
|
11
|
-
<h4 class="media-heading"><%= @post.name %></h4>
|
|
12
|
-
<% if @post.person %>
|
|
13
|
-
<%= @post.person.name %>
|
|
14
|
-
<% end %>
|
|
15
|
-
</div>
|
|
16
|
-
</div>
|
|
17
|
-
<% if @post.person && @post.person.summary? %>
|
|
18
|
-
<p><%= @post.person.summary %></p>
|
|
19
|
-
<% end %>
|
|
20
|
-
|
|
21
|
-
<aside>
|
|
22
|
-
<% if @post.person && @post.person.email? %>
|
|
23
|
-
<p>Email: <%= mail_to @post.person.email %></p>
|
|
24
|
-
<% end %>
|
|
25
|
-
<%= render @post.addresses %>
|
|
26
|
-
</aside>
|
|
27
|
-
</section>
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
<%= render partial: 'popolo/areas_or_organizations/breadcrumb', locals: {object: @organization} %>
|
|
2
|
-
|
|
3
|
-
<section>
|
|
4
|
-
<h1><%= @organization.name %></h1>
|
|
5
|
-
|
|
6
|
-
<ol class="media-list">
|
|
7
|
-
<% @posts.asc(:sort_name).each do |post| %>
|
|
8
|
-
<li class="media">
|
|
9
|
-
<% if post.person && post.person.image? %>
|
|
10
|
-
<span class="pull-left">
|
|
11
|
-
<%= image_tag(post.person.image, class: 'image-object') %>
|
|
12
|
-
</span>
|
|
13
|
-
<% end %>
|
|
14
|
-
<div class="media-body">
|
|
15
|
-
<h4 class="media-heading"><%= link_to post.name, nested_organization_post_path(@organization.ancestors_and_self, post) %></h4>
|
|
16
|
-
<% if post.person %>
|
|
17
|
-
<%= post.person.name %>
|
|
18
|
-
<% end %>
|
|
19
|
-
</div>
|
|
20
|
-
</li>
|
|
21
|
-
<% end %>
|
|
22
|
-
</ol>
|
|
23
|
-
</section>
|
|
File without changes
|
|
File without changes
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
module Popolo
|
|
2
|
-
module Eventable
|
|
3
|
-
extend ActiveSupport::Concern
|
|
4
|
-
|
|
5
|
-
included do
|
|
6
|
-
embeds_many :sources, as: :sourceable, class_name: 'Popolo::Source'
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
# @note It's not possible to do a many-to-many polymorphic relation, so
|
|
10
|
-
# we must create the relation manually.
|
|
11
|
-
def events
|
|
12
|
-
Event.where("related.#{self.class.name.demodulize.underscore}" => id)
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
end
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
module Popolo
|
|
2
|
-
module Sluggable
|
|
3
|
-
extend ActiveSupport::Concern
|
|
4
|
-
|
|
5
|
-
included do
|
|
6
|
-
# The field used as the basis of the slug, usually the resource's name.
|
|
7
|
-
field slug_source, type: String
|
|
8
|
-
# A lowercase identifier composed of letters, numbers and dashes.
|
|
9
|
-
field :slug, type: String
|
|
10
|
-
# The field used to sort the document.
|
|
11
|
-
field :sort_name, type: String
|
|
12
|
-
|
|
13
|
-
index sort_name: 1
|
|
14
|
-
|
|
15
|
-
validates_presence_of slug_source, :slug, :sort_name
|
|
16
|
-
|
|
17
|
-
before_validation :set_slug_and_sort_name
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
module ClassMethods
|
|
21
|
-
# Finds a resource by its slug or ID.
|
|
22
|
-
#
|
|
23
|
-
# @param [String] slug a slug or ID
|
|
24
|
-
# @return a matching resource
|
|
25
|
-
def find_by_slug_or_id(slug)
|
|
26
|
-
where(slug: slug.to_s.parameterize).first || find(slug)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
# Finds a resource by its slug or raises an error.
|
|
30
|
-
#
|
|
31
|
-
# @param [String] slug a slug
|
|
32
|
-
# @param [Hash] opts conditions
|
|
33
|
-
# @return a matching resource
|
|
34
|
-
# @raises [Mongoid::Errors::DocumentNotFound] if not found
|
|
35
|
-
def find_by_slug(slug, opts = {})
|
|
36
|
-
find_by(opts.merge(slug: slug.parameterize))
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
# @private
|
|
40
|
-
def slug_source
|
|
41
|
-
if defined?(super)
|
|
42
|
-
super
|
|
43
|
-
else
|
|
44
|
-
:name
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def to_param
|
|
50
|
-
slug
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
private
|
|
54
|
-
|
|
55
|
-
# @return [String] the value of the field used as the basis of the slug
|
|
56
|
-
def slug_source
|
|
57
|
-
send(self.class.slug_source)
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
# @note Leave it to the content manager to choose a slug in case of conflicts.
|
|
61
|
-
def set_slug_and_sort_name
|
|
62
|
-
self.slug ||= slug_source.parameterize if slug_source
|
|
63
|
-
self.sort_name ||= slug_source
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
end
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
# coding: utf-8
|
|
2
|
-
require 'spec_helper'
|
|
3
|
-
|
|
4
|
-
describe Popolo::AreasController do
|
|
5
|
-
before :each do
|
|
6
|
-
@routes = Popolo::Engine.routes
|
|
7
|
-
@area = FactoryGirl.create :area, name: 'Canada'
|
|
8
|
-
@ontario = @area.children.create name: 'Ontario'
|
|
9
|
-
@quebec = @area.children.create name: 'Québec'
|
|
10
|
-
@montreal = @quebec.children.create name: 'Montréal'
|
|
11
|
-
@villemarie = @montreal.children.create name: 'Ville-Marie'
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
describe 'GET index' do
|
|
15
|
-
it 'assigns all areas as @areas' do
|
|
16
|
-
get :index
|
|
17
|
-
assigns(:areas).to_a.should == [@area]
|
|
18
|
-
response.should be_success
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
describe 'GET show' do
|
|
23
|
-
it 'assigns the requested area as @area' do
|
|
24
|
-
get :show, id: @area.id.to_s
|
|
25
|
-
assigns(:area).should == @area
|
|
26
|
-
response.should be_success
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
describe 'GET nested_index' do
|
|
31
|
-
it 'succeeds if properly nested' do
|
|
32
|
-
get :nested_index, path: 'canada/quebec/montreal'
|
|
33
|
-
assigns(:areas).to_a.should == [@villemarie]
|
|
34
|
-
response.should be_success
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
it 'fails if improperly nested' do
|
|
38
|
-
expect {get :nested_index, path: 'canada/ontario/montreal'}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
describe 'GET nested_show' do
|
|
43
|
-
it 'succeeds if properly nested' do
|
|
44
|
-
get :nested_show, path: 'canada/quebec/montreal'
|
|
45
|
-
assigns(:area).should == @montreal
|
|
46
|
-
response.should be_success
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
it 'fails if improperly nested' do
|
|
50
|
-
expect {get :nested_show, path: 'canada/ontario/montreal'}.to raise_error(Mongoid::Errors::DocumentNotFound)
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
MOPED: 127.0.0.1:27017 COMMAND database=admin command={:ismaster=>1} (1.4269ms)
|
|
2
|
-
MOPED: 127.0.0.1:27017 INSERT database=popolo_development collection=popolo_people documents=[{"_id"=>"50f305f223e2f6045a000001", "name"=>{"en"=>"John Doe"}, "slug"=>"john-doe", "updated_at"=>2013-01-13 19:07:30 UTC, "created_at"=>2013-01-13 19:07:30 UTC}] flags=[] (0.2322ms)
|
|
3
|
-
MOPED: 127.0.0.1:27017 COMMAND database=admin command={:ismaster=>1} (1.0641ms)
|
|
4
|
-
MOPED: 127.0.0.1:27017 QUERY database=popolo_development collection=popolo_people selector={"$query"=>{"deleted_at"=>nil}, "$orderby"=>{:_id=>1}} flags=[] limit=-1 skip=0 fields=nil (0.7071ms)
|
|
5
|
-
MOPED: 127.0.0.1:27017 COMMAND database=admin command={:ismaster=>1} (0.6180ms)
|
|
6
|
-
MOPED: 127.0.0.1:27017 QUERY database=popolo_development collection=popolo_people selector={"$query"=>{"deleted_at"=>nil}, "$orderby"=>{:_id=>1}} flags=[] limit=-1 skip=0 fields=nil (0.7722ms)
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Popolo::Sluggable do
|
|
4
|
-
describe '.included' do
|
|
5
|
-
describe '#new' do
|
|
6
|
-
subject {Cat.new}
|
|
7
|
-
|
|
8
|
-
[:name, :slug, :sort_name].each do |attribute|
|
|
9
|
-
it {should validate_presence_of attribute}
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
context 'with a custom slug source' do
|
|
13
|
-
subject {Dog.new}
|
|
14
|
-
|
|
15
|
-
[:moniker, :slug, :sort_name].each do |attribute|
|
|
16
|
-
it {should validate_presence_of attribute}
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
it {should_not validate_presence_of :name}
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
describe '#slug_source' do
|
|
24
|
-
it 'should default to :name' do
|
|
25
|
-
Cat.slug_source.should == :name
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
context 'with a custom slug source' do
|
|
29
|
-
it 'should use the custom slug source' do
|
|
30
|
-
Dog.slug_source.should == :moniker
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
describe '#create' do
|
|
36
|
-
it 'should set the slug' do
|
|
37
|
-
Cat.create(name: 'Foo').slug.should == 'foo'
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
it 'should not set the slug if it is already set' do
|
|
41
|
-
Cat.create(name: 'Foo', slug: 'bar').slug.should == 'bar'
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
it 'should not attempt to set the slug if the slug source is empty' do
|
|
45
|
-
expect {Cat.create!}.to raise_error(Mongoid::Errors::Validations)
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
it 'should prevent duplicate slugs' do
|
|
49
|
-
Cat.create name: 'Foo', slug: 'foo'
|
|
50
|
-
expect {Cat.with(safe: true).create(name: 'Bar', slug: 'foo')}.to raise_error(Moped::Errors::OperationFailure)
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
it 'should set the sort name' do
|
|
54
|
-
Cat.create(name: 'Foo').sort_name.should == 'Foo'
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
it 'should not set the sort name if it is already set' do
|
|
58
|
-
Cat.create(name: 'Foo', sort_name: 'Bar').sort_name.should == 'Bar'
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
context 'with a custom slug source' do
|
|
62
|
-
it 'should set the slug' do
|
|
63
|
-
Dog.create(moniker: 'Foo').slug.should == 'foo'
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
it 'should not set the slug if it is already set' do
|
|
67
|
-
Dog.create(moniker: 'Foo', slug: 'bar').slug.should == 'bar'
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
it 'should not attempt to set the slug if the slug source is empty' do
|
|
71
|
-
expect {Dog.create!}.to raise_error(Mongoid::Errors::Validations)
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
it 'should prevent duplicate slugs' do
|
|
75
|
-
Dog.create moniker: 'Foo', slug: 'foo'
|
|
76
|
-
expect {Dog.with(safe: true).create(moniker: 'Bar', slug: 'foo')}.to raise_error(Moped::Errors::OperationFailure)
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
it 'should set the sort name' do
|
|
80
|
-
Dog.create(moniker: 'Foo').sort_name.should == 'Foo'
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
it 'should not set the sort name if it is already set' do
|
|
84
|
-
Dog.create(moniker: 'Foo', sort_name: 'Bar').sort_name.should == 'Bar'
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
describe '#find_by_slug' do
|
|
90
|
-
let :resource do
|
|
91
|
-
Cat.create(name: 'Foo')
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
it 'should find a resource by its slug' do
|
|
95
|
-
Cat.find_by_slug(resource.slug).should == resource
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
it 'should find a resource by its slug source' do
|
|
99
|
-
Cat.find_by_slug(resource.name).should == resource
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
context 'with a custom slug source' do
|
|
103
|
-
let :resource do
|
|
104
|
-
Dog.create(moniker: 'Foo')
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
it 'should find a resource by its slug' do
|
|
108
|
-
Dog.find_by_slug(resource.slug).should == resource
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
it 'should find a resource by its slug source' do
|
|
112
|
-
Dog.find_by_slug(resource.moniker).should == resource
|
|
113
|
-
end
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
describe '#find_by_slug_or_id' do
|
|
118
|
-
let :resource do
|
|
119
|
-
Cat.create(name: 'Foo')
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
it 'should find a resource by its slug' do
|
|
123
|
-
Cat.find_by_slug_or_id(resource.slug).should == resource
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
it 'should find a resource by its slug source' do
|
|
127
|
-
Cat.find_by_slug(resource.name).should == resource
|
|
128
|
-
end
|
|
129
|
-
|
|
130
|
-
it 'should find a resource by its ID' do
|
|
131
|
-
Cat.find_by_slug_or_id(resource.id).should == resource
|
|
132
|
-
end
|
|
133
|
-
|
|
134
|
-
context 'with a custom slug source' do
|
|
135
|
-
let :resource do
|
|
136
|
-
Dog.create(moniker: 'Foo')
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
it 'should find a resource by its slug' do
|
|
140
|
-
Dog.find_by_slug_or_id(resource.slug).should == resource
|
|
141
|
-
end
|
|
142
|
-
|
|
143
|
-
it 'should find a resource by its slug' do
|
|
144
|
-
Dog.find_by_slug_or_id(resource.moniker).should == resource
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
it 'should find a resource by its ID' do
|
|
148
|
-
Dog.find_by_slug_or_id(resource.id).should == resource
|
|
149
|
-
end
|
|
150
|
-
end
|
|
151
|
-
end
|
|
152
|
-
end
|
|
153
|
-
end
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
|
|
3
|
-
describe Popolo::AreasController do
|
|
4
|
-
describe 'routing' do
|
|
5
|
-
before :each do
|
|
6
|
-
@routes = Popolo::Engine.routes
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
it 'routes to #index' do
|
|
10
|
-
get('/areas').should route_to('popolo/areas#index')
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
it 'routes to #show' do
|
|
14
|
-
get('/areas/1').should route_to('popolo/areas#show', id: '1')
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it 'routes to #nested_index' do
|
|
18
|
-
get('/areas/foo/areas').should route_to('popolo/areas#nested_index', path: 'foo')
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
it 'routes to #nested_show' do
|
|
22
|
-
get('/areas/foo/bar').should route_to('popolo/areas#nested_show', path: 'foo/bar')
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
end
|