view_models 2.0.1 → 3.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 (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