puffer 0.1.0 → 0.1.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 (108) hide show
  1. data/.gitignore +3 -0
  2. data/.travis.yml +6 -0
  3. data/CHANGELOG.md +14 -0
  4. data/Gemfile.lock +98 -80
  5. data/README.md +6 -0
  6. data/Rakefile +1 -1
  7. data/app/assets/javascripts/puffer/puffer.js +15 -3
  8. data/app/assets/javascripts/puffer/right-sortable-src.js +28 -306
  9. data/app/assets/stylesheets/puffer/application.css +2 -0
  10. data/app/assets/stylesheets/puffer/file_input.css +59 -0
  11. data/app/assets/stylesheets/puffer/puffer.css +1 -0
  12. data/app/assets/stylesheets/puffer/puffer_grid.css +23 -0
  13. data/app/components/boolean/filter.html.erb +9 -0
  14. data/app/components/boolean_component.rb +4 -0
  15. data/app/components/carrierwave/form.html.erb +34 -0
  16. data/app/components/carrierwave/index.html.erb +6 -0
  17. data/app/components/carrierwave_component.rb +16 -0
  18. data/app/components/references_one/form.html.erb +2 -3
  19. data/app/controllers/admin/dashboard_controller.rb +0 -1
  20. data/app/controllers/admin/puffer_users_controller.rb +3 -7
  21. data/app/controllers/admin/sessions_controller.rb +1 -1
  22. data/app/models/puffer_user.rb +3 -18
  23. data/app/views/layouts/puffer.html.erb +2 -0
  24. data/app/views/puffer/base/_edit.html.erb +1 -1
  25. data/app/views/puffer/base/new.html.erb +1 -1
  26. data/app/views/puffer/grid_base/_grid.html.erb +9 -0
  27. data/app/views/puffer/grid_base/_index.html.erb +26 -0
  28. data/config/routes.rb +1 -1
  29. data/gemfiles/Gemfile-rails-3.1 +5 -0
  30. data/gemfiles/Gemfile-rails-3.1.lock +201 -0
  31. data/gemfiles/Gemfile-rails-3.2 +5 -0
  32. data/gemfiles/Gemfile-rails-3.2.lock +199 -0
  33. data/lib/puffer.rb +38 -12
  34. data/{app/controllers/puffer → lib/puffer/backends/controllers}/base.rb +1 -2
  35. data/{app/controllers/puffer → lib/puffer/backends/controllers}/dashboard_base.rb +0 -1
  36. data/lib/puffer/backends/controllers/grid_base.rb +12 -0
  37. data/{app/controllers/puffer → lib/puffer/backends/controllers}/puffer_users_base.rb +0 -0
  38. data/{app/controllers/puffer → lib/puffer/backends/controllers}/sessions/base.rb +0 -1
  39. data/{app/controllers/puffer → lib/puffer/backends/controllers}/sessions/clearance.rb +13 -5
  40. data/{app/controllers/puffer → lib/puffer/backends/controllers}/sessions/devise.rb +1 -1
  41. data/{app/controllers/puffer → lib/puffer/backends/controllers}/sessions/simple.rb +1 -1
  42. data/{app/controllers/puffer → lib/puffer/backends/controllers}/tree_base.rb +0 -1
  43. data/lib/puffer/backends/models/user/active_record.rb +9 -0
  44. data/lib/puffer/backends/models/user/base.rb +30 -0
  45. data/lib/puffer/backends/models/user/mongoid.rb +15 -0
  46. data/lib/puffer/component.rb +2 -2
  47. data/lib/puffer/controller/auth.rb +48 -47
  48. data/lib/puffer/controller/config.rb +4 -6
  49. data/lib/puffer/controller/dsl.rb +2 -4
  50. data/lib/puffer/controller/mutate.rb +23 -26
  51. data/lib/puffer/extensions/directive_processor.rb +11 -16
  52. data/lib/puffer/extensions/engine.rb +7 -9
  53. data/lib/puffer/extensions/{mapper.rb → mapper31.rb} +10 -12
  54. data/lib/puffer/extensions/mapper32.rb +108 -0
  55. data/lib/puffer/filters.rb +15 -3
  56. data/lib/puffer/orm_adapter/active_record.rb +15 -2
  57. data/lib/puffer/orm_adapter/base.rb +4 -0
  58. data/lib/puffer/orm_adapter/mongoid.rb +15 -2
  59. data/lib/puffer/resource.rb +1 -1
  60. data/lib/puffer/version.rb +1 -1
  61. data/puffer.gemspec +10 -4
  62. data/spec/{app/components → components}/base_component_spec.rb +0 -0
  63. data/spec/{app/components → components}/boolean_component_spec.rb +0 -0
  64. data/spec/{app/components → components}/date_time_component_spec.rb +0 -0
  65. data/spec/{app/components → components}/file_component_spec.rb +0 -0
  66. data/spec/{app/components → components}/hidden_component_spec.rb +0 -0
  67. data/spec/{app/components → components}/password_component_spec.rb +0 -0
  68. data/spec/{app/components → components}/references_many_component_spec.rb +0 -0
  69. data/spec/{app/components → components}/references_one_component_spec.rb +0 -0
  70. data/spec/{app/components → components}/select_component_spec.rb +0 -0
  71. data/spec/{app/components → components}/string_component_spec.rb +0 -0
  72. data/spec/{app/components → components}/text_component_spec.rb +0 -0
  73. data/spec/controllers/sessions/base_shared.rb +66 -0
  74. data/spec/controllers/sessions/clearance_spec.rb +21 -0
  75. data/spec/controllers/sessions/simple_spec.rb +14 -0
  76. data/spec/dummy/app/controllers/admin/news_controller.rb +1 -1
  77. data/spec/dummy/app/controllers/admin/profiles_controller.rb +3 -1
  78. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  79. data/spec/dummy/app/controllers/orms/mongoid_orm_primals_controller.rb +16 -0
  80. data/spec/dummy/app/helpers/news_helper.rb +1 -1
  81. data/spec/dummy/app/models/clearance_user.rb +3 -0
  82. data/spec/dummy/app/models/mongoid_orm/embeds_many_reference.rb +9 -0
  83. data/spec/dummy/app/models/mongoid_orm/embeds_one_reference.rb +9 -0
  84. data/spec/dummy/app/models/mongoid_orm/has_many_reference.rb +9 -0
  85. data/spec/dummy/app/models/mongoid_orm/has_one_reference.rb +9 -0
  86. data/spec/dummy/app/models/mongoid_orm/primal.rb +8 -0
  87. data/spec/dummy/app/models/profile.rb +2 -0
  88. data/spec/dummy/app/uploaders/avatar_uploader.rb +8 -0
  89. data/spec/dummy/config/application.rb +5 -3
  90. data/spec/dummy/config/initializers/clearance.rb +3 -0
  91. data/spec/dummy/config/initializers/devise.rb +34 -22
  92. data/spec/dummy/config/locales/devise.en.yml +6 -7
  93. data/spec/dummy/config/routes.rb +0 -1
  94. data/spec/dummy/db/migrate/{20100930133425_create_admin_profiles.rb → 20100930133425_create_profiles.rb} +2 -1
  95. data/spec/dummy/db/migrate/20111208222355_create_clearance_users.rb +13 -0
  96. data/spec/dummy/db/migrate/20120129091339_upgrade_clearance_to_diesel.rb +19 -0
  97. data/spec/dummy/db/schema.rb +12 -1
  98. data/spec/fabricators/clearance_user_fabricator.rb +4 -0
  99. data/spec/fabricators/puffer_user_fabricator.rb +5 -0
  100. data/spec/lib/filters_spec.rb +1 -1
  101. data/spec/lib/orm_adapter/active_record_spec.rb +0 -1
  102. data/spec/lib/orm_adapter/base_shared.rb +80 -76
  103. data/spec/lib/orm_adapter/mongoid_spec.rb +0 -2
  104. data/spec/lib/resource/tree_spec.rb +0 -1
  105. data/spec/spec_helper.rb +5 -3
  106. metadata +150 -75
  107. data/VERSION +0 -1
  108. data/app/models/puffer/puffer_user.rb +0 -25
