cachai 0.0.7 → 0.1.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f79e9baf1b4289c37e88e4208c5fa4ac903b5cf9
4
- data.tar.gz: b91b0e7f759f7d6c2c95ec5b7ef70a77fecc0a00
3
+ metadata.gz: 5677c8d22b6c5823c95243a8f96f53f470f1dc8c
4
+ data.tar.gz: 7c68c94430c37fa4d7399c1d509ed4cbcb1d1313
5
5
  SHA512:
6
- metadata.gz: d8a52ba8af374c0c7f0b3811214963b1ae46e43f6885da2070a15059e184b117110c939ce236b7be92cd65a6b870f87f3bf185d080868f0db408c82299bc4e5f
7
- data.tar.gz: 9b3576d707f7d9f1120886fecc20b963b918e8d4b64abc822157a039a43a3ffc349f17ea1434a14fc981f0f5d59e8601b1bf374e0ead3dd153fb24f37e7ab7dc
6
+ metadata.gz: 4997bdeb894e3ae33d1089f4f12178153908609e283f979158f20d005aba4c56a5d38b3afd200635b4c2ff977db090af9eeb647b38cd4856c6c403ce55b3d34a
7
+ data.tar.gz: 43d3fb372b95d74b32138fdd8789872b38ea821d68af4538ff5d72370cc394e2f1d56390fd17c41708f5150c0edd49106948e005495d3a4b214b38b519bcd8d9
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "cachai"
7
- spec.version = '0.0.7'
7
+ spec.version = '0.1.0'
8
8
  spec.authors = ["Tomás Pollak"]
9
9
  spec.email = ["tomas@forkhq.com"]
10
10
  spec.description = %q{Middleware for embedabble comments.}
@@ -0,0 +1,2 @@
1
+ db
2
+ Gemfile.lock
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'cachai', :path => '../../'
4
+ gem 'puma'
@@ -0,0 +1,8 @@
1
+ env = ENV['RAILS_ENV'] ||= ENV['RACK_ENV'] || 'development'
2
+
3
+ require 'bundler/setup'
4
+ require 'cachai'
5
+
6
+ map '/' do
7
+ run Cachai::Admin
8
+ end
@@ -0,0 +1,9 @@
1
+ development:
2
+ adapter: sqlite3
3
+ database: db/development.sqlite3
4
+ pool: 16
5
+
6
+ production:
7
+ adapter: sqlite3
8
+ database: db/production.sqlite3
9
+ pool: 16
@@ -0,0 +1,7 @@
1
+ Simple example.
2
+
3
+ Running:
4
+
5
+ bundle
6
+ bundle exec puma
7
+
@@ -21,8 +21,7 @@ module Cachai
21
21
 
22
22
  CACHE_MINUTES = 10 * 60 # 10 minutes
23
23
 
24
- def initialize(app, opts = nil)
25
- opts = opts || {}
24
+ def initialize(app, opts = {})
26
25
  domain = opts.delete(:domain) or raise 'Domain required.'
27
26
  redis_host = opts.delete(:redis_host) || 'localhost'
28
27
 
@@ -31,7 +30,7 @@ module Cachai
31
30
  Cachai.load_db!
32
31
 
33
32
  if key = opts.delete(:akismet_key)
34
- @akismet = Akismet.new(:api_key => key, :blog => "http://#{domain}")
33
+ @akismet = Akismet.new(:api_key => key, :blog => "http://#{Cachai.domain}")
35
34
  else
36
35
  puts "No Akismet key found! Will not check comments for spam."
37
36
  end
@@ -208,4 +207,64 @@ module Cachai
208
207
 
209
208
  end
210
209
 
