cynic 0.0.2 → 0.0.3

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: 921909ae4a5f456d4a8a6ab259cabd6db7cba467
4
- data.tar.gz: 57097bc3f55fb85f001eb6708b4fa7f6cf230191
3
+ metadata.gz: 386528d8ad4483f347d5b07827b8858c31fb919f
4
+ data.tar.gz: 8b6b303da8866422bc0aa8bbf820c4e00ddfde48
5
5
  SHA512:
6
- metadata.gz: fa68271e395072d4f6cfa50ff873fb76c2a13997e245f47762842770b8e11935267b6fb9aeeaec0192a90690893d4f84481454f68c9d7cdd1c86550faab25b27
7
- data.tar.gz: f73f4f287c5db2b37e109e33d8baf4dd116a4776dbca4281d4995b5456d3521eb70a704bdbfbbb7498920ef012f32c4963e43640ecfffbc21f5ca625899b421e
6
+ metadata.gz: d1abf0e9a88251822232e472e5fc4cfefe222901b74e7fe00e10fc02a14bcc792da028409a302cba9b597eff2c50f94bfdcf538059459e68b638dab5c7a9f542
7
+ data.tar.gz: 9250c5e4df267f107920b0a3e446648a7dd9ea4318d7697b2613342707d22587d05722ff61ab4a4bba8bc5c4906f089e616ab82602c168488ec2b47732e75cea
data/Gemfile CHANGED
@@ -2,3 +2,6 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in cynic.gemspec
4
4
  gemspec
5
+
6
+ gem "guard-rspec"
7
+ gem 'terminal-notifier-guard'
data/Guardfile ADDED
@@ -0,0 +1,9 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard :rspec do
5
+ watch(%r{^spec/.+_spec\.rb$})
6
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
7
+ watch('spec/spec_helper.rb') { "spec" }
8
+ end
9
+
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Cynic
2
2
 
3
- TODO: Write a gem description
3
+ Cynic is a Lightweight Rack-based framework. Cynic provides a framework with a few tools built on the ideas of rails.
4
4
 
5
5
  ## Installation
6
6
 
@@ -18,7 +18,9 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
 
21
- TODO: Write usage instructions here
21
+ ```bash
22
+ cynic new <name>
23
+ ```
22
24
 
23
25
  ## Contributing
24
26
 
data/bin/cynic CHANGED
@@ -51,9 +51,6 @@ module #{@app_name}
51
51
  # Your code here
52
52
  end
53
53
  end
54
-
55
-
56
-
57
54
  HEREDOC
58
55
  end
59
56
  end
@@ -69,6 +66,16 @@ run #{self.name}
69
66
  end
70
67
  end
71
68
 
69
+ def create_controller
70
+ make_file("app/controllers/application_controller.rb") do |file|
71
+ file.write <<-HEREDOC
72
+ class ApplicationController < Cynic::Controller
73
+ # Application wide methods and before_actions go here
74
+ end
75
+ HEREDOC
76
+ end
77
+ end
78
+
72
79
  def create_layout
73
80
  Dir.mkdir([self.name, "app", "views", "layouts"].join("/"))
74
81
  make_file("app/views/layouts/application.html.erb") do |file|
@@ -102,6 +109,7 @@ when "new"
102
109
  Dir.mkdir([generator.name, "public", "images"].join("/"))
103
110
  generator.create_config
104
111
  generator.create_application
112
+ generator.create_controller
105
113
  generator.create_gemfile
106
114
  generator.create_routes
107
115
  generator.create_layout
data/lib/cynic/app.rb CHANGED
@@ -30,7 +30,12 @@ module Cynic
30
30
  end
31
31
 
32
32
  def response
33
- Response.new(self.routing_to_request)
33
+ Response.new(execute_controller_actions)
34
+ end
35
+
36
+ def execute_controller_actions
37
+ object, method = self.routing_to_request
38
+ object.response(method)
34
39
  end
35
40
 
36
41
  def status
@@ -1,16 +1,54 @@
1
1
  module Cynic
2
2
  class Controller
3
+ class << self
4
+ attr_accessor :before_actions
5
+ def before_actions
6
+ @before_actions ||= Hash.new { Set.new }
7
+ end
8
+
9
+ def before_action(method, options={})
10
+ if options.has_key? :only
11
+ [options[:only]].flatten.each { |action| add_before_action(method, action) }
12
+ else
13
+ add_before_action(method)
14
+ end
15
+ end
16
+
17
+ def add_before_action(method, action=:all)
18
+ before_actions[action] <<= method
19
+ end
20
+ end
21
+
3
22
  def render(action)
4
23
  @action = action