@@ -4,6 +4,8 @@
4
4
  *= require puffer/paginator
5
5
  *= require puffer/puffer
6
6
  *= require puffer/puffer_tree
7
+ *= require puffer/puffer_grid
8
+ *= require puffer/file_input
7
9
 
8
10
  *= require_all ./puffer
9
11
  */
@@ -0,0 +1,59 @@
1
+ .file_input {
2
+ display: inline-block;
3
+ position: relative;
4
+ overflow: hidden;
5
+ }
6
+
7
+ .file_input input[type=file] {
8
+ position: absolute;
9
+ top: -5px;
10
+ right: -5px;
11
+ opacity: 0;
12
+ cursor: pointer;
13
+ font-size: 100px;
14
+ padding: 0;
15
+ margin: 0;
16
+ }
17
+
18
+ .file_input_overlay {
19
+ display: inline-block;
20
+ font-family: Helvetica, Arial, sans-serif;
21
+ border-radius: 3px;
22
+ background: #536C80;
23
+ color: #ddd;
24
+ text-shadow: -1px -1px 0 #304759;
25
+ padding: 3px 10px;
26
+ font-size: 11pt;
27
+ cursor: pointer;
28
+ }
29
+
30
+ .carrierwave {
31
+ margin-bottom: 5px;
32
+ }
33
+
34
+ .carrierwave * {
35
+ vertical-align: middle;
36
+ }
37
+
38
+ .carrierwave input[type=text] {
39
+ width: 300px !important;
40
+ }
41
+
42
+ .carrierwave .or {
43
+ display: inline-block;
44
+ padding: 3px 10px;
45
+ }
46
+
47
+ .remove_file * {
48
+ vertical-align: middle;
49
+ margin: 0;
50
+ padding: 0;
51
+ }
52
+
53
+ .remove_file {
54
+ margin-bottom: 5px;
55
+ }
56
+
57
+ .remove_file label {
58
+ font-weight: normal !important;
59
+ }
@@ -370,6 +370,7 @@ input[type=submit]
370
370
  text-shadow: -1px -1px 0 #304759;