210
+ class Admin < Sinatra::Base
211
+
212
+ # set :public_folder, File.join(settings.root, '..', 'public')
213
+ # set :views, File.join(settings.root, 'views')
214
+ # use Rack::Static, :urls => %w(/css /img /js /favicon.ico), :root => 'public'
215
+ enable :method_override
216
+ use ActiveRecord::ConnectionAdapters::ConnectionManagement
217
+
218
+ def initialize(opts = {})
219
+ require 'tilt/erb'
220
+ Cachai.load_db!
221
+ super
222
+ end
223
+
224
+ get '/' do
225
+ redirect to('/posts')
226
+ end
227
+
228
+ get '/posts' do
229
+ @posts = Cachai::Post.all.order(:id => :desc)
230
+ deliver @posts, :posts
231
+ end
232
+
233
+ get '/posts/:id' do
234
+ @post = Cachai::Post.find(params[:id])
235
+ @comments = @post.responses.comment
236
+ deliver @comments, :comments
237
+ end
238
+
239
+ get '/comments' do
240
+ @comments = Cachai::Response.all.order(:created_at => :desc)
241
+ deliver @comments, :comments
242
+ end
243
+
244
+ get '/comments/:id' do
245
+ @comment = Cachai::Response.find(params[:id])
246
+ deliver @comment, :comment
247
+ end
248
+
249
+ put '/comments/:id' do
250
+ @comment = Cachai::Response.find(params[:id])
251
+ @comment.update_attributes(params[:comment])
252
+ redirect back
253
+ end
254
+
255
+ def deliver(obj, view)
256
+ if request.xhr?
257
+ json(obj)
258
+ else
259
+ erb view
260
+ end
261
+ end
262
+
263
+ def json(obj)
264
+ content_type 'application/json'
265
+ return obj.is_a?(String) ? obj : obj.to_json
266
+ end
267
+
268
+ end
269
+
211
270
  end
