tagfiles 1.0.0

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,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 50e4b046fc394ab4e7f626914c6be51d5bdc52b9
4
+ data.tar.gz: d72b5c5166a426f63d49e3ee7b82b34d4e56870c
5
+ SHA512:
6
+ metadata.gz: 3900d40e45d7f1759d0cb030ea71ef34957ff3b9baf52fe100bf1fa853336a143757adbcc360a316cc16e7f19fe701654c1a06c511b55aa02ec91ead6c876fc9
7
+ data.tar.gz: 94293336566945dc55b317db43d5859cce98d2c7333bdc6ac1e118e5546b1d4f9597d24c747e01ddbd07f278f6d1cb865d8b8b22013b184545a801f98f49cc59
@@ -0,0 +1,15 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
15
+ log/
@@ -0,0 +1,17 @@
1
+ # Generated by `rubocop --auto-gen-config`
2
+ inherit_from: .rubocop_todo.yml
3
+
4
+ Lint/HandleExceptions:
5
+ Exclude:
6
+ - rakelib/*.rake
7
+
8
+ Style/Documentation:
9
+ Enabled: false
10
+
11
+ Style/StringLiterals:
12
+ EnforcedStyle: double_quotes
13
+
14
+ Style/RegexpLiteral:
15
+ Exclude:
16
+ - tagfiles.gemspec
17
+ - Guardfile
@@ -0,0 +1,6 @@
1
+ # This configuration was generated by `rubocop --auto-gen-config`
2
+ # on 2015-03-18 09:45:04 +0100 using RuboCop version 0.29.1.
3
+ # The point is for the user to remove these configuration records
4
+ # one by one as the offenses are removed from the code base.
5
+ # Note that changes in the inspected code, or installation of new
6
+ # versions of RuboCop, may require this file to be generated again.
@@ -0,0 +1,23 @@
1
+ language: ruby
2
+ sudo: false
3
+ cache: bundler
4
+ bundler_args: --without tools
5
+ rvm:
6
+ - 2.1
7
+ matrix:
8
+ fast_finish: true
9
+ env:
10
+ global:
11
+ - CODECLIMATE_REPO_TOKEN=86c70d1103da065167764882ffb5d184647e2ade2929005a812bea267672cd7e
12
+ matrix:
13
+ - RAILS_VERSION='~> 4.2.0'
14
+ - RAILS_VERSION='~> 4.1.0'
15
+ - RAILS_VERSION='~> 4.0.0'
16
+ - RAILS_VERSION='~> 3.2.0'
17
+ notifications:
18
+ webhooks:
19
+ urls:
20
+ - https://webhooks.gitter.im/e/c6efc69df9417bda7808
21
+ on_success: change
22
+ on_failure: always
23
+ on_start: false
data/Gemfile ADDED
@@ -0,0 +1,21 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in tagfiles.gemspec
4
+ gemspec
5
+
6
+ group :tools do
7
+ gem "rubocop"
8
+ gem "guard"
9
+ gem "guard-minitest"
10
+ gem "guard-rubocop"
11
+ end
12
+
13
+ rails_version = ENV.fetch("RAILS_VERSION", ">= 0")
14
+
15
+ group :test do
16
+ gem "rails", rails_version
17
+ end
18
+
19
+ if ENV["CODECLIMATE_REPO_TOKEN"]
20
+ gem "codeclimate-test-reporter", group: :test, require: nil
21
+ end
@@ -0,0 +1,23 @@
1
+ group :red_green_refactor, halt_on_fail: true do
2
+ guard :minitest, cmd: "rake", all_on_start: true do
3
+ # run all specs if Gemfile.lock is modified
4
+ watch("Gemfile.lock") { "spec" }
5
+
6
+ # run all specs if any library code is modified
7
+ watch(%r{\Alib/.+\.rb\z}) { "spec" }
8
+
9
+ # run all specs if supporting files are modified
10
+ watch("spec/spec_helper.rb") { "spec" }
11
+ watch(%r{\Aspec/(?:lib|support|shared|integration)/.+\.rb\z}) { "spec" }
12
+ watch(%r{\Aspec/.+/views}) { "spec" }
13
+
14
+ # run a spec if it is modified
15
+ watch(%r{\Aspec/(?:unit|integration)/.+_spec\.rb\z})
16
+ end
17
+
18
+ guard :rubocop do
19
+ # run rubocop on modified file
20
+ watch(%r{\Alib/.+\.rb\z})
21
+ watch(%r{\Aspec/.+\.rb\z})
22
+ end
23
+ end
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Peter Suschlik
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,83 @@
1
+ [github]: https://github.com/neopoly/tagfiles
2
+ [doc]: http://rubydoc.info/github/neopoly/tagfiles/master/file/README.md
3
+ [gem]: https://rubygems.org/gems/tagfiles
4
+ [gem-badge]: https://img.shields.io/gem/v/tagfiles.svg
5
+ [travis]: https://travis-ci.org/neopoly/tagfiles
6
+ [travis-badge]: https://img.shields.io/travis/neopoly/tagfiles.svg?branch=master
7
+ [codeclimate]: https://codeclimate.com/github/neopoly/tagfiles
8
+ [codeclimate-climate-badge]: https://img.shields.io/codeclimate/github/neopoly/tagfiles.svg
9
+ [codeclimate-coverage-badge]: https://codeclimate.com/github/neopoly/tagfiles/badges/coverage.svg
10
+ [inchpages]: https://inch-ci.org/github/neopoly/tagfiles
11
+ [inchpages-badge]: https://inch-ci.org/github/neopoly/tagfiles.svg?branch=master&style=flat
12
+
13
+ # Tagfiles
14
+
15
+ [![Travis][travis-badge]][travis]
16
+ [![Gem Version][gem-badge]][gem]
17
+ [![Code Climate][codeclimate-climate-badge]][codeclimate]
18
+ [![Test Coverage][codeclimate-coverage-badge]][codeclimate]
19
+ [![Inline docs][inchpages-badge]][inchpages]
20
+
21
+ [Gem][gem] |
22
+ [Source][github] |
23
+ [Documentation][doc]
24
+
25
+ Tagfiles provides the `tagfile` helper for Rails.
26
+
27
+ ## Installation
28
+
29
+ Add this line to your application's Gemfile:
30
+
31
+ ```ruby
32
+ gem 'tagfiles'
33
+ ```
34
+
35
+ And then execute:
36
+
37
+ $ bundle
38
+
39
+ ## Basic Usage
40
+
41
+ Tagfile: `app/views/tagfiles/_box.html.haml`
42
+
43
+ ```haml
44
+ .box
45
+ %h2= title
46
+ %p= yield
47
+ ```
48
+
49
+ HAML file using `box` tagfile: `app/views/admin/page/index.html.haml`
50
+
51
+ ```haml
52
+ = tf :box, title: "Box title"
53
+ Some box content
54
+ ```
55
+
56
+ See [examples/](https://github.com/neopoly/tagfiles/tree/master/examples) and [specs](https://github.com/neopoly/tagfiles/blob/master/spec/integration/rails_spec.rb) for more examples.
57
+
58
+ ## Lookup order
59
+
60
+ Rendering the `box` tagfile from the example above will trigger with following lookups:
61
+
62
+ * `app/views/admin/page/tagfiles/_box.html.erb`
63
+ * `app/views/admin/tagfiles/_box.html.erb`
64
+ * `app/views/tagfiles/_box.html.erb`
65
+
66
+ ## Rails support
67
+
68
+ Following Rails versions are supported:
69
+
70
+ * 4.2
71
+ * 4.1
72
+ * 4.0
73
+ * 3.2
74
+
75
+ Feel free to test earlier Rails versions. Feedback is welcome!
76
+
77
+ ## Contributing
78
+
79
+ 1. [Fork it](https://github.com/neopoly/tagfiles/fork)
80
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
81
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
82
+ 4. Push to the branch (`git push origin my-new-feature`)
83
+ 5. Create a new Pull Request
@@ -0,0 +1,11 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ desc "Run tests"
4
+ task default: :spec
5
+
6
+ require "rake/testtask"
7
+ Rake::TestTask.new(:spec) do |t|
8
+ t.libs << "spec"
9
+ t.test_files = FileList["spec/**/*_spec.rb"]
10
+ t.verbose = false
11
+ end
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem "rails"
@@ -0,0 +1,104 @@
1
+ GEM
2
+ remote: https://rubygems.org/
3
+ specs:
4
+ actionmailer (4.2.0)
5
+ actionpack (= 4.2.0)
6
+ actionview (= 4.2.0)
7
+ activejob (= 4.2.0)
8
+ mail (~> 2.5, >= 2.5.4)
9
+ rails-dom-testing (~> 1.0, >= 1.0.5)
10
+ actionpack (4.2.0)
11
+ actionview (= 4.2.0)
12
+ activesupport (= 4.2.0)
13
+ rack (~> 1.6.0)
14
+ rack-test (~> 0.6.2)
15
+ rails-dom-testing (~> 1.0, >= 1.0.5)
16
+ rails-html-sanitizer (~> 1.0, >= 1.0.1)
17
+ actionview (4.2.0)
18
+ activesupport (= 4.2.0)
19
+ builder (~> 3.1)
20
+ erubis (~> 2.7.0)
21
+ rails-dom-testing (~> 1.0, >= 1.0.5)
22
+ rails-html-sanitizer (~> 1.0, >= 1.0.1)
23
+ activejob (4.2.0)
24
+ activesupport (= 4.2.0)
25
+ globalid (>= 0.3.0)
26
+ activemodel (4.2.0)
27
+ activesupport (= 4.2.0)
28
+ builder (~> 3.1)
29
+ activerecord (4.2.0)
30
+ activemodel (= 4.2.0)
31
+ activesupport (= 4.2.0)
32
+ arel (~> 6.0)
33
+ activesupport (4.2.0)
34
+ i18n (~> 0.7)
35
+ json (~> 1.7, >= 1.7.7)
36
+ minitest (~> 5.1)
37
+ thread_safe (~> 0.3, >= 0.3.4)
38
+ tzinfo (~> 1.1)
39
+ arel (6.0.0)
40
+ builder (3.2.2)
41
+ erubis (2.7.0)
42
+ globalid (0.3.3)
43
+ activesupport (>= 4.1.0)
44
+ hike (1.2.3)
45
+ i18n (0.7.0)
46
+ json (1.8.2)
47
+ loofah (2.0.1)
48
+ nokogiri (>= 1.5.9)
49
+ mail (2.6.3)
50
+ mime-types (>= 1.16, < 3)
51
+ mime-types (2.4.3)
52
+ mini_portile (0.6.2)
53
+ minitest (5.5.1)
54
+ multi_json (1.11.0)
55
+ nokogiri (1.6.6.2)
56
+ mini_portile (~> 0.6.0)
57
+ rack (1.6.0)
58
+ rack-test (0.6.3)
59
+ rack (>= 1.0)
60
+ rails (4.2.0)
61
+ actionmailer (= 4.2.0)
62
+ actionpack (= 4.2.0)
63
+ actionview (= 4.2.0)
64
+ activejob (= 4.2.0)
65
+ activemodel (= 4.2.0)
66
+ activerecord (= 4.2.0)
67
+ activesupport (= 4.2.0)
68
+ bundler (>= 1.3.0, < 2.0)
69
+ railties (= 4.2.0)
70
+ sprockets-rails
71
+ rails-deprecated_sanitizer (1.0.3)
72
+ activesupport (>= 4.2.0.alpha)
73
+ rails-dom-testing (1.0.6)
74
+ activesupport (>= 4.2.0.beta, < 5.0)
75
+ nokogiri (~> 1.6.0)
76
+ rails-deprecated_sanitizer (>= 1.0.1)
77
+ rails-html-sanitizer (1.0.2)
78
+ loofah (~> 2.0)
79
+ railties (4.2.0)
80
+ actionpack (= 4.2.0)
81
+ activesupport (= 4.2.0)
82
+ rake (>= 0.8.7)
83
+ thor (>= 0.18.1, < 2.0)
84
+ rake (10.4.2)
85
+ sprockets (2.12.3)
86
+ hike (~> 1.2)
87
+ multi_json (~> 1.0)
88
+ rack (~> 1.0)
89
+ tilt (~> 1.1, != 1.3.0)
90
+ sprockets-rails (2.2.4)
91
+ actionpack (>= 3.0)
92
+ activesupport (>= 3.0)
93
+ sprockets (>= 2.8, < 4.0)
94
+ thor (0.19.1)
95
+ thread_safe (0.3.5)
96
+ tilt (1.4.1)
97
+ tzinfo (1.2.2)
98
+ thread_safe (~> 0.1)
99
+
100
+ PLATFORMS
101
+ ruby
102
+
103
+ DEPENDENCIES
104
+ rails
@@ -0,0 +1,13 @@
1
+ # Example app
2
+
3
+ This example app demonstrates a basic usage of this `tagfiles` gem.
4
+
5
+ ## Run
6
+
7
+ $ bundle
8
+ $ rackup
9
+ $ open http://localhost:9292
10
+
11
+ ## Browse
12
+
13
+ The tagfiles are located in `app/views/tagfiles` and `app/views/example/tagfiles`.
@@ -0,0 +1,15 @@
1
+ <%= tf :box, title: "Plain box" do %>
2
+ Box content
3
+ <% end %>
4
+
5
+ <%= tf :box, title: "Nested box" do %>
6
+ <%= tf :box, title: "Level 2" do %>
7
+ Nested content
8
+ <% end %>
9
+ <% end %>
10
+
11
+ <%= tf :box, title: "No content" %>
12
+
13
+ <h3>
14
+ <%= tf :label, value: "controller specific tagfile" %>
15
+ </h3>
@@ -0,0 +1 @@
1
+ <span class="label label-default"><%= value %></span>
@@ -0,0 +1,15 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
5
+ </head>
6
+ <body>
7
+ <div class="page-header">
8
+ <h1>Tagfiles example</h1>
9
+ </div>
10
+
11
+ <div class="content">
12
+ <%= yield %>
13
+ </div>
14
+ </body>
15
+ </html>
@@ -0,0 +1,6 @@
1
+ <div class="panel panel-default">
2
+ <div class="panel-heading"><%= title %></div>
3
+ <div class="panel-body">
4
+ <%= yield %>
5
+ </div>
6
+ </div>
@@ -0,0 +1,27 @@
1
+ require "rails"
2
+ require "action_controller/railtie"
3
+
4
+ $LOAD_PATH << "../lib"
5
+ require "tagfiles"
6
+
7
+ class ExampleApp < Rails::Application
8
+ routes.append do
9
+ get "/" => "example#index"
10
+ end
11
+
12
+ config.eager_load = false
13
+
14
+ config.secret_key_base = "a" * 30
15
+ config.secret_token = "b" * 30
16
+ end
17
+
18
+ class ExampleController < ActionController::Base
19
+ layout "application"
20
+
21
+ def index
22
+ end
23
+ end
24
+
25
+ ExampleApp.initialize!
26
+
27
+ run ExampleApp
@@ -0,0 +1,4 @@
1
+ require "tagfiles/version"
2
+
3
+ require "tagfiles/tagfile"
4
+ require "tagfiles/engine" if defined? Rails
@@ -0,0 +1,14 @@
1
+ module Tagfiles
2
+ # Easy tagfile integration into Rails
3
+ class Engine < Rails::Engine
4
+ initializer "tagfiles" do
5
+ ActiveSupport.on_load :action_controller do
6
+ include Tagfiles::Tagfile
7
+ end
8
+
9
+ ActiveSupport.on_load :action_view do
10
+ include Tagfiles::Tagfile
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,55 @@
1
+ # Tagfiles provides the `tagfile` helper for Rails.
2
+ module Tagfiles
3
+ # Tagfile implementation
4
+ module Tagfile
5
+ # Renders a +layout+ when called with a block or +partial+ otherwise.
6
+ #
7
+ # @param name [String] name of the used tagfile
8
+ # @param locals [Hash] optional locals passed to the tagfile
9
+ #
10
+ # @example
11
+ # app/views/admin/page/index.html.erb:
12
+ #
13
+ # <%= tagfile :box, title: 23 do %>
14
+ # Box content
15
+ # <% end %>
16
+ #
17
+ # app/views/tagfiles/_box.html.erb
18
+ #
19
+ # <div class="box">
20
+ # <h2><%= title %></h2>
21
+ # <p><%= yield %></p>
22
+ # </div>
23
+ #
24
+ # Following partial lookups will be performed:
25
+ # * app/views/admin/page/tagfiles/_box.html.erb
26
+ # * app/views/admin/tagfiles/_box.html.erb
27
+ # * app/views/tagfiles/_box.html.erb
28
+ def tagfile(name, locals = {}, &block)
29
+ prefix = lookup_tagfile_prefix(controller.controller_path || "", name)
30
+
31
+ if block
32
+ render layout: "#{prefix}/#{name}", locals: locals, &block
33
+ else
34
+ render partial: "#{prefix}/#{name}", locals: locals
35
+ end
36
+ end
37
+
38
+ alias_method :tf, :tagfile
39
+
40
+ private
41
+
42
+ TAGFILES_DIR = "tagfiles"
43
+
44
+ def lookup_tagfile_prefix(controller_path, name)
45
+ parts = controller_path.split("/")
46
+
47
+ loop do
48
+ prefix = (parts + [TAGFILES_DIR]).join("/")
49
+ break prefix if controller.template_exists?(name, [prefix], true)
50
+ parts.pop
51
+ break TAGFILES_DIR if parts.empty?
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,3 @@
1
+ module Tagfiles
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,18 @@
1
+ begin
2
+ require "rubocop/rake_task"
3
+
4
+ Rake::Task[:default].enhance [:rubocop]
5
+
6
+ RuboCop::RakeTask.new do |task|
7
+ task.options << "--display-cop-names"
8
+ end
9
+
10
+ namespace :rubocop do
11
+ desc "Generate a configuration file acting as a TODO list."
12
+ task :auto_gen_config do
13
+ exec "bundle exec rubocop --auto-gen-config"
14
+ end
15
+ end
16
+
17
+ rescue LoadError
18
+ end
@@ -0,0 +1,28 @@
1
+ require "rails"
2
+ require "action_controller/railtie"
3
+
4
+ # TODO: Find out how to remove this line below
5
+ require "tagfiles/engine"
6
+
7
+ class RailsApp < Rails::Application
8
+ routes.append do
9
+ get "/:controller/:action"
10
+ namespace :namespaced do
11
+ get "/:action" => "test"
12
+ end
13
+ end
14
+
15
+ config.logger = nil
16
+ config.log_level = :warn
17
+
18
+ # Enable cache classes. Production style.
19
+ config.cache_classes = true
20
+ config.eager_load = true
21
+
22
+ config.secret_key_base = "a" * 30
23
+ config.secret_token = "b" * 30
24
+
25
+ config.root = File.expand_path("./rails_app", File.dirname(__FILE__))
26
+ end
27
+
28
+ RailsApp.initialize!
@@ -0,0 +1 @@
1
+ block[<%= raw local_assigns.inspect %>](<%= yield %>)
@@ -0,0 +1 @@
1
+ simple[<%= raw local_assigns.inspect %>](<%= yield %>)
@@ -0,0 +1,132 @@
1
+ require "spec_helper"
2
+
3
+ ENV["RACK_ENV"] = "test"
4
+
5
+ require_relative "rails_app"
6
+
7
+ class TestController < ActionController::Base
8
+ def simple_alias
9
+ render inline: "<%= tagfile :simple %>"
10
+ end
11
+
12
+ def simple
13
+ render inline: "<%= tf :simple %>"
14
+ end
15
+
16
+ def simple_with_params
17
+ render inline: "<%= tf :simple, param: params[:param] %>"
18
+ end
19
+
20
+ def block
21
+ render inline: "<%= tf :simple do %>content<% end %>"
22
+ end
23
+
24
+ def block_with_params
25
+ render inline: "<%= tf :simple, param: params[:param] do %>content<% end %>"
26
+ end
27
+
28
+ def inner
29
+ render inline: "<%= tf :inner %>"
30
+ end
31
+
32
+ def missing
33
+ render inline: "<%= tf :missing %>"
34
+ end
35
+ end
36
+
37
+ module Namespaced
38
+ class TestController < ActionController::Base
39
+ def inner
40
+ render inline: "<%= tf :inner %>"
41
+ end
42
+
43
+ def outer
44
+ render inline: "<%= tf :outer %>"
45
+ end
46
+
47
+ def simple
48
+ render inline: "<%= tf :simple %>"
49
+ end
50
+ end
51
+ end
52
+
53
+ describe RailsApp do
54
+ describe "w/o block" do
55
+ it "renders partial from tagfiles/ w/o params aliased" do
56
+ get "/test/simple_alias"
57
+ assert_body %(simple[{:simple=>nil}]())
58
+ end
59
+
60
+ it "renders partial from tagfiles/ w/o params" do
61
+ get "/test/simple"
62
+ assert_body %(simple[{:simple=>nil}]())
63
+ end
64
+
65
+ it "renders partial from tagfiles/ with params" do
66
+ get "/test/simple_with_params", param: "foo"
67
+ assert_body %(simple[{:param=>"foo", :simple=>nil}]())
68
+ end
69
+ end
70
+
71
+ describe "with block" do
72
+ it "renders layout from tagfiles/ w/o params" do
73
+ get "/test/block"
74
+ assert_body %(simple[{:simple=>nil}](content))
75
+ end
76
+
77
+ it "renders layout from tagfiles/ with params" do
78
+ get "/test/block_with_params", param: "foo"
79
+ assert_body %(simple[{:param=>"foo", :simple=>nil}](content))
80
+ end
81
+ end
82
+
83
+ describe "inner tagfile" do
84
+ it "prefers inner tagfile in test/tagfiles/" do
85
+ get "/test/inner"
86
+ assert_body %(inner)
87
+ end
88
+
89
+ it "renders most inner tagfile in namespaced/test/tagfiles" do
90
+ get "/namespaced/test/inner"
91
+ assert_body %(most inner)
92
+ end
93
+
94
+ it "renders outer tagfile in namespaced/tagfiles" do
95
+ get "/namespaced/test/outer"
96
+ assert_body %(outer)
97
+ end
98
+
99
+ it "renders most outer simple tagfile" do
100
+ get "/namespaced/test/simple"
101
+ assert_body %(simple[{:simple=>nil}]())
102
+ end
103
+ end
104
+
105
+ describe "missing template" do
106
+ it "error for missing template" do
107
+ get "/test/missing"
108
+ assert_equal 500, last_response.status
109
+ assert_body ""
110
+ end
111
+ end
112
+
113
+ describe "anonymous controllers" do
114
+ let(:anon_controller) do
115
+ Class.new(ActionController::Base) do
116
+ def anon
117
+ render inline: "<%= tf :simple %>"
118
+ end
119
+ end
120
+ end
121
+
122
+ it "renders tagfile even w/o a name" do
123
+ controller = anon_controller
124
+ RailsApp.routes.draw do
125
+ get "/anon", to: controller.action(:anon)
126
+ end
127
+
128
+ get "/anon"
129
+ assert_body %(simple[{:simple=>nil}]())
130
+ end
131
+ end
132
+ end
@@ -0,0 +1,24 @@
1
+ require "bundler"
2
+ Bundler.require
3
+
4
+ if ENV["CODECLIMATE_REPO_TOKEN"]
5
+ require "codeclimate-test-reporter"
6
+ CodeClimate::TestReporter.start
7
+ end
8
+
9
+ require "minitest/autorun"
10
+ require "rack/test"
11
+
12
+ class IntegrationSpec < Minitest::Spec
13
+ include Rack::Test::Methods
14
+
15
+ def app
16
+ RailsApp
17
+ end
18
+
19
+ def assert_body(expected)
20
+ assert_equal expected, last_response.body.strip
21
+ end
22
+ end
23
+
24
+ MiniTest::Spec.register_spec_type("RailsApp", IntegrationSpec)
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "tagfiles/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "tagfiles"
8
+ spec.version = Tagfiles::VERSION
9
+ spec.authors = ["Peter Suschlik"]
10
+ spec.email = ["ps@neopoly.de"]
11
+ spec.summary = "Provides the tagfile helper for Rails"
12
+ spec.description = spec.summary
13
+ spec.homepage = "https://github.com/neopoly/tagfiles"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.7"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_development_dependency "minitest"
24
+ end
metadata ADDED
@@ -0,0 +1,125 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tagfiles
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Peter Suschlik
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: Provides the tagfile helper for Rails
56
+ email:
57
+ - ps@neopoly.de
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - ".rubocop.yml"
64
+ - ".rubocop_todo.yml"
65
+ - ".travis.yml"
66
+ - Gemfile
67
+ - Guardfile
68
+ - LICENSE.txt
69
+ - README.md
70
+ - Rakefile
71
+ - examples/Gemfile
72
+ - examples/Gemfile.lock
73
+ - examples/README.md
74
+ - examples/app/views/example/index.html.erb
75
+ - examples/app/views/example/tagfiles/_label.html.erb
76
+ - examples/app/views/layouts/application.html.erb
77
+ - examples/app/views/tagfiles/_box.html.erb
78
+ - examples/config.ru
79
+ - lib/tagfiles.rb
80
+ - lib/tagfiles/engine.rb
81
+ - lib/tagfiles/tagfile.rb
82
+ - lib/tagfiles/version.rb
83
+ - rakelib/rubocop.rake
84
+ - spec/integration/rails_app.rb
85
+ - spec/integration/rails_app/app/views/namespaced/tagfiles/_outer.html.erb
86
+ - spec/integration/rails_app/app/views/namespaced/test/tagfiles/_inner.html.erb
87
+ - spec/integration/rails_app/app/views/tagfiles/_block.html.erb
88
+ - spec/integration/rails_app/app/views/tagfiles/_simple.html.erb
89
+ - spec/integration/rails_app/app/views/test/tagfiles/_inner.html.erb
90
+ - spec/integration/rails_spec.rb
91
+ - spec/spec_helper.rb
92
+ - tagfiles.gemspec
93
+ homepage: https://github.com/neopoly/tagfiles
94
+ licenses:
95
+ - MIT
96
+ metadata: {}
97
+ post_install_message:
98
+ rdoc_options: []
99
+ require_paths:
100
+ - lib
101
+ required_ruby_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ required_rubygems_version: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ requirements: []
112
+ rubyforge_project:
113
+ rubygems_version: 2.2.2
114
+ signing_key:
115
+ specification_version: 4
116
+ summary: Provides the tagfile helper for Rails
117
+ test_files:
118
+ - spec/integration/rails_app.rb
119
+ - spec/integration/rails_app/app/views/namespaced/tagfiles/_outer.html.erb
120
+ - spec/integration/rails_app/app/views/namespaced/test/tagfiles/_inner.html.erb
121
+ - spec/integration/rails_app/app/views/tagfiles/_block.html.erb
122
+ - spec/integration/rails_app/app/views/tagfiles/_simple.html.erb
123
+ - spec/integration/rails_app/app/views/test/tagfiles/_inner.html.erb
124
+ - spec/integration/rails_spec.rb
125
+ - spec/spec_helper.rb