trailblazer 1.0.0.rc2 → 1.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.
Binary file
Binary file
@@ -1,20 +0,0 @@
1
- require "test_helper"
2
- require "rack/test"
3
-
4
- class Respond___Test < MiniTest::Spec
5
- include Rack::Test::Methods
6
-
7
- def app
8
- Rails.application
9
- end
10
-
11
- it "respond with :namespace" do
12
- # Rails.logger = Logger.new(STDOUT) # TODO: how do we get exceptions with rack-test?
13
-
14
- post "/songs/create_with_namespace", {title: "Teenager Liebe"}.to_json, "CONTENT_TYPE" => "application/json", "HTTP_ACCEPT"=>"application/json"
15
- # puts last_response.inspect
16
- last_response.status.must_equal 201
17
- id = Song.last.id
18
- last_response.headers["Location"].must_equal "http://example.org/api/songs/#{id}"
19
- end
20
- end
@@ -1,159 +0,0 @@
1
- # BUNDLE_GEMFILE=gemfiles/Gemfile.rails bundle exec rake rails
2
- require 'test_helper'
3
-
4
- ActionController::TestCase.class_eval do
5
- setup do
6
- @routes = Rails.application.routes
7
- end
8
- end
9
-
10
- class GenericResponderTest < ActionController::TestCase
11
- tests SongsController
12
-
13
- setup do
14
- @routes = Rails.application.routes
15
- end
16
-
17
- test "Create with params" do
18
- post :create_with_params, {song: {title: "You're Going Down", length: 120}}
19
- assert_response 302
20
-
21
- song = Song.last
22
- assert_equal "A Beautiful Indifference", song.title
23
- assert_equal nil, song.length # params overwritten from controller.
24
- end
25
- end
26
-
27
- # overriding Controller#process_params.
28
- class ProcessParamsTest < ActionController::TestCase
29
- tests BandsController
30
-
31
- setup do
32
- @routes = Rails.application.routes
33
- end
34
-
35
- test "Create with overridden #process_params" do
36
- post :create, band: {name: "Kreator"}
37
- assert_redirected_to band_path(Band.last)
38
-
39
- band = Band.last
40
- assert_equal "Kreator", band.name
41
- assert_equal "Essen", band.locality
42
- end
43
- end
44
-
45
-
46
-
47
- class ResponderRunTest < ActionController::TestCase
48
- tests BandsController
49
-
50
- test "[html/valid]" do
51
- put :update, {id: 1, band: {name: "Nofx"}}
52
- assert_equal "no block: Nofx, Essen, Band::Create", response.body
53
- end
54
-
55
- test "[html/valid] with builds" do
56
- put :update, {id: 1, band: {name: "Nofx"}, admin: true}
57
- assert_equal "no block: Nofx [ADMIN], Essen, Band::Create::Admin", response.body
58
- end
59
-
60
- test "with block [html/valid]" do
61
- put :update_with_block, {id: 1, band: {name: "Nofx"}}
62
- assert_equal "[valid] with block: Nofx, Essen", response.body
63
- end
64
-
65
- test "with block [html/invalid]" do
66
- put :update_with_block, {id: 1, band: {name: ""}}
67
- end
68
- end
69
-
70
- #present.
71
- class ControllerPresentTest < ActionController::TestCase
72
- tests BandsController
73
-
74
- # let (:band) { }
75
-
76
- test "#present" do
77
- band = Band::Create[band: {name: "Nofx"}].model
78
-
79
- get :show, id: band.id
80
-
81
- assert_equal "bands/show: Band,Band,Band::Update,Essen,nil", response.body
82
- end
83
-
84
- # TODO: this implicitely tests builds. maybe have separate test for that?
85
- test "#present [JSON]" do
86
- band = Band::Create[band: {name: "Nofx"}].model
87
-
88
- get :show, id: band.id, format: :json
89
- assert_equal "{\"name\":\"Nofx\"}", response.body
90
- end
91
- end
92
-
93
- #collection
94
- class ControllerCollectionTest < ActionController::TestCase
95
- tests BandsController
96
-
97
- # let (:band) { }
98
-
99
- test "#collection" do
100
- Band.destroy_all
101
- Band::Create[band: {name: "Nofx"}]
102
- Band::Create[band: {name: "Ramones"}]
103
-
104
-
105
- get :index
106
-
107
- assert_equal "bands/index.html: Nofx Ramones \n", response.body
108
- end
109
- end
110
-
111
- # #form.
112
- class ControllerFormTest < ActionController::TestCase
113
- tests BandsController
114
-
115
- test "#form" do
116
- get :new
117
- assert_select "form input#band_name"
118
- assert response.body =~ /<a>Sydney<\/a>/ # prepopulate!
119
- assert_select "b", "Band,true,Band::Create,Band::Create,Essen"
120
- end
121
-
122
- test "#form with builder" do
123
- get :new, admin: true
124
-
125
- assert_select "b", "Band,true,Band::Create::Admin,Band::Create::Admin,Essen"
126
- end
127
- end
128
-
129
- class ActiveRecordPresentTest < ActionController::TestCase
130
- tests ActiveRecordBandsController
131
-
132
- test "#present" do
133
- band = Band::Create.(band: {name: "Nofx"}).model
134
- get :show, id: band.id
135
-
136
- assert_equal "active_record_bands/show.html: Band, Band, nil, Band::Update", response.body
137
- end
138
-
139
- test "#collection" do
140
- Band.destroy_all
141
- Band::Create[band: {name: "Nofx"}]
142
-
143
- get :index
144
-
145
- assert_equal "active_record_bands/index.html: Band::ActiveRecord_Relation, Band::ActiveRecord_Relation, Band::Index", response.body
146
- end
147
- end
148
-
149
- class PrefixedTablenameControllerTest < ActionController::TestCase
150
- tests TenantsController
151
-
152
- test "show" do
153
- tenant = Tenant.create(name: "My Tenant") # yepp, I am not using an operation! blasphemy!!!
154
- get :show, id: tenant.id
155
-
156
- assert_equal "My Tenant", response.body
157
- end
158
- end
159
-
@@ -1,46 +0,0 @@
1
- require "test_helper"
2
-
3
- module RailsEndpoint
4
- class ConfiguredTest < ActionDispatch::IntegrationTest
5
- class Create < Trailblazer::Operation
6
- include Model
7
- model Band
8
-
9
- def process(params)
10
- @model = Band.create(params["band"].permit(:name)) # how ridiculous is strong_parameters?
11
- end
12
- end
13
-
14
- class JSONCreate < Create
15
- def process(params)
16
- @model = Band.create(JSON.parse(params["band"])) # document comes in keyed as "band".
17
- end
18
- end
19
-
20
- class BandsController < ApplicationController
21
- include Trailblazer::Operation::Controller
22
- respond_to :html, :json
23
-
24
- def create
25
- run Create if request.format == :html
26
- run JSONCreate if request.format == :json
27
- render text: ""
28
- end
29
- end
30
-
31
- test "Create" do
32
- post "/rails_endpoint/configured_test/bands", {band: {name: "All"}}
33
- assert_response 200
34
- assert_equal "All", Band.last.name
35
- end
36
-
37
- test "Create: JSON" do
38
- post "/rails_endpoint/configured_test/bands.json", {name: "NOFX"}.to_json,'CONTENT_TYPE' => 'application/json', "HTTP_ACCEPT"=>"application/json" #, headers # FIXME: headers do not work
39
- assert_response 200
40
- assert_equal "NOFX", Band.last.name
41
- end
42
- end
43
- end
44
-
45
- # test :is_document
46
- # test :namespace
File without changes
@@ -1,21 +0,0 @@
1
- class UserCell < Cell::Rails
2
- include Kaminari::Cells
3
-
4
- def show(users)
5
- @users = users
6
-
7
- render inline: <<-ERB
8
- <%= paginate @users %>
9
- ERB
10
- end
11
- end
12
-
13
- class ViewModelCell < Cell::ViewModel
14
- include Kaminari::Cells
15
-
16
- def show
17
- render inline: <<-ERB
18
- <%= paginate model %>
19
- ERB
20
- end
21
- end
@@ -1,3 +0,0 @@
1
- # database
2
- ActiveRecord::Base.configurations = {'test' => {:adapter => 'sqlite3', :database => ':memory:'}}
3
- ActiveRecord::Base.establish_connection(:test)
@@ -1,140 +0,0 @@
1
- # controllers
2
- class ApplicationController < ActionController::Base
3
- append_view_path "test/rails/fake_app/views"
4
- end
5
-
6
- class SongsController < ApplicationController
7
- respond_to :json, :js
8
-
9
- def index
10
- @users = Song.all.page params[:page]
11
- render inline: <<-ERB
12
- <%= render_cell(:user, :show, @users) %>
13
- ERB
14
- end
15
-
16
- include Trailblazer::Operation::Controller
17
- respond_to :html
18
-
19
- def create
20
- respond Song::Create
21
- end
22
-
23
- def other_create
24
- respond Song::Create, location: other_create_songs_path, action: :another_view
25
- end
26
-
27
- def create_with_params
28
- respond Song::Create, {}, song: {title: "A Beautiful Indifference"}
29
- end
30
-
31
- def create_with_block
32
- respond Song::Create do |op, formats|
33
- return render text: "block run, valid: #{op.valid?}"
34
- end
35
- end
36
-
37
- def create_with_namespace
38
- respond Song::Create::Json, namespace: [:api]
39
- end
40
-
41
- def destroy
42
- respond Song::Delete
43
- end
44
-
45
- def destroy_with_formats
46
- respond Song::Delete do |op, formats|
47
- formats.js { render text: "#{op.model.class} slayer!" }
48
- end
49
- end
50
- end
51
-
52
- class BandsController < ApplicationController
53
- include Trailblazer::Operation::Controller
54
- respond_to :html, :json
55
-
56
- def index
57
- collection Band::Index
58
- end
59
-
60
- def show
61
- op = present Band::Update
62
- @klass = op.model.class
63
- @locality = params[:band][:locality] unless params[:format] == "json"
64
-
65
- return render json: op.to_json if params[:format] == "json"
66
- render text: "bands/show: #{[@klass, @model.class, @operation.class, @locality, @form.inspect].join(',')}"
67
- end
68
-
69
- def new
70
- @op = form Band::Create
71
-
72
- @locality = params[:band][:locality]
73
-
74
- render inline: <<-ERB
75
- <%= form_for @form do |f| %>
76
- <%= f.text_field :name %>
77
- <a><%= @form.locality %></a>
78
- <% end %>
79
-
80
- <b><%= [@model.class, @form.is_a?(Reform::Form), @operation.class, @op.class, @locality].join(",") %></b>
81
- ERB
82
- end
83
-
84
- def create
85
- respond Band::Create
86
- end
87
-
88
- def update
89
- run Band::Create
90
-
91
- render text: "no block: #{@operation.model.name}, #{params[:band][:locality]}, #{@operation.class}"
92
- end
93
-
94
- def update_with_block
95
- run Band::Create do |op|
96
- return render text: "[valid] with block: #{op.model.name}, #{params[:band][:locality]}"
97
- end
98
-
99
- render text: "[invalid] with block: #{@operation.model.name}, #{params[:band][:locality]}"
100
- end
101
-
102
- private
103
- def process_params!(params) # this is where you set :current_user, etc.
104
- return if params[:format] == "json"
105
-
106
- params[:band] ||= {}
107
- params[:band][:locality] = "Essen"
108
- end
109
- end
110
-
111
- require 'trailblazer/operation/controller/active_record'
112
- class ActiveRecordBandsController < ApplicationController
113
- include Trailblazer::Operation::Controller
114
- include Trailblazer::Operation::Controller::ActiveRecord
115
- respond_to :html
116
-
117
- def index
118
- collection Band::Index
119
- render text: "active_record_bands/index.html: #{@collection.class}, #{@bands.class}, #{@operation.class}"
120
- end
121
-
122
- def show
123
- present Band::Update
124
-
125
- render text: "active_record_bands/show.html: #{@model.class}, #{@band.class}, #{@form.inspect}, #{@operation.class}"
126
- end
127
- end
128
-
129
- require 'trailblazer/operation/controller/active_record'
130
- class TenantsController < ApplicationController
131
- include Trailblazer::Operation::Controller
132
- include Trailblazer::Operation::Controller::ActiveRecord
133
- respond_to :html
134
-
135
- def show
136
- present Tenant::Show
137
- render text: "#{@tenant.name}" # model ivar doesn't contain table prefix `bla.xxx`.
138
- end
139
- end
140
-
@@ -1,34 +0,0 @@
1
- # models
2
- class Song < ActiveRecord::Base
3
- end
4
-
5
- class Band < ActiveRecord::Base
6
- has_many :songs
7
- end
8
-
9
- class Tenant < ActiveRecord::Base
10
- self.table_name = 'public.tenants'
11
- end
12
-
13
- # migrations
14
- class CreateAllTables < ActiveRecord::Migration
15
- def self.up
16
- create_table(:songs) do |t|
17
- t.string :title
18
- t.integer :length
19
- t.integer :band_id
20
- end
21
-
22
- create_table(:bands) do |t|
23
- t.string :name
24
- t.string :locality
25
- end
26
-
27
- create_table(:"public.tenants") do |t|
28
- t.string :name
29
- end
30
- end
31
- end
32
- ActiveRecord::Migration.verbose = false
33
- CreateAllTables.up
34
-
@@ -1,78 +0,0 @@
1
- # BUNDLE_GEMFILE=gemfiles/Gemfile.rails bundle exec rake rails
2
- # TODO: how does rails handle all the different rake test tasks?
3
-
4
- # require 'rails/all'
5
- require 'action_controller/railtie'
6
- require 'action_view/railtie'
7
- require 'active_record'
8
- require 'responders'
9
-
10
- require 'fake_app/config'
11
-
12
-
13
- # config
14
- app = Class.new(Rails::Application)
15
- app.config.secret_token = '3b7cd727ee24e8444053437c36cc66c4'
16
- app.config.session_store :cookie_store, key: '_myapp_session'
17
- app.config.active_support.deprecation = :log
18
- app.config.eager_load = false
19
- # Rais.root
20
- app.config.root = File.dirname(__FILE__)
21
- Rails.backtrace_cleaner.remove_silencers!
22
- app.initialize!
23
-
24
- # routes
25
- app.routes.draw do
26
-
27
- resources :songs do
28
- member do # argh.
29
- delete :destroy_with_formats
30
- end
31
-
32
- collection do
33
- post :other_create
34
- post :create_with_params
35
- post :create_with_block
36
- post :create_with_namespace
37
- end
38
- end
39
-
40
- resources :active_record_bands
41
-
42
- resources :bands do
43
- collection do
44
- post :create
45
- get :new_with_block
46
- end
47
-
48
- member do
49
- post :update_with_block
50
- end
51
- end
52
-
53
- namespace :rails_endpoint do
54
- namespace :unconfigured_test do
55
- resources :bands
56
- end
57
- namespace :configured_test do
58
- resources :bands
59
- end
60
- end
61
-
62
- namespace :api do
63
- resources :songs
64
- end
65
-
66
- resources :tenants, only: [:show]
67
- end
68
-
69
- require 'trailblazer/operation/responder'
70
- require 'trailblazer/operation/controller'
71
- require 'trailblazer/operation/representer'
72
-
73
- require 'fake_app/controllers'
74
- require 'fake_app/models'
75
- require 'fake_app/song/operations.rb'
76
-
77
- # helpers
78
- Object.const_set(:ApplicationHelper, Module.new)