view_models 2.0.1 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (157) hide show
  1. data/.bundle/config +2 -0
  2. data/.gitignore +8 -0
  3. data/.rspec +2 -0
  4. data/.rvmrc +1 -0
  5. data/.travis.yml +19 -0
  6. data/.yardoc/checksums +13 -0
  7. data/.yardoc/object_types +0 -0
  8. data/.yardoc/objects/root.dat +0 -0
  9. data/.yardoc/proxy_types +0 -0
  10. data/Appraisals +15 -0
  11. data/CHANGELOG +31 -0
  12. data/Gemfile +13 -0
  13. data/Gemfile.lock +174 -0
  14. data/MIT-LICENSE +20 -0
  15. data/README.textile +199 -0
  16. data/Rakefile +24 -0
  17. data/doc/ModulesInRenderHierarchy.html +186 -0
  18. data/doc/ModulesInRenderHierarchy/ClassMethods.html +188 -0
  19. data/doc/ViewModels.html +202 -0
  20. data/doc/ViewModels/Base.html +1342 -0
  21. data/doc/ViewModels/ContextExtractor.html +406 -0
  22. data/doc/ViewModels/Extensions.html +128 -0
  23. data/doc/ViewModels/Extensions/ModelReader.html +255 -0
  24. data/doc/ViewModels/Extensions/ModelReader/FilteredDelegationInstaller.html +908 -0
  25. data/doc/ViewModels/Extensions/ModelReader/Options.html +551 -0
  26. data/doc/ViewModels/Extensions/View.html +303 -0
  27. data/doc/ViewModels/Helpers.html +129 -0
  28. data/doc/ViewModels/Helpers/Mapping.html +562 -0
  29. data/doc/ViewModels/Helpers/Mapping/Collection.html +844 -0
  30. data/doc/ViewModels/Helpers/View.html +287 -0
  31. data/doc/ViewModels/PathStore.html +745 -0
  32. data/doc/ViewModels/RenderOptions.html +126 -0
  33. data/doc/ViewModels/RenderOptions/Base.html +1187 -0
  34. data/doc/ViewModels/RenderOptions/Partial.html +231 -0
  35. data/doc/ViewModels/RenderOptions/Template.html +231 -0
  36. data/doc/ViewModels/View.html +414 -0
  37. data/doc/ViewModelsGenerator.html +410 -0
  38. data/doc/_index.html +317 -0
  39. data/doc/class_list.html +53 -0
  40. data/doc/css/common.css +1 -0
  41. data/doc/css/full_list.css +57 -0
  42. data/doc/css/style.css +328 -0
  43. data/doc/file.README.html +113 -0
  44. data/doc/file_list.html +55 -0
  45. data/doc/frames.html +28 -0
  46. data/doc/index.html +113 -0
  47. data/doc/js/app.js +214 -0
  48. data/doc/js/full_list.js +173 -0
  49. data/doc/js/jquery.js +4 -0
  50. data/doc/method_list.html +628 -0
  51. data/doc/top-level-namespace.html +114 -0
  52. data/feature_support/testapp/app/controllers/heroes_controller.rb +6 -0
  53. data/feature_support/testapp/app/controllers/users_controller.rb +6 -0
  54. data/feature_support/testapp/app/helpers/application_helper.rb +8 -0
  55. data/feature_support/testapp/app/models/hero.rb +8 -0
  56. data/feature_support/testapp/app/models/user.rb +3 -0
  57. data/feature_support/testapp/app/view_models/hero.rb +8 -0
  58. data/feature_support/testapp/app/view_models/test.rb +8 -0
  59. data/feature_support/testapp/app/view_models/user.rb +14 -0
  60. data/feature_support/testapp/app/views/heroes/show.html.slim +6 -0
  61. data/feature_support/testapp/app/views/users/_box.html.slim +8 -0
  62. data/feature_support/testapp/app/views/users/show.html.slim +6 -0
  63. data/feature_support/testapp/config/application.rb +64 -0
  64. data/feature_support/testapp/config/cucumber.yml +8 -0
  65. data/feature_support/testapp/config/database.yml +28 -0
  66. data/feature_support/testapp/config/environments/cucumber.rb +11 -0
  67. data/feature_support/testapp/config/environments/test.rb +27 -0
  68. data/feature_support/testapp/config/routes.rb +4 -0
  69. data/feature_support/testapp/db/migrate/1_create_users.rb +13 -0
  70. data/feature_support/testapp/features/inheritance.feature +16 -0
  71. data/feature_support/testapp/features/step_definitions/testapp_steps.rb +16 -0
  72. data/feature_support/testapp/features/support/env.rb +13 -0
  73. data/feature_support/testapp/features/users.feature +15 -0
  74. data/feature_support/testapp/lib/tasks/cucumber.rake +31 -0
  75. data/feature_support/testapp/spec/factories/heroes.rb +7 -0
  76. data/feature_support/testapp/spec/factories/users.rb +7 -0
  77. data/features/rails_integration.feature +21 -0
  78. data/features/step_definitions/rails_steps.rb +112 -0
  79. data/features/support/env.rb +6 -0
  80. data/gemfiles/3.0.Gemfile +13 -0
  81. data/gemfiles/3.1.Gemfile +15 -0
  82. data/gemfiles/3.2.gemfile +15 -0
  83. data/lib/rails/generators/view_models/USAGE +6 -0
  84. data/lib/rails/generators/view_models/templates/views/_collection.html.erb +6 -0
  85. data/lib/{rails2/generators/view_models/templates/views/view_models/collection → rails/generators/view_models/templates/views}/_collection.html.haml +1 -2
  86. data/lib/rails/generators/view_models/templates/views/_collection.html.slim +6 -0
  87. data/lib/{rails2/generators/view_models/templates/views/_empty.html.haml → rails/generators/view_models/templates/views/_empty.html.erb} +0 -0
  88. data/lib/rails/generators/view_models/templates/views/_empty.html.haml +0 -0
  89. data/lib/rails/generators/view_models/templates/views/_empty.html.slim +0 -0
  90. data/lib/rails/generators/view_models/templates/views/_list.html.erb +6 -0
  91. data/lib/rails/generators/view_models/templates/views/_list.html.haml +4 -0
  92. data/lib/rails/generators/view_models/templates/views/_list.html.slim +5 -0
  93. data/lib/rails/generators/view_models/templates/views/_pagination.html.erb +18 -0
  94. data/lib/{rails2/generators/view_models/templates/views/view_models/collection → rails/generators/view_models/templates/views}/_pagination.html.haml +2 -2
  95. data/lib/rails/generators/view_models/templates/views/_pagination.html.slim +12 -0
  96. data/lib/rails/generators/view_models/templates/views/_table.html.erb +10 -0
  97. data/lib/{rails2/generators/view_models/templates/views/view_models/collection → rails/generators/view_models/templates/views}/_table.html.haml +0 -0
  98. data/lib/rails/generators/view_models/templates/views/_table.html.slim +5 -0
  99. data/lib/rails/generators/view_models/view_models_generator.rb +57 -0
  100. data/lib/view_models.rb +15 -5
  101. data/lib/{shared/lib/view_models → view_models}/base.rb +148 -37
  102. data/lib/{shared/lib/view_models → view_models}/context_extractor.rb +6 -2
  103. data/lib/{shared/lib/view_models → view_models}/extensions/model_reader.rb +27 -13
  104. data/lib/{rails2/lib → view_models}/extensions/view.rb +6 -1
  105. data/lib/view_models/helpers/collection.rb +113 -0
  106. data/lib/{shared/lib/view_models → view_models}/helpers/mapping.rb +12 -15
  107. data/lib/{rails2/lib → view_models}/helpers/view.rb +5 -1
  108. data/lib/{shared/lib/view_models → view_models}/path_store.rb +6 -1
  109. data/lib/{shared/lib/view_models → view_models}/render_options.rb +19 -4
  110. data/lib/view_models/version.rb +5 -0
  111. data/lib/{rails2/lib/view_models → view_models}/view.rb +7 -6
  112. data/spec/{rails2/lib → lib}/view_models/base_spec.rb +38 -5
  113. data/spec/{rails2/lib → lib/view_models}/extensions/model_reader_spec.rb +4 -4
  114. data/spec/{shared/lib → lib/view_models}/helpers/collection_spec.rb +21 -1
  115. data/spec/{shared/lib → lib/view_models}/helpers/mapping_spec.rb +6 -5
  116. data/spec/{rails2/lib → lib/view_models}/helpers/view_spec.rb +1 -1
  117. data/spec/lib/view_models/view_spec.rb +42 -0
  118. data/spec/spec_helper.rb +32 -0
  119. data/spec/spec_helper_extensions.rb +13 -0
  120. data/view_models.gemspec +36 -0
  121. metadata +411 -142
  122. data/lib/init.rb +0 -1
  123. data/lib/padrino/README.textile +0 -3
  124. data/lib/padrino/init.rb +0 -10
  125. data/lib/padrino/lib/helpers/collection.rb +0 -27
  126. data/lib/padrino/lib/padrino/view_models.rb +0 -19
  127. data/lib/padrino/lib/view_models/base.rb +0 -65
  128. data/lib/rails2/README.textile +0 -3
  129. data/lib/rails2/TODO.textile +0 -5
  130. data/lib/rails2/generators/view_models/USAGE +0 -6
  131. data/lib/rails2/generators/view_models/templates/README +0 -1
  132. data/lib/rails2/generators/view_models/templates/spec/view_model_spec.rb +0 -7
  133. data/lib/rails2/generators/view_models/templates/view_models/view_model.rb +0 -5
  134. data/lib/rails2/generators/view_models/templates/views/view_models/collection/_collection.html.erb +0 -1
  135. data/lib/rails2/generators/view_models/templates/views/view_models/collection/_collection.text.erb +0 -6
  136. data/lib/rails2/generators/view_models/templates/views/view_models/collection/_list.html.erb +0 -1
  137. data/lib/rails2/generators/view_models/templates/views/view_models/collection/_list.text.erb +0 -6
  138. data/lib/rails2/generators/view_models/templates/views/view_models/collection/_pagination.text.erb +0 -3
  139. data/lib/rails2/generators/view_models/templates/views/view_models/collection/_table.text.erb +0 -10
  140. data/lib/rails2/generators/view_models/view_models_generator.rb +0 -47
  141. data/lib/rails2/init.rb +0 -18
  142. data/lib/rails2/lib/experimental/README.textile +0 -32
  143. data/lib/rails2/lib/experimental/modules_in_render_hierarchy.rb +0 -21
  144. data/lib/rails2/lib/helpers/collection.rb +0 -27
  145. data/lib/rails2/lib/view_models.rb +0 -1
  146. data/lib/rails2/lib/view_models/base.rb +0 -99
  147. data/lib/shared/README.textile +0 -3
  148. data/lib/shared/init.rb +0 -11
  149. data/lib/shared/lib/view_models.rb +0 -4
  150. data/lib/shared/lib/view_models/extensions/active_record.rb +0 -27
  151. data/lib/shared/lib/view_models/helpers/collection.rb +0 -110
  152. data/spec/padrino/integration/integration_spec.rb +0 -287
  153. data/spec/padrino/lib/helpers/collection_spec.rb +0 -30
  154. data/spec/rails2/integration/integration_spec.rb +0 -279
  155. data/spec/rails2/lib/extensions/active_record_spec.rb +0 -31
  156. data/spec/rails2/lib/helpers/collection_spec.rb +0 -30
  157. data/spec/rails2/lib/view_models/view_spec.rb +0 -12
