puffer_pages 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 (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