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.
@@ -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: []