thesis 0.0.1 → 0.0.4

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 (38) hide show
  1. data/README.md +147 -7
  2. data/lib/assets/javascripts/thesis/hallo.js +2949 -0
  3. data/lib/assets/javascripts/thesis/thesis.js.coffee +27 -0
  4. data/lib/assets/javascripts/thesis.js +2 -0
  5. data/lib/assets/stylesheets/thesis/thesis.css.scss +16 -0
  6. data/lib/assets/stylesheets/thesis.css +4 -0
  7. data/lib/generators/thesis/install/install_generator.rb +108 -0
  8. data/lib/generators/thesis/install/templates/migrations/create_page.rb +18 -0
  9. data/lib/generators/thesis/install/templates/migrations/create_page_content.rb +15 -0
  10. data/lib/generators/thesis/install/templates/page_templates/default.html.erb +38 -0
  11. data/lib/generators/thesis/install/templates/page_templates/default.html.haml +29 -0
  12. data/lib/generators/thesis/install/templates/page_templates/default.html.slim +29 -0
  13. data/lib/tasks/thesis_tasks.rake +4 -0
  14. data/lib/thesis/colorizer.rb +51 -0
  15. data/lib/thesis/controllers/controller_helpers.rb +39 -0
  16. data/lib/thesis/controllers/thesis_controller.rb +53 -0
  17. data/lib/thesis/engine.rb +5 -0
  18. data/lib/thesis/exceptions.rb +17 -0
  19. data/lib/thesis/models/page.rb +43 -0
  20. data/lib/thesis/models/page_content.rb +41 -0
  21. data/lib/thesis/railtie.rb +12 -0
  22. data/lib/thesis/routing/route_constraint.rb +7 -0
  23. data/lib/thesis/routing/routes.rb +10 -0
  24. data/lib/thesis/version.rb +1 -1
  25. data/lib/thesis.rb +10 -1
  26. data/spec/factories/page_contents.rb +7 -0
  27. data/spec/factories/pages.rb +9 -0
  28. data/spec/lib/thesis/controllers/thesis_controller_spec.rb +68 -0
  29. data/spec/lib/thesis/models/page_content_spec.rb +33 -0
  30. data/spec/lib/thesis/models/page_spec.rb +49 -0
  31. data/spec/spec_helper.rb +64 -0
  32. metadata +58 -14
  33. data/.gitignore +0 -17
  34. data/Gemfile +0 -4
  35. data/LICENSE.txt +0 -22
  36. data/Rakefile +0 -1
  37. data/lib/thesis/base.rb +0 -5
  38. data/thesis.gemspec +0 -19
