rails-view-helper-objects 0.0.1
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.
- data/.gitignore +5 -0
- data/Gemfile +4 -0
- data/Rakefile +1 -0
- data/lib/rails-view-helper-objects.rb +8 -0
- data/lib/rails-view-helper-objects/base.rb +18 -0
- data/lib/rails-view-helper-objects/define_helper_method.rb +18 -0
- data/lib/rails-view-helper-objects/version.rb +3 -0
- data/rails-view-helper-objects.gemspec +23 -0
- data/spec/base_spec.rb +61 -0
- data/spec/define_helper_method_spec.rb +53 -0
- data/spec/spec_helper.rb +8 -0
- metadata +94 -0
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
@@ -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,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
|
data/spec/base_spec.rb
ADDED
@@ -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
|
data/spec/spec_helper.rb
ADDED
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: []
|