rails-view-helper-objects 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ rspec/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in rails-view-helper-objects.gemspec
4
+ gemspec
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
@@ -0,0 +1,8 @@
1
+ # whats needed
2
+ require 'rails-view-helper-objects/version'
3
+ require 'action_view'
4
+
5
+ # run
6
+ require 'rails-view-helper-objects/base'
7
+ require 'rails-view-helper-objects/define_helper_method'
8
+
@@ -0,0 +1,18 @@
1
+ module RailsViewHelperObjects
2
+
3
+ class Base
4
+
5
+ attr_accessor :__view__
6
+
7
+ def self.inherited subclass
8
+ subclass.__send__(:include, RailsViewHelperObjects::DefineHelperMethod)
9
+ end
10
+
11
+ def method_missing(method, *args)
12
+ return __view__.__send__(method, *args) if __view__.respond_to?(method)
13
+ super
14
+ end
15
+
16
+ end
17
+
18
+ end
@@ -0,0 +1,18 @@
1
+ module RailsViewHelperObjects::DefineHelperMethod
2
+
3
+ def self.included klass
4
+
5
+ method_name = klass.name.underscore.split("/").last
6
+
7
+ # create a view helper that returns klass.new
8
+ ActionView::Helpers.module_eval do
9
+ define_method method_name do |*args|
10
+ obj = klass.new(*args)
11
+ # give the object access to the view
12
+ obj.__view__ = self
13
+ obj
14
+ end
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,3 @@
1
+ module RailsViewHelperObjects
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "rails-view-helper-objects/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "rails-view-helper-objects"
7
+ s.version = RailsViewHelperObjects::VERSION
8
+ s.authors = ["Ryan"]
9
+ s.email = ["ryanto"]
10
+ s.homepage = ""
11
+ s.summary = %q{Use objects in your views}
12
+ s.description = %q{Rails view helpers expressed as objects}
13
+
14
+ s.rubyforge_project = "rails-view-helper-objects"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_development_dependency "rspec"
22
+ s.add_dependency "rails", '>=3.0.0'
23
+ end
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ module AViewHelper
4
+
5
+ class MyHelper < RailsViewHelperObjects::Base
6
+ def hello
7
+ "hello!"
8
+ end
9
+
10
+ def p_tag
11
+ content_tag(:p, "Hello world!")
12
+ end
13
+
14
+ def this_will_break_things
15
+ slfhsdslfhslkdfh
16
+ end
17
+ end
18
+
19
+ end
20
+
21
+ describe RailsViewHelperObjects::Base do
22
+
23
+ before :each do
24
+ @view = AFakeView.new
25
+ end
26
+
27
+ describe "once inherited" do
28
+ it "should define a method in our view" do
29
+ @view.methods.should include :my_helper
30
+ end
31
+
32
+ it "should setup a view variable" do
33
+ obj = @view.my_helper
34
+ obj.__view__.class.name.should == "AFakeView"
35
+ end
36
+ end
37
+
38
+ describe "method missing" do
39
+
40
+ before :each do
41
+ @obj = @view.my_helper
42
+ end
43
+
44
+ it "should be able to call its own methods" do
45
+ @obj.hello.should == "hello!"
46
+ end
47
+
48
+ it "should run a view method when none is found in the class" do
49
+ "#{@obj.p_tag}".should == "<p>Hello world!</p>"
50
+ @obj.tag("br").should == "<br />"
51
+ end
52
+
53
+ it "should raise a method missing error when no method exits anywhere" do
54
+ lambda { @obj.this_will_break_things }.should raise_error
55
+ lambda { @obj.dfsdfsfsdfsdfsd }.should raise_error
56
+ end
57
+
58
+ end
59
+
60
+ end
61
+
@@ -0,0 +1,53 @@
1
+ require 'spec_helper'
2
+
3
+ describe RailsViewHelperObjects::DefineHelperMethod do
4
+
5
+ before :each do
6
+ @view = AFakeView.new
7
+
8
+ # we're mocking out base here
9
+ class AFakeViewHelper
10
+ include RailsViewHelperObjects::DefineHelperMethod
11
+ attr_accessor :__view__
12
+ attr_accessor :arg1, :arg2
13
+
14
+ def initialize arg1 = {}, arg2 = ""
15
+ @arg1 = arg1
16
+ @arg2 = arg2
17
+ end
18
+ end
19
+
20
+ @a_fake_view_helper = AFakeViewHelper.new
21
+ end
22
+
23
+ it "should define a method with the name of the class when it is included" do
24
+ @view.methods.should include :a_fake_view_helper
25
+ end
26
+
27
+ describe "creating the object" do
28
+ it "should create a new instance of the class when called" do
29
+ obj = @view.a_fake_view_helper
30
+ obj.should respond_to :class
31
+ obj.class.name.should == 'AFakeViewHelper'
32
+ end
33
+
34
+ it "should create a new instance of the class with an argument" do
35
+ obj = @view.a_fake_view_helper :color => :red, :shape => :square
36
+ obj.arg1[:shape].should == :square # yes, thats arg1 :)
37
+ end
38
+
39
+ it "should create a new instance with multiple arguments" do
40
+ # we just want to make sure we can jam as many arguments as
41
+ # possible in here. first is hash, second is string. see
42
+ # initialize constructor
43
+ obj = @view.a_fake_view_helper( { :color => :blue }, "hello")
44
+ obj.arg2.should == "hello"
45
+ end
46
+ end
47
+
48
+ it "should give full acces to the view" do
49
+ obj = @view.a_fake_view_helper
50
+ obj.__view__.class.name.should == "AFakeView"
51
+ end
52
+
53
+ end
@@ -0,0 +1,8 @@
1
+ $LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
2
+ require 'rails-view-helper-objects'
3
+
4
+
5
+ class AFakeView
6
+ include ActionView::Helpers
7
+ end
8
+
metadata ADDED
@@ -0,0 +1,94 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rails-view-helper-objects
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Ryan
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-04-01 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rails
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: 3.0.0
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 3.0.0
46
+ description: Rails view helpers expressed as objects
47
+ email:
48
+ - ryanto
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - .gitignore
54
+ - Gemfile
55
+ - Rakefile
56
+ - lib/rails-view-helper-objects.rb
57
+ - lib/rails-view-helper-objects/base.rb
58
+ - lib/rails-view-helper-objects/define_helper_method.rb
59
+ - lib/rails-view-helper-objects/version.rb
60
+ - rails-view-helper-objects.gemspec
61
+ - spec/base_spec.rb
62
+ - spec/define_helper_method_spec.rb
63
+ - spec/spec_helper.rb
64
+ homepage: ''
65
+ licenses: []
66
+ post_install_message:
67
+ rdoc_options: []
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ segments:
77
+ - 0
78
+ hash: -3351940357802698149
79
+ required_rubygems_version: !ruby/object:Gem::Requirement
80
+ none: false
81
+ requirements:
82
+ - - ! '>='
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ segments:
86
+ - 0
87
+ hash: -3351940357802698149
88
+ requirements: []
89
+ rubyforge_project: rails-view-helper-objects
90
+ rubygems_version: 1.8.21
91
+ signing_key:
92
+ specification_version: 3
93
+ summary: Use objects in your views
94
+ test_files: []