presenting 1.0.0 → 2.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.
Files changed (84) hide show
  1. data/app/controllers/presentation/assets_controller.rb +1 -1
  2. data/app/views/presentations/_details.erb +1 -1
  3. data/app/views/presentations/_field_search.erb +1 -1
  4. data/app/views/presentations/_form.erb +1 -1
  5. data/app/views/presentations/_grid.erb +1 -1
  6. data/app/views/presentations/_search.erb +1 -1
  7. data/config/routes.rb +7 -2
  8. data/lib/presentation/base.rb +10 -27
  9. data/lib/presentation/details.rb +2 -0
  10. data/lib/presentation/field_search.rb +2 -0
  11. data/lib/presentation/grid.rb +1 -1
  12. data/lib/presenting/engine.rb +7 -0
  13. data/lib/presenting/form_helpers.rb +1 -1
  14. data/lib/presenting/helpers.rb +7 -3
  15. data/lib/presenting/view.rb +3 -3
  16. data/lib/presenting.rb +38 -5
  17. data/test/assets_test.rb +5 -7
  18. data/test/details_test.rb +1 -1
  19. data/test/field_search_test.rb +1 -1
  20. data/test/form_test.rb +316 -287
  21. data/test/grid_test.rb +28 -8
  22. data/test/helpers_test.rb +2 -2
  23. data/test/presenting_test.rb +1 -1
  24. data/test/r3/Gemfile +7 -0
  25. data/test/r3/Gemfile.lock +82 -0
  26. data/test/r3/config/application.rb +12 -0
  27. data/test/r3/config/boot.rb +6 -0
  28. data/test/{rails → r3}/config/database.yml +6 -1
  29. data/test/r3/config/environment.rb +5 -0
  30. data/test/r3/config/environments/test.rb +35 -0
  31. data/test/r3/config.ru +4 -0
  32. data/test/r3/db/test.sqlite3 +0 -0
  33. data/test/r3/log/test.log +2354 -0
  34. data/test/r3/public/javascripts/presenting/grid.js +0 -0
  35. data/test/r3/public/javascripts/presenting/search.js +13 -0
  36. data/test/r3/public/stylesheets/presenting/details-color.css +7 -0
  37. data/test/r3/public/stylesheets/presenting/details.css +10 -0
  38. data/test/r3/public/stylesheets/presenting/form.css +1 -0
  39. data/test/r3/public/stylesheets/presenting/grid-color.css +71 -0
  40. data/test/r3/public/stylesheets/presenting/grid.css +64 -0
  41. data/test/r3/public/stylesheets/presenting/search-color.css +16 -0
  42. data/test/r3/public/stylesheets/presenting/search.css +45 -0
  43. data/test/search_conditions_test.rb +2 -2
  44. data/test/search_test.rb +1 -1
  45. data/test/test_helper.rb +8 -39
  46. metadata +45 -79
  47. data/rails/init.rb +0 -12
  48. data/test/rails/app/controllers/application_controller.rb +0 -15
  49. data/test/rails/app/controllers/users_controller.rb +0 -36
  50. data/test/rails/app/helpers/application_helper.rb +0 -3
  51. data/test/rails/app/helpers/users_helper.rb +0 -2
  52. data/test/rails/app/models/user.rb +0 -2
  53. data/test/rails/app/views/layouts/application.html.erb +0 -15
  54. data/test/rails/app/views/users/index.html.erb +0 -10
  55. data/test/rails/app/views/users/new.html.erb +0 -2
  56. data/test/rails/app/views/users/show.html.erb +0 -1
  57. data/test/rails/config/boot.rb +0 -109
  58. data/test/rails/config/environment.rb +0 -13
  59. data/test/rails/config/environments/development.rb +0 -17
  60. data/test/rails/config/environments/production.rb +0 -24
  61. data/test/rails/config/environments/test.rb +0 -22
  62. data/test/rails/config/locales/en.yml +0 -5
  63. data/test/rails/config/routes.rb +0 -5
  64. data/test/rails/db/development.sqlite3 +0 -0
  65. data/test/rails/db/migrate/20090213085444_create_users.rb +0 -13
  66. data/test/rails/db/migrate/20090213085607_populate_users.rb +0 -13
  67. data/test/rails/db/schema.rb +0 -23
  68. data/test/rails/db/test.sqlite3 +0 -0
  69. data/test/rails/log/development.log +0 -858
  70. data/test/rails/public/404.html +0 -30
  71. data/test/rails/public/422.html +0 -30
  72. data/test/rails/public/500.html +0 -33
  73. data/test/rails/public/javascripts/application.js +0 -2
  74. data/test/rails/public/javascripts/jquery.livequery.min.js +0 -11
  75. data/test/rails/public/javascripts/prototype.js +0 -4320
  76. data/test/rails/script/console +0 -3
  77. data/test/rails/script/dbconsole +0 -3
  78. data/test/rails/script/destroy +0 -3
  79. data/test/rails/script/generate +0 -3
  80. data/test/rails/script/plugin +0 -3
  81. data/test/rails/script/runner +0 -3
  82. data/test/rails/script/server +0 -3
  83. /data/app/assets/{javascript → javascripts}/grid.js +0 -0
  84. /data/app/assets/{javascript → javascripts}/search.js +0 -0
