garnish 0.0.1 → 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.
@@ -0,0 +1,27 @@
1
+ 0.0.3 (February 1, 2012)
2
+
3
+ * Version bump so I can push new version to rubygems
4
+
5
+ 0.0.2 (February 1, 2012)
6
+
7
+ * Added spec/README.rdoc
8
+ * Added CHANGELOG.rdoc
9
+ * Actually wrote some docs for README.rdoc
10
+ * Version Bump to 0.0.2
11
+
12
+ 0.0.2 (January 28, 2011)
13
+
14
+ * Almost a complete re-write from the original Decorator wrapping method to
15
+ the new presenter inclusion method.
16
+ * Updated all specs to adhere to new extension method.
17
+
18
+ 0.0.1 (November 03, 2011)
19
+
20
+ * Initial Release
21
+
22
+ 0.0.1 (October 25, 2011)
23
+
24
+ * Initial Commit
25
+
26
+
27
+
data/Gemfile CHANGED
@@ -1,3 +1,9 @@
1
1
  source "http://rubygems.org"
2
2
 
3
+ group :development do
4
+ gem 'guard'
5
+ gem 'guard-rspec'
6
+ gem 'guard-spin'
7
+ end
8
+
3
9
  gemspec
data/Guardfile CHANGED
@@ -4,12 +4,22 @@ guard 'bundler' do
4
4
  # watch(/^.+\.gemspec/)
5
5
  end
6
6
 