@@ -0,0 +1,71 @@
1
+ <h1>Comment <%= @comment.id %></h1>
2
+
3
+ <form method="post" action="<%= url("/comments/#{@comment.id}") %>">
4
+ <input type="hidden" name="_method" value="put" />
5
+
6
+ <table class="table">
7
+
8
+ <tr>
9
+ <td>Post </td>
10
+ <td><a href="<%= url("/posts/#{@comment.post.id}") %>"><%= @comment.post.path %></a></td>
11
+ </tr>
12
+
13
+ <tr>
14
+ <td>Comment ID</td>
15
+ <td><%= @comment.id %></td>
16
+ </tr>
17
+
18
+ <tr>
19
+ <td>Approved</td>
20
+ <td>
21
+ <span><%= @comment.approved %></span>
22
+ <input type="hidden" name="comment[approved]" value="<%= @comment.approved %>" />
23
+ </td>
24
+ </tr>
25
+
26
+ <tr>
27
+ <td>Author name</td>
28
+ <td>
29
+ <span><%= @comment.author_name %></span>
30
+ <input type="hidden" name="comment[author_url]" value="<%= @comment.author_name %>" />
31
+ </td>
32
+ </tr>
33
+
34
+ <tr>
35
+ <td>Author email</td>
36
+ <td>
37
+ <span><%= @comment.author_email %></span>
38
+ <input type="hidden" name="comment[author_url]" value="<%= @comment.author_email %>" />
39
+ </td>
40
+ </tr>
41
+
42
+ <tr>
43
+ <td>Author URL</td>
44
+ <td>
45
+ <span><%= @comment.author_url %></span>
46
+ <input type="hidden" name="comment[author_url]" value="<%= @comment.author_url %>" />
47
+ </td>
48
+ </tr>
49
+
50
+ <tr>
51
+ <td>Content</td>
52
+ <td class="textarea">
53
+ <span><%= @comment.content %></span>
54
+ <textarea style="display: none" name="comment[content]"><%= @comment.content %></textarea>
55
+ </td>
56
+ </tr>
57
+
58
+ <tr>
59
+ <td>Parent ID</td>
60
+ <td><%= @comment.parent_id %></td>
61
+ </tr>
62
+
63
+ <tr>
64
+ <td>Created at</td>
65
+ <td><%= @comment.created_at %></td>
66
+ </tr>
67
+
68
+ </table>
69
+
70
+ <button type="submit">Update</button>
71
+ </form>
@@ -0,0 +1,13 @@
1
+ <h1><%= @comments.count %> comments</h1>
2
+
3
+ <table class="table">
4
+ <% @comments.each do |comm| %>
5
+ <tr>
6
+ <td><a href="<%= url("/comments/#{comm.id}") %>"><%= comm.id %></a></td>
7
+ <td><%= comm.author_name %></td>
8
+ <td><%= comm.author_email %></td>
9
+ <td><%= comm.author_url %></td>
10
+ <td><%= comm.content[0..50] + '...' %></td>
11
+ </tr>
12
+ <% end %>
13
+ </table>
@@ -0,0 +1,59 @@
1
+ <!doctype html>
2
+ <html xml:lang="en" lang="en">
3
+ <head>
4
+ <title>Cachai::Admin</title>
5
+ <meta charset="utf-8" />
6
+ <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
7
+ <meta http-equiv="cleartype" content="on">
8
+ <meta name="viewport" content="width=device-width, initial-scale=1">
9
+ <meta name="description" content="Cachai Admin">
10
+ <meta name="author" content="Fork Ltd.">
11
+
12
+ <!--[if lt IE 9]><script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
13
+ <link rel="stylesheet" href="http://tomas.github.io/base.css/build/base-min.css" type="text/css" media="screen" />
14
+ <style type="text/css">
15
+ body {
16
+ padding: 30px;
17
+ }
18
+
19
+ h1,h2 {
20
+ margin-bottom: 1em;
21
+ }
22
+ </style>
23
+ </head>
24
+
25
+ <body>
26
+
27
+ <div id="main" class="fluid container clearfix">
28
+ <%= yield %>
29
+ </div>
30
+
31
+ <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
32
+ <script>
33
+
34
+ function show_input(input) {
35
+ input.type = 'text';
36
+ $(input).prev().hide();
37
+ }
38
+
39
+ function hide_input(input) {
40
+ input.type = 'hidden';
41
+ $(input).prev().show().text(input.value);
42
+ }
43
+
44
+ $('table').on('dblclick', 'td', function(e) {
45
+ if ($(this).hasClass('textarea')) {
46
+ var val = $(this).find('textarea').toggle().val();
47
+ $(this).find('span').toggle().html(val);
48
+ } else {
49
+ var input = $(this).find('input');
50
+ if (input[0].type == 'hidden') {
51
+ show_input(input[0]);
52
+ } else {
53
+ hide_input(input[0]);
54
+ }
55
+ }
56
+ })
57
+ </script>
58
+ </body>
59
+ </html>
@@ -0,0 +1,10 @@
1
+ <h1><%= @posts.count %> posts</h1>
2
+
3
+ <table class="table">
4
+ <% @posts.each do |post| %>
5
+ <tr>
6
+ <td><a href="<%= url("/posts/#{post.id}") %>"><%= post.id %></a></td>
7
+ <td><%= post.path %></td>
8
+ </tr>
9
+ <% end %>
10
+ </table>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cachai
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomás Pollak
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-24 00:00:00.000000000 Z
11
+ date: 2015-09-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -150,10 +150,19 @@ files:
150
150
  - Rakefile
151
151
  - cachai.gemspec
152
152
  - db/schema.rb
153
+ - examples/test-site/.gitignore
154
+ - examples/test-site/Gemfile
155
+ - examples/test-site/config.ru
156
+ - examples/test-site/config/database.yml
157
+ - examples/test-site/readme.md
153
158
  - lib/akismet.rb
154
159
  - lib/cachai.rb
155
160
  - lib/models.rb
156
161
  - lib/time_ago.rb
162
+ - lib/views/comment.erb
163
+ - lib/views/comments.erb
164
+ - lib/views/layout.erb
165
+ - lib/views/posts.erb
157
166
  - spec/get_comments_test.rb
158
167
  - spec/post_comments_test.rb
159
168
  - spec/spec_helper.rb