@@ -0,0 +1,68 @@
1
+ require "spec_helper"
2
+
3
+ describe Thesis::ThesisController do
4
+ let(:page) { create :page, template: "default" }
5
+
6
+ before do
7
+ described_class.any_instance.stub(:render).and_return(page.title)
8
+ described_class.any_instance.stub(:template_exists?).and_return(true)
9
+ described_class.any_instance.stub(:page_is_editable?).and_return(true)
10
+ end
11
+
12
+ describe "#show" do
13
+ it "displays a page when it can be found" do
14
+ make_request :show, path: page.slug
15
+ @response.should_not be_nil
16
+ end
17
+
18
+ it "raises RoutingError when the page slug can't be found" do
19
+ expect { make_request :show, path: "/nonexistent" }.to raise_error ActionController::RoutingError
20
+ end
21
+
22
+ it "raises PageRequiresTemplate when template can't be found" do
23
+ described_class.any_instance.stub(:template_exists?).and_return(false)
24
+ expect { make_request :show, path: page.slug }.to raise_error Thesis::PageRequiresTemplate
25
+ end
26
+ end
27
+
28
+ describe "#new_page" do
29
+ context "when the page can be edited" do
30
+ it "creates a page" do
31
+ make_request :new_page, name: "New Page"
32
+ page = Thesis::Page.last
33
+ expect(page.name).to eq "New Page"
34
+ end
35
+ end
36
+
37
+ context "when the page can't be edited" do
38
+ before { described_class.any_instance.stub(:page_is_editable?).and_return(false) }
39
+
40
+ it "returns a status of 403 'Forbidden'" do
41
+ make_request :new_page, name: "New Page"
42
+ expect(@response.status).to eq 403
43
+ end
44
+ end
45
+ end
46
+
47
+ describe "#update_page" do
48
+ context "when the page can be edited" do
49
+ it "updates the attributes of the page" do
50
+ make_request :update_page, path: page.slug, name: "New Name"
51
+ page.reload
52
+ expect(page.name).to eq "New Name"
53
+ expect(page.slug).to eq "/new-name"
54
+ end
55
+ end
56
+ end
57
+ end
58
+
59
+ # Mock a request to the controller without
60
+ # Using Rails routing. Makes the response available
61
+ # in the @response instance variable.
62
+ def make_request(action, params = {})
63
+ path = params[:path] || "/"
64
+ env = Rack::MockRequest.env_for(path, :params => params.except(:path), method: :post)
65
+ status, headers, body = described_class.action(action).call(env)
66
+ @response = ActionDispatch::TestResponse.new(status, headers, body)
67
+ @controller = body.request.env['action_controller.instance']
68
+ end
@@ -0,0 +1,33 @@
1
+ require "spec_helper"
2
+
3
+ describe Thesis::PageContent do
4
+ let(:page) { create(:page) }
5
+ let(:page_content) { create(:page_content, attributes.merge(page_id: page.id)) }
6
+
7
+ describe "#render" do
8
+ subject { page_content.render }
9
+
10
+ context "when the content type is 'html'" do
11
+ let(:attributes) {{ content_type: 'html' }}
12
+
13
+ it { should match /thesis-content-html/ }
14
+ it { should match page_content.content }
15
+ end
16
+
17
+ context "when the content type is 'text'" do
18
+ let(:attributes) {{ content_type: "text" }}
19
+
20
+ it { should match /thesis-content-text/ }
21
+ it { should match page_content.content }
22
+ end
23
+
24
+ context "when the content type is 'image'" do
25
+ let(:attributes) {{ content_type: "image" }}
26
+
27
+ pending "currently renders as 'html'. Consider using #render_image in #render."
28
+ # it { should match /thesis-content-image/ }
29
+ # it { should match /img/ }
30
+ # it { should match page_content.content }
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,49 @@
1
+ require "spec_helper"
2
+
3
+ describe Thesis::Page do
4
+ subject(:page) { create(:page) }
5
+
6
+ describe "#update_slug" do
7
+ let(:page) { build(:page, slug: "/original-slug") }
8
+
9
+ it "updates the page's slug attribute, based on the page name" do
10
+ page.name = "New Name"
11
+ page.update_slug
12
+ expect(page.slug).to eq "/new-name"
13
+ end
14
+ end
15
+
16
+ describe "#update_subpage_slugs" do
17
+ let!(:parent) { create(:page, name: "Parent") }
18
+ let!(:subpage) { create(:page, name: "Subpage", parent_id: parent.id) }
19
+
20
+ before { parent.reload }
21
+
22
+ it "fixes the subpage's slug attributes when the parent's name is updated" do
23
+ parent.name = "New Parent Name"
24
+ parent.save
25
+
26
+ expect(subpage.reload.slug).to eq "/new-parent-name/subpage"
27
+ end
28
+ end
29
+
30
+ describe "#content" do
31
+ it "creates a Thesis::PageContent record if one does not exist" do
32
+ page.content("nonexistent-content-block")
33
+ content = Thesis::PageContent.first
34
+ expect(content.name).to eq "nonexistent-content-block"
35
+ expect(content.content_type).to eq "html"
36
+ end
37
+
38
+ it "returns a string of content" do
39
+ result = page.content("nonexistent-content-block")
40
+ expect(result).to be_a String
41
+ end
42
+ end
43
+
44
+ describe "#path" do
45
+ it "is an alias for #slug" do
46
+ expect(page.path).to eq page.slug
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,64 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+ require 'rails/all'
4
+ require 'factory_girl'
5
+ require 'rspec/autorun'
6
+ require 'database_cleaner'
7
+
8
+ # Require all the Thesis files
9
+ Dir[File.join('.', '/lib/thesis/**/*.rb')].each {|file| require file }
10
+
11
+ # Load Factories
12
+ FactoryGirl.find_definitions
13
+
14
+ # Configure ActiveRecord Connection
15
+ # Use memory store since we don't care about persistent data here.
16
+ ActiveRecord::Base.establish_connection(
17
+ :adapter => "sqlite3",
18
+ :database => ":memory:"
19
+ )
20
+
21
+ # Configure ActiveRecord Testing Schema
22
+ ActiveRecord::Schema.define do
23
+ self.verbose = false
24
+
25
+ create_table :pages do |t|
26
+ t.integer :parent_id
27
+ t.string :name
28
+ t.string :slug
29
+ t.string :title
30
+ t.string :description
31
+ t.integer :sort_order, default: 0, null: false
32
+ t.string :template, default: "default", null: false
33
+ t.timestamps
34
+ end
35
+
36
+ create_table :page_contents do |t|
37
+ t.integer :page_id, null: false
38
+ t.string :name, null: false
39
+ t.text :content, default: "Edit This Content Area"
40
+ t.string :content_type, default: :html
41
+ t.timestamps
42
+ end
43
+ end
44
+
45
+ RSpec.configure do |config|
46
+ # Pretty FactoryGirl syntax. For more details, visit
47
+ # https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#using-factories
48
+ config.include FactoryGirl::Syntax::Methods
49
+
50
+ DatabaseCleaner.strategy = :transaction
51
+
52
+ # Configure DatabaseCleaner to set up a new
53
+ # transaction at the beginning of each test.
54
+ config.before do
55
+ DatabaseCleaner.start
56
+ end
57
+
58
+ # Reload FactoryGirl definitions and clean
59
+ # the database after every test.
60
+ config.after do
61
+ FactoryGirl.reload
62
+ DatabaseCleaner.clean
63
+ end
64
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thesis
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,8 +9,24 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-21 00:00:00.000000000 Z
13
- dependencies: []
12
+ date: 2013-03-23 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rails
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 3.2.13
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 3.2.13
14
30
  description: ! 'Thesis: A Rails CMS that doesn''t hijack your development workflow.'