371
371
  padding: 3px 10px;
372
372
  font-size: 11pt;
373
+ cursor: pointer;
373
374
  }
374
375
 
375
376
  select
@@ -0,0 +1,23 @@
1
+ .list_grid {
2
+ word-spacing: -0.5em;
3
+ margin-left: -5px;
4
+ margin-top: -5px;
5
+ }
6
+
7
+ .list_grid li {
8
+ display: inline-block;
9
+ *display: inline;
10
+ zoom: 1;
11
+ vertical-align: top;
12
+ width: 170px;
13
+
14
+ padding: 5px;
15
+ margin-left: 5px;
16
+ margin-top: 5px;
17
+
18
+ word-spacing: normal;
19
+ border: 1px solid #ddd;
20
+ border-radius: 5px;
21
+ -moz-border-radius: 5px;
22
+ -webkit-border-radius: 5px;
23
+ }
@@ -0,0 +1,9 @@
1
+ <%= component_fields_for @record do |f| %>
2
+ <dt><%= f.label field.field_name %></dt>
3
+ <dd>
4
+ <% ['', 'puffer_nil', false, true].each do |value| -%>
5
+ <%= f.radio_button field.field_name, value %>
6
+ <%= f.label [field.field_name, value].join('_') %>
7
+ <% end -%>
8
+ </dd>
9
+ <% end %>
@@ -4,6 +4,10 @@ class BooleanComponent < BaseComponent
4
4
  render
5
5
  end
6
6
 
7
+ def filter
8
+ render
9
+ end
10
+
7
11
  def change
8
12
  @record = resource.member