@@ -26,7 +26,7 @@ class Presentation::AssetsController < ActionController::Base
26
26
  # - - required fields
27
27
  # TODO: tests for ujs
28
28
  def javascript
29
- dir = asset_path(:javascript)
29
+ dir = asset_path(:javascripts)
30
30
  script = params[:id].split(',').collect{ |id| File.read("#{dir}/#{id}.js") }.join("\n")
31
31
 
32
32
  respond_to do |type|
@@ -5,7 +5,7 @@
5
5
  <dl>
6
6
  <% @details.fields.each do |field| %>
7
7
  <dt><%= field.name %></dt>
8
- <dd><%= present(field.value_from(@details.presentable), :h => field.sanitize?) %></dd>
8
+ <dd><%= present(field.value_from(@details.presentable), :raw => !field.sanitize?) %></dd>
9
9
  <% end %>
10
10
  </dl>
11
11
  </div>
@@ -1,5 +1,5 @@
1
1
  <div class="presentation-search">
2
- <% form_tag @search.url, :method => :get, :class => ("compact" if @search.compact) do %>
2
+ <%= form_tag @search.url, :method => :get, :class => ("compact" if @search.compact) do %>
3
3
  <% @search.fields.each do |field| %>
4
4
  <fieldset>
5
5
  <label><%= field.name %></label>
@@ -1,4 +1,4 @@
1
- <% form_for @form.presentable, :url => @form.url, :method => @form.method, :html => @form.html do |f| %>
1
+ <%= form_for @form.presentable, :url => @form.url, :method => @form.method, :html => @form.html do |f| %>
2
2
  <% @form.groups.each do |group| %>
3
3
  <fieldset>
4
4
  <% unless group.name.blank? %>
@@ -41,7 +41,7 @@
41
41
  <tr class="<%= cycle('odd', 'even') %>">
42
42
  <% @grid.fields.each do |field| %>
43
43
  <td class="<%= [field.id, ('sorted' if field.is_sorted?(request))].compact.join(' ') %>">
44
- <%= present(field.value_from(record), :h => field.sanitize?) %>
44
+ <%= present(field.value_from(record), :raw => !field.sanitize?) %>
45
45
  </td>
46
46
  <% end %>
47
47
  <% unless @grid.record_links.empty? %>
@@ -1,5 +1,5 @@
1
1
  <div class="presentation-search">
2
- <% form_tag @search.url, :method => :get do %>
2
+ <%= form_tag @search.url, :method => :get do %>
3
3
  <%= text_field_tag 'search', params[:search] %>
4
4
  <input type="submit" value="Search" class="submit" />
5
5
  <%= link_to 'reset', @search.url %>
data/config/routes.rb CHANGED
@@ -1,3 +1,8 @@
1
- ActionController::Routing::Routes.draw do |map|
2
- Presenting.draw_routes(map)
1
+ Rails.application.routes.draw do
2
+ namespace :presentation do
3
+ controller 'assets' do
4
+ match 'stylesheets/:id.:format', :as => 'stylesheet', :action => 'stylesheet', :constraints => {:format => 'css'}
5
+ match 'javascript/:id.:format', :as => 'javascript', :action => 'javascript', :constraints => {:format => 'js'}
6
+ end
7
+ end
3
8
  end
@@ -1,48 +1,31 @@
1
1
  module Presentation
2
2
  class Base
3
3
  include Presenting::Configurable
4
-
4
+
5
5
  def render
6
6
  view.render :partial => "presentations/#{self.class.to_s.split('::').last.underscore}"
7
7
  end
8
-
8
+
9
9
  attr_accessor :presentable
10
-
11
- ##
12
- ## begin ActionView compat
13
- ##
14
-
15
- attr_accessor :controller # not strictly for compat, but it makes the compat easy
16
-
17
- def request
18
- controller.request
19
- end
20
-
21
- def url_for(*args)
22
- controller.url_for(*args)
23
- end
24
-
25
- def params
26
- request.parameters
27
- end
28
-
29
- ## end ActionView compat
30
-
10
+
11
+ attr_accessor :controller
12
+ delegate :request, :form_authenticity_token, :url_for, :params, :to => 'controller'
13
+
31
14
  protected
32
-
15
+
33
16
  # what the presentation is called in its templates