5
- Renderer.new(full_path).body
24
+ Renderer.new(full_path, self).body
25
+ end
26
+
27
+ def response(method)
28
+ eval_set_of_actions
29
+ eval_set_of_actions(method)
30
+ send method
6
31
  end
7
32
 
33
+ private
34
+
35
+ # The +name+ split and joined into a string seperated by "/"'s
8
36
  def path
9
- self.class.to_s.split("::").join("/").downcase.gsub(/controller$/i, "")
37
+ name.split("::").join("/").downcase
10
38
  end
11
39
 
40
+ # The +path+ plus the current action.html.erb
12
41
  def full_path
13
42
  path + "/#{@action}.html.erb"
14
43
  end
44
+
45
+ # The Controllers class name without the word `controller` in it.
46
+ def name
47
+ self.class.to_s.gsub(/controller$/i, "")
48
+ end
49
+
50
+ def eval_set_of_actions(set=:all)
51
+ self.class.before_actions[set].each {|action| eval(action.to_s)}
52
+ end
15
53
  end
16
54
  end
@@ -1,12 +1,17 @@
1
1
  module Cynic
2
2
  class Renderer
3
- def initialize(path)
3
+ def initialize(path, controller=nil)
4
+
5
+ controller.instance_variables.each do |method|
6
+ self.instance_variable_set(method, controller.instance_variable_get(method))
7
+ end
8
+
4
9
  @full_path = path_prefix + path
5
10
  @layout = path_prefix + "layouts/application.html.erb"
6
11
  end
7
12
 
8
13
  def body
9
- layout { ERB.new(File.read(@full_path)).result }
14
+ layout { ERB.new(File.read(@full_path)).result(binding) }
10
15
  end
11
16
 
12
17
  def layout
data/lib/cynic/routing.rb CHANGED
@@ -12,10 +12,15 @@ module Cynic
12
12
  end
13
13
 
14
14
  def go_to(request_method, request_path)
15
- klass, action = @routings[request_method.to_sym][request_path]
16
- klass.send(action)
17
- rescue TypeError
18
- raise Error, "undefined routing #{request_method.upcase} '#{request_path}'"
15
+ if action(request_method, request_path)
16
+ action
17
+ else
18
+ raise Error, "undefined routing #{request_method.upcase} '#{request_path}'"
19
+ end
20
+ end
21
+
22
+ def action(request_method=nil, request_path=nil)
23
+ @action ||= @routings[request_method.to_sym][request_path]
19
24
  end
20
25
 
21
26
  def get(path, options={})
data/lib/cynic/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Cynic
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -1,13 +1,81 @@
1
1
  require 'spec_helper'
2
- class CynicController < Cynic::Controller;end
2
+
3
+ class CynicController < Cynic::Controller
4
+ def index
5
+ @greeting = "hello"
6
+ render :template
7
+ end
8
+
9
+ def do_i_live_in_a_tub?
10
+ @answer = "not yet"
11
+ end
12
+ end
13
+
3
14
  describe Cynic::Controller do
4
15
  let(:controller) { CynicController.new }
5
-
16
+ before { CynicController.instance_variable_set(:@before_actions, nil)}
6
17
  describe "#render" do
7
18
  it "finds a file" do
8
19
  Cynic::Renderer.any_instance.stub(:layout_file).and_return("<%= yield %>")
9
20
  File.should_receive(:read).with("app/views/cynic/index.html.erb").once.and_return('This is erb <%= "olleh".reverse %>')
10
21
  expect(controller.render(:index)).to eq "This is erb hello"
11
22
  end