9
13
  @record.update_attributes field.to_s => !@record.call_chain(field.to_s)
@@ -0,0 +1,34 @@
1
+ <%= component_fields_for @record do |f| %>
2
+ <div class="label">
3
+ <%= f.label field %>
4
+ <div class="field_error">
5
+ <%= f.object.errors[field.name.to_sym].first %>
6
+ </div>
7
+ </div>
8
+
9
+ <div class="carrierwave">
10
+ <span class="file_input">
11
+ <%= f.file_field field.name, field.input_options %>
12
+ <span class="file_input_overlay"><%= t('.choose file') %></span>
13
+ </span>
14
+
15
+ <span class="or">
16
+ <%= t('.or') %>
17
+ </span>
18
+
19
+ <%= f.text_field "remote_#{field.name}_url", field.input_options %>
20
+ </div>
21
+
22
+ <% if f.object.send("#{field.name}?") %>
23
+ <div class="remove_file">
24
+ <%= f.check_box "remove_#{field.name}" %>
25
+ <%= f.label "remove_#{field.name}" %>
26
+ </div>
27
+ <% end %>
28
+
29
+ <div class="file_link">
30
+ <%= field.render :index, parent_controller, f.object %>
31
+ <div>
32
+
33
+ <%= f.hidden_field "#{field.name}_cache" %>
34
+ <% end %>
@@ -0,0 +1,6 @@
1
+ <%# Here it should check file version mime and output image or link to file %>
2
+ <% if true %>
3
+ <%= image_tag @record.send(field.name).send(thumbnail_name).url if @record.send("#{field.name}?") %>
4
+ <% else %>
5
+ <%= link_to @record.send(field.name).send(thumbnail_name).url if @record.send("#{field.name}?") %>
6
+ <% end %>
@@ -0,0 +1,16 @@
1
+ class CarrierwaveComponent < FileComponent
2
+
3
+ helper_method :thumbnail_name
4
+
5
+ def index
6
+ render
7
+ end
8
+
9
+
10
+ private
11
+
12
+ def thumbnail_name
13
+ field.options[:thumbnail].presence || :puffer
14
+ end
15
+
16
+ end
@@ -2,10 +2,9 @@
2
2
  <div class="label">
3
3
  <%= f.label field %>
4
4
  <div class="field_error">
5
- <%= @record.errors[field.reflection.foreign_key.to_sym].first ||
5
+ <%= @record.errors[field.reflection.accessor.to_sym].first ||
6
6
  @record.errors[field.name.to_sym].first.presence %>
7
7
  </div>
8
8
  </div>
9
- <%#= f.hidden_field field, field.input_options %>
10
- <%= link_to "Choose", '#', :data => {"new-dialog-uri" => event_path(:choose)} %>
9
+ <%= f.text_field field, field.input_options %>
11
10
  <% end %>
@@ -1,4 +1,3 @@
1
1
  class Admin::DashboardController < Puffer::DashboardBase
2
2
  unloadable
3
-
4
3
  end
@@ -1,7 +1,3 @@
1
- require 'puffer_user'
2
-
3
- if defined?(PufferUser)
4
- class Admin::PufferUsersController < Puffer::PufferUsersBase
5
-
6
- end
7
- end
1
+ class Admin::PufferUsersController < Puffer::PufferUsersBase
2
+ unloadable
3
+ end
@@ -2,5 +2,5 @@
2
2
  # Admin::SessionsController could be redefined in application.
3
3
  # See Puffer::SessionsBase docs for additional info.
4
4
  class Admin::SessionsController < Puffer::Sessions::Simple
5
-
5
+ unloadable
6
6
  end