15
31
  email:
16
32
  - contact@clearsightstudio.com
@@ -18,15 +34,37 @@ executables: []
18
34
  extensions: []
19
35
  extra_rdoc_files: []
20
36
  files:
21
- - .gitignore
22
- - Gemfile
23
- - LICENSE.txt
24
- - README.md
25
- - Rakefile
26
- - lib/thesis.rb
27
- - lib/thesis/base.rb
37
+ - lib/assets/javascripts/thesis/hallo.js
38
+ - lib/assets/javascripts/thesis/thesis.js.coffee
39
+ - lib/assets/javascripts/thesis.js
40
+ - lib/assets/stylesheets/thesis/thesis.css.scss
41
+ - lib/assets/stylesheets/thesis.css
42
+ - lib/generators/thesis/install/install_generator.rb
43
+ - lib/generators/thesis/install/templates/migrations/create_page.rb
44
+ - lib/generators/thesis/install/templates/migrations/create_page_content.rb
45
+ - lib/generators/thesis/install/templates/page_templates/default.html.erb
46
+ - lib/generators/thesis/install/templates/page_templates/default.html.haml
47
+ - lib/generators/thesis/install/templates/page_templates/default.html.slim
48
+ - lib/tasks/thesis_tasks.rake
49
+ - lib/thesis/colorizer.rb
50
+ - lib/thesis/controllers/controller_helpers.rb
51
+ - lib/thesis/controllers/thesis_controller.rb
52
+ - lib/thesis/engine.rb
53
+ - lib/thesis/exceptions.rb
54
+ - lib/thesis/models/page.rb
55
+ - lib/thesis/models/page_content.rb
56
+ - lib/thesis/railtie.rb
57
+ - lib/thesis/routing/route_constraint.rb
58
+ - lib/thesis/routing/routes.rb
28
59
  - lib/thesis/version.rb