34
17
  def iname
35
18
  :presentation
36
19
  end
37
-
20
+
38
21
  # a reference to the view
39
22
  def view #:nodoc:
40
23
  @view ||= Presenting::View.new(ActionController::Base.view_paths, assigns_for_view, self)
41
24
  end
42
-
25
+
43
26
  def assigns_for_view
44
27
  {iname => self, :_request => request}
45
28
  end
46
-
29
+
47
30
  end
48
31
  end
@@ -1,3 +1,5 @@
1
+ require 'presentation/grid'
2
+
1
3
  module Presentation
2
4
  # TODO: abstract what's common between Record and Grid into a shared module or reusable objects or something
3
5
  class Details < Grid
@@ -1,3 +1,5 @@
1
+ require 'presentation/search'
2
+
1
3
  module Presentation
2
4
  class FieldSearch < Search
3
5
  # This method supports the configuration-on-initialization paradigm. It makes:
@@ -154,7 +154,7 @@ module Presentation
154
154
  end
155
155
 
156
156
  def paginate?
157
- defined? WillPaginate and presentable.is_a?(WillPaginate::Collection)
157
+ defined? WillPaginate and (presentable.is_a? WillPaginate::Collection or presentable.respond_to?(:total_entries))
158
158
  end
159
159
  end
160
160
  end
@@ -0,0 +1,7 @@
1
+ module Presenting
2
+ class Engine < Rails::Engine
3
+ initializer "presenting.precache" do |app|
4
+ Presenting.precache!
5
+ end
6
+ end
7
+ end
@@ -40,7 +40,7 @@ module Presenting::FormHelpers
40
40
  field.type_options.collect do |(display, value)|
41
41
  label("#{field.name}_#{value}", display) +
42
42
  radio_button(field.name, value)
43
- end.join
43
+ end.join.html_safe
44
44
  end
45
45
 
46
46
  private
@@ -1,11 +1,15 @@
1
1
  module Presenting
2
2
  module Helpers
3
3
  def presentation_stylesheets(*args)
4
- stylesheet_link_tag presentation_stylesheet_path(args.sort.join(','))
4
+ warn "[DEPRECATION] presentation_stylesheets is deprecated. Please use the stylesheets" <<
5
+ "that are copied to public/stylesheets/presenting/* on boot."
6
+ stylesheet_link_tag presentation_stylesheet_path(args.sort.join(','), :format => 'css')
5
7
  end
6
8
 
7
9
  def presentation_javascript(*args)
8
- javascript_include_tag presentation_javascript_path(args.sort.join(','))
10
+ warn "[DEPRECATION] presentation_javascript is deprecated. Please use the javascripts" <<
11
+ "that are copied to public/javascripts/presenting/* on boot."
12
+ javascript_include_tag presentation_javascript_path(args.sort.join(','), :format => 'js')
9
13
  end
10
14
 
11
15
  def present(*args, &block)
@@ -103,7 +107,7 @@ module Presenting
103
107
  l(object, :format => :default)
104
108
 
105
109
  else
106
- options[:h] ? h(object.to_s) : object.to_s
110
+ options[:raw] ? object.to_s.html_safe : object.to_s
107
111
  end
108
112
  end
109
113
  end
@@ -1,3 +1,3 @@
1
- class Presenting::View < ActionView::Base
2
- delegate :protect_against_forgery?, :form_authenticity_token, :to => :controller
3
- end
1
+ class Presenting::View < ActionView::Base
2
+ delegate :protect_against_forgery?, :form_authenticity_token, :url_for, :to => :controller
3
+ end
data/lib/presenting.rb CHANGED
@@ -1,9 +1,42 @@
1
+ require 'action_view'
2
+ require 'action_controller'
3
+ require 'presenting/engine'
4
+
1
5
  module Presenting
2
- # prior to Rails 2.3, you need to call this manually from your config/routes.rb
3
- def self.draw_routes(map)
4
- map.namespace(:presentation) do |presentation|
5
- presentation.stylesheet 'stylesheets/:id.css', :controller => 'assets', :action => 'stylesheet', :format => 'css'
6
- presentation.javascript 'javascript/:id.js', :controller => 'assets', :action => 'javascript', :format => 'js'
6
+ autoload :Attribute, 'presenting/attribute'
7
+ autoload :Configurable, 'presenting/configurable'
8
+ autoload :Defaults, 'presenting/defaults'
9
+ autoload :FieldSet, 'presenting/field_set'
10
+ autoload :FormHelpers, 'presenting/form_helpers'
11
+ autoload :Helpers, 'presenting/helpers'
12
+ autoload :Sanitize, 'presenting/sanitize'
13
+ autoload :Search, 'presenting/search'
14
+ autoload :Sorting, 'presenting/sorting'
15
+ autoload :View, 'presenting/view'
16
+
17
+ # copies all assets into the application's public directory
18
+ # public/stylesheets/presenting and public/javascripts/presenting
19
+ def self.precache!
20
+ presenting_dir = __FILE__.sub(/\/lib\/.*/, '') # there must be a better way
21
+ %w(stylesheets javascripts).each do |asset_type|
22
+ source_dir = File.join(presenting_dir, 'app', 'assets', asset_type)
23
+ target_dir = File.join(Rails.application.paths.public.send(asset_type).first, 'presenting')
24
+ FileUtils.mkdir_p(target_dir)
25
+
26
+ Dir[File.join(source_dir, '*')].each do |asset|
27
+ FileUtils.cp(asset, File.join(target_dir, File.basename(asset)))
28
+ end
7
29
  end