@@ -1,18 +1,3 @@
1
- if defined?(Mongoid::Document)
2
- class PufferUser
3
- include Mongoid::Document
4
-
5
- field :email, :type => String
6
- field :password_digest, :type => String
7
- field :roles, :type => String
8
-
9
- include Puffer::PufferUser
10
- end
11
- elsif defined?(ActiveRecord::Base) && ActiveRecord::Base.connection.table_exists?('puffer_users')
12
- class PufferUser < ActiveRecord::Base
13
- include Puffer::PufferUser
14
- end
15
- else
16
- class PufferUser
17
- end
18
- end
1
+ class PufferUser < Puffer::User::ActiveRecord
2
+ unloadable
3
+ end
@@ -38,6 +38,8 @@
38
38
  <%= form_for puffer_filters, :url => resource.collection_path, :method => :get do |f| %>
39
39
  <dt><%= f.label :puffer_search %></dt>
40
40
  <dd><%= f.text_field :puffer_search %></dd>
41
+ <dt><%= f.label :puffer_per_page %></dt>
42
+ <dd><%= f.text_field :puffer_per_page %></dd>
41
43
 
42
44
  <% filter_fields.columns.each do |field| %>
43
45
  <%= field.render :filter, controller, puffer_filters %>
@@ -1,6 +1,6 @@
1
1
  <% @title = "Edit #{resource.human}" %>
2
2
  <h1><%= @title %></h1>
3
- <%= form_for record, :url => resource.member_path do |f| %>
3
+ <%= form_for record, :url => resource.member_path, :html => { :multipart => true } do |f| %>
4
4
  <ul class="form">
5
5
  <% update_fields.each do |field| -%>
6
6
  <li><%= field.render :update, controller, record %></li>
@@ -1,6 +1,6 @@
1
1
  <% @title = "New #{resource.human}" %>
2
2
  <h1><%= @title %></h1>
3
- <%= form_for record, :url => resource.collection_path do |f| %>
3
+ <%= form_for record, :url => resource.collection_path, :html => { :multipart => true } do |f| %>
4
4
  <ul class="form">
5
5
  <% create_fields.each do |field| -%>
6
6
  <li><%= field.render :create, controller, record %></li>
@@ -0,0 +1,9 @@
1
+ <ul class="list_grid">
2
+ <% records.each do |record| -%>
3
+ <li>
4
+ <% grid_fields.each do |field| -%>
5
+ <td><%= field.render :grid, controller, record %></td>
6
+ <% end -%>
7
+ </li>
8
+ <% end -%>
9
+ </ul>
@@ -0,0 +1,26 @@
1
+ <% @title = resource.human %>
2
+ <h1><%= @title %></h1>
3
+
4
+
5
+ <% if records.present? %>
6
+ <div class="paginator"></div>
7
+
8
+ <%= render :layout => 'grid' do |record| %>
9
+ <%= link_to 'show', resource.member_path(record), :data => {'new-dialog-uri' => resource.member_path(record)} if configuration.show %>
10
+ <%= link_to 'edit', resource.edit_path(record) if update_fields.present? %>
11
+ <% _members.each do |member| %>
12
+ <%= link_to member.label, resource.member_path(record, :action => member.action) if member.display? %>
13
+ <% end %>
14
+ <%= link_to 'destroy', resource.member_path(record), :confirm => "Are you sure?", :method => :delete if configuration.destroy %>
15
+ <% end %>
16
+
17
+ <div class="paginator"></div>
18
+
19
+ <%= javascript_tag do %>
20
+ $$('.paginator').each(function(element) {
21
+ new Paginator({total: <%= records.num_pages %>, current: <%= params[:page] || 1 %>, link: {'href': '<%= resource.collection_path(:page => '%{page}', Puffer::Filters.model_name.param_key => puffer_filters.query).html_safe %>'}}).insertTo(element, 'instead');
22
+ });
23
+ <% end %>
24
+ <% else %>
25
+ <p>Sorry, but there is no records in <%= resource.human %></p>
26
+ <% end %>
@@ -3,5 +3,5 @@ Rails.application.routes.draw do
3
3
  namespace :admin do
4
4
  resource :session, :only => [:new, :create, :destroy]
5
5
  end
6
-
6
+
7
7
  end
