stachio 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. data/.gitignore +9 -0
  2. data/.rspec +1 -0
  3. data/.ruby-version +1 -0
  4. data/.simplecov +21 -0
  5. data/Gemfile +3 -0
  6. data/Gemfile.lock +152 -0
  7. data/MIT-LICENSE +20 -0
  8. data/README.md +3 -0
  9. data/Rakefile +50 -0
  10. data/app/assets/images/stachio/.gitkeep +0 -0
  11. data/app/assets/javascripts/stachio/application.js +15 -0
  12. data/app/assets/javascripts/stachio/templates.js +2 -0
  13. data/app/assets/stylesheets/scaffold.css +56 -0
  14. data/app/assets/stylesheets/stachio/application.css +13 -0
  15. data/app/assets/stylesheets/stachio/templates.css +4 -0
  16. data/app/controllers/stachio/application_controller.rb +4 -0
  17. data/app/controllers/stachio/templates_controller.rb +87 -0
  18. data/app/helpers/stachio/application_helper.rb +4 -0
  19. data/app/helpers/stachio/templates_helper.rb +4 -0
  20. data/app/models/stachio/template.rb +21 -0
  21. data/app/views/layouts/stachio/application.html.erb +14 -0
  22. data/app/views/stachio/templates/_form.html.erb +25 -0
  23. data/app/views/stachio/templates/edit.html.erb +6 -0
  24. data/app/views/stachio/templates/index.html.erb +25 -0
  25. data/app/views/stachio/templates/new.html.erb +5 -0
  26. data/app/views/stachio/templates/show.html.erb +15 -0
  27. data/config/routes.rb +4 -0
  28. data/db/migrate/20130509172418_create_stachio_templates.rb +10 -0
  29. data/lib/stachio.rb +4 -0
  30. data/lib/stachio/engine.rb +17 -0
  31. data/lib/stachio/proxy.rb +20 -0
  32. data/lib/stachio/version.rb +3 -0
  33. data/lib/tasks/stachio_tasks.rake +4 -0
  34. data/script/rails +8 -0
  35. data/spec/controllers/stachio/templates_controller_spec.rb +167 -0
  36. data/spec/dummy/.rspec +1 -0
  37. data/spec/dummy/.ruby-version +1 -0
  38. data/spec/dummy/README.md +3 -0
  39. data/spec/dummy/Rakefile +7 -0
  40. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  41. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  42. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  43. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  44. data/spec/dummy/app/mailers/.gitkeep +0 -0
  45. data/spec/dummy/app/models/.gitkeep +0 -0
  46. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  47. data/spec/dummy/config.ru +4 -0
  48. data/spec/dummy/config/application.rb +66 -0
  49. data/spec/dummy/config/boot.rb +10 -0
  50. data/spec/dummy/config/database.yml +25 -0
  51. data/spec/dummy/config/environment.rb +5 -0
  52. data/spec/dummy/config/environments/development.rb +37 -0
  53. data/spec/dummy/config/environments/production.rb +67 -0
  54. data/spec/dummy/config/environments/test.rb +37 -0
  55. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  56. data/spec/dummy/config/initializers/inflections.rb +15 -0
  57. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  58. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  59. data/spec/dummy/config/initializers/session_store.rb +8 -0
  60. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  61. data/spec/dummy/config/locales/en.yml +5 -0
  62. data/spec/dummy/config/routes.rb +4 -0
  63. data/spec/dummy/db/schema.rb +23 -0
  64. data/spec/dummy/lib/assets/.gitkeep +0 -0
  65. data/spec/dummy/log/.gitkeep +0 -0
  66. data/spec/dummy/public/404.html +26 -0
  67. data/spec/dummy/public/422.html +26 -0
  68. data/spec/dummy/public/500.html +25 -0
  69. data/spec/dummy/public/favicon.ico +0 -0
  70. data/spec/dummy/script/rails +6 -0
  71. data/spec/helpers/stachio/templates_helper_spec.rb +17 -0
  72. data/spec/models/stachio/template_spec.rb +54 -0
  73. data/spec/requests/stachio/stachio_templates_spec.rb +11 -0
  74. data/spec/routing/stachio/templates_routing_spec.rb +37 -0
  75. data/spec/spec_helper.rb +50 -0
  76. data/stachio.gemspec +33 -0
  77. metadata +374 -0