7
- guard 'spork', :rspec_env => { 'RAILS_ENV' => 'test' }, :cucumber => false, :wait => 40 do
7
+ guard 'spin' do
8
+ # uses the .rspec file
9
+ # --colour --fail-fast --format documentation --tag ~slow
10
+ watch(%r{^spec/.+_spec\.rb})
11
+ watch(%r{^app/(.+)\.rb}) { |m| "spec/#{m[1]}_spec.rb" }
12
+ watch(%r{^app/(.+)\.haml}) { |m| "spec/#{m[1]}.haml_spec.rb" }
13
+ watch(%r{^lib/(.+)\.rb}) { |m| "spec/lib/#{m[1]}_spec.rb" }
14
+ watch(%r{^app/controllers/(.+)_(controller)\.rb}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/requests/#{m[1]}_spec.rb"] }
8
15
  watch('Gemfile')
9
16
  watch('Gemfile.lock')
10
17
  watch('spec/spec_helper.rb')
18
+ watch('Guardfile')
11
19
  end
12
20
 
13
- guard 'rspec', :cli => "--drb", :version => 2, :rvm => ['1.9.3'] do
14
- watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/requests/#{m[1]}_spec.rb" }
21
+ guard 'rspec', :cli => "--drb --color --order random", :version => 2, :rvm => ['1.9.3'] do
22
+ watch(%r{^spec/.+_spec\.rb$})
23
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
24
+ watch('spec/spec_helper.rb') { "spec" }
15
25
  end
@@ -1,2 +1,100 @@
1
- No docs yet but I couldn't go without Travis'ing it
2
- {<img src="http://travis-ci.org/brianp/garnish.png" />}[http://travis-ci.org/brianp/garnish]
1
+ = Garnish {<img src="http://travis-ci.org/brianp/garnish.png" />}[http://travis-ci.org/brianp/garnish]
2
+
3
+ RDocs[http://rdoc.info/projects/brianp/garnish]
4
+
5
+ Garnish is a Presenter / Decorator pattern for models in Rails. It gives a home to presntation level view logic that normally litters helpers and view files. Using it can help you:
6
+
7
+ * Keep helper files and views clean of if/else statements and other logic
8
+ * Better define an interface for views to interact with models
9
+ * Maintain a very familiar OOP pattern within your project directory
10
+ * Keep you controller code clean by never having to instantiate the presenters
11
+ * Handle Decorating / Presenting standard Rails relationships
12
+
13
+ == Installation
14
+
15
+ In <b>Rails 3</b>, add this to your Gemfile and run the +bundle+ command.
16
+
17
+ gem "garnish"
18
+
19
+ Alternatively, you can install it as a plugin.
20
+
21
+ rails plugin install git://github.com/brianp/garnish.git
22
+
23
+
24
+ == Getting Started
25
+
26
+ A lot of magic happens with Garnish in an attempt to make things incredibly simple for you.
27
+
28
+ === 1. Define You Presenters (Generators coming soon!)
29
+
30
+ Create a folder in app/ called presenters. ex <tt>app/presenters/</tt>
31
+
32
+ Create a presenter matching the name of your model in your presenters folder. ex <tt>app/presenters/user_presenter.rb</tt>
33
+
34
+ Define the user_presenter
35
+
36
+ module UserPresenter
37
+ include Garnish::Presenter
38
+
39
+ end
40
+
41
+ === 2. Add methods to your presenter
42
+
43
+ Define method in your presenter as regular instance methods
44
+
45
+ module UserPresenter
46
+ include Garnish::Presenter
47
+
48
+ def greeting
49
+ if last_login.nil?
50
+ "Welcome #{name}, can we offer you a tour?"
51
+ else
52
+ "Welcome back #{name}"
53
+ end
54
+ end
55
+
56
+ end
57
+
58
+ === 3. Add the <tt>garnish</tt> call
59
+
60
+ In <tt>app/controllers/application_controller.rb</tt> add the garnish call.
61
+
62
+ class ApplicationController < ActionController::Base
63
+ protect_from_forgery
64
+
65
+ garnish
66
+ end
67
+
68
+ Or If you don't want to use Garnish application wide simply add the call into a specific controller.
69
+
70
+ === 4. Use respond_with
71
+
72
+ The only change you need to make to start using your presenters now is to use respond_with inside any controller that has been garnished
73
+
74
+ <tt>app/controllers/user_controller.rb</tt>
75
+
76
+ def show
77
+ @user = User.find(params[:id])
78
+
79
+ respond_with @user do |format|
80
+ format.html # show.html.erb
81
+ end
82
+ end
83
+
84
+ Garnish will now find and load presenters for any instance variables you set inside your action. *NOT* just the ivar passed to the respond_with block.
85
+
86
+ == 5. Start using your presenter methods
87
+
88
+ <tt>app/views/users/show.html.erb</tt>
89
+
90
+ <span><%= @user.greeting %></span>
91
+
92
+ == Questions or Problems?
93
+
94
+ If you have any issues with Garnish which you cannot find the solution to, please add an {issue on GitHub}[https://github.com/brianp/garnish/issues] or fork the project and send a pull request.
95
+
96
+ To get the specs running you should call +bundle+ and then +rake+. See the {spec/README}[https://github.com/brianp/garnish/blob/master/spec/README.rdoc] for more information.
97
+
98
+ == Special Thanks
99
+
100
+ Garnish was inspired by draper[https://github.com/jcasimir/draper/] and the RailsCast Pro episode #287 Presenters from Scratch. See the CHANGELOG[https://github.com/brianp/garnish/blob/master/CHANGELOG.rdoc] for the full list.
@@ -19,6 +19,6 @@ Gem::Specification.new do |s|
19
19
  s.require_paths = ["lib"]
20
20
 
21
21
  # specify any dependencies here; for example:
22
+ s.add_dependency "activesupport", '>= 3.0.0'
22
23
  s.add_development_dependency "rspec"
23
- s.add_development_dependency "rails", '~> 3.0.9'
24
24
  end
@@ -4,3 +4,8 @@ require 'garnish/responder'
4
4
  require 'garnish/controller'
5
5
  require 'garnish/presenter/relationships'
6
6
  require 'garnish/presenter'
7
+
8
+ require 'garnish/model_adapters/abstract_adapter'
9
+ require 'garnish/model_adapters/default_adapter'
10
+ require 'garnish/model_adapters/mongoid_adapter' if defined? Mongoid
11
+ require 'garnish/model_adapters/active_record_adapter' if defined? ActiveRecord
@@ -2,16 +2,14 @@ module Garnish
2
2
  module Converter
3
3
  extend ActiveSupport::Concern
4
4
 
5
- module ClassMethods
6
- def class_exists?(class_name)
5
+ module InstanceMethods
6
+
7
+ def module_exists?(class_name)
7
8
  klass = Module.const_get(class_name)
8
- return klass.is_a?(Class)
9
+ return klass.is_a?(Module)
9
10
  rescue NameError
10
11
  return false
11
12
  end
12
- end
13
-
14
- module InstanceMethods
15
13
 
16
14
  def convert(record, view = nil)
17
15
  view ||= self.template
@@ -24,22 +22,18 @@ module Garnish
24
22
 
25
23
  presenter_name = "#{klass.to_s}Presenter"
26
24
 
27
- if self.class_exists?(presenter_name.to_sym)
25
+ if module_exists?(presenter_name.to_sym)
28
26
  if record.respond_to?(:each)
29
- presenter = record.map{ |v| presenter_name.constantize.new(v, view) }
27
+ record.map do |v|
28
+ v.extend(presenter_name.constantize)
29
+ v.template = view
30
+ end
30
31
  else
31
- presenter = presenter_name.constantize.new(record, view)
32
+ record.extend(presenter_name.constantize)
33
+ record.template = view
32
34
  end
33
35
  end
34
36
 
35
- presenter
36
- end
37
-
38
- def class_exists?(class_name)
39
- klass = Module.const_get(class_name)
40
- return klass.is_a?(Class)
41
- rescue NameError
42
- return false
43
37
  end
44
38
  end
45
39
 
@@ -0,0 +1,13 @@
1
+ module Garnish
2
+ module ModelAdapters
3
+ class AbstractAdapter
4
+ def self.inherited(subclass)
5
+ @subclass = subclass
6
+ end
7
+
8
+ def self.adapter_class
9
+ val = @subclass || Garnish::ModelAdapters::DefaultAdapter
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ module Garnish
2
+ module ModelAdapters
3
+ class ActiveRecordAdapter < AbstractAdapter
4
+
5
+ def self.defined_relationships(klass)
6
+ klass.reflections.keys
7
+ end
8
+
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ module Garnish
2
+ module ModelAdapters
3
+ class DefaultAdapter
4
+
5
+ def self.defined_relationships(klass)
6
+ klass.reflections.keys
7
+ end
8
+
9
+ end
10
+ end
11
+ end
12
+
@@ -0,0 +1,11 @@
1
+ module Garnish
2
+ module ModelAdapters
3
+ class MongoidAdapter < AbstractAdapter
4
+
5
+ def self.defined_relationships(klass)
6
+ klass.relations.keys
7
+ end
8
+
9
+ end
10
+ end
11
+ end
@@ -1,48 +1,23 @@
1
1
  module Garnish
2
2
  module Presenter
3
3
  extend ActiveSupport::Concern
4
- include Garnish::Presenter::Relationships
5
4
 
6
5
  included do
7
- attr_accessor :record
8
6
  attr_accessor :template
9
- attr_accessor :record_class
10
7
  end
11
8
 
12
- module InstanceMethods
13
- def initialize(r, t)
14
- self.record = r
15
- self.template = t
16
- self.record_class = r.class
17
- end
18
-
19
- def respond_to?(method, include_private = false)
20
- if self.methods.include?(method)
21
- super
22
- else
23
- self.record.respond_to?(method)
24
- end
25
- end
26
-
27
- protected
28
-
29
- def method_missing(method, *args, &block)
30
- begin
31
- # Check the record being presented first
32
- # If method doesn't exists check the template for helper convenience
33
- self.record.send(method, *args, &block)
34
- rescue NoMethodError
35
- self.template.send(method, *args, &block)
36
- end
9
+ module ClassMethods
10
+ def extended(base)
11
+ base.extend Garnish::Presenter::Relationships
37
12
  end
38
13
  end
39
14
 
40
- module ClassMethods
15
+ module InstanceMethods
41
16
 
42
17
  protected
43
18
 
44
19
  def method_missing(method, *args, &block)
45
- record_class.send(method, *args, &block)
20
+ self.template.send(method, *args, &block) unless @template.blank?
46
21
  end
47
22
  end
48
23
 
@@ -1,28 +1,23 @@
1
1
  module Garnish
2
2
  module Presenter
3
3
  module Relationships
4
- extend ActiveSupport::Concern
5
- include Garnish::Converter
6
4
 
7
- included do
8
- relationships = self.record_class.relations.keys
5
+ def self.extended(base)
6
+ base.extend Garnish::Converter::InstanceMethods
7
+ base.class_eval do
8
+ relationships = Garnish::ModelAdapters::AbstractAdapter.adapter_class.defined_relationships(self)
9
9
 
10
- relationships.map do |key|
11
- define_method key do
12
- arry = self.record.send(key)
13
- arry = convert(arry)
14
- arry
10
+ relationships.map do |key|
11
+ alias_method "#{key}_orig".to_sym, key.to_sym
12
+ define_method "#{key}" do |opts = nil, *rest|
13
+ records = self.send("#{key}_orig")
14
+ convert(records)
15
+ records
16
+ end
15
17
  end
16
18
  end
17
19
  end
18
20
 
19
- module ClassMethods
20
- def record_class
21
- str = self.to_s
22
- str.slice!("Presenter")
23
- str.constantize
24
- end
25
- end
26
21
  end
27
22
  end
28
23
  end
@@ -6,10 +6,7 @@ module Garnish
6
6
 
7
7
  vars.each do |var|
8
8
  record = controller.instance_variable_get(var.to_s)
9
-
10
- presenter = convert(record, controller.view_context)
11
-
12
- controller.instance_variable_set(var.to_s, presenter)
9
+ convert(record, controller.view_context)
13
10
  end
14
11
 
15
12
  super
@@ -1,3 +1,3 @@
1
1
  module Garnish
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -0,0 +1,10 @@
1
+ = Garnish Specs
2
+
3
+ == Running the specs
4
+
5
+ To run the specs first run the +bundle+ command to install the necessary gems and the +rake+ command to run the specs.
6
+
7
+ bundle
8
+ rake
9
+
10
+ The specs currently require Ruby 1.9.2+ support for 1.8.7 may come if required.
@@ -4,14 +4,17 @@ describe "A Garnished Controller" do
4
4
 
5
5
  subject { TestController }
6
6
 
7
- it "should have the garnish method defined" do
8
- subject.respond_to?(:garnish).should be_true
7
+ it "should have the Garnish::Controller module already included" do
8
+ subject.included_modules.include?(Garnish::Controller).should be_true
9
9
  end
10
10
 
11
- it "should set the responder to Garnish::Responder" do
11
+ it "that calls the garnish marco should set the responder to Garnish::Responder" do
12
12
  subject.garnish
13
13
  subject.responder.should equal Garnish::Responder
14
14
  end
15
- end
16
-
17
15
 
16
+ it "should call respond_to with :html" do
17
+ subject.should_receive(:respond_to).with(:html)
18
+ subject.garnish
19
+ end
20
+ end
@@ -4,59 +4,37 @@ describe "A Garnish Converter" do
4
4
 
5
5
  context "instance" do
6
6
 
7
- before(:each) do
8
- @test_class = TestClass.new
9
- @template = Class.new
10
- @test_presenter = TestClassPresenter.new(@test_class, @template)
11
- end
12
-
13
- subject { @test_presenter }
14
-
15
- it "should define class_exists?" do
16
- subject.respond_to?(:class_exists?).should be_true
17
- end
18
-
19
- it "should return true from class_exists if class exists" do
20
- subject.class_exists?(:TestClassPresenter).should be_true
21
- end
22
-
23
- it "should return false from class_exists if class doesn't exists" do
24
- subject.class_exists?(:BadClass).should be_false
25
- end
7
+ let(:template) { stub }
8
+ let(:test_class) { TestClass.new }
9
+ let(:responder) { TestResponder.new }
26
10
 
27
11
  context "with a template" do
28
- it "should take a record variable and wrap it in a presenter if a presenter exists" do
29
- presenter = subject.convert(@test_class, @template)
30
- presenter.class.should equal TestClassPresenter
31
- presenter.record.should equal @test_class
12
+ it "should take a record variable and include the presenter module" do
13
+ responder.convert(test_class, template)
14
+ test_class.eigenclass.included_modules.should include TestClassPresenter
15
+ end
16
+
17
+ it "should take an array of records and include the presenter module" do
18
+ records = [test_class, TestClass.new, TestClass.new]
19
+ responder.convert(records)
20
+ records.map { |r| r.eigenclass.included_modules.should include TestClassPresenter }
32
21
  end
33
22
  end
34
23
 
35
24
  context "without a template" do
36
- it "should take a record variable and wrap it in a presenter if a presenter exists" do
37
- presenter = subject.convert(@test_class)
38
- presenter.class.should equal TestClassPresenter
39
- presenter.record.should equal @test_class
40
- presenter.template.should equal @template
25
+ it "should take a record variable and include the presenter module" do
26
+ responder.convert(test_class)
27
+ test_class.eigenclass.included_modules.should include TestClassPresenter
41
28
  end
42
- end end
43
-
44
- context "class" do
45
- subject { TestClassPresenter }
46
-
47
- it "should define class_exists?" do
48
- subject.respond_to?(:class_exists?).should be_true
49
29
  end
50
30
 
51
- it "should return true from class_exists if class exists" do
52
- subject.class_exists?(:TestClassPresenter).should be_true
31
+ it "should return true from module_exists if module exists" do
32
+ responder.module_exists?(:TestClassPresenter).should be_true
53
33
  end
54
34
 
55
- it "should return false from class_exists if class doesn't exists" do
56
- subject.class_exists?(:BadClass).should be_false
35
+ it "should return false from module_exists if module doesn't exists" do
36
+ responder.module_exists?(:BadClass).should be_false
57
37
  end
58
38
  end
59
39
 
60
40
  end
61
-
62
-
@@ -2,33 +2,21 @@ require 'spec_helper'
2
2
 
3
3
  describe "A Presenter Relationship" do
4
4
 
5
- context "instance" do
6
-
7
- before(:each) do
8
- @test_class = TestClass.new
9
- @template = Class.new
10
- @test_presenter = TestClassPresenter.new(@test_class, @template)
11
- end
12
-
13
- subject { @test_presenter }
14
-
15
- it "should have the records relationships defined" do
16
- subject.respond_to?(:users).should be_true
17
- end
5
+ let(:test_class) { TestClass.new }
6
+ before { test_class.extend Garnish::Presenter::Relationships }
18
7
 
8
+ it "should respond to the original method name of the relationships" do
9
+ test_class.stub(:template => nil)
10
+ test_class.users
19
11
  end
20
12
 
21
- context "class" do
22
- subject { TestClassPresenter }
23
-
24
- it "should return record_class" do
25
- subject.record_class.should equal TestClass
26
- end
13
+ it "should call convert on the records of the relationship" do
14
+ test_class.should_receive(:convert)
15
+ test_class.users
16
+ end
27
17
 
28
- it "should not have the records relationships defined" do
29
- subject.respond_to?(:users).should be_false
30
- end
18
+ it "should alias the relationship methods" do
19
+ test_class.respond_to?(:users_orig).should be_true
31
20
  end
32
21
 
33
22
  end
34
-
@@ -1,75 +1,23 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe "A Presenter" do
4
- context "should initialize" do
5
- it "with record and no template" do
6
- TestClassPresenter.new(TestClass.new, nil).should be_true
7
- end
3
+ describe "A Garnish Presenter" do
8
4
 
9
- context "and populate" do
10
- before(:each) do
11
- @test_class = TestClass.new
12
- @template = Class.new
13
- @test_presenter = TestClassPresenter.new(@test_class, @template)
14
- end
5
+ let(:test_class) { TestClass.new }
6
+ before { TestClass.send :include, TestClassPresenter }
15
7
 
16
- subject {@test_presenter}
17
-
18
- it "the record field" do
19
- subject.record.should equal @test_class
20
- end
21
-
22
- it "the template field" do
23
- subject.template.should equal @template
24
- end
25
-
26
- it "the record_class field" do
27
- subject.record_class.should equal @test_class.class
28
- end
29
- end
8
+ it "should add the template attribute accessor" do
9
+ test_class.template = 42
10
+ test_class.template.should eq 42
30
11
  end
31
12
 
32
- context "class should delgate" do
33
- subject { TestClassPresenter }
34
-
35
- it "method missing to non presenter class" do
36
- TestClass.should_receive(:test_method).and_raise(NoMethodError)
37
- lambda {subject.test_method}.should raise_error
38
- end
13
+ it "should send missing methods to the view context" do
14
+ test_class.template = stub(:template)
15
+ test_class.template.should_receive(:this_call)
16
+ test_class.this_call
39
17
  end
40
18
 
41
- context "instance should" do
42
- before(:each) do
43
- @test_class = TestClass.new
44
- @template = Class.new
45
- @test_presenter = TestClassPresenter.new(@test_class, @template)
46
- end
47
-
48
- subject { @test_presenter }
49
-
50
- context "delegate" do
51
- it "method missing to record if method is missing" do
52
- @test_class.should_receive(:test_method).and_return("Success!")
53
- subject.test_method.should match "Success!"
54
- end
55
-
56
- it "method missing to template if record lacks method" do
57
- @template.should_receive(:test_method).and_return("Success!")
58
- subject.test_method.should match "Success!"
59
- end
60
-
61
- it "respond_to? to record if method doesn't exist" do
62
- @test_class.should_receive(:respond_to?).with(:test_method).and_return(true)
63
- subject.respond_to?(:test_method).should be_true
64
- end
65
- end
66
-
67
- context "not delegate" do
68
- it "respond_to? when methods exisits" do
69
- @test_class.should_not_receive(:respond_to?)
70
- subject.respond_to?(:respond_to?).should be_true
71
- end
72
- end
73
-
19
+ it "should include Garnish::Presenter::Relationships when included" do
20
+ test_class.extend TestClassPresenter
21
+ test_class.eigenclass.included_modules.should include Garnish::Presenter::Relationships
74
22
  end
75
23
  end
@@ -0,0 +1,29 @@
1
+ require 'spec_helper'
2
+
3
+ describe "The Garnished Responder" do
4
+
5
+ let(:responder) { Garnish::Responder.new(controller, resources) }
6
+ let(:formats) { stub(:formats, :first => nil) }
7
+ let(:controller) { stub(:controller, :request => nil, :formats => formats, :view_context => nil) }
8
+ let(:resources) { stub(:resources, :last => nil) }
9
+
10
+ it "should have the Garnish::Converter module included" do
11
+ Garnish::Responder.included_modules.include?(Garnish::Converter).should be_true
12
+ end
13
+
14
+ context "with params" do
15
+ before { responder.stub(:template => nil) }
16
+
17
+ it "should call default render" do
18
+ responder.should_receive(:default_render)
19
+ responder.to_html
20
+ end
21
+
22
+ it "should call convert" do
23
+ responder.stub(:default_render => nil)
24
+ responder.should_receive(:convert).at_least(:once)
25
+ responder.to_html
26
+ end
27
+ end
28
+ end
29
+
@@ -7,31 +7,46 @@ require 'active_support/all'
7
7
  require 'action_controller'
8
8
  require 'garnish'
9
9
 
10
- # Spork.prefork do
11
- Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
10
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
12
11
 
13
- RSpec.configure do |config|
14
- config.mock_with :rspec
12
+ RSpec.configure do |config|
13
+ config.mock_with :rspec
15
14
 
16
- config.treat_symbols_as_metadata_keys_with_true_values = true
17
- config.filter_run :focus => true
18
- config.run_all_when_everything_filtered = true
15
+ config.treat_symbols_as_metadata_keys_with_true_values = true
16
+ config.filter_run :focus => true
17
+ config.run_all_when_everything_filtered = true
18
+ config.before(:all) do
19
+ require 'garnish'
19
20
  end
20
- # end
21
+ end
21
22
 
22
- # Spork.each_run do
23
+ class TestClass
24
+ def eigenclass
25
+ (class << self; self end)
26
+ end
23
27
 
24
- # end
28
+ def users
29
+ []
30
+ end
25
31
 
26
- class TestClass
27
32
  def self.relations
28
33
  {:users => []}
29
34
  end
35
+
36
+ def self.reflections
37
+ {:users => []}
38
+ end
30
39
  end
31
40
 
32
- class TestClassPresenter
41
+ module TestClassPresenter
33
42
  include Garnish::Presenter
34
43
  end
35
44
 
36
45
  class TestController < ActionController::Base
37
46
  end
47
+
48
+ class TestResponder
49
+ include Garnish::Converter
50
+
51
+ attr_accessor :template
52
+ end
metadata CHANGED
@@ -1,48 +1,65 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: garnish
3
- version: !ruby/object:Gem::Version
4
- version: 0.0.1
3
+ version: !ruby/object:Gem::Version
4
+ hash: 25
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 3
10
+ version: 0.0.3
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - brianp
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2011-11-03 00:00:00.000000000 Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
15
- name: rspec
16
- requirement: &70236155352860 !ruby/object:Gem::Requirement
17
+
18
+ date: 2012-02-01 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: activesupport
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
17
24
  none: false
18
- requirements:
19
- - - ! '>='
20
- - !ruby/object:Gem::Version
21
- version: '0'
22
- type: :development
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 7
29
+ segments:
30
+ - 3
31
+ - 0
32
+ - 0
33
+ version: 3.0.0
34
+ type: :runtime
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: rspec
23
38
  prerelease: false
24
- version_requirements: *70236155352860
25
- - !ruby/object:Gem::Dependency
26
- name: rails
27
- requirement: &70236155352360 !ruby/object:Gem::Requirement
39
+ requirement: &id002 !ruby/object:Gem::Requirement
28
40
  none: false
29
- requirements:
30
- - - ~>
31
- - !ruby/object:Gem::Version
32
- version: 3.0.9
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ hash: 3
45
+ segments:
46
+ - 0
47
+ version: "0"
33
48
  type: :development
34
- prerelease: false
35
- version_requirements: *70236155352360
36
- description: Provides an easy to use and transparent system for implementing the Decorator
37
- Pattern
38
- email:
49
+ version_requirements: *id002
50
+ description: Provides an easy to use and transparent system for implementing the Decorator Pattern
51
+ email:
39
52
  - brian.o.pearce@gmail.com
40
53
  executables: []
54
+
41
55
  extensions: []
56
+
42
57
  extra_rdoc_files: []
43
- files:
58
+
59
+ files:
44
60
  - .gitignore
45
61
  - .travis.yml
62
+ - CHANGELOG.rdoc
46
63
  - Gemfile
47
64
  - Guardfile
48
65
  - README.rdoc
@@ -51,42 +68,59 @@ files:
51
68
  - lib/garnish.rb
52
69
  - lib/garnish/controller.rb
53
70
  - lib/garnish/converter.rb
71
+ - lib/garnish/model_adapters/abstract_adapter.rb
72
+ - lib/garnish/model_adapters/active_record_adapter.rb
73
+ - lib/garnish/model_adapters/default_adapter.rb
74
+ - lib/garnish/model_adapters/mongoid_adapter.rb
54
75
  - lib/garnish/presenter.rb
55
76
  - lib/garnish/presenter/relationships.rb
56
77
  - lib/garnish/responder.rb
57
78
  - lib/garnish/version.rb
79
+ - spec/README.rdoc
58
80
  - spec/garnish/controller_spec.rb
59
81
  - spec/garnish/converter_spec.rb
60
82
  - spec/garnish/presenter/relationships_spec.rb
61
83
  - spec/garnish/presenter_spec.rb
84
+ - spec/garnish/responder_spec.rb
62
85
  - spec/spec_helper.rb
63
- homepage: ''
86
+ homepage: ""
64
87
  licenses: []
88
+
65
89
  post_install_message:
66
90
  rdoc_options: []
67
- require_paths:
91
+
92
+ require_paths:
68
93
  - lib
69
- required_ruby_version: !ruby/object:Gem::Requirement
94
+ required_ruby_version: !ruby/object:Gem::Requirement
70
95
  none: false
71
- requirements:
72
- - - ! '>='
73
- - !ruby/object:Gem::Version
74
- version: '0'
75
- required_rubygems_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ hash: 3
100
+ segments:
101
+ - 0
102
+ version: "0"
103
+ required_rubygems_version: !ruby/object:Gem::Requirement
76
104
  none: false
77
- requirements:
78
- - - ! '>='
79
- - !ruby/object:Gem::Version
80
- version: '0'
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ hash: 3
109
+ segments:
110
+ - 0
111
+ version: "0"
81
112
  requirements: []
113
+
82
114
  rubyforge_project: garnish
83
115
  rubygems_version: 1.8.10
84
116
  signing_key:
85
117
  specification_version: 3
86
118
  summary: Provides the decorator design pattern
87
- test_files:
119
+ test_files:
120
+ - spec/README.rdoc
88
121
  - spec/garnish/controller_spec.rb
89
122
  - spec/garnish/converter_spec.rb
90
123
  - spec/garnish/presenter/relationships_spec.rb
91
124
  - spec/garnish/presenter_spec.rb
125
+ - spec/garnish/responder_spec.rb
92
126
  - spec/spec_helper.rb