@@ -0,0 +1,5 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec :path => '..'
4
+
5
+ gem 'rails', '~> 3.1.0'
@@ -0,0 +1,201 @@
1
+ PATH
2
+ remote: /home/pyromaniac/work/opensource/puffer
3
+ specs:
4
+ puffer (0.1.0)
5
+ kaminari
6
+ orm_adapter
7
+ rails (~> 3.1)
8
+
9
+ GEM
10
+ remote: http://rubygems.org/
11
+ specs:
12
+ actionmailer (3.1.3)
13
+ actionpack (= 3.1.3)
14
+ mail (~> 2.3.0)
15
+ actionpack (3.1.3)
16
+ activemodel (= 3.1.3)
17
+ activesupport (= 3.1.3)
18
+ builder (~> 3.0.0)
19
+ erubis (~> 2.7.0)
20
+ i18n (~> 0.6)
21
+ rack (~> 1.3.5)
22
+ rack-cache (~> 1.1)
23
+ rack-mount (~> 0.8.2)
24
+ rack-test (~> 0.6.1)
25
+ sprockets (~> 2.0.3)
26
+ activemodel (3.1.3)
27
+ activesupport (= 3.1.3)
28
+ builder (~> 3.0.0)
29
+ i18n (~> 0.6)
30
+ activerecord (3.1.3)
31
+ activemodel (= 3.1.3)
32
+ activesupport (= 3.1.3)
33
+ arel (~> 2.2.1)
34
+ tzinfo (~> 0.3.29)
35
+ activeresource (3.1.3)
36
+ activemodel (= 3.1.3)
37
+ activesupport (= 3.1.3)
38
+ activesupport (3.1.3)
39
+ multi_json (~> 1.0)
40
+ ammeter (0.2.2)
41
+ activesupport (>= 3.0)
42
+ railties (>= 3.0)
43
+ rspec (>= 2.2)
44
+ rspec-rails (>= 2.2)
45
+ arel (2.2.1)
46
+ bcrypt-ruby (3.0.1)
47
+ bson (1.5.2)
48
+ bson_ext (1.5.2)
49
+ bson (= 1.5.2)
50
+ builder (3.0.0)
51
+ capybara (1.1.2)
52
+ mime-types (>= 1.16)
53
+ nokogiri (>= 1.3.3)
54
+ rack (>= 1.0.0)
55
+ rack-test (>= 0.5.4)
56
+ selenium-webdriver (~> 2.0)
57
+ xpath (~> 0.1.4)
58
+ carrierwave (0.5.8)
59
+ activesupport (~> 3.0)
60
+ childprocess (0.3.0)
61
+ ffi (~> 1.0.6)
62
+ clearance (0.14.0)
63
+ diesel (~> 0.1.5)
64
+ rails (>= 3.0)
65
+ database_cleaner (0.7.1)
66
+ devise (2.0.0)
67
+ bcrypt-ruby (~> 3.0)
68
+ orm_adapter (~> 0.0.3)
69
+ railties (~> 3.1)
70
+ warden (~> 1.1)
71
+ diesel (0.1.5)
72
+ railties
73
+ diff-lcs (1.1.3)
74
+ erubis (2.7.0)
75
+ fabrication (1.2.0)
76
+ ffi (1.0.11)
77
+ forgery (0.5.0)
78
+ guard (1.0.0)
79
+ ffi (>= 0.5.0)
80
+ thor (~> 0.14.6)
81
+ guard-rspec (0.6.0)
82
+ guard (>= 0.10.0)
83
+ hike (1.2.1)
84
+ i18n (0.6.0)
85
+ json (1.6.5)
86
+ kaminari (0.13.0)
87
+ actionpack (>= 3.0.0)
88
+ activesupport (>= 3.0.0)
89
+ railties (>= 3.0.0)
90
+ libnotify (0.7.2)
91
+ mail (2.3.0)
92
+ i18n (>= 0.4.0)
93
+ mime-types (~> 1.16)
94
+ treetop (~> 1.4.8)
95
+ mime-types (1.17.2)
96
+ mini_magick (3.4)
97
+ subexec (~> 0.2.1)
98
+ mongo (1.5.2)
99
+ bson (= 1.5.2)
100
+ mongoid (2.4.3)
101
+ activemodel (~> 3.1)
102
+ mongo (~> 1.3)
103
+ tzinfo (~> 0.3.22)
104
+ multi_json (1.0.4)
105
+ nested_set (1.6.8)
106
+ activerecord (>= 3.0.0)
107
+ railties (>= 3.0.0)
108
+ nokogiri (1.5.0)
109
+ orm_adapter (0.0.6)
110
+ polyglot (0.3.3)
111
+ rack (1.3.6)
112
+ rack-cache (1.1)
113
+ rack (>= 0.4)
114
+ rack-mount (0.8.3)
115
+ rack (>= 1.0.0)
116
+ rack-ssl (1.3.2)
117
+ rack
118
+ rack-test (0.6.1)
119
+ rack (>= 1.0)
120
+ rails (3.1.3)
121
+ actionmailer (= 3.1.3)
122
+ actionpack (= 3.1.3)
123
+ activerecord (= 3.1.3)
124
+ activeresource (= 3.1.3)
125
+ activesupport (= 3.1.3)
126
+ bundler (~> 1.0)
127
+ railties (= 3.1.3)
128
+ railties (3.1.3)
129
+ actionpack (= 3.1.3)
130
+ activesupport (= 3.1.3)
131
+ rack-ssl (~> 1.3.2)
132
+ rake (>= 0.8.7)
133
+ rdoc (~> 3.4)
134
+ thor (~> 0.14.6)
135
+ rake (0.9.2.2)
136
+ rb-inotify (0.8.8)
137
+ ffi (>= 0.5.0)
138
+ rdoc (3.12)
139
+ json (~> 1.4)
140
+ rspec (2.8.0)
141
+ rspec-core (~> 2.8.0)
142
+ rspec-expectations (~> 2.8.0)
143
+ rspec-mocks (~> 2.8.0)
144
+ rspec-core (2.8.0)
145
+ rspec-expectations (2.8.0)
146
+ diff-lcs (~> 1.1.2)
147
+ rspec-mocks (2.8.0)
148
+ rspec-rails (2.8.1)
149
+ actionpack (>= 3.0)
150
+ activesupport (>= 3.0)
151
+ railties (>= 3.0)
152
+ rspec (~> 2.8.0)
153
+ rubyzip (0.9.5)
154
+ selenium-webdriver (2.18.0)
155
+ childprocess (>= 0.2.5)
156
+ ffi (~> 1.0.9)
157
+ multi_json (~> 1.0.4)
158
+ rubyzip
159
+ sprockets (2.0.3)
160
+ hike (~> 1.2)
161
+ rack (~> 1.0)
162
+ tilt (~> 1.1, != 1.3.0)
163
+ sqlite3 (1.3.5)
164
+ subexec (0.2.1)
165
+ thor (0.14.6)
166
+ tilt (1.3.3)
167
+ timecop (0.3.5)
168
+ treetop (1.4.10)
169
+ polyglot
170
+ polyglot (>= 0.3.1)
171
+ tzinfo (0.3.31)
172
+ warden (1.1.0)
173
+ rack (>= 1.0)
174
+ xpath (0.1.4)
175
+ nokogiri (~> 1.3)
176
+
177
+ PLATFORMS
178
+ ruby
179
+
180
+ DEPENDENCIES
181
+ ammeter
182
+ bson_ext
183
+ capybara
184
+ carrierwave
185
+ clearance
186
+ database_cleaner
187
+ devise
188
+ fabrication
189
+ forgery
190
+ guard
191
+ guard-rspec
192
+ libnotify
193
+ mini_magick
194
+ mongoid
195
+ nested_set
196
+ puffer!
197
+ rails (~> 3.1.0)
198
+ rb-inotify
199
+ rspec-rails
200
+ sqlite3
201
+ timecop