23
+
24
+ it "controller instance vars are available to the view" do
25
+ Cynic::Renderer.any_instance.stub(:layout_file).and_return("<%= yield %>")
26
+ File.should_receive(:read).with("app/views/cynic/template.html.erb").once.and_return('This is erb <%= @greeting %>')
27
+ expect(controller.index).to eq "This is erb hello"
28
+ end
29
+
30
+ it "controller instance vars are available to the layout" do
31
+ Cynic::Renderer.any_instance.stub(:layout_file).and_return("<%= @greeting %> <%= yield %>")
32
+ File.should_receive(:read).with("app/views/cynic/template.html.erb").once.and_return('This is erb.')
33
+ expect(controller.index).to eq "hello This is erb."
34
+ end
35
+ end
36
+
37
+ describe ".before_action" do
38
+ it "responds to" do
39
+ expect(CynicController.respond_to?(:before_action)).to be_true
40
+ end
41
+
42
+ it "assigns each of the things to an array" do
43
+ CynicController.before_action :do_i_live_in_a_tub?
44
+ expect(CynicController.before_actions[:all]).to include :do_i_live_in_a_tub?
45
+ end
46
+
47
+ context ":all" do
48
+ it "calls each before action within :all" do
49
+ CynicController.before_action :do_i_live_in_a_tub?
50
+ File.should_receive(:read).with("app/views/cynic/template.html.erb").once.and_return('This is erb.')
51
+ controller.should_receive(:do_i_live_in_a_tub?).once.and_return(true)
52
+ controller.response(:index)
53
+ end
54
+
55
+ it "can use a instance var defined in a before action" do
56
+ CynicController.before_action :do_i_live_in_a_tub?
57
+ File.should_receive(:read).with("app/views/cynic/template.html.erb").once.and_return('Do I live in a tub? <%= @answer %>.')
58
+ expect(controller.response(:index)).to eq 'Do I live in a tub? not yet.'
59
+ end
60
+ end
61
+
62
+ context "when using the :only option" do
63
+ it "assigns the action name it should be nested under" do
64
+ CynicController.before_action :do_i_live_in_a_tub?, only: :show
65
+ expect(CynicController.before_actions[:show]).to include :do_i_live_in_a_tub?
66
+ end
67
+
68
+ it "assigns the action names it should be nested under" do
69
+ CynicController.before_action :do_i_live_in_a_tub?, only: [:show]
70
+ expect(CynicController.before_actions[:show]).to include :do_i_live_in_a_tub?
71
+ end
72
+
73
+ it "calls each before action within :all" do
74
+ CynicController.before_action :do_i_live_in_a_tub?, only: :index
75
+ File.should_receive(:read).with("app/views/cynic/template.html.erb").once.and_return('This is erb.')
76
+ controller.should_receive(:do_i_live_in_a_tub?).once.and_return(true)
77
+ controller.response(:index)
78
+ end
79
+ end
12
80
  end
13
81
  end
@@ -2,9 +2,9 @@ require 'spec_helper'
2
2
 
3
3
  describe Cynic::Renderer do
4
4
  path = "cynic/controller/index.html.erb"
5
- let(:renderer) { Cynic::Renderer.new(path) }
6
5
 
7
6
  describe "#render" do
7
+ let(:renderer) { Cynic::Renderer.new(path) }
8
8
  it "finds a file" do
9
9
  File.should_receive(:read).with("app/views/" + path).and_return('This is erb <%= "olleh".reverse %>')
10
10
  expect(renderer.body).to eq "This is erb hello"
@@ -15,6 +15,15 @@ describe Cynic::Renderer do
15
15
  File.should_receive(:read).with("app/views/" + path).and_return('This is erb <%= "olleh".reverse %>')
16
16
  expect(renderer.body).to eq "Layout: This is erb hello :file"
17
17
  end
18
+ end
19
+
20
+ describe "controller" do
21
+ let(:controller) { Cynic::Controller.new }
22
+ before { controller.instance_variable_set(:@test, "Test")}
23
+ let(:renderer) { Cynic::Renderer.new(path, controller) }
18
24
 
25
+ it "assigns the cynic controllers instance methods" do
26
+ expect(renderer.instance_variable_get(:@test)).to eq "Test"
27
+ end
19
28
  end
20
29
  end
@@ -5,16 +5,16 @@ describe Cynic::Routing do
5
5
  let(:routing) { defined_routing }
6
6
 
7
7
  it "calls the method to be returned" do
8
- expect(routing.go_to(:get, "/")).to eq ""
8
+ expect(routing.go_to(:get, "/")).to eq [String, :new]
9
9
  end
10
10
 
11
11
  it "calls the method to be returned" do
12
- expect(routing.go_to(:get, "/blog")).to be_an_instance_of Float
12
+ expect(routing.go_to(:get, "/blog").last).to eq :rand
13
13
  end
14
14
 
15
15
  it "returns the index" do
16
16
  Cynic::Controller.any_instance.stub(:index).and_return("This is erb hello")
17
- expect(routing.go_to(:get, "/cynic")).to eq "This is erb hello"
17
+ expect(routing.go_to(:get, "/cynic").first).to be_an_instance_of Cynic::Controller
18
18
  end
19
19
 
20
20
  it "raises an Routing::Error when the path doesn't exist" do
data/spec/spec_helper.rb CHANGED
@@ -1,2 +1,8 @@
1
1
  require 'cynic'
2
2
  require 'support/routing'
3
+
4
+ RSpec.configure do |config|
5
+ config.filter_run focus: true
6
+ config.run_all_when_everything_filtered = true
7
+ config.order = "random"
8
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cynic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bookis Smuin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-28 00:00:00.000000000 Z
11
+ date: 2014-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -62,6 +62,7 @@ extra_rdoc_files: []
62
62
  files:
63
63
  - .gitignore
64
64
  - Gemfile
65
+ - Guardfile
65
66
  - LICENSE.txt
66
67
  - README.md
67
68
  - Rakefile