8
30
  end
9
31
  end
32
+
33
+ module Presentation
34
+ autoload :Base, 'presentation/base'
35
+ end
36
+
37
+ Dir[File.join(File.dirname(__FILE__), 'presentation', '*')].each { |path| require path }
38
+
39
+ ActionView::Base.class_eval { include Presenting::Helpers }
40
+ ActionController::Base.const_set(:Search, Presenting::Search)
41
+ ActionController::Base.const_set(:Sorting, Presenting::Sorting)
42
+ ActionView::Helpers::FormBuilder.class_eval { include Presenting::FormHelpers }
data/test/assets_test.rb CHANGED
@@ -1,6 +1,4 @@
1
1
  require File.dirname(__FILE__) + '/test_helper'
2
- require 'action_controller/test_case'
3
- require 'action_controller/integration'
4
2
 
5
3
  class Presentation::AssetsControllerTest < ActionController::TestCase
6
4
 
@@ -25,14 +23,14 @@ class Presentation::AssetsControllerTest < ActionController::TestCase
25
23
  def test_retrieving_a_named_stylesheet
26
24
  get :stylesheet, :id => 'grid', :format => 'css'
27
25
  assert_response :success
28
- assert_equal @response.body, File.read(File.join(PLUGIN_ROOT, 'app', 'assets', 'stylesheets', 'grid.css'))
26
+ assert_equal @response.body, File.read(File.join('app', 'assets', 'stylesheets', 'grid.css'))
29
27
  end
30
28
 
31
29
  def test_retrieving_multiple_named_stylesheets
32
30
  get :stylesheet, :id => 'grid,form', :format => 'css'
33
31
  assert_response :success
34
- assert @response.body.include?(File.read(File.join(PLUGIN_ROOT, 'app', 'assets', 'stylesheets', 'grid.css')))
35
- assert @response.body.include?(File.read(File.join(PLUGIN_ROOT, 'app', 'assets', 'stylesheets', 'form.css')))
32
+ assert @response.body.include?(File.read(File.join('app', 'assets', 'stylesheets', 'grid.css')))
33
+ assert @response.body.include?(File.read(File.join('app', 'assets', 'stylesheets', 'form.css')))
36
34
  end
37
35
 
38
36
  # javascript
@@ -52,7 +50,7 @@ class Presentation::AssetsControllerTest < ActionController::TestCase
52
50
  def test_retrieving_multiple_named_javascripts
53
51
  get :javascript, :id => 'grid,search', :format => 'js'
54
52
  assert_response :success
55
- assert @response.body.include?(File.read(File.join(PLUGIN_ROOT, 'app', 'assets', 'javascript', 'grid.js')))
56
- assert @response.body.include?(File.read(File.join(PLUGIN_ROOT, 'app', 'assets', 'javascript', 'search.js')))
53
+ assert @response.body.include?(File.read(File.join('app', 'assets', 'javascripts', 'grid.js')))
54
+ assert @response.body.include?(File.read(File.join('app', 'assets', 'javascripts', 'search.js')))
57
55
  end
58
56
  end
data/test/details_test.rb CHANGED
@@ -28,7 +28,7 @@ class DetailsRenderTest < Presentation::RenderTest
28
28
  def setup
29
29
  @presentation = Presentation::Details.new
30
30
  @presentation.presentable = stub('user', :name => 'foo', :email => 'foo@example.com')
31
- @presentation.controller = TestController.new
31
+ @presentation.controller = ActionView::TestCase::TestController.new
32
32
  end
33
33
 
34
34
  def test_rendering_a_title
@@ -47,7 +47,7 @@ end
47
47
  class FieldSearchRenderingTest < Presentation::RenderTest
48
48
  def setup
49
49
  @presentation = Presentation::FieldSearch.new
50
- @presentation.controller = TestController.new
50
+ @presentation.controller = ActionView::TestCase::TestController.new
51
51
  @presentation.controller.request.path = '/users'
52
52
  end
53
53