espresso-framework 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +6 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +32 -0
  5. data/Rakefile +88 -0
  6. data/VERSION +1 -0
  7. data/espresso-framework.gemspec +110 -0
  8. data/init.rb +1 -0
  9. data/lib/espresso.rb +49 -0
  10. data/lib/espresso/collection.rb +44 -0
  11. data/lib/espresso/collection/searchlogic.rb +17 -0
  12. data/lib/espresso/collection/will_paginate.rb +19 -0
  13. data/lib/espresso/concern.rb +37 -0
  14. data/lib/espresso/controller.rb +17 -0
  15. data/lib/espresso/controller/inherited_resources.rb +110 -0
  16. data/lib/espresso/deprecated.rb +19 -0
  17. data/lib/espresso/deprecated/resources.rb +11 -0
  18. data/lib/espresso/extensions/action_controller.rb +6 -0
  19. data/lib/espresso/extensions/action_view.rb +6 -0
  20. data/lib/espresso/extensions/active_record.rb +6 -0
  21. data/lib/espresso/extensions/all.rb +6 -0
  22. data/lib/espresso/extensions/haml.rb +28 -0
  23. data/lib/espresso/extensions/has_scope.rb +13 -0
  24. data/lib/espresso/extensions/inherited_resources.rb +15 -0
  25. data/lib/espresso/extensions/searchlogic.rb +14 -0
  26. data/lib/espresso/extensions/will_paginate.rb +14 -0
  27. data/lib/espresso/model.rb +36 -0
  28. data/lib/espresso/model/inherited_resources.rb +20 -0
  29. data/lib/espresso/view.rb +261 -0
  30. data/lib/espresso/view/form_builder.rb +60 -0
  31. data/lib/espresso/view/has_scope.rb +23 -0
  32. data/lib/espresso/view/inherited_resources.rb +72 -0
  33. data/lib/espresso/view/searchlogic.rb +33 -0
  34. data/lib/espresso/view/will_paginate.rb +35 -0
  35. data/test/espresso_collection_test.rb +6 -0
  36. data/test/espresso_controller_test.rb +1 -0
  37. data/test/espresso_extensions_haml_test.rb +19 -0
  38. data/test/espresso_model_test.rb +26 -0
  39. data/test/espresso_test.rb +5 -0
  40. data/test/espresso_view_has_scope_test.rb +11 -0
  41. data/test/espresso_view_test.rb +46 -0
  42. data/test/espresso_view_will_paginate_test.rb +9 -0
  43. data/test/example_model.rb +23 -0
  44. data/test/test_helper.rb +51 -0
  45. metadata +182 -0