29
- - thesis.gemspec
60
+ - lib/thesis.rb
61
+ - README.md
62
+ - spec/factories/page_contents.rb
63
+ - spec/factories/pages.rb
64
+ - spec/lib/thesis/controllers/thesis_controller_spec.rb
65
+ - spec/lib/thesis/models/page_content_spec.rb
66
+ - spec/lib/thesis/models/page_spec.rb
67
+ - spec/spec_helper.rb
30
68
  homepage: https://github.com/clearsightstudio/thesis
31
69
  licenses: []
32
70
  post_install_message:
@@ -38,7 +76,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
38
76
  requirements:
39
77
  - - ! '>='
40
78
  - !ruby/object:Gem::Version
41
- version: '0'
79
+ version: 1.9.3
42
80
  required_rubygems_version: !ruby/object:Gem::Requirement
43
81
  none: false
44
82
  requirements:
@@ -47,8 +85,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
47
85
  version: '0'
48
86
  requirements: []
49
87
  rubyforge_project:
50
- rubygems_version: 1.8.24
88
+ rubygems_version: 1.8.25
51
89
  signing_key:
52
90
  specification_version: 3
53
91
  summary: ! 'Thesis: A Rails CMS that doesn''t hijack your development workflow.'
54
- test_files: []
92
+ test_files:
93
+ - spec/factories/page_contents.rb
94
+ - spec/factories/pages.rb
95
+ - spec/lib/thesis/controllers/thesis_controller_spec.rb
96
+ - spec/lib/thesis/models/page_content_spec.rb
97
+ - spec/lib/thesis/models/page_spec.rb
98
+ - spec/spec_helper.rb
data/.gitignore DELETED
@@ -1,17 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in thesis.gemspec
4
- gemspec
data/LICENSE.txt DELETED
@@ -1,22 +0,0 @@
1
- Copyright (c) 2013 ClearSight Studio
2
-
3
- MIT License
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining
6
- a copy of this software and associated documentation files (the
7
- "Software"), to deal in the Software without restriction, including
8
- without limitation the rights to use, copy, modify, merge, publish,
9
- distribute, sublicense, and/or sell copies of the Software, and to
10
- permit persons to whom the Software is furnished to do so, subject to
11
- the following conditions:
12
-
13
- The above copyright notice and this permission notice shall be
14
- included in all copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile DELETED
@@ -1 +0,0 @@
1
- require "bundler/gem_tasks"
data/lib/thesis/base.rb DELETED
@@ -1,5 +0,0 @@
1
- module Thesis
2
- class Base
3
- # TODO: Make this thing sing.
4
- end
5
- end
data/thesis.gemspec DELETED
@@ -1,19 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'thesis/version'
5
-
6
- Gem::Specification.new do |gem|
7
- gem.name = "thesis"
8
- gem.version = Thesis::VERSION
9
- gem.authors = ["ClearSight Studio"]
10
- gem.email = ["contact@clearsightstudio.com"]
11
- gem.description = %q{Thesis: A Rails CMS that doesn't hijack your development workflow.}
12
- gem.summary = %q{Thesis: A Rails CMS that doesn't hijack your development workflow.}
13
- gem.homepage = "https://github.com/clearsightstudio/thesis"
14
-
15
- gem.files = `git ls-files`.split($/)
16
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
- gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
- gem.require_paths = ["lib"]
19
- end