@@ -0,0 +1,31 @@
1
+ require 'cucumber/rake/task'
2
+
3
+ namespace :cucumber do
4
+ Cucumber::Rake::Task.new({:ok => 'db:test:prepare'}, 'Run features that should pass') do |t|
5
+ t.fork = true # You may get faster startup if you set this to false
6
+ t.profile = 'default'
7
+ end
8
+
9
+ Cucumber::Rake::Task.new({:wip => 'db:test:prepare'}, 'Run features that are being worked on') do |t|
10
+ t.fork = true # You may get faster startup if you set this to false
11
+ t.profile = 'wip'
12
+ end
13
+
14
+ Cucumber::Rake::Task.new({:rerun => 'db:test:prepare'}, 'Record failing features and run only them if any exist') do |t|
15
+ t.fork = true # You may get faster startup if you set this to false
16
+ t.profile = 'rerun'
17
+ end
18
+
19
+ desc 'Run all features'
20
+ task :all => [:ok, :wip]
21
+
22
+ task :statsetup do
23
+ require 'rails/code_statistics'
24
+ ::STATS_DIRECTORIES << %w(Cucumber\ features features) if File.exist?('features')
25
+ ::CodeStatistics::TEST_TYPES << "Cucumber features" if File.exist?('features')
26
+ end
27
+ end
28
+
29
+ task :cucumber => 'cucumber:all'
30
+
31
+ task :default => :cucumber
@@ -0,0 +1,7 @@
1
+ FactoryGirl.define do
2
+ factory :hero do |h|
3
+ h.birth_date { 1000.years.ago }
4
+ h.gender false
5
+ h.sequence(:name) {|i| "Thor No #{i}" }
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ FactoryGirl.define do
2
+ factory :user do |u|
3
+ u.birth_date { 24.years.ago }
4
+ u.gender true
5
+ u.sequence(:name) {|i| "Elvis Presley No #{i}" }
6
+ end
7
+ end
@@ -0,0 +1,21 @@
1
+ Feature: integrate with Rails
2
+
3
+ Background:
4
+ When I generate a new rails application
5
+ And I copy the generic app files from the support folder into the generated app
6
+ And I configure the application to use the view_models gem from this project
7
+ And I configure the application to use the following gems
8
+ | Name | Version | Require |
9
+ | factory_girl_rails | ~> 1.7.0 | |
10
+ | factory_girl | ~> 2.6.4 | |
11
+ | cucumber-rails | ~> 1.3.0 | false |
12
+ | rspec-rails | ~> 2.11.0 | |
13
+ | capybara | ~> 1.1.2 | |
14
+ | slim-rails | ~> 1.0.3 | |
15
+ And I successfully run `bundle install --local`
16
+ And I successfully run `bundle exec rake db:migrate`
17
+
18
+ Scenario:
19
+ When I successfully run `bundle exec rake cucumber`
20
+ Then the output should contain "2 scenarios (2 passed)"
21
+ And the output should contain "17 steps (17 passed)"
@@ -0,0 +1,112 @@
1
+ PROJECT_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..', '..')).freeze
2
+ APP_NAME = 'testapp'.freeze
3
+
4
+ BUNDLE_ENV_VARS = %w(RUBYOPT BUNDLE_PATH BUNDLE_BIN_PATH BUNDLE_GEMFILE)
5
+ ORIGINAL_BUNDLE_VARS = Hash[ENV.select{ |key,value| BUNDLE_ENV_VARS.include?(key) }]
6
+
7
+ Before do
8
+ ENV['BUNDLE_GEMFILE'] = File.join(Dir.pwd, ENV['BUNDLE_GEMFILE']) unless ENV['BUNDLE_GEMFILE'].start_with?(Dir.pwd)
9
+ end
10
+
11
+ After do
12
+ ORIGINAL_BUNDLE_VARS.each_pair do |key, value|
13
+ ENV[key] = value
14
+ end
15
+ end
16
+
17
+ When 'I generate a new rails application' do
18
+ steps %{
19
+ When I run `rails new #{APP_NAME}`
20
+ And I cd to "#{APP_NAME}"
21
+ And I comment out the gem "turn" from the Gemfile
22
+ And I comment out the gem "coffee-rails" from the Gemfile
23
+ And I comment out the gem "uglifier" from the Gemfile
24
+ And I reset Bundler environment variables
25
+ And I set the "BUNDLE_GEMFILE" environment variable to "Gemfile"
26
+ And I successfully run `bundle install --local`
27
+ }
28
+ if RUBY_VERSION >= "1.9.3"
29
+ append_to_gemfile %(gem "rake", "~> 0.9.3.beta.1")
30
+ step %(I successfully run `bundle update rake`)
31
+ end
32
+ end
33
+
34
+ When /^I copy the generic app files from the support folder into the generated app$/ do
35
+ FileUtils.cp_r File.join(PROJECT_ROOT, 'feature_support/testapp'), File.join(PROJECT_ROOT, 'tmp/aruba'), :remove_destination => true
36
+ end
37
+
38
+ When /^I configure the application to use the (.+) gem from this project$/ do |name|
39
+ append_to_gemfile "gem '#{name}', :path => '#{PROJECT_ROOT}'"
40
+ end
41
+
42
+ When /^I configure the application to use "([^\"]+)" from this project in test and development$/ do |name|
43
+ append_to_gemfile <<-GEMFILE
44
+ group :test, :development do
45
+ gem '#{name}', :path => '#{PROJECT_ROOT}'
46
+ end
47
+ GEMFILE
48
+ end
49
+
50
+ When 'I run the rspec generator' do
51
+ steps %{
52
+ When I successfully run `rails generate rspec:install`
53
+ }
54
+ end
55
+
56
+ When 'I configure the application to use the following gems' do |table|
57
+ table.hashes.each do |hash|
58
+ if hash[:Require] && hash[:Require].strip.size > 0
59
+ append_to_gemfile "gem '#{hash[:Name]}', '#{hash[:Version]}', :require => #{hash[:Require]}\n"
60
+ else
61
+ append_to_gemfile "gem '#{hash[:Name]}', '#{hash[:Version]}'\n"
62
+ end
63
+ end
64
+
65
+ end
66
+
67
+ When /^I set the "([^"]*)" environment variable to "([^"]*)"$/ do |key, value|
68
+ ENV[key] = value
69
+ end
70
+
71
+ When 'I append gems from Appraisal Gemfile' do
72
+ File.read(ENV['BUNDLE_GEMFILE']).split("\n").each do |line|
73
+ if line =~ /^gem "(?!rails|appraisal)/
74
+ append_to_gemfile line.strip
75
+ end
76
+ end
77
+ end
78
+
79
+ When 'I reset Bundler environment variables' do
80
+ BUNDLE_ENV_VARS.each do |key|
81
+ ENV[key] = nil
82
+ end
83
+ end
84
+
85
+ When /^I comment out the gem "([^"]*)" from the Gemfile$/ do |gemname|
86
+ comment_out_gem_in_gemfile(gemname)
87
+ end
88
+
89
+ module FileHelpers
90
+ def append_to(path, contents)
91
+ in_current_dir do
92
+ File.open(path, "a") do |file|
93
+ file.puts
94
+ file.puts contents
95
+ end
96
+ end
97
+ end
98
+
99
+ def append_to_gemfile(contents)
100
+ append_to('Gemfile', contents)
101
+ end
102
+
103
+ def comment_out_gem_in_gemfile(gemname)
104
+ in_current_dir do
105
+ gemfile = File.read("Gemfile")
106
+ gemfile.sub!(/^(\s*)(gem\s*['"]#{gemname})/, "\\1# \\2")
107
+ File.open("Gemfile", 'w'){ |file| file.write(gemfile) }
108
+ end
109
+ end
110
+ end
111
+
112
+ World(FileHelpers)
@@ -0,0 +1,6 @@
1
+ require 'aruba/cucumber'
2
+ require 'factory_girl'
3
+
4
+ Before do
5
+ @aruba_timeout_seconds = 120
6
+ end
@@ -0,0 +1,13 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source :rubygems
4
+
5
+ gem "sqlite3", :platform=>:ruby
6
+ gem "activerecord-jdbc-adapter", :platform=>:jruby
7
+ gem "activerecord-jdbcsqlite3-adapter", :platform=>:jruby
8
+ gem "jdbc-sqlite3", :platform=>:jruby
9
+ gem "jruby-openssl", :platform=>:jruby
10
+ gem "therubyrhino", :platform=>:jruby
11
+ gem "rails", "~> 3.0.0"
12
+
13
+ gemspec :path=>"../"
@@ -0,0 +1,15 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source :rubygems
4
+
5
+ gem "sqlite3", :platform=>:ruby
6
+ gem "activerecord-jdbc-adapter", :platform=>:jruby
7
+ gem "activerecord-jdbcsqlite3-adapter", :platform=>:jruby
8
+ gem "jdbc-sqlite3", :platform=>:jruby
9
+ gem "jruby-openssl", :platform=>:jruby
10
+ gem "therubyrhino", :platform=>:jruby
11
+ gem "rails", "~> 3.1.0"
12
+ gem "jquery-rails"
13
+ gem "sass-rails"
14
+
15
+ gemspec :path=>"../"
@@ -0,0 +1,15 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source :rubygems
4
+
5
+ gem "sqlite3", :platform=>:ruby
6
+ gem "activerecord-jdbc-adapter", :platform=>:jruby
7
+ gem "activerecord-jdbcsqlite3-adapter", :platform=>:jruby
8
+ gem "jdbc-sqlite3", :platform=>:jruby
9
+ gem "jruby-openssl", :platform=>:jruby
10
+ gem "therubyrhino", :platform=>:jruby
11
+ gem "rails", "~> 3.2.0"
12
+ gem "jquery-rails"
13
+ gem "sass-rails"
14
+
15
+ gemspec :path=>"../"
@@ -0,0 +1,6 @@
1
+ Usage:
2
+ rails g view_models <view model class name>
3
+ rails g view_models User
4
+
5
+ rails g view_models <view model class name> <partials for render_as, separated by space>
6
+ rails g view_models User compact extensive list_item table_item
@@ -0,0 +1,6 @@
1
+ <ul class="collection">
2
+ <%- collection.each do |item| -%>
3
+ <%- view_model = view_model_for item -%>
4
+ <li><%= view_model.render_as template_name -%></li>
5
+ <%- end -%>
6
+ </ul>
@@ -2,7 +2,6 @@
2
2
  - collection.each do |item|
3
3
  - view_model = view_model_for item
4
4
  %li
5
- - options = (template_format ? { :format => template_format } : {})
6
- = view_model.render_as template_name, options
5
+ = view_model.render_as template_name
7
6
  = separator unless item == collection.entries.last
8
7
 
@@ -0,0 +1,6 @@
1
+ ul.collection
2
+ - collection.each do |item|
3
+ - view_model = view_model_for item
4
+ li
5
+ = view_model.render_as template_name
6
+ = separator unless item == collection.entries.last
@@ -0,0 +1,6 @@
1
+ <ol class="collection">
2
+ <%- collection.each do |item| -%>
3
+ <%- view_model = view_model_for item -%>
4
+ <li><%= view_model.render_as template_name -%></li>
5
+ <%- end -%>
6
+ </ol>
@@ -0,0 +1,4 @@
1
+ %ol.collection
2
+ - collection.each do |item|
3
+ - view_model = view_model_for item
4
+ %li= view_model.render_as template_name
@@ -0,0 +1,5 @@
1
+ ol.collection
2
+ - collection.each do |item|
3
+ - view_model = view_model_for item
4
+ li
5
+ = view_model.render_as template_name
@@ -0,0 +1,18 @@
1
+ <%- if collection.page_count > 1 -%>
2
+ <p>
3
+ <%- if collection.previous_page? -%>
4
+ <%= link_to 'previous', :page => collection.page-1 -%>
5
+ <%- end -%>
6
+ <%- 1.upto(collection.page_count) do |page| -%>
7
+ <%- if page == collection.page -%>
8
+ <%= page.to_s -%>
9
+ <%- else -%>
10
+ <%= link_to page, :page => page -%>
11
+ <%- end -%>
12
+ <%- end -%>
13
+ <%= separator unless collection.last_page? -%>
14
+ <%- if collection.next_page? -%>
15
+ <%= link_to 'next', :page => collection.page+1 -%>
16
+ <%- end -%>
17
+ </p>
18
+ <%- end -%>
@@ -1,7 +1,7 @@
1
1
  - if collection.page_count > 1
2
2
  %p
3
3
  - if collection.previous_page?
4
- = link_to 'zurückblättern', :page => collection.page-1
4
+ = link_to 'previous', :page => collection.page-1
5
5
  - 1.upto(collection.page_count) do |page|
6
6
  - if page == collection.page
7
7
  = page.to_s
@@ -9,4 +9,4 @@
9
9
  = link_to page, :page => page
10
10
  = separator unless collection.last_page?
11
11
  - if collection.next_page?
12
- = link_to 'vorblättern', :page => collection.page+1
12
+ = link_to 'next', :page => collection.page+1
@@ -0,0 +1,12 @@
1
+ - if collection.page_count > 1
2
+ p
3
+ - if collection.previous_page?
4
+ = link_to 'previous', :page => collection.page-1
5
+ - 1.upto(collection.page_count) do |page|
6
+ - if page == collection.page
7
+ = page.to_s
8
+ - else
9
+ = link_to page, :page => page
10
+ = separator unless collection.last_page?
11
+ - if collection.next_page?
12
+ = link_to 'next', :page => collection.page+1
@@ -0,0 +1,10 @@
1
+ <table class="collection">
2
+ <tbody>
3
+ <%- collection.each do |item| -%>
4
+ <tr>
5
+ <%- view_model = view_model_for item -%>
6
+ <%= view_model.render_as template_name -%>
7
+ </tr>
8
+ <%- end -%>
9
+ </tbody>
10
+ </table>
@@ -0,0 +1,5 @@
1
+ table.collection
2
+ - collection.each do |item|
3
+ tr
4
+ - view_model = view_model_for item
5
+ = view_model.render_as template_name
@@ -0,0 +1,57 @@
1
+ # A generator for view models
2
+ #
3
+ class ViewModelsGenerator < Rails::Generators::Base
4
+ source_root File.expand_path('../templates', __FILE__)
5
+ argument :class_name, :type => :string
6
+ class_option :views, :type => :string, :default => 'erb', :desc => "Render view files in erb, haml or slim (use the language name as the argument)"
7
+
8
+ # Generate the view models given
9
+ #
10
+ def generate_view_models
11
+ file_name = class_name.underscore
12
+
13
+ create_model class_name, file_name
14
+
15
+ create_views file_name if options.views.present?
16
+ end
17
+
18
+ # Create views corresponding to view models
19
+ #
20
+ def create_views file_name
21
+ %W(list_item main_item).each do |view|
22
+ create_file "app/views/#{file_name.pluralize}/_#{view}.html.#{options.views.downcase}", File.read(File.join(File.expand_path('../templates', __FILE__), "/views/_empty.html.#{options.views.downcase}"))
23
+ end
24
+
25
+ # Copy collection views.
26
+ #
27
+ %W(collection list pagination table).each do |view|
28
+ create_file "app/views/#{file_name.pluralize}/_#{view}.html.#{options.views.downcase}", File.read(File.join(File.expand_path('../templates', __FILE__), "/views/_#{view}.html.#{options.views.downcase}"))
29
+ end
30
+ end
31
+
32
+ # Create the view model files for the view models given
33
+ #
34
+ def create_model class_name, file_name
35
+ # ViewModels
36
+ #
37
+ create_file "app/view_models/#{file_name}.rb", <<-FILE
38
+ class ViewModels::#{class_name} < ViewModels::Project
39
+
40
+ # model_reader :icon, :filter_through => [:h]
41
+
42
+ end
43
+ FILE
44
+
45
+ # Specs
46
+ #
47
+
48
+ create_file "spec/view_models/#{file_name}_spec.rb", <<-FILE
49
+ require 'spec_helper'
50
+
51
+ describe ViewModels::#{class_name} do
52
+
53
+ end
54
+ FILE
55
+
56
+ end
57
+ end
@@ -1,5 +1,15 @@
1
- if defined? Padrino
2
- require File.join(File.dirname(__FILE__), '/padrino/init')
3
- else
4
- require File.join(File.dirname(__FILE__), '/rails2/init')
5
- end
1
+ require 'view_models/extensions/model_reader'
2
+
3
+ require 'view_models/helpers/mapping'
4
+ require 'view_models/helpers/collection'
5
+ require 'view_models/helpers/view'
6
+
7
+ require 'view_models/path_store'
8
+ require 'view_models/render_options'
9
+ require 'view_models/context_extractor'
10
+ require 'view_models/base'
11
+
12
+ require 'view_models/view'
13
+
14
+ ActionController::Base.send :include, ViewModels::Helpers::Mapping
15
+ ActionView::Base.send :include, ViewModels::Helpers::Mapping