puffer 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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