happy 0.1.0.pre25 → 0.1.0.pre27

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/.yardopts ADDED
@@ -0,0 +1 @@
1
+ --no-private --protected --embed-mixins lib/**/*.rb - README.md TUTORIAL.md LICENSE
data/README.md CHANGED
@@ -14,7 +14,7 @@ Happy is available as a RubyGem, so just install it through `gem install happy`
14
14
 
15
15
  ## Usage
16
16
 
17
- * The Happy Book of Happy (work in progress)
17
+ * [The Happy Book of Happy](https://github.com/hmans/happy/blob/master/TUTORIAL.md)
18
18
  * [Reference Documentation](http://rdoc.info/github/hmans/happy/master/)
19
19
 
20
20
  ## Reporting Bugs & Contributing
data/TUTORIAL.md ADDED
@@ -0,0 +1,3 @@
1
+ # The Happy Book of Happy
2
+
3
+ Lorem to the ipsum.
data/example/config.ru CHANGED
@@ -7,6 +7,8 @@ require 'happy'
7
7
  require 'happy/extras/action_controller'
8
8
  require 'happy/extras/resource_controller'
9
9
 
10
+ require 'haml'
11
+
10
12
  # Controllers are the core building blocks of Happy applications.
11
13
  # They're also just Rack apps, so in any Happy app, you will
12
14
  # declare at least a "root" controller class and run that through Rack.
@@ -24,6 +26,8 @@ class TestApp < Happy::Controller
24
26
  # method, that does the same thing but also records the example in a hash
25
27
  # so we can generated a "table of contents" in index.erb.
26
28
 
29
+ set :views, File.expand_path("#{File.dirname(__FILE__)}/views")
30
+
27
31
  def route
28
32
  example 'Returning just a string' do
29
33
  "I'm just a string!"
@@ -120,9 +124,18 @@ class TestApp < Happy::Controller
120
124
  run ResourceTest
121
125
  end
122
126
 
127
+ example "Block Helpers" do
128
+ on('erb') { render 'block_helpers.erb' }
129
+ on('haml') { render 'block_helpers.haml' }
130
+ end
131
+
123
132
  render 'index.erb'
124
133
  end
125
134
 
135
+ def blockquotify(&blk)
136
+ concat_output html_tag(:blockquote) { capture_template_block(&blk) }
137
+ end
138
+
126
139
  def examples; @examples ||= {}; end
127
140
 
128
141
  def example(name, path_name = nil, &blk)
@@ -0,0 +1,3 @@
1
+ <% blockquotify do %>
2
+ This should be inside a blockquote tag.
3
+ <% end %>
@@ -0,0 +1,2 @@
1
+ = blockquotify do
2
+ This should be inside a blockquote tag.
data/happy.gemspec CHANGED
@@ -17,8 +17,8 @@ Gem::Specification.new do |gem|
17
17
 
18
18
  gem.add_dependency 'activesupport', '~> 3.1'
19
19
  gem.add_dependency 'rack', '~> 1.4'
20
- gem.add_dependency 'happy-helpers', '~> 0.1.0.pre11'
21
20
  gem.add_dependency 'allowance', '>= 0.1.1'
21
+ gem.add_dependency 'tilt', '~> 1.3'
22
22
 
23
23
  # gem.add_dependency 'happy-cli', '>= 0.1.0.pre1'
24
24
 
@@ -3,21 +3,29 @@ module Happy
3
3
  module Configurable
4
4
  extend ActiveSupport::Concern
5
5
 
6
- def options
7
- @options ||= self.class.options.dup
6
+ # Return a hash containing this controller instance's settings.
7
+ #
8
+ def settings
9
+ @settings ||= self.class.settings.dup
8
10
  end
9
11
 
12
+ # Change a setting on this controller instance.
13
+ #
10
14
  def set(k, v)
11
- options[k.to_sym] = v
15
+ settings[k.to_sym] = v
12
16
  end
13
17
 
14
18
  module ClassMethods
15
- def options
16
- @options ||= {}
19
+ # Return a hash containing this controller class' default settings.
20
+ #
21
+ def settings
22
+ @settings ||= {}
17
23
  end
18
24
 
25
+ # Change a default setting on this controller class.
26
+ #
19
27
  def set(k, v)
20
- options[k.to_sym] = v
28
+ settings[k.to_sym] = v
21
29
  end
22
30
  end
23
31
  end
@@ -1,7 +1,6 @@
1
1
  require 'happy/request'
2
2
  require 'happy/response'
3
3
 
4
- require 'happy/controller/helpers'
5
4
  require 'happy/controller/routing'
6
5
  require 'happy/controller/actions'
7
6
  require 'happy/controller/rackable'
@@ -22,20 +21,20 @@ module Happy
22
21
  include Configurable
23
22
  include Cascadable
24
23
  include Permissions
25
- include Helpers
24
+ include Happy::Helpers
26
25
 
27
26
  attr_reader :env
28
27
 
29
- CASCADING_OPTIONS = [:views]
28
+ CASCADING_SETTINGS = [:views]
30
29
 
31
30
  # Creates a new instance of {Controller}. When a block is provided,
32
31
  # it is run against the new instance, allowing custom controller classes
33
32
  # to provide DSL-like configuration.
34
33
  #
35
- # @param env [Hash]
36
- # Rack environment hash.
37
- # @param options [Hash]
38
- # Controller options.
34
+ # @param env_or_parent [Hash,Controller]
35
+ # Rack environment hash _or_ parent controller.
36
+ # @param opts [Hash]
37
+ # Options to be merged with the controller's default (class-level) settings.
39
38
  #
40
39
  def initialize(env_or_parent = {}, opts = {}, &blk)
41
40
  if env_or_parent.is_a?(Happy::Controller)
@@ -49,13 +48,13 @@ module Happy
49
48
  @processed_path = []
50
49
  end
51
50
 
52
- # Augment this instance's options hash with the options given to this constructor
53
- options.merge!(opts)
51
+ # Augment this instance's settings hash with the hash given to this constructor
52
+ settings.merge!(opts)
54
53
 
55
- # Copy missing options from our parent
54
+ # Copy missing settings from our parent
56
55
  if @parent_controller
57
- CASCADING_OPTIONS.each do |opt|
58
- options[opt] ||= @parent_controller.options[opt]
56
+ CASCADING_SETTINGS.each do |name|
57
+ settings[name] ||= @parent_controller.settings[name]
59
58
  end
60
59
  end
61
60
 
data/lib/happy/errors.rb CHANGED
@@ -5,10 +5,10 @@ module Happy
5
5
 
6
6
  # Render a HTML page for the given exception.
7
7
  #
8
- # @param [Exception] exception
8
+ # @param exception [Exception]
9
9
  # The exception to display.
10
- # @param [Hash] env
11
- # The current Rack environment hash (used to display information on request parameters, session contents and such.)
10
+ # @param controller [Hash]
11
+ # The Happy Controller that caught the exception.
12
12
  #
13
13
  # @option options [String] :title
14
14
  # Title of error page
@@ -5,39 +5,39 @@ module Happy
5
5
 
6
6
  class ActiveModelResourceController < Happy::Extras::ResourceController
7
7
  def root_url
8
- super(options[:plural_name])
8
+ super(settings[:plural_name])
9
9
  end
10
10
 
11
11
  def render_resource_template(name)
12
- render "#{options[:plural_name]}/#{name}.html.haml"
12
+ render "#{settings[:plural_name]}/#{name}.html.haml"
13
13
  end
14
14
 
15
15
  def resource
16
- options[:class]
16
+ settings[:class]
17
17
  end
18
18
 
19
19
  def resource_with_permission_scope(*args)
20
- permissions.scoped_model(*args, options[:class])
20
+ permissions.scoped_model(*args, settings[:class])
21
21
  end
22
22
 
23
23
  def require_permission!(*args)
24
- raise "not allowed" unless permissions.can?(*args, options[:class])
24
+ raise "not allowed" unless permissions.can?(*args, settings[:class])
25
25
  end
26
26
 
27
27
  def set_plural_variable(v)
28
- instance_variable_set "@#{options[:plural_name]}", v
28
+ instance_variable_set "@#{settings[:plural_name]}", v
29
29
  end
30
30
 
31
31
  def plural_variable
32
- instance_variable_get "@#{options[:plural_name]}"
32
+ instance_variable_get "@#{settings[:plural_name]}"
33
33
  end
34
34
 
35
35
  def set_singular_variable(v)
36
- instance_variable_set "@#{options[:singular_name]}", v
36
+ instance_variable_set "@#{settings[:singular_name]}", v
37
37
  end
38
38
 
39
39
  def singular_variable
40
- instance_variable_get "@#{options[:singular_name]}"
40
+ instance_variable_get "@#{settings[:singular_name]}"
41
41
  end
42
42
 
43
43
  def index
@@ -54,13 +54,13 @@ module Happy
54
54
 
55
55
  def new
56
56
  require_permission! :new
57
- set_singular_variable resource_with_permission_scope(:new).new(params[options[:singular_name]], :as => options[:role])
57
+ set_singular_variable resource_with_permission_scope(:new).new(params[settings[:singular_name]], :as => settings[:role])
58
58
  render_resource_template 'new'
59
59
  end
60
60
 
61
61
  def create
62
62
  require_permission! :create
63
- set_singular_variable resource_with_permission_scope(:create).new(params[options[:singular_name]], :as => options[:role])
63
+ set_singular_variable resource_with_permission_scope(:create).new(params[settings[:singular_name]], :as => settings[:role])
64
64
 
65
65
  if singular_variable.save
66
66
  redirect! singular_variable
@@ -78,7 +78,7 @@ module Happy
78
78
  def update
79
79
  require_permission! :update
80
80
  set_singular_variable resource_with_permission_scope(:update).find(params['id'])
81
- singular_variable.assign_attributes params[options[:singular_name]], :as => options[:role]
81
+ singular_variable.assign_attributes params[settings[:singular_name]], :as => settings[:role]
82
82
 
83
83
  if singular_variable.save
84
84
  redirect! singular_variable
@@ -88,8 +88,8 @@ module Happy
88
88
  end
89
89
 
90
90
  def route
91
- options[:singular_name] ||= options[:class].to_s.tableize.singularize
92
- options[:plural_name] ||= options[:class].to_s.tableize.pluralize
91
+ settings[:singular_name] ||= settings[:class].to_s.tableize.singularize
92
+ settings[:plural_name] ||= settings[:class].to_s.tableize.pluralize
93
93
 
94
94
  super
95
95
  end
@@ -22,7 +22,7 @@ module Happy
22
22
  end
23
23
 
24
24
  def load_script(name)
25
- file_name = File.expand_path(File.join(options[:directory], name))
25
+ file_name = File.expand_path(File.join(settings[:directory], name))
26
26
  File.read(file_name)
27
27
  end
28
28
 
@@ -2,7 +2,7 @@ module Happy
2
2
  module Extras
3
3
  class Static < Happy::Controller
4
4
  def route
5
- run Rack::File.new(options[:path])
5
+ run Rack::File.new(settings[:path])
6
6
  end
7
7
  end
8
8
  end
@@ -0,0 +1,50 @@
1
+ require 'active_support/core_ext'
2
+ require 'cgi'
3
+
4
+ module Happy
5
+ module Helpers
6
+ module Html
7
+ def html_tag(name, options = nil, escape = true, &block)
8
+ "<#{name} #{html_tag_attributes(options, escape) if options}#{block_given? ? ">#{yield if block_given?}</#{name}>" : " />"}"
9
+ end
10
+
11
+ def html_tag_attributes(options, escape = true)
12
+ options.map do |k,v|
13
+ if v
14
+ v == true ? "#{k}" : "#{k}=\"#{ escape_html(v) }\""
15
+ end
16
+ end.compact.join(" ")
17
+ end
18
+
19
+ def escape_html(t)
20
+ # Rack::Utils.escape_html(t.to_s)
21
+ CGI::escape_html(t.to_s)
22
+ end
23
+
24
+ def preserve(t)
25
+ t.chomp("\n").gsub(/\n/, '&#x000A;').gsub(/\r/, '')
26
+ end
27
+
28
+ def link_to(name, *target)
29
+ options = target.last.is_a?(Hash) ? target.pop : {}
30
+ html_tag(:a, options.merge(:href => url_for(*target))) { name }
31
+ end
32
+
33
+ def url_for(*what)
34
+ return what.first if what.size == 1 && what.first =~ %r{://}
35
+
36
+ result = what.flatten.inject('') do |url, item|
37
+ url << "/%s" % case item
38
+ when String, Symbol then item.to_s
39
+ when NilClass then "/"
40
+ else "%s/%s" % [item.class.to_s.tableize.pluralize, item.try(:to_param) || item.try(:to_id) || item.try(:id)]
41
+ end
42
+
43
+ url
44
+ end.gsub(/\/{2,}/, '/').chomp('/')
45
+
46
+ result == "" ? '/' : result
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,13 @@
1
+ module Happy
2
+ module Helpers
3
+ module I18n
4
+ def translate(*args)
5
+ ::I18n.translate(*args)
6
+ end
7
+
8
+ def localize(*args)
9
+ ::I18n.localize(*args)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,89 @@
1
+ require 'tilt'
2
+
3
+ module Happy
4
+ module Helpers
5
+ module Rendering
6
+ attr_accessor :output_buffer
7
+
8
+ # Renders "something". This method takes a closer look at what this
9
+ # "something" is and then dispatches to a more specific method.
10
+ #
11
+ def render(what, options = {}, &blk)
12
+ case what
13
+ when NilClass then ''
14
+ when String then render_template(what, options, &blk)
15
+ when Enumerable then what.map { |i| render(i, options, &blk) }.join
16
+ else render_resource(what, options)
17
+ end
18
+ end
19
+
20
+ # Render a template from the controller's view folder.
21
+ #
22
+ def render_template(name, variables = {}, &blk)
23
+ path = settings[:views] || './views'
24
+ full_name = File.expand_path(File.join(path, name))
25
+
26
+ # load and cache template
27
+ @@cached_templates ||= {}
28
+ t = @@cached_templates[full_name] =
29
+ (Happy.env.production? && @@cached_templates[full_name]) ||
30
+ Tilt.new(full_name, :default_encoding => 'utf-8', :outvar => "@output_buffer")
31
+
32
+ # render template
33
+ t.render(self, variables, &blk)
34
+ end
35
+
36
+ # Render a resource.
37
+ #
38
+ def render_resource(resource, options = {})
39
+ # build name strings
40
+ singular_name = resource.class.to_s.tableize.singularize
41
+ plural_name = singular_name.pluralize
42
+
43
+ # set options
44
+ options = {
45
+ singular_name => resource
46
+ }.merge(options)
47
+
48
+ # render
49
+ render_template("#{plural_name}/_#{singular_name}.html.haml", options)
50
+ end
51
+
52
+
53
+ # Capture a block from a template. Use this inside view helpers that
54
+ # take blocks.
55
+ #
56
+ def capture_template_block(*args, &blk)
57
+ if respond_to?(:is_haml?) && is_haml?
58
+ capture_haml(*args, &blk)
59
+ else
60
+ with_output_buffer(&blk)
61
+ end
62
+ end
63
+
64
+ # Add something to the output being rendered by the current template.
65
+ # Use this inside view helpers that take blocks.
66
+ #
67
+ def concat_output(v)
68
+ if respond_to?(:is_haml?) && is_haml?
69
+ v
70
+ else
71
+ self.output_buffer << v
72
+ end
73
+ end
74
+
75
+ # Execute the given block, adding its generated output to a new view
76
+ # buffer, and finally returning that buffer. Use this inside view helpers
77
+ # that take blocks.
78
+ #
79
+ def with_output_buffer
80
+ self.output_buffer, old_buffer = "", self.output_buffer
81
+ yield if block_given?
82
+ output_buffer
83
+ ensure
84
+ self.output_buffer = old_buffer
85
+ end
86
+
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,19 @@
1
+ require 'happy/helpers/html'
2
+ require 'happy/helpers/i18n'
3
+ require 'happy/helpers/rendering'
4
+
5
+ module Happy
6
+ # A collection of useful helper methods.
7
+ #
8
+ module Helpers
9
+ include Html
10
+ include Rendering
11
+ include I18n
12
+
13
+ # Some useful shortcuts.
14
+ #
15
+ alias_method :h, :escape_html
16
+ alias_method :l, :localize
17
+ alias_method :t, :translate
18
+ end
19
+ end
@@ -0,0 +1,25 @@
1
+ module Happy
2
+ class Request < Rack::Request
3
+ module DateParameterConverter
4
+ class << self
5
+ def convert!(params)
6
+ params.each do |k, v|
7
+ if looks_like_a_date?(v)
8
+ params[k] = convert_to_date(v)
9
+ elsif v.is_a? Hash
10
+ convert!(v)
11
+ end
12
+ end
13
+ end
14
+
15
+ def looks_like_a_date?(v)
16
+ v.is_a?(Hash) && v.has_key?('year') && v.has_key?('month') && v.has_key?('day')
17
+ end
18
+
19
+ def convert_to_date(v)
20
+ DateTime.new(v['year'].to_i, v['month'].to_i, v['day'].to_i, v['hour'].to_i, v['minute'].to_i, v['second'].to_i)
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
data/lib/happy/request.rb CHANGED
@@ -1,17 +1,25 @@
1
- # SMELL: really?
2
- require 'happy-helpers/utils/date_parameter_converter'
1
+ require 'happy/request/date_parameter_converter'
3
2
 
4
3
  module Happy
5
4
  # Happy's own little request class. It extends {Rack::Request} with
6
5
  # a bit of convenience functionality.
7
6
  #
8
7
  class Request < Rack::Request
8
+ # Override the default #params method so it returns a Hash with indifferent
9
+ # access if ActiveSupport is available.
10
+ def params
11
+ @env['happy.params'] ||= if defined?(HashWithIndifferentAccess)
12
+ super.with_indifferent_access
13
+ else
14
+ super
15
+ end
16
+ end
9
17
 
10
18
  protected
11
19
 
12
20
  def parse_query(qs)
13
21
  super(qs).tap do |p|
14
- HappyHelpers::Utils::DateParameterConverter.convert!(p)
22
+ DateParameterConverter.convert!(p)
15
23
  end
16
24
  end
17
25
  end
data/lib/happy/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Happy
2
- VERSION = "0.1.0.pre25"
2
+ VERSION = "0.1.0.pre27"
3
3
  end
data/lib/happy.rb CHANGED
@@ -1,6 +1,14 @@
1
1
  require 'rack'
2
+
3
+ # Happy is currently making use of ActiveSupport. I'm not 100% happy
4
+ # about this dependency and will eventually try to remove it.
5
+ # The following line should at least make sure that the individual
6
+ # components are autoloaded as needed.
7
+ require 'active_support'
8
+
2
9
  require 'happy/version'
3
10
  require 'happy/errors'
11
+ require 'happy/helpers'
4
12
  require 'happy/controller'
5
13
 
6
14
  module Happy
@@ -8,7 +8,7 @@ module Happy
8
8
 
9
9
  describe '.set' do
10
10
  it 'sets a class-level option' do
11
- TestController.options[:foo].should == 'bar'
11
+ TestController.settings[:foo].should == 'bar'
12
12
  end
13
13
  end
14
14
 
@@ -19,21 +19,21 @@ module Happy
19
19
  end
20
20
 
21
21
  it 'sets an instance-level option, overriding the class default' do
22
- @instance.options[:foo].should == 'baz'
22
+ @instance.settings[:foo].should == 'baz'
23
23
  end
24
24
 
25
25
  it "doesn't modify the class-level default option" do
26
- TestController.options[:foo].should == 'bar'
26
+ TestController.settings[:foo].should == 'bar'
27
27
  end
28
28
  end
29
29
 
30
- describe 'class-level options' do
31
- it 'are the defaults for instance-level options' do
32
- TestController.new.options[:foo].should == 'bar'
30
+ describe 'class-level settings' do
31
+ it 'are the defaults for instance-level settings' do
32
+ TestController.new.settings[:foo].should == 'bar'
33
33
  end
34
34
  end
35
35
 
36
- describe 'cascading options' do
36
+ describe 'cascading settings' do
37
37
  class OuterController < Controller
38
38
  set :views, './foo/'
39
39
  set :foo, 'bar'
@@ -44,15 +44,15 @@ module Happy
44
44
 
45
45
  it "are copied from the parent controller if necessary" do
46
46
  @instance = InnerController.new(OuterController.new)
47
- @instance.options[:views].should == './foo/'
48
- @instance.options[:foo].should be_nil
47
+ @instance.settings[:views].should == './foo/'
48
+ @instance.settings[:foo].should be_nil
49
49
  end
50
50
  end
51
51
 
52
- describe 'options passed to the initializer' do
53
- it "override default options" do
52
+ describe 'settings passed to the initializer' do
53
+ it "override default settings" do
54
54
  @instance = TestController.new({}, :foo => 'baz')
55
- @instance.options[:foo].should == 'baz'
55
+ @instance.settings[:foo].should == 'baz'
56
56
  end
57
57
  end
58
58
  end
@@ -0,0 +1,48 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ module Happy
5
+ module Helpers
6
+ describe Html do
7
+ include Html
8
+
9
+ describe "#url_for" do
10
+ it "generates a url from an array of strings" do
11
+ url_for('foo', 'bar', '123').should == '/foo/bar/123'
12
+ end
13
+
14
+ it "removes duplicate dashes" do
15
+ url_for('/foo/', 'bar').should == '/foo/bar'
16
+ end
17
+
18
+ it "removes leading dashes" do
19
+ url_for('foo/').should == '/foo'
20
+ end
21
+
22
+ it "returns just a slash if no parameters are given" do
23
+ url_for().should == '/'
24
+ end
25
+
26
+ it "doesn't take nil into account" do
27
+ url_for('foo', nil, 'bar').should == '/foo/bar'
28
+ end
29
+
30
+ it "also accepts symbols" do
31
+ url_for(:foo, 'bar').should == '/foo/bar'
32
+ end
33
+
34
+ it "generates RESTful URLs from objects" do
35
+ url_for(mock(:class => 'thingy', :to_param => '1')).should == '/thingies/1'
36
+ end
37
+
38
+ it "is can be cascaded" do
39
+ url_for(url_for(:foo, :bar), '123', url_for('woop')).should == '/foo/bar/123/woop'
40
+ end
41
+
42
+ it "doesn't modify strings containing complete URLs" do
43
+ url_for('http://www.test.com').should == 'http://www.test.com'
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ module Happy
4
+ describe Request do
5
+ describe '#params' do
6
+ subject do
7
+ Happy.route do
8
+ on('symbol') { "Your name is #{params[:name]}!" }
9
+ on('string') { "Your name is #{params['name']}!" }
10
+ end
11
+ end
12
+
13
+ it "is accessible through strings" do
14
+ response_for { get '/string', 'name' => 'Hendrik' }.body.should == 'Your name is Hendrik!'
15
+ end
16
+
17
+ it "is accessible through symbols" do
18
+ response_for { get '/symbol', 'name' => 'Hendrik' }.body.should == 'Your name is Hendrik!'
19
+ end
20
+ end
21
+ end
22
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: happy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.pre25
4
+ version: 0.1.0.pre27
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-15 00:00:00.000000000 Z
12
+ date: 2012-06-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &70205965488560 !ruby/object:Gem::Requirement
16
+ requirement: &70179033071240 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '3.1'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70205965488560
24
+ version_requirements: *70179033071240
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rack
27
- requirement: &70205965488060 !ruby/object:Gem::Requirement
27
+ requirement: &70179033070740 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,32 +32,32 @@ dependencies:
32
32
  version: '1.4'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70205965488060
35
+ version_requirements: *70179033070740
36
36
  - !ruby/object:Gem::Dependency
37
- name: happy-helpers
38
- requirement: &70205965487600 !ruby/object:Gem::Requirement
37
+ name: allowance
38
+ requirement: &70179033070280 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
- - - ~>
41
+ - - ! '>='
42
42
  - !ruby/object:Gem::Version
43
- version: 0.1.0.pre11
43
+ version: 0.1.1
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70205965487600
46
+ version_requirements: *70179033070280
47
47
  - !ruby/object:Gem::Dependency
48
- name: allowance
49
- requirement: &70205965487140 !ruby/object:Gem::Requirement
48
+ name: tilt
49
+ requirement: &70179033069820 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
- - - ! '>='
52
+ - - ~>
53
53
  - !ruby/object:Gem::Version
54
- version: 0.1.1
54
+ version: '1.3'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70205965487140
57
+ version_requirements: *70179033069820
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rake
60
- requirement: &70205965486760 !ruby/object:Gem::Requirement
60
+ requirement: &70179033085800 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70205965486760
68
+ version_requirements: *70179033085800
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rspec
71
- requirement: &70205965502600 !ruby/object:Gem::Requirement
71
+ requirement: &70179033085260 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '2.8'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70205965502600
79
+ version_requirements: *70179033085260
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rspec-html-matchers
82
- requirement: &70205965502180 !ruby/object:Gem::Requirement
82
+ requirement: &70179033084840 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70205965502180
90
+ version_requirements: *70179033084840
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: rack-test
93
- requirement: &70205965501720 !ruby/object:Gem::Requirement
93
+ requirement: &70179033084380 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *70205965501720
101
+ version_requirements: *70179033084380
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: watchr
104
- requirement: &70205965501300 !ruby/object:Gem::Requirement
104
+ requirement: &70179033083960 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,7 +109,7 @@ dependencies:
109
109
  version: '0'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *70205965501300
112
+ version_requirements: *70179033083960
113
113
  description: A happy little toolkit for writing web applications.
114
114
  email:
115
115
  - hendrik@mans.de
@@ -121,12 +121,15 @@ files:
121
121
  - .rspec
122
122
  - .travis.yml
123
123
  - .watchr
124
- - .yardopt
124
+ - .yardopts
125
125
  - Gemfile
126
126
  - LICENSE
127
127
  - README.md
128
128
  - Rakefile
129
+ - TUTORIAL.md
129
130
  - example/config.ru
131
+ - example/views/block_helpers.erb
132
+ - example/views/block_helpers.haml
130
133
  - example/views/index.erb
131
134
  - example/views/layout.erb
132
135
  - happy.gemspec
@@ -135,7 +138,6 @@ files:
135
138
  - lib/happy/controller/actions.rb
136
139
  - lib/happy/controller/cascadable.rb
137
140
  - lib/happy/controller/configurable.rb
138
- - lib/happy/controller/helpers.rb
139
141
  - lib/happy/controller/permissions.rb
140
142
  - lib/happy/controller/rackable.rb
141
143
  - lib/happy/controller/routing.rb
@@ -147,7 +149,12 @@ files:
147
149
  - lib/happy/extras/scriptable.rb
148
150
  - lib/happy/extras/static.rb
149
151
  - lib/happy/files/error.erb
152
+ - lib/happy/helpers.rb
153
+ - lib/happy/helpers/html.rb
154
+ - lib/happy/helpers/i18n.rb
155
+ - lib/happy/helpers/rendering.rb
150
156
  - lib/happy/request.rb
157
+ - lib/happy/request/date_parameter_converter.rb
151
158
  - lib/happy/response.rb
152
159
  - lib/happy/version.rb
153
160
  - spec/controller/actions_spec.rb
@@ -156,6 +163,8 @@ files:
156
163
  - spec/controller/routing_spec.rb
157
164
  - spec/controller_spec.rb
158
165
  - spec/happy_spec.rb
166
+ - spec/helpers/html_spec.rb
167
+ - spec/request_spec.rb
159
168
  - spec/spec_helper.rb
160
169
  homepage: https://github.com/hmans/happy
161
170
  licenses: []
@@ -188,5 +197,7 @@ test_files:
188
197
  - spec/controller/routing_spec.rb
189
198
  - spec/controller_spec.rb
190
199
  - spec/happy_spec.rb
200
+ - spec/helpers/html_spec.rb
201
+ - spec/request_spec.rb
191
202
  - spec/spec_helper.rb
192
203
  has_rdoc:
data/.yardopt DELETED
@@ -1 +0,0 @@
1
- --no-private --protected --embed-mixins lib/**/*.rb - README LEGAL
@@ -1,52 +0,0 @@
1
- require 'happy-helpers'
2
-
3
- module Happy
4
- class Controller
5
- # A collection of useful helper methods.
6
- #
7
- module Helpers
8
- # Load a whole bunch of helpers fromi HappyHelpers. This includes stuff
9
- # like url_for, link_to and more.
10
- include HappyHelpers::Helpers
11
-
12
- # Renders "something". This method takes a closer look at what this
13
- # "something" is and then dispatches to a more specific method.
14
- #
15
- def render(what, options = {}, &blk)
16
- case what
17
- when NilClass then ''
18
- when String then render_template(what, options, &blk)
19
- when Enumerable then what.map { |i| render(i, options, &blk) }.join
20
- else render_resource(what, options)
21
- end
22
- end
23
-
24
- # Render a template from the controller's view folder.
25
- #
26
- def render_template(name, variables = {}, &blk)
27
- path = options[:views] || './views'
28
- HappyHelpers::Templates.render(File.join(path, name), self, variables, &blk)
29
- end
30
-
31
- # Render a resource.
32
- #
33
- def render_resource(resource, options = {})
34
- # build name strings
35
- singular_name = resource.class.to_s.tableize.singularize
36
- plural_name = singular_name.pluralize
37
-
38
- # set options
39
- options = {
40
- singular_name => resource
41
- }.merge(options)
42
-
43
- # render
44
- render_template("#{plural_name}/_#{singular_name}.html.haml", options)
45
- end
46
-
47
- alias_method :h, :escape_html
48
- alias_method :l, :localize
49
- alias_method :t, :translate
50
- end
51
- end
52
- end