@@ -0,0 +1,60 @@
1
+ require 'espresso/view'
2
+ require 'action_view'
3
+ require 'formtastic'
4
+
5
+ module Espresso
6
+ module View
7
+ class FormBuilder < Formtastic::SemanticFormBuilder
8
+ def submit(value=nil, options={})
9
+ value, options = nil, value if value.is_a?(Hash)
10
+ value ||= submit_default_value
11
+ @template.submit_tag(value, options.reverse_merge(:id => "#{object_name}_submit"))
12
+ end
13
+
14
+ def inline_errors_for(method, options = nil) #:nodoc:
15
+ if render_inline_errors?
16
+ errors = Array(@object.errors[method.to_sym]) +
17
+ Array(@object.errors[:"#{method}_id"])
18
+ send(:"error_#{@@inline_errors}", [*errors]) if errors.present?
19
+ else
20
+ nil
21
+ end
22
+ end
23
+
24
+ def submit_default_value
25
+ model = if object.class.respond_to?(:model_name)
26
+ object.class.human_name
27
+ else
28
+ @object_name.to_s.humanize
29
+ end
30
+
31
+ defaults = []
32
+ defaults << :"helpers.submit.#{object_name}.#{form_action}"
33
+ defaults << :"helpers.submit.#{form_action}"
34
+ defaults << "#{form_action.to_s.humanize} #{model}"
35
+
36
+ I18n.t(defaults.shift, :model => model, :default => defaults)
37
+ end
38
+
39
+ def commit_button(*args)
40
+ options = args.extract_options!
41
+
42
+ button_html = options.delete(:button_html) || {}
43
+ button_html.merge!(:class => [button_html[:class], form_action].compact.join(' '))
44
+ element_class = ['commit', options.delete(:class)].compact.join(' ')
45
+ accesskey = (options.delete(:accesskey) || @@default_commit_button_accesskey) unless button_html.has_key?(:accesskey)
46
+ button_html = button_html.merge(:accesskey => accesskey) if accesskey
47
+ template.content_tag(:li, self.submit(options.delete(:label), button_html), :class => element_class)
48
+ end
49
+
50
+ protected
51
+ def model_object
52
+ @object.respond_to?(:to_model) ? @object.to_model : @object
53
+ end
54
+
55
+ def form_action
56
+ model_object ? (model_object.new_record? ? :create : :update) : :submit
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,23 @@
1
+ require 'espresso/view'
2
+ require 'has_scope'
3
+
4
+ module Espresso::View
5
+ mattr_accessor :scope_filter_wrapper_class, :scope_filter_ul_class
6
+ self.scope_filter_wrapper_class = 'b-scope-filter'
7
+ self.scope_filter_ul_class = 'b-hlist b-hlist_vline'
8
+
9
+ module InstanceMethods
10
+ def scope_filter(scopes)
11
+ content_tag(:div, :class => Espresso::View.scope_filter_wrapper_class) do
12
+ content_tag(:ul, :class => Espresso::View.scope_filter_ul_class) do
13
+ scopes.inject([]) do |list, scope|
14
+ list << content_tag(:li, link_to_unless_current(t(".#{scope}"),
15
+ collection_path(scope => true)))
16
+ list
17
+ end.join
18
+ end
19
+ end
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,72 @@
1
+ require 'espresso/view'
2
+ require 'inherited_resources'
3
+
4
+ module Espresso
5
+ module View
6
+ module InstanceMethods
7
+ def link_to_new(klass=nil, path=nil)
8
+ klass ||= resource_class
9
+ klass_underscored = klass.name.underscore
10
+ path ||= if klass == resource_class
11
+ new_resource_path
12
+ else
13
+ [:new, klass_underscored]
14
+ end
15
+ link_to(t("helpers.action.#{klass_underscored}.new",
16
+ :default => [:'helpers.action.new', 'Add']),
17
+ path,
18
+ :class => Espresso::View.block_classes('action', %w(new)))
19
+ rescue
20
+ end
21
+
22
+ def link_to_show(object=nil)
23
+ object ||= resource
24
+ link_to(t("helpers.action.#{object.class.name.underscore}.show",
25
+ :default => [:'helpers.action.show', object.to_s]),
26
+ object,
27
+ :class => Espresso::View.block_classes('action', %w(show)))
28
+ rescue
29
+ end
30
+
31
+ def link_to_edit(object=nil, path=nil)
32
+ object ||= resource
33
+ path ||= if object == resource
34
+ edit_resource_path
35
+ else
36
+ [:edit, object]
37
+ end
38
+ link_to(t("helpers.action.#{object.class.name.underscore}.edit",
39
+ :default => [:'helpers.action.edit', 'Edit']),
40
+ path,
41
+ :class => Espresso::View.block_classes('action', %w(edit)))
42
+ rescue
43
+ end
44
+
45
+ def link_to_destroy(object=nil, path=nil)
46
+ object ||= resource
47
+ path ||= if object == resource
48
+ resource_path
49
+ else
50
+ object
51
+ end
52
+ class_underscored = object.class.name.underscore
53
+ link_to(t("helpers.action.#{class_underscored}.edit",
54
+ :default => [:'helpers.action.destroy', 'Destroy']),
55
+ path,
56
+ :class => Espresso::View.block_classes('action', %w(destroy)),
57
+ :method => :delete,
58
+ :confirm => t("helpers.action.#{class_underscored}.confirm_destroy",
59
+ :default => [:'helpers.action.confirm_destroy', 'are you sure?']))
60
+ end
61
+
62
+ def link_to_index
63
+ link_to(t("helpers.action.#{controller_name.singularize}.index",
64
+ :default => [:'helpers.action.index', '&larr; Back']),
65
+ collection_path,
66
+ :class => 'b-action b-action_index')
67
+ rescue
68
+ end
69
+
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,33 @@
1
+ require 'espresso/view'
2
+ require 'searchlogic'
3
+
4
+ module Espresso::View
5
+ module InstanceMethods
6
+ def simple_search
7
+ ''.tap do |form|
8
+ form << form_tag(url_for(:action => :index), :method => :get)
9
+ form << content_tag(:table, :class => 'b-search') do
10
+ content_tag(:tr) do
11
+ ''.tap do |result|
12
+ result << content_tag(:td,
13
+ content_tag(:div,
14
+ text_field_tag(:q,
15
+ params[:q],
16
+ :type => 'search'),
17
+ :class => 'b-input'),
18
+ :class => 'input')
19
+ result << content_tag(:td,
20
+ submit_tag(t('espresso.view.find',
21
+ :default => 'Find!'),
22
+ :class => 'submit'),
23
+ :class => 'button')
24
+ end
25
+ end
26
+ end
27
+ form << yield if block_given?
28
+ form << '</form>'
29
+ end
30
+ end
31
+
32
+ end
33
+ end
@@ -0,0 +1,35 @@
1
+ require 'espresso/view'
2
+ require 'will_paginate/view_helpers'
3
+
4
+ module Espresso::View
5
+ module InstanceMethods
6
+ include WillPaginate::ViewHelpers
7
+
8
+ def will_paginate_with_i18n(collection, options = {})
9
+ will_paginate_without_i18n(collection,
10
+ options.merge({
11
+ :class => 'b-pagination',
12
+ :previous_label => t('espresso.navigation.previous', :default => '← Previous'),
13
+ :next_label => t('espresso.navigation.next', :default => 'Next →')}))
14
+ end
15
+ alias_method_chain :will_paginate, :i18n
16
+
17
+ def paginated_list(collection_name, options = {})
18
+ collection = options.delete(:collection) do
19
+ instance_variable_get("@#{collection_name}")
20
+ end
21
+ prefix = options.delete(:prefix)
22
+ prefix = prefix ? " b-list_#{prefix}_#{collection_name}" : nil
23
+ start = (collection.respond_to?(:offset) ? collection.offset : 0) + 1
24
+ ''.tap do |result|
25
+ result << content_tag(:ol,
26
+ render(collection),
27
+ :class => "b-list b-list_#{collection_name}#{prefix}",
28
+ :start => start)
29
+ if collection.respond_to?(:total_pages)
30
+ result << (will_paginate(collection, options) || '')
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,6 @@
1
+ require 'test_helper'
2
+ require 'espresso/collection'
3
+
4
+ class Espresso::CollectionTest < Test::Unit::TestCase
5
+ should_have_instance_methods(:search, :to_a) { Espresso::Collection.new(nil) }
6
+ end
@@ -0,0 +1 @@
1
+ require 'test_helper'
@@ -0,0 +1,19 @@
1
+ require 'test_helper'
2
+ require 'espresso/extensions/haml'
3
+ require 'example_model'
4
+
5
+ class Haml::BufferTest < Test::Unit::TestCase
6
+ context 'Haml::Buffer instance' do
7
+ setup { @buffer = Haml::Buffer.new }
8
+
9
+ {
10
+ [ExampleModel.new(1)] => {'id' => 'example_model_1', 'class' => 'b-example-model'},
11
+ [NonModel.new, :prefix] => {'id' => 'prefix_non_model_6', 'class' => 'prefix_non_model'},
12
+ [ExampleModel.new(5, true)] => {'id' => 'example_model_5', 'class' => 'b-example-model b-example-model_safe'}
13
+ }.each do |ref, result|
14
+ should "parse #{ref.inspect} ref to #{result.inspect} " do
15
+ assert_equal(result, @buffer.parse_object_ref(ref))
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,26 @@
1
+ require 'test_helper'
2
+ require 'example_model'
3
+
4
+ class ExampleModelTest < Test::Unit::TestCase
5
+ should_have_class_methods :make_slug
6
+ should_have_instance_methods :to_s
7
+
8
+ {
9
+ 'Foo Bar' => 'foo-bar',
10
+ 'Baz Bar Foo' => 'baz-bar-foo'
11
+ }.each do |name, slug|
12
+ context "Example instance with name '#{name}'" do
13
+ setup {
14
+ @example = ExampleModel.new
15
+ @example.name = name
16
+ }
17
+
18
+ should "represents to_s as '#{name}'" do
19
+ assert_equal name, @example.to_s
20
+ end
21
+ should "make slug '#{slug}'" do
22
+ assert_equal slug, ExampleModel.make_slug(@example)
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,5 @@
1
+ require 'test_helper'
2
+
3
+ class EspressoTest < Test::Unit::TestCase
4
+ should_have_class_methods :configure, :uses, :extensions
5
+ end
@@ -0,0 +1,11 @@
1
+ require 'test_helper'
2
+ require 'action_controller'
3
+ require 'espresso/view/has_scope'
4
+
5
+
6
+ class Espresso::ViewTest < Test::Unit::TestCase
7
+ include Espresso::View
8
+
9
+ should_have_class_methods :scope_filter_wrapper_class, :scope_filter_ul_class
10
+ should_have_instance_methods :scope_filter
11
+ end
@@ -0,0 +1,46 @@
1
+ require 'test_helper'
2
+ require 'espresso/view'
3
+
4
+ class Espresso::ViewTest < Test::Unit::TestCase
5
+ include Espresso::View
6
+
7
+ should_have_class_methods :block_prefix, :block_classes
8
+ should_have_instance_methods :model_classes, :view_name,
9
+ :default_page_title, :page_title, :head_title, :navigation_list,
10
+ :overwrite_url, :overwrite_path, :online_stats, :body_modifiers,
11
+ :time, :date
12
+
13
+ {
14
+ 'b-example' => ['example'],
15
+ 'b-example b-example_foo' => ['example', %w(foo)],
16
+ 'b-example b-example_foo b-example_bar' => ['example', %w(foo bar)],
17
+ 'o-example' => ['example', [], {:type => 'o'}],
18
+ 'y-example y-example_foo y-example_bar y-example_baz' => ['example', %w(foo bar baz), {:type => 'y'}],
19
+ }.each do |result, params|
20
+ should "build '#{result}' from #{params.inspect}" do
21
+ assert_equal result, Espresso::View.block_classes(*params)
22
+ end
23
+ end
24
+
25
+ class Example
26
+ def self.model_modifiers
27
+ [:foo]
28
+ end
29
+ end
30
+
31
+ class ::FooExample < Example
32
+ def foo?
33
+ true
34
+ end
35
+ end
36
+
37
+ should 'build "b-espresso-view-test-example" from Example instance' do
38
+ @example = Example.new
39
+ assert_equal 'b-espresso-view-test-example', model_classes(@example)
40
+ end
41
+
42
+ should 'build "b-foo-example b-foo-example_foo" from FooExample instance' do
43
+ @example = FooExample.new
44
+ assert_equal 'b-foo-example b-foo-example_foo', model_classes(@example)
45
+ end
46
+ end
@@ -0,0 +1,9 @@
1
+ require 'test_helper'
2
+ require 'espresso/view/will_paginate'
3
+
4
+
5
+ class Espresso::ViewTest < Test::Unit::TestCase
6
+ include Espresso::View
7
+
8
+ should_have_instance_methods :will_paginate, :paginated_list
9
+ end
@@ -0,0 +1,23 @@
1
+ require 'espresso/model'
2
+
3
+ class ExampleModel
4
+ include Espresso::Model
5
+ self.model_modifiers << :safe
6
+
7
+ attr_accessor :id, :name, :safe
8
+
9
+ def initialize(id = nil, safe = false)
10
+ self.id = id
11
+ self.safe = safe
12
+ end
13
+
14
+ def safe?
15
+ safe == true
16
+ end
17
+ end
18
+
19
+ class NonModel
20
+ def id
21
+ 6
22
+ end
23
+ end
@@ -0,0 +1,51 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+ require 'redgreen'
5
+
6
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
7
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
8
+ require 'espresso'
9
+
10
+ require 'active_support/core_ext/string'
11
+ module Test
12
+ module Unit
13
+ class TestCase
14
+ def self.should_have_class_methods(*methods)
15
+ get_options!(methods)
16
+ klass = described_type
17
+ methods.each do |method|
18
+ should "respond to class method ##{method}" do
19
+ assert_respond_to(klass, method, "#{klass.name} does not have class method #{method}")
20
+ end
21
+ end
22
+ end
23
+
24
+ def self.should_have_instance_methods(*methods)
25
+ get_options!(methods)
26
+ klass = described_type
27
+ instance = if block_given?
28
+ # Class initializer requires some attributes,
29
+ # or another custom generator used
30
+ yield
31
+ elsif klass.is_a?(Class)
32
+ klass.new
33
+ else
34
+ # klass is a module
35
+ metaclass = Class.new
36
+ metaclass.send(:include, klass)
37
+ metaclass.new
38
+ end
39
+ methods.each do |method|
40
+ should "respond to instance method ##{method}" do
41
+ assert_respond_to(instance, method, "#{klass.name} does not have instance method #{method}")
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ class TestCaseTest < TestCase
48
+ should_have_class_methods :should_have_class_methods, :should_have_instance_methods
49
+ end
50
+ end
51
+ end
metadata ADDED
@@ -0,0 +1,182 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: espresso-framework
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
5
+ platform: ruby
6
+ authors:
7
+ - Alexander Semyonov
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2010-03-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 2.3.5
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 2.3.5
27
+ - !ruby/object:Gem::Dependency
28
+ name: activerecord
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 2.3.5
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 2.3.5
41
+ - !ruby/object:Gem::Dependency
42
+ name: actionpack
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 2.3.5
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 2.3.5
55
+ - !ruby/object:Gem::Dependency
56
+ name: inherited_resources
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 1.0.5
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 1.0.5
69
+ - !ruby/object:Gem::Dependency
70
+ name: shoulda
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: redgreen
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: Useful templates for controller and model functions
98
+ email: rotuka@tokak.ru
99
+ executables: []
100
+ extensions: []
101
+ extra_rdoc_files:
102
+ - LICENSE
103
+ - README.rdoc
104
+ files:
105
+ - .gitignore
106
+ - LICENSE
107
+ - README.rdoc
108
+ - Rakefile
109
+ - VERSION
110
+ - espresso-framework.gemspec
111
+ - init.rb
112
+ - lib/espresso.rb
113
+ - lib/espresso/collection.rb
114
+ - lib/espresso/collection/searchlogic.rb
115
+ - lib/espresso/collection/will_paginate.rb
116
+ - lib/espresso/concern.rb
117
+ - lib/espresso/controller.rb
118
+ - lib/espresso/controller/inherited_resources.rb
119
+ - lib/espresso/deprecated.rb
120
+ - lib/espresso/deprecated/resources.rb
121
+ - lib/espresso/extensions/action_controller.rb
122
+ - lib/espresso/extensions/action_view.rb
123
+ - lib/espresso/extensions/active_record.rb
124
+ - lib/espresso/extensions/all.rb
125
+ - lib/espresso/extensions/haml.rb
126
+ - lib/espresso/extensions/has_scope.rb
127
+ - lib/espresso/extensions/inherited_resources.rb
128
+ - lib/espresso/extensions/searchlogic.rb
129
+ - lib/espresso/extensions/will_paginate.rb
130
+ - lib/espresso/model.rb
131
+ - lib/espresso/model/inherited_resources.rb
132
+ - lib/espresso/view.rb
133
+ - lib/espresso/view/form_builder.rb
134
+ - lib/espresso/view/has_scope.rb
135
+ - lib/espresso/view/inherited_resources.rb
136
+ - lib/espresso/view/searchlogic.rb
137
+ - lib/espresso/view/will_paginate.rb
138
+ - test/espresso_collection_test.rb
139
+ - test/espresso_controller_test.rb
140
+ - test/espresso_extensions_haml_test.rb
141
+ - test/espresso_model_test.rb
142
+ - test/espresso_test.rb
143
+ - test/espresso_view_has_scope_test.rb
144
+ - test/espresso_view_test.rb
145
+ - test/espresso_view_will_paginate_test.rb
146
+ - test/example_model.rb
147
+ - test/test_helper.rb
148
+ homepage: http://github.com/krasivotokak/espresso
149
+ licenses: []
150
+ metadata: {}
151
+ post_install_message:
152
+ rdoc_options:
153
+ - --charset=UTF-8
154
+ require_paths:
155
+ - lib
156
+ required_ruby_version: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ! '>='
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ required_rubygems_version: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ! '>='
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ requirements: []
167
+ rubyforge_project:
168
+ rubygems_version: 2.0.4
169
+ signing_key:
170
+ specification_version: 3
171
+ summary: Rails extender to simplify rails development
172
+ test_files:
173
+ - test/espresso_extensions_haml_test.rb
174
+ - test/example_model.rb
175
+ - test/espresso_collection_test.rb
176
+ - test/espresso_model_test.rb
177
+ - test/espresso_view_test.rb
178
+ - test/espresso_test.rb
179
+ - test/test_helper.rb
180
+ - test/espresso_controller_test.rb
181
+ - test/espresso_view_has_scope_test.rb
182
+ - test/espresso_view_will_paginate_test.rb