puffer_pages 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 (46) hide show
  1. data/.gitignore +1 -2
  2. data/.rvmrc +1 -0
  3. data/.travis.yml +6 -0
  4. data/CHANGELOG.md +12 -0
  5. data/Gemfile.lock +83 -78
  6. data/app/assets/javascripts/puffer/codemirror.js +1382 -818
  7. data/app/assets/javascripts/puffer/codemirror/htmlmixed.js +4 -5
  8. data/app/assets/javascripts/puffer/codemirror/javascript.js +12 -4
  9. data/app/assets/javascripts/puffer/codemirror/xml.js +35 -14
  10. data/app/assets/javascripts/puffer/liquid.js +15 -0
  11. data/app/assets/javascripts/puffer/puffer_pages.js +56 -6
  12. data/app/assets/stylesheets/puffer/codemirror.css +50 -14
  13. data/app/assets/stylesheets/puffer/codemirror/cobalt.css +1 -0
  14. data/app/assets/stylesheets/puffer/codemirror/eclipse.css +3 -2
  15. data/app/assets/stylesheets/puffer/codemirror/elegant.css +1 -0
  16. data/app/assets/stylesheets/puffer/codemirror/monokai.css +28 -0
  17. data/app/assets/stylesheets/puffer/codemirror/neat.css +1 -0
  18. data/app/assets/stylesheets/puffer/codemirror/night.css +1 -0
  19. data/app/assets/stylesheets/puffer/codemirror/rubyblue.css +21 -0
  20. data/app/assets/stylesheets/puffer/puffer_pages.css +59 -3
  21. data/app/components/codemirror/form.html.erb +16 -0
  22. data/app/components/codemirror_component.rb +9 -0
  23. data/app/components/page_parts/form.html.erb +13 -4
  24. data/app/controllers/pages_controller.rb +1 -10
  25. data/app/controllers/puffer_pages/layouts_base.rb +1 -1
  26. data/app/controllers/puffer_pages/pages_base.rb +1 -1
  27. data/app/controllers/puffer_pages/snippets_base.rb +1 -1
  28. data/app/models/puffer_pages/page.rb +4 -3
  29. data/app/views/layouts/puffer_pages_layout.html.erb +2 -1
  30. data/gemfiles/Gemfile-rails-3.1 +5 -0
  31. data/gemfiles/Gemfile-rails-3.1.lock +173 -0
  32. data/gemfiles/Gemfile-rails-3.2 +5 -0
  33. data/gemfiles/Gemfile-rails-3.2.lock +171 -0
  34. data/lib/puffer_pages.rb +5 -0
  35. data/lib/puffer_pages/extensions/controller.rb +12 -16
  36. data/lib/puffer_pages/extensions/mapper.rb +7 -13
  37. data/lib/puffer_pages/liquid/tags/page_attribute.rb +39 -0
  38. data/lib/puffer_pages/version.rb +1 -1
  39. data/puffer_pages.gemspec +7 -4
  40. data/spec/dummy/app/controllers/application_controller.rb +4 -0
  41. data/spec/lib/tags_spec.rb +25 -3
  42. data/spec/models/page_spec.rb +2 -3
  43. metadata +75 -43
  44. data/app/assets/stylesheets/puffer/codemirror/default.css +0 -19
  45. data/app/components/page_part_body/form.html.erb +0 -3
  46. data/app/components/page_part_body_component.rb +0 -3