@@ -0,0 +1,4 @@
1
+ module Stachio
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Stachio
2
+ module TemplatesHelper
3
+ end
4
+ end
@@ -0,0 +1,21 @@
1
+ require 'stachio/proxy'
2
+
3
+ module Stachio
4
+ class Template < ActiveRecord::Base
5
+ lookup_by :template_name
6
+
7
+ attr_accessible :template_name, :content
8
+ validates_presence_of :template_name, :content
9
+
10
+ attr_accessor :proxied
11
+
12
+ def proxy
13
+ @proxy ||= Stachio::Proxy.new(proxied) unless proxied.nil?
14
+ end
15
+
16
+ def compose
17
+ proxy.template = content
18
+ proxy.render
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Stachio</title>
5
+ <%= stylesheet_link_tag "stachio/application", :media => "all" %>
6
+ <%= javascript_include_tag "stachio/application" %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+ <body>
10
+
11
+ <%= yield %>
12
+
13
+ </body>
14
+ </html>
@@ -0,0 +1,25 @@
1
+ <%= form_for(@template) do |f| %>
2
+ <% if @template.errors.any? %>
3
+ <div id="error_explanation">
4
+ <h2><%= pluralize(@template.errors.count, "error") %> prohibited this template from being saved:</h2>
5
+
6
+ <ul>
7
+ <% @template.errors.full_messages.each do |msg| %>
8
+ <li><%= msg %></li>
9
+ <% end %>
10
+ </ul>
11
+ </div>
12
+ <% end %>
13
+
14
+ <div class="field">
15
+ <%= f.label :template_name %><br />
16
+ <%= f.text_field :template_name %>
17
+ </div>
18
+ <div class="field">
19
+ <%= f.label :content %><br />
20
+ <%= f.text_area :content %>
21
+ </div>
22
+ <div class="actions">
23
+ <%= f.submit %>
24
+ </div>
25
+ <% end %>
@@ -0,0 +1,6 @@
1
+ <h1>Editing template</h1>
2
+
3
+ <%= render 'form' %>
4
+
5
+ <%= link_to 'Show', @template %> |
6
+ <%= link_to 'Back', templates_path %>
@@ -0,0 +1,25 @@
1
+ <h1>Listing templates</h1>
2
+
3
+ <table>
4
+ <tr>
5
+ <th>Template name</th>
6
+ <th>Content</th>
7
+ <th></th>
8
+ <th></th>
9
+ <th></th>
10
+ </tr>
11
+
12
+ <% @templates.each do |template| %>
13
+ <tr>
14
+ <td><%= template.template_name %></td>
15
+ <td><%= template.content %></td>
16
+ <td><%= link_to 'Show', template %></td>
17
+ <td><%= link_to 'Edit', edit_template_path(template) %></td>
18
+ <td><%= link_to 'Destroy', template, method: :delete, data: { confirm: 'Are you sure?' } %></td>
19
+ </tr>
20
+ <% end %>
21
+ </table>
22
+
23
+ <br />
24
+
25
+ <%= link_to 'New Template', new_template_path %>
@@ -0,0 +1,5 @@
1
+ <h1>New template</h1>
2
+
3
+ <%= render 'form' %>
4
+
5
+ <%= link_to 'Back', templates_path %>
@@ -0,0 +1,15 @@
1
+ <p id="notice"><%= notice %></p>
2
+
3
+ <p>
4
+ <b>Template name:</b>
5
+ <%= @template.template_name %>
6
+ </p>
7
+
8
+ <p>
9
+ <b>Content:</b>
10
+ <%= @template.content %>
11
+ </p>
12
+
13
+
14
+ <%= link_to 'Edit', edit_template_path(@template) %> |
15
+ <%= link_to 'Back', templates_path %>
@@ -0,0 +1,4 @@
1
+ Stachio::Engine.routes.draw do
2
+ resources :templates
3
+ root :to => 'templates#index'
4
+ end
@@ -0,0 +1,10 @@
1
+ class CreateStachioTemplates < ActiveRecord::Migration
2
+ def change
3
+ create_table :stachio_templates do |t|
4
+ t.string :template_name
5
+ t.text :content
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,4 @@
1
+ require "stachio/engine"
2
+
3
+ module Stachio
4
+ end
@@ -0,0 +1,17 @@
1
+ module Stachio
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace Stachio
4
+
5
+ require 'lookup_by'
6
+ require "jquery-rails"
7
+
8
+ require "mustache"
9
+ require "stache" ## use mustache/handlebars for views
10
+ Stache.use :mustache
11
+
12
+ config.generators do |g|
13
+ g.test_framework :rspec
14
+ g.integration_tool :rspec
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,20 @@
1
+ module Stachio
2
+ class Proxy < Mustache
3
+ self.raise_on_context_miss = true
4
+ attr_accessor :proxied
5
+
6
+ def initialize(proxied)
7
+ self.proxied = proxied
8
+ end
9
+
10
+ def respond_to?(method, include_privates=false)
11
+ return true if proxied.respond_to? method
12
+ super
13
+ end
14
+
15
+ def method_missing(method, *args, &block)
16
+ super unless proxied.respond_to?(method)
17
+ proxied.send method, *args, &block
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,3 @@
1
+ module Stachio
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :stachio do
3
+ # # Task goes here
4
+ # end
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ ENGINE_ROOT = File.expand_path('../..', __FILE__)
5
+ ENGINE_PATH = File.expand_path('../../lib/stachio/engine', __FILE__)
6
+
7
+ require 'rails/all'
8
+ require 'rails/engine/commands'
@@ -0,0 +1,167 @@
1
+ require 'spec_helper'
2
+
3
+ # This spec was generated by rspec-rails when you ran the scaffold generator.
4
+ # It demonstrates how one might use RSpec to specify the controller code that
5
+ # was generated by Rails when you ran the scaffold generator.
6
+ #
7
+ # It assumes that the implementation code is generated by the rails scaffold
8
+ # generator. If you are using any extension libraries to generate different
9
+ # controller code, this generated spec may or may not pass.
10
+ #
11
+ # It only uses APIs available in rails and/or rspec-rails. There are a number
12
+ # of tools you can use to make these specs even more expressive, but we're
13
+ # sticking to rails and rspec-rails APIs to keep things simple and stable.
14
+ #
15
+ # Compared to earlier versions of this generator, there is very limited use of
16
+ # stubs and message expectations in this spec. Stubs are only used when there
17
+ # is no simpler way to get a handle on the object needed for the example.
18
+ # Message expectations are only used when there is no simpler way to specify
19
+ # that an instance is receiving a specific message.
20
+
21
+ module Stachio
22
+ describe TemplatesController do
23
+
24
+ # This should return the minimal set of attributes required to create a valid
25
+ # Template. As you add validations to Template, be sure to
26
+ # adjust the attributes here as well.
27
+ let(:valid_attributes) do
28
+ { "template_name" => "MyString",
29
+ "content" => "I am a {{teapot}}",
30
+ }
31
+ end
32
+
33
+ # This should return the minimal set of values that should be in the session
34
+ # in order to pass any filters (e.g. authentication) defined in
35
+ # TemplatesController. Be sure to keep this updated too.
36
+ let(:valid_session) { {} }
37
+
38
+ describe "GET index" do
39
+ it "assigns all templates as @templates" do
40
+ template = Template.create! valid_attributes
41
+ get :index, {}, valid_session
42
+ assigns(:templates).should eq([template])
43
+ end
44
+ end
45
+
46
+ describe "GET show" do
47
+ it "assigns the requested template as @template" do
48
+ template = Template.create! valid_attributes
49
+ get :show, {:id => template.to_param}, valid_session
50
+ assigns(:template).should eq(template)
51
+ end
52
+ end
53
+
54
+ describe "GET new" do
55
+ it "assigns a new template as @template" do
56
+ get :new, {}, valid_session
57
+ assigns(:template).should be_a_new(Template)
58
+ end
59
+ end
60
+
61
+ describe "GET edit" do
62
+ it "assigns the requested template as @template" do
63
+ template = Template.create! valid_attributes
64
+ get :edit, {:id => template.to_param}, valid_session
65
+ assigns(:template).should eq(template)
66
+ end
67
+ end
68
+
69
+ describe "POST create" do
70
+ describe "with valid params" do
71
+ it "creates a new Template" do
72
+ expect {
73
+ post :create, {:template => valid_attributes}, valid_session
74
+ }.to change(Template, :count).by(1)
75
+ end
76
+
77
+ it "assigns a newly created template as @template" do
78
+ post :create, {:template => valid_attributes}, valid_session
79
+ assigns(:template).should be_a(Template)
80
+ assigns(:template).should be_persisted
81
+ end
82
+
83
+ it "redirects to the created template" do
84
+ post :create, {:template => valid_attributes}, valid_session
85
+ response.should redirect_to(Template.last)
86
+ end
87
+ end
88
+
89
+ describe "with invalid params" do
90
+ it "assigns a newly created but unsaved template as @template" do
91
+ # Trigger the behavior that occurs when invalid params are submitted
92
+ Template.any_instance.stub(:save).and_return(false)
93
+ post :create, {:template => { "template_name" => "invalid value" }}, valid_session
94
+ assigns(:template).should be_a_new(Template)
95
+ end
96
+
97
+ it "re-renders the 'new' template" do
98
+ # Trigger the behavior that occurs when invalid params are submitted
99
+ Template.any_instance.stub(:save).and_return(false)
100
+ post :create, {:template => { "template_name" => "invalid value" }}, valid_session
101
+ response.should render_template("new")
102
+ end
103
+ end
104
+ end
105
+
106
+ describe "PUT update" do
107
+ describe "with valid params" do
108
+ it "updates the requested template" do
109
+ template = Template.create! valid_attributes
110
+ # Assuming there are no other templates in the database, this
111
+ # specifies that the Template created on the previous line
112
+ # receives the :update_attributes message with whatever params are
113
+ # submitted in the request.
114
+ Template.any_instance.should_receive(:update_attributes).with({ "template_name" => "MyString" })
115
+ put :update, {:id => template.to_param, :template => { "template_name" => "MyString" }}, valid_session
116
+ end
117
+
118
+ it "assigns the requested template as @template" do
119
+ template = Template.create! valid_attributes
120
+ put :update, {:id => template.to_param, :template => valid_attributes}, valid_session
121
+ assigns(:template).should eq(template)
122
+ end
123
+
124
+ it "redirects to the template" do
125
+ template = Template.create! valid_attributes
126
+ put :update, {:id => template.to_param, :template => valid_attributes}, valid_session
127
+ response.should redirect_to(template)
128
+ end
129
+ end
130
+
131
+ describe "with invalid params" do
132
+ it "assigns the template as @template" do
133
+ template = Template.create! valid_attributes
134
+ # Trigger the behavior that occurs when invalid params are submitted
135
+ Template.any_instance.stub(:save).and_return(false)
136
+ put :update, {:id => template.to_param, :template => { "template_name" => "invalid value" }}, valid_session
137
+ assigns(:template).should eq(template)
138
+ end
139
+
140
+ it "re-renders the 'edit' template" do
141
+ template = Template.create! valid_attributes
142
+ # Trigger the behavior that occurs when invalid params are submitted
143
+ Template.any_instance.stub(:save).and_return(false)
144
+ put :update, {:id => template.to_param, :template => { "template_name" => "invalid value" }}, valid_session
145
+ response.should render_template("edit")
146
+ end
147
+ end
148
+ end
149
+
150
+ describe "DELETE destroy" do
151
+ it "destroys the requested template" do
152
+ template = Template.create! valid_attributes
153
+ expect {
154
+ delete :destroy, {:id => template.to_param}, valid_session
155
+ }.to change(Template, :count).by(-1)
156
+ end
157
+
158
+ it "redirects to the templates list" do
159
+ template = Template.create! valid_attributes
160
+ delete :destroy, {:id => template.to_param}, valid_session
161
+ #response.should redirect_to(templates_url) ## Requires default_host_url to be set, but we're in an engine.
162
+ response.should redirect_to(templates_path) ## So, instead, we test the redirection against the relative path
163
+ end
164
+ end
165
+
166
+ end
167
+ end
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1 @@
1
+ 1.9.3-p194
@@ -0,0 +1,3 @@
1
+ Stash your Stache with *Stachio*
2
+ ==============================
3
+ Stachio is a rails engine which aims to facilitate the creation, retrieval, update, & deletion of mustache templates in a relational database.
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env rake
2
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
3
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
4
+
5
+ require File.expand_path('../config/application', __FILE__)
6
+
7
+ Dummy::Application.load_tasks
@@ -0,0 +1,15 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // the compiled file.
9
+ //
10
+ // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
11
+ // GO AFTER THE REQUIRES BELOW.
12
+ //
13
+ //= require jquery
14
+ //= require jquery_ujs
15
+ //= require_tree .
@@ -0,0 +1,13 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the top of the
9
+ * compiled file, but it's generally better to create a new file per style scope.
10
+ *
11
+ *= require_self
12
+ *= require_tree .
13
+ */
@@ -0,0 +1,3 @@
1
+ class ApplicationController < ActionController::Base
2
+ protect_from_forgery
3
+ end
@@ -0,0 +1,2 @@
1
+ module ApplicationHelper
2
+ end