@@ -18,3 +18,4 @@
18
18
  .cm-s-night span.cm-bracket { color: #8da6ce; }
19
19
  .cm-s-night span.cm-comment { color: #6900a1; }
20
20
  .cm-s-night span.cm-builtin, .cm-s-night span.cm-special { color: #ff9e59; }
21
+ .cm-s-night span.cm-link { color: #845dc4; }
@@ -0,0 +1,21 @@
1
+ .cm-s-rubyblue { font:13px/1.4em Trebuchet, Verdana, sans-serif; } /* - customized editor font - */
2
+
3
+ .cm-s-rubyblue { background: #112435; color: white; }
4
+ .cm-s-rubyblue span.CodeMirror-selected { background: #0000FF !important; }
5
+ .cm-s-rubyblue .CodeMirror-gutter { background: #1F4661; border-right: 7px solid #3E7087; min-width:2.5em; }
6
+ .cm-s-rubyblue .CodeMirror-gutter-text { color: white; }
7
+ .cm-s-rubyblue .CodeMirror-cursor { border-left: 1px solid white !important; }
8
+
9
+ .cm-s-rubyblue span.cm-comment { color: #999; font-style:italic; }
10
+ .cm-s-rubyblue span.cm-atom { color: #F4C20B; }
11
+ .cm-s-rubyblue span.cm-number, .cm-s-rubyblue span.cm-attribute { color: #82C6E0; }
12
+ .cm-s-rubyblue span.cm-keyword { color: #F0F; }
13
+ .cm-s-rubyblue span.cm-string { color: #F08047; }
14
+ .cm-s-rubyblue span.cm-meta { color: #F0F; }
15
+ .cm-s-rubyblue span.cm-variable-2, .cm-s-rubyblue span.cm-tag { color: #7BD827; }
16
+ .cm-s-rubyblue span.cm-variable-3, .cm-s-rubyblue span.cm-def { color: white; }
17
+ .cm-s-rubyblue span.cm-error { color: #AF2018; }
18
+ .cm-s-rubyblue span.cm-bracket { color: #F0F; }
19
+ .cm-s-rubyblue span.cm-link { color: #F4C20B; }
20
+ .cm-s-rubyblue span.CodeMirror-matchingbracket { color:#F0F !important; }
21
+ .cm-s-rubyblue span.cm-builtin, .cm-s-rubyblue span.cm-special { color: #FF9D00; }
@@ -1,7 +1,63 @@
1
1
  //= require puffer/codemirror
2
2
  //= require_tree ./codemirror
3
3
 
4
- .rui-tabs li
5
- {
6
- margin-bottom: 0;
4
+ .cm-s-default {
5
+ background: #fff;
6
+ }
7
+
8
+ span.cm-liquid {
9
+ color: red;
10
+ }
11
+
12
+ #page_parts li {
13
+ margin-bottom: 0;
14
+ }
15
+
16
+ #page_parts .rui-tabs-panel {
17
+ padding: 0;
18
+ border-left: 1px solid #ccc;
19
+ border-right: 1px solid #ccc;
20
+ min-height: 300px;
21
+ }
22
+
23
+ .active_line {
24
+ background: #eee !important;
25
+ }
26
+
27
+ .fullscreen {
28
+ display: block;
29
+ position: fixed;
30
+ top: 0;
31
+ left: 0;
32
+ width: 100%;
33
+ height: 100%;
34
+ z-index: 9999;
35
+ margin: 0;
36
+ padding: 0;
37
+ }
38
+
39
+ .codemirror_buttons {
40
+ border-bottom: 1px dashed #ccc;
41
+ background: #fff;
42
+ }
43
+
44
+ .codemirror_buttons li {
45
+ list-style: none;
46
+ display: inline-block;
47
+ padding: 4px 10px;
48
+ margin: 0;
49
+ cursor: pointer;
50
+ }
51
+
52
+ .codemirror_buttons li:hover {
53
+ color: #ff6600;
54
+ }
55
+
56
+ .codemirror_buttons_fulscreen {
57
+ display: block;
58
+ position: fixed;
59
+ top: -20px;
60
+ left: 0;
61
+ width: 100%;
62
+ z-index: 10000;
7
63
  }
@@ -0,0 +1,16 @@
1
+ <%= component_fields_for @record do |f| %>
2
+ <% unless field.options[:input_only] %>
3
+ <div class="label">
4
+ <%= f.label field %>
5
+ <div class="field_error">
6
+ <%= @record.errors[field.name.to_sym].first %>
7
+ </div>
8
+ </div>
9
+ <% end %>
10
+ <ul class="codemirror_buttons">
11
+ <% buttons.each do |button| %>
12
+ <li data-codemirror-button="<%= button %>"><%= t(".#{button}") %></li>
13
+ <% end %>
14
+ </ul>
15
+ <%= f.text_area field, field.input_options.merge(:data => {:codemirror => true}) %>
16
+ <% end %>
@@ -0,0 +1,9 @@
1
+ class CodemirrorComponent < BaseComponent
2
+ helper_method :buttons
3
+
4
+ private
5
+
6
+ def buttons
7
+ PufferPages.codemirror_buttons + Array.wrap(field.options[:buttons])
8
+ end
9
+ end
@@ -1,12 +1,21 @@
1
1
  <%= fields_for @record do |f| %>
2
- <ul id="<%= field.name %>" data-tabs="{closable: true, onRemove: page_part_tab_remove, addButton: page_part_tab_add}">
3
- <ul>
2
+ <ul id="<%= field.name %>" class="rui-tabs" data-tabs="{closable: true, onSelect: page_part_tab_select, onRemove: page_part_tab_remove, addButton: page_part_tab_add}">
3
+ <ul class="rui-tabs-list">
4
4
  <% @record.send(field.name).each_with_index do |page_part, index| %>
5
- <li><%= link_to page_part.name, "#page_part_tab_#{index}" %></li>
5
+ <li>
6
+ <%= link_to "#page_part_tab_#{index}" do %>
7
+ <%= page_part.name %>
8
+ <% if page_part.errors[:name].present? %>
9
+ <span class="field_error">
10
+ <%= page_part.errors[:name].first %>
11
+ </span>
12
+ <% end %>
13
+ <% end %>
14
+ </li>
6
15
  <% end %>
7
16
  </ul>
8
17
  <% @record.send(field.name).each_with_index do |page_part, index| -%>
9
- <li id="<%= "page_part_tab_#{index}" %>">
18
+ <li id="<%= "page_part_tab_#{index}" %>" class="rui-tabs-panel">
10
19
  <%= f.fields_for field.name, page_part do |page_part_builder| %>
11
20
  <% field.children.each do |field| %>
12
21
  <%= field.render :form, parent_controller, page_part_builder.object, :builder => page_part_builder %>
@@ -2,16 +2,7 @@ class PagesController < ApplicationController
2
2
 
3
3
  def index
4
4
  @page = Page.find_page params[:path]
5
- render :inline => @page.render(drops), :layout => @page.render_layout, :content_type => @page.content_type
6
- end
7
-
8
- private
9
-
10
- def drops
11
- {
12
- :self => PufferPages::Liquid::PageDrop.new(@page, @page, self),
13
- :root => PufferPages::Liquid::PageDrop.new(@page.root, @page, self)
14
- }.stringify_keys
5
+ render :inline => @page.render(default_drops(@page)), :layout => @page.render_layout, :content_type => @page.content_type
15
6
  end
16
7
 
17
8
  end
@@ -12,7 +12,7 @@ class PufferPages::LayoutsBase < Puffer::Base
12
12
 
13
13
  form do
14
14
  field :name
15
- field :body, :html => {:codemirror => true}
15
+ field :body, :type => :codemirror
16
16
  end
17
17
 
18
18
  end
@@ -23,7 +23,7 @@ class PufferPages::PagesBase < Puffer::TreeBase
23
23
  field :name
24
24
  field :slug
25
25
  field :page_parts, :type => :page_parts do
26
- field :body, :type => :page_part_body, :html => {:codemirror => true}
26
+ field :body, :type => :codemirror, :input_only => true
27
27
  field :name, :type => :hidden
28
28
  field :_destroy, :type => :hidden, :html => { :class => 'destroy_mark' }
29
29
  end
@@ -12,7 +12,7 @@ class PufferPages::SnippetsBase < Puffer::Base
12
12
 
13
13
  form do
14
14
  field :name
15
- field :body, :html => {:codemirror => true}
15
+ field :body, :type => :codemirror
16
16
  end
17
17
 
18
18
  end
@@ -23,12 +23,13 @@ class PufferPages::Page < ActiveRecord::Base
23
23
 
24
24
  def self.find_layout_page location
25
25
  location.gsub!(/^\/|\/$/, '')
26
- page = where(['? like location', location]).where(['status not in (?)', 'draft']).order('lft desc').first
26
+ page = location.blank? ? Page.roots.first :
27
+ where(['? like location', location]).where(['status not in (?)', 'draft']).order('lft desc').first
27
28
  raise PufferPages::LayoutMissed.new("PufferPages can`t render this page because layout page missed or draft") unless page
28
29
  page
29
30
  end
30
31
 
31
- has_many :page_parts, :order => "name = '#{PufferPages.primary_page_part_name}' desc, name", :dependent => :destroy, :class_name => '::PagePart'
32
+ has_many :page_parts, :order => "name = '#{PufferPages.primary_page_part_name}' desc, name", :dependent => :destroy, :class_name => '::PagePart', :validate => true
32
33
  accepts_nested_attributes_for :page_parts, :allow_destroy => true
33
34
  belongs_to :layout, :primary_key => :name, :foreign_key => :layout_name, :class_name => '::Layout'
34
35
 
@@ -72,7 +73,7 @@ class PufferPages::Page < ActiveRecord::Base
72
73
  def render(drops_or_context)
73
74
  if inherited_layout
74
75
  @template = Liquid::Template.parse(inherited_layout.body)
75
- tracker.cleanup @template.render!(drops_or_context, :registers => {:tracker => tracker, :page => self, :file_system => PufferPages::Liquid::FileSystem.new})
76
+ tracker.cleanup @template.render(drops_or_context, :registers => {:tracker => tracker, :page => self, :file_system => PufferPages::Liquid::FileSystem.new})
76
77
  else
77
78
  inherited_page_parts.reverse.map{|part| part.render(drops_or_context, self)}.join
78
79
  end
@@ -1 +1,2 @@
1
- <%= render :inline => layout_page.render(layout_page_drops), :layout => ("layouts/#{layout_page.render_layout}" if layout_page.render_layout) %>
1
+ <% drops = default_drops(layout_page).merge(@drops.presence || {}).stringify_keys %>
2
+ <%= render :inline => layout_page.render(drops), :layout => ("layouts/#{layout_page.render_layout}" if layout_page.render_layout) %>
@@ -0,0 +1,5 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec :path => '..'
4
+
5
+ gem 'rails', '~> 3.1.0'
@@ -0,0 +1,173 @@
1
+ PATH
2
+ remote: /home/pyromaniac/work/opensource/puffer_pages
3
+ specs:
4
+ puffer_pages (0.1.1)
5
+ liquid
6
+ nested_set
7
+ puffer
8
+ rails (~> 3.1)
9
+
10
+ GEM
11
+ remote: http://rubygems.org/
12
+ specs:
13
+ actionmailer (3.1.3)
14
+ actionpack (= 3.1.3)
15
+ mail (~> 2.3.0)
16
+ actionpack (3.1.3)
17
+ activemodel (= 3.1.3)
18
+ activesupport (= 3.1.3)
19
+ builder (~> 3.0.0)
20
+ erubis (~> 2.7.0)
21
+ i18n (~> 0.6)
22
+ rack (~> 1.3.5)
23
+ rack-cache (~> 1.1)
24
+ rack-mount (~> 0.8.2)
25
+ rack-test (~> 0.6.1)
26
+ sprockets (~> 2.0.3)
27
+ activemodel (3.1.3)
28
+ activesupport (= 3.1.3)
29
+ builder (~> 3.0.0)
30
+ i18n (~> 0.6)
31
+ activerecord (3.1.3)
32
+ activemodel (= 3.1.3)
33
+ activesupport (= 3.1.3)
34
+ arel (~> 2.2.1)
35
+ tzinfo (~> 0.3.29)
36
+ activeresource (3.1.3)
37
+ activemodel (= 3.1.3)
38
+ activesupport (= 3.1.3)
39
+ activesupport (3.1.3)
40
+ multi_json (~> 1.0)
41
+ arel (2.2.1)
42
+ bcrypt-ruby (3.0.1)
43
+ builder (3.0.0)
44
+ capybara (1.1.2)
45
+ mime-types (>= 1.16)
46
+ nokogiri (>= 1.3.3)
47
+ rack (>= 1.0.0)
48
+ rack-test (>= 0.5.4)
49
+ selenium-webdriver (~> 2.0)
50
+ xpath (~> 0.1.4)
51
+ childprocess (0.3.1)
52
+ ffi (~> 1.0.6)
53
+ database_cleaner (0.7.1)
54
+ diff-lcs (1.1.3)
55
+ erubis (2.7.0)
56
+ fabrication (1.2.0)
57
+ ffi (1.0.11)
58
+ forgery (0.5.0)
59
+ guard (1.0.0)
60
+ ffi (>= 0.5.0)
61
+ thor (~> 0.14.6)
62
+ guard-rspec (0.6.0)
63
+ guard (>= 0.10.0)
64
+ hike (1.2.1)
65
+ i18n (0.6.0)
66
+ json (1.6.5)
67
+ kaminari (0.13.0)
68
+ actionpack (>= 3.0.0)
69
+ activesupport (>= 3.0.0)
70
+ railties (>= 3.0.0)
71
+ libnotify (0.7.2)
72
+ liquid (2.3.0)
73
+ mail (2.3.0)
74
+ i18n (>= 0.4.0)
75
+ mime-types (~> 1.16)
76
+ treetop (~> 1.4.8)
77
+ mime-types (1.17.2)
78
+ multi_json (1.0.4)
79
+ mysql (2.8.1)
80
+ nested_set (1.6.8)
81
+ activerecord (>= 3.0.0)
82
+ railties (>= 3.0.0)
83
+ nokogiri (1.5.0)
84
+ orm_adapter (0.0.6)
85
+ pg (0.12.2)
86
+ polyglot (0.3.3)
87
+ puffer (0.1.1)
88
+ kaminari
89
+ orm_adapter
90
+ rails (~> 3.1)
91
+ rack (1.3.6)
92
+ rack-cache (1.1)
93
+ rack (>= 0.4)
94
+ rack-mount (0.8.3)
95
+ rack (>= 1.0.0)
96
+ rack-ssl (1.3.2)
97
+ rack
98
+ rack-test (0.6.1)
99
+ rack (>= 1.0)
100
+ rails (3.1.3)
101
+ actionmailer (= 3.1.3)
102
+ actionpack (= 3.1.3)
103
+ activerecord (= 3.1.3)
104
+ activeresource (= 3.1.3)
105
+ activesupport (= 3.1.3)
106
+ bundler (~> 1.0)
107
+ railties (= 3.1.3)
108
+ railties (3.1.3)
109
+ actionpack (= 3.1.3)
110
+ activesupport (= 3.1.3)
111
+ rack-ssl (~> 1.3.2)
112
+ rake (>= 0.8.7)
113
+ rdoc (~> 3.4)
114
+ thor (~> 0.14.6)
115
+ rake (0.9.2.2)
116
+ rb-inotify (0.8.8)
117
+ ffi (>= 0.5.0)
118
+ rdoc (3.12)
119
+ json (~> 1.4)
120
+ rspec (2.8.0)
121
+ rspec-core (~> 2.8.0)
122
+ rspec-expectations (~> 2.8.0)
123
+ rspec-mocks (~> 2.8.0)
124
+ rspec-core (2.8.0)
125
+ rspec-expectations (2.8.0)
126
+ diff-lcs (~> 1.1.2)
127
+ rspec-mocks (2.8.0)
128
+ rspec-rails (2.8.1)
129
+ actionpack (>= 3.0)
130
+ activesupport (>= 3.0)
131
+ railties (>= 3.0)
132
+ rspec (~> 2.8.0)
133
+ rubyzip (0.9.5)
134
+ selenium-webdriver (2.18.0)
135
+ childprocess (>= 0.2.5)
136
+ ffi (~> 1.0.9)
137
+ multi_json (~> 1.0.4)
138
+ rubyzip
139
+ sprockets (2.0.3)
140
+ hike (~> 1.2)
141
+ rack (~> 1.0)
142
+ tilt (~> 1.1, != 1.3.0)
143
+ sqlite3 (1.3.5)
144
+ sqlite3-ruby (1.3.3)
145
+ sqlite3 (>= 1.3.3)
146
+ thor (0.14.6)
147
+ tilt (1.3.3)
148
+ treetop (1.4.10)
149
+ polyglot
150
+ polyglot (>= 0.3.1)
151
+ tzinfo (0.3.31)
152
+ xpath (0.1.4)
153
+ nokogiri (~> 1.3)
154
+
155
+ PLATFORMS
156
+ ruby
157
+
158
+ DEPENDENCIES
159
+ bcrypt-ruby
160
+ capybara (>= 0.4.0)
161
+ database_cleaner
162
+ fabrication
163
+ forgery
164
+ guard
165
+ guard-rspec
166
+ libnotify
167
+ mysql
168
+ pg
169
+ puffer_pages!
170
+ rails (~> 3.1.0)
171
+ rb-inotify
172
+ rspec-rails
173
+ sqlite3-ruby
@@ -0,0 +1,5 @@
1
+ source "http://rubygems.org"
2
+
3
+ gemspec :path => '..'
4
+
5
+ gem 'rails', '~> 3.2.0'
@@ -0,0 +1,171 @@
1
+ PATH
2
+ remote: /home/pyromaniac/work/opensource/puffer_pages
3
+ specs:
4
+ puffer_pages (0.1.1)
5
+ liquid
6
+ nested_set
7
+ puffer
8
+ rails (~> 3.1)
9
+
10
+ GEM
11
+ remote: http://rubygems.org/
12
+ specs:
13
+ actionmailer (3.2.1)
14
+ actionpack (= 3.2.1)
15
+ mail (~> 2.4.0)
16
+ actionpack (3.2.1)
17
+ activemodel (= 3.2.1)
18
+ activesupport (= 3.2.1)
19
+ builder (~> 3.0.0)
20
+ erubis (~> 2.7.0)
21
+ journey (~> 1.0.1)
22
+ rack (~> 1.4.0)
23
+ rack-cache (~> 1.1)
24
+ rack-test (~> 0.6.1)
25
+ sprockets (~> 2.1.2)
26
+ activemodel (3.2.1)
27
+ activesupport (= 3.2.1)
28
+ builder (~> 3.0.0)
29
+ activerecord (3.2.1)
30
+ activemodel (= 3.2.1)
31
+ activesupport (= 3.2.1)
32
+ arel (~> 3.0.0)
33
+ tzinfo (~> 0.3.29)
34
+ activeresource (3.2.1)
35
+ activemodel (= 3.2.1)
36
+ activesupport (= 3.2.1)
37
+ activesupport (3.2.1)
38
+ i18n (~> 0.6)
39
+ multi_json (~> 1.0)
40
+ arel (3.0.0)
41
+ bcrypt-ruby (3.0.1)
42
+ builder (3.0.0)
43
+ capybara (1.1.2)
44
+ mime-types (>= 1.16)
45
+ nokogiri (>= 1.3.3)
46
+ rack (>= 1.0.0)
47
+ rack-test (>= 0.5.4)
48
+ selenium-webdriver (~> 2.0)
49
+ xpath (~> 0.1.4)
50
+ childprocess (0.3.1)
51
+ ffi (~> 1.0.6)
52
+ database_cleaner (0.7.1)
53
+ diff-lcs (1.1.3)
54
+ erubis (2.7.0)
55
+ fabrication (1.2.0)
56
+ ffi (1.0.11)
57
+ forgery (0.5.0)
58
+ guard (1.0.0)
59
+ ffi (>= 0.5.0)
60
+ thor (~> 0.14.6)
61
+ guard-rspec (0.6.0)
62
+ guard (>= 0.10.0)
63
+ hike (1.2.1)
64
+ i18n (0.6.0)
65
+ journey (1.0.1)
66
+ json (1.6.5)
67
+ kaminari (0.13.0)
68
+ actionpack (>= 3.0.0)
69
+ activesupport (>= 3.0.0)
70
+ railties (>= 3.0.0)
71
+ libnotify (0.7.2)
72
+ liquid (2.3.0)
73
+ mail (2.4.1)
74
+ i18n (>= 0.4.0)
75
+ mime-types (~> 1.16)
76
+ treetop (~> 1.4.8)
77
+ mime-types (1.17.2)
78
+ multi_json (1.0.4)
79
+ mysql (2.8.1)
80
+ nested_set (1.6.8)
81
+ activerecord (>= 3.0.0)
82
+ railties (>= 3.0.0)
83
+ nokogiri (1.5.0)
84
+ orm_adapter (0.0.6)
85
+ pg (0.12.2)
86
+ polyglot (0.3.3)
87
+ puffer (0.1.1)
88
+ kaminari
89
+ orm_adapter
90
+ rails (~> 3.1)
91
+ rack (1.4.1)
92
+ rack-cache (1.1)
93
+ rack (>= 0.4)
94
+ rack-ssl (1.3.2)
95
+ rack
96
+ rack-test (0.6.1)
97
+ rack (>= 1.0)
98
+ rails (3.2.1)
99
+ actionmailer (= 3.2.1)
100
+ actionpack (= 3.2.1)
101
+ activerecord (= 3.2.1)
102
+ activeresource (= 3.2.1)
103
+ activesupport (= 3.2.1)
104
+ bundler (~> 1.0)
105
+ railties (= 3.2.1)
106
+ railties (3.2.1)
107
+ actionpack (= 3.2.1)
108
+ activesupport (= 3.2.1)
109
+ rack-ssl (~> 1.3.2)
110
+ rake (>= 0.8.7)
111
+ rdoc (~> 3.4)
112
+ thor (~> 0.14.6)
113
+ rake (0.9.2.2)
114
+ rb-inotify (0.8.8)
115
+ ffi (>= 0.5.0)
116
+ rdoc (3.12)
117
+ json (~> 1.4)
118
+ rspec (2.8.0)
119
+ rspec-core (~> 2.8.0)
120
+ rspec-expectations (~> 2.8.0)
121
+ rspec-mocks (~> 2.8.0)
122
+ rspec-core (2.8.0)
123
+ rspec-expectations (2.8.0)
124
+ diff-lcs (~> 1.1.2)
125
+ rspec-mocks (2.8.0)
126
+ rspec-rails (2.8.1)
127
+ actionpack (>= 3.0)
128
+ activesupport (>= 3.0)
129
+ railties (>= 3.0)
130
+ rspec (~> 2.8.0)
131
+ rubyzip (0.9.5)
132
+ selenium-webdriver (2.18.0)
133
+ childprocess (>= 0.2.5)
134
+ ffi (~> 1.0.9)
135
+ multi_json (~> 1.0.4)
136
+ rubyzip
137
+ sprockets (2.1.2)
138
+ hike (~> 1.2)
139
+ rack (~> 1.0)
140
+ tilt (~> 1.1, != 1.3.0)
141
+ sqlite3 (1.3.5)
142
+ sqlite3-ruby (1.3.3)
143
+ sqlite3 (>= 1.3.3)
144
+ thor (0.14.6)
145
+ tilt (1.3.3)
146
+ treetop (1.4.10)
147
+ polyglot
148
+ polyglot (>= 0.3.1)
149
+ tzinfo (0.3.31)
150
+ xpath (0.1.4)
151
+ nokogiri (~> 1.3)
152
+
153
+ PLATFORMS
154
+ ruby
155
+
156
+ DEPENDENCIES
157
+ bcrypt-ruby
158
+ capybara (>= 0.4.0)
159
+ database_cleaner
160
+ fabrication
161
+ forgery
162
+ guard
163
+ guard-rspec
164
+ libnotify
165
+ mysql
166
+ pg
167
+ puffer_pages!
168
+ rails (~> 3.2.0)
169
+ rb-inotify
170
+ rspec-rails
171
+ sqlite3-ruby