puffer 0.0.20 → 0.0.21

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 (54) hide show
  1. data/Gemfile +3 -1
  2. data/Gemfile.lock +45 -41
  3. data/README.md +2 -5
  4. data/VERSION +1 -1
  5. data/app/assets/stylesheets/puffer/application.css +1 -0
  6. data/app/assets/stylesheets/puffer/puffer_tree.css +65 -0
  7. data/{lib → app/controllers}/puffer/base.rb +3 -1
  8. data/app/controllers/puffer/{dashboard.rb → dashboard_base.rb} +1 -1
  9. data/app/controllers/puffer/dashboard_controller.rb +4 -0
  10. data/app/controllers/puffer/{sessions.rb → sessions_base.rb} +2 -2
  11. data/{lib/generators/puffer/install/templates → app/controllers/puffer}/sessions_controller.rb +2 -1
  12. data/app/controllers/puffer/tree_base.rb +50 -0
  13. data/app/helpers/puffer_helper.rb +2 -6
  14. data/app/helpers/puffer_tree_helper.rb +15 -0
  15. data/app/views/layouts/puffer.html.erb +54 -71
  16. data/app/views/layouts/puffer_base.html.erb +28 -0
  17. data/app/views/layouts/puffer_dashboard.html.erb +15 -32
  18. data/app/views/layouts/puffer_sessions.html.erb +7 -24
  19. data/app/views/puffer/base/index.html.erb +0 -1
  20. data/app/views/puffer/{dashboard → dashboard_base}/index.html.erb +0 -0
  21. data/app/views/puffer/{sessions → sessions_base}/new.html.erb +0 -0
  22. data/app/views/puffer/tree_base/_record.html.erb +27 -0
  23. data/app/views/puffer/tree_base/toggle.js.erb +6 -0
  24. data/app/views/puffer/tree_base/tree.html.erb +9 -0
  25. data/config/puffer_routes.rb +8 -0
  26. data/lib/puffer/controller/dsl.rb +11 -4
  27. data/lib/puffer/engine.rb +4 -0
  28. data/lib/puffer/extensions/controller.rb +0 -1
  29. data/lib/puffer/extensions/form.rb +1 -6
  30. data/lib/puffer/extensions/mapper.rb +7 -0
  31. data/lib/puffer/field.rb +87 -0
  32. data/lib/puffer/{fields.rb → field_set.rb} +2 -2
  33. data/lib/puffer.rb +2 -0
  34. data/puffer.gemspec +29 -22
  35. data/spec/dummy/app/controllers/admin/categories_controller.rb +4 -1
  36. data/spec/dummy/app/controllers/admin/posts_controller.rb +0 -2
  37. data/spec/dummy/app/controllers/puffer/sessions_controller.rb +1 -1
  38. data/spec/dummy/app/models/category.rb +2 -0
  39. data/spec/dummy/config/application.rb +1 -0
  40. data/spec/dummy/config/routes.rb +0 -7
  41. data/spec/dummy/db/migrate/{20100930132559_create_admin_users.rb → 20100930132559_create_users.rb} +1 -1
  42. data/spec/dummy/db/migrate/{20100930132656_create_admin_posts.rb → 20100930132656_create_posts.rb} +1 -1
  43. data/spec/dummy/db/migrate/{20100930132726_create_admin_categories.rb → 20100930132726_create_categories.rb} +6 -1
  44. data/spec/dummy/db/schema.rb +87 -0
  45. data/spec/dummy/db/seeds.rb +27 -0
  46. data/spec/lib/fields_spec.rb +13 -13
  47. metadata +62 -47
  48. data/config/routes.rb +0 -0
  49. data/lib/generators/puffer/install/USAGE +0 -6
  50. data/lib/generators/puffer/install/install_generator.rb +0 -13
  51. data/lib/generators/puffer/install/templates/dashboard_controller.rb +0 -3
  52. data/lib/puffer/controller/mapping.rb +0 -37
  53. data/lib/puffer/fields/field.rb +0 -89
  54. data/spec/dummy/app/controllers/puffer/dashboard_controller.rb +0 -3
@@ -0,0 +1,6 @@
1
+ <% nodes = capture do %>
2
+ <% puffer_tree_node records do |record, children| %>
3
+ <%= render :partial => 'record', :object => record, :locals => {:children => children} %>
4
+ <% end %>
5
+ <% end %>
6
+ $('<%= dom_id @parent %>').replace('<%= escape_javascript nodes %>')
@@ -0,0 +1,9 @@
1
+ <% @title = resource.human %>
2
+ <h1><%= @title %> Tree</h1>
3
+ <% if records.present? %>
4
+ <%= puffer_tree records, :class => 'puffer_tree' do |record, children| %>
5
+ <%= render :partial => 'record', :object => record, :locals => {:children => children} %>
6
+ <% end %>
7
+ <% else %>
8
+ <p>Sorry, but there is no records in <%= resource.human %></p>
9
+ <% end %>
@@ -0,0 +1,8 @@
1
+ Rails.application.routes.draw do
2
+
3
+ namespace :puffer do
4
+ root :to => 'dashboard#index'
5
+ resource :session
6
+ end
7
+
8
+ end
@@ -29,21 +29,28 @@ module Puffer
29
29
  block.bind(_collections).call if block_given?
30
30
  end
31
31
 
32
- def define_fields *actions
32
+ def define_fieldset *actions
33
+ options = actions.extract_options!
34
+ fallbacks = Array.wrap(options.delete(:fallbacks))
35
+
33
36
  actions.each do |action|
34
37
  class_attribute "_#{action}_fields"
35
- send "_#{action}_fields=", Puffer::Fields.new unless send("_#{action}_fields?")
38
+ send "_#{action}_fields=", Puffer::FieldSet.new unless send("_#{action}_fields?")
36
39
  helper_method "#{action}_fields"
37
40
 
38
41
  self.class.instance_eval do
39
42
  define_method action do |&block|
40
- @_fields = send("_#{action}_fields=", Puffer::Fields.new)
43
+ @_fields = send("_#{action}_fields=", Puffer::FieldSet.new)
41
44
  block.call if block
42
45
  remove_instance_variable :@_fields
43
46
  end
44
47
 
45
48
  define_method "#{action}_fields" do
46
- send "_#{action}_fields"
49
+ actions = [action] + fallbacks
50
+ last = actions.pop
51
+ actions.map do |action|
52
+ send("_#{action}_fields").presence
53
+ end.compact.first || send("_#{last}_fields")
47
54
  end
48
55
  end
49
56
 
data/lib/puffer/engine.rb CHANGED
@@ -1,5 +1,9 @@
1
1
  module Puffer
2
2
  class Engine < Rails::Engine
3
3
  config.autoload_paths << File.join(root, 'lib')
4
+
5
+ initializer 'puffer.add_puffer_namespace_routes', :after => :add_builtin_route do |app|
6
+ app.routes_reloader.paths.unshift File.join(root, 'config/puffer_routes.rb')
7
+ end
4
8
  end
5
9
  end
@@ -21,7 +21,6 @@ module Puffer
21
21
  include Puffer::Controller::Mutate
22
22
  include Puffer::Controller::Helpers
23
23
  include Puffer::Controller::Dsl
24
- include Puffer::Controller::Mapping
25
24
  include Puffer::Controller::Config
26
25
  include Puffer::Controller::Generated
27
26
  end
@@ -3,12 +3,7 @@ module Puffer
3
3
  module FormBuilder
4
4
 
5
5
  def puffer_field *args
6
- field = if args.first.is_a? Puffer::Fields::Field
7
- args.first
8
- else
9
- options = args.extract_options!
10
- Puffer::Fields::Field.new args, options
11
- end
6
+ field = args.first.is_a?(Puffer::Fields::Field) ? args.first : Puffer::Fields::Field.new(*args)
12
7
  field.resource = object.class
13
8
  field.input self
14
9
  end
@@ -24,6 +24,13 @@ module Puffer
24
24
  if controller.configuration.group
25
25
  puffer = Rails.application.routes.puffer
26
26
  namespace = @scope[:module]
27
+
28
+ unless puffer[namespace]
29
+ @scope[:module] = 'puffer'
30
+ root :to => 'dashboard#index'
31
+ @scope[:module] = namespace
32
+ end
33
+
27
34
  puffer[namespace] ||= ActiveSupport::OrderedHash.new
28
35
  puffer[namespace][controller.configuration.group] ||= []
29
36
  puffer[namespace][controller.configuration.group] << controller
@@ -0,0 +1,87 @@
1
+ module Puffer
2
+ class Field
3
+
4
+ attr_accessor :resource, :field_name, :options, :fields
5
+
6
+ def initialize field_name, *resource_and_options, &block
7
+ @field_name = field_name.to_s
8
+ @options = resource_and_options.extract_options!
9
+ @resource = resource_and_options.first
10
+ @fields = Puffer::FieldSet.new
11
+ block.bind(self).call if block
12
+ end
13
+
14
+ def field name, options = {}, &block
15
+ @fields.field(name, swallow_nil{reflection.klass}, options, &block)
16
+ end
17
+
18
+ def native?
19
+ model == resource
20
+ end
21
+
22
+ def name
23
+ @name ||= field_name.split('.').last
24
+ end
25
+
26
+ def path
27
+ @path ||= field_name.split('.')[0..-2].join('.')
28
+ end
29
+
30
+ def human
31
+ @human ||= model && model.human_attribute_name(name)
32
+ end
33
+
34
+ def order
35
+ @order ||= options[:order] || query_column
36
+ end
37
+
38
+ def type
39
+ @type ||= options[:type] ? options[:type].to_sym : (Puffer::Customs.type_for(self) || (column ? column.type : :string))
40
+ end
41
+
42
+ def to_s
43
+ field_name
44
+ end
45
+
46
+ def reflection
47
+ @reflection ||= model && model.reflect_on_association(name.to_sym)
48
+ end
49
+
50
+ def collection?
51
+ [:has_many, :has_and_belongs_to_many].include? type
52
+ end
53
+
54
+ def input_options
55
+ options[:html] || {}
56
+ end
57
+
58
+ def input builder
59
+ Puffer::Customs.input_for(self).render builder, self
60
+ end
61
+
62
+ def model
63
+ @model ||= begin
64
+ associations = field_name.split('.')
65
+ associations.pop
66
+ temp = resource
67
+ while temp.reflect_on_association(association = swallow_nil{associations.shift.to_sym}) do
68
+ temp = temp.reflect_on_association(association).klass
69
+ end
70
+ temp
71
+ end if resource
72
+ end
73
+
74
+ def association_columns
75
+ @association_columns ||= fields
76
+ end
77
+
78
+ def column
79
+ @column ||= model && model.columns_hash[name]
80
+ end
81
+
82
+ def query_column
83
+ "#{model.table_name}.#{name}" if column
84
+ end
85
+
86
+ end
87
+ end
@@ -1,8 +1,8 @@
1
1
  module Puffer
2
- class Fields < Array
2
+ class FieldSet < Array
3
3
 
4
4
  def field *args, &block
5
- push Field.new(*args, &block)
5
+ push Puffer::Field.new(*args, &block)
6
6
  last
7
7
  end
8
8
 
data/lib/puffer.rb CHANGED
@@ -6,6 +6,8 @@ module Puffer
6
6
 
7
7
  end
8
8
 
9
+ require 'kaminari'
10
+
9
11
  require 'puffer/engine'
10
12
  require 'puffer/extensions/activerecord'
11
13
  require 'puffer/extensions/controller'
data/puffer.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{puffer}
8
- s.version = "0.0.20"
8
+ s.version = "0.0.21"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["pyromaniac"]
12
- s.date = %q{2011-07-27}
12
+ s.date = %q{2011-08-01}
13
13
  s.description = %q{In Soviet Russia puffer admins you}
14
14
  s.email = %q{kinwizard@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -33,11 +33,18 @@ Gem::Specification.new do |s|
33
33
  "app/assets/javascripts/puffer/right.js",
34
34
  "app/assets/stylesheets/puffer/application.css",
35
35
  "app/assets/stylesheets/puffer/puffer.css",
36
+ "app/assets/stylesheets/puffer/puffer_tree.css",
36
37
  "app/assets/stylesheets/puffer/reset.css",
37
- "app/controllers/puffer/dashboard.rb",
38
- "app/controllers/puffer/sessions.rb",
38
+ "app/controllers/puffer/base.rb",
39
+ "app/controllers/puffer/dashboard_base.rb",
40
+ "app/controllers/puffer/dashboard_controller.rb",
41
+ "app/controllers/puffer/sessions_base.rb",
42
+ "app/controllers/puffer/sessions_controller.rb",
43
+ "app/controllers/puffer/tree_base.rb",
39
44
  "app/helpers/puffer_helper.rb",
45
+ "app/helpers/puffer_tree_helper.rb",
40
46
  "app/views/layouts/puffer.html.erb",
47
+ "app/views/layouts/puffer_base.html.erb",
41
48
  "app/views/layouts/puffer_dashboard.html.erb",
42
49
  "app/views/layouts/puffer_sessions.html.erb",
43
50
  "app/views/puffer/base/_form.html.erb",
@@ -49,25 +56,22 @@ Gem::Specification.new do |s|
49
56
  "app/views/puffer/base/index.html.erb",
50
57
  "app/views/puffer/base/new.html.erb",
51
58
  "app/views/puffer/base/show.html.erb",
52
- "app/views/puffer/dashboard/index.html.erb",
53
- "app/views/puffer/sessions/new.html.erb",
59
+ "app/views/puffer/dashboard_base/index.html.erb",
60
+ "app/views/puffer/sessions_base/new.html.erb",
61
+ "app/views/puffer/tree_base/_record.html.erb",
62
+ "app/views/puffer/tree_base/toggle.js.erb",
63
+ "app/views/puffer/tree_base/tree.html.erb",
54
64
  "config/locales/puffer.yml",
55
- "config/routes.rb",
65
+ "config/puffer_routes.rb",
56
66
  "lib/generators/puffer/controller/USAGE",
57
67
  "lib/generators/puffer/controller/controller_generator.rb",
58
68
  "lib/generators/puffer/controller/templates/controller.rb",
59
- "lib/generators/puffer/install/USAGE",
60
- "lib/generators/puffer/install/install_generator.rb",
61
- "lib/generators/puffer/install/templates/dashboard_controller.rb",
62
- "lib/generators/puffer/install/templates/sessions_controller.rb",
63
69
  "lib/puffer.rb",
64
- "lib/puffer/base.rb",
65
70
  "lib/puffer/controller/actions.rb",
66
71
  "lib/puffer/controller/config.rb",
67
72
  "lib/puffer/controller/dsl.rb",
68
73
  "lib/puffer/controller/generated.rb",
69
74
  "lib/puffer/controller/helpers.rb",
70
- "lib/puffer/controller/mapping.rb",
71
75
  "lib/puffer/controller/mutate.rb",
72
76
  "lib/puffer/customs.rb",
73
77
  "lib/puffer/engine.rb",
@@ -76,8 +80,8 @@ Gem::Specification.new do |s|
76
80
  "lib/puffer/extensions/core.rb",
77
81
  "lib/puffer/extensions/form.rb",
78
82
  "lib/puffer/extensions/mapper.rb",
79
- "lib/puffer/fields.rb",
80
- "lib/puffer/fields/field.rb",
83
+ "lib/puffer/field.rb",
84
+ "lib/puffer/field_set.rb",
81
85
  "lib/puffer/inputs/association.rb",
82
86
  "lib/puffer/inputs/base.rb",
83
87
  "lib/puffer/inputs/boolean.rb",
@@ -104,7 +108,6 @@ Gem::Specification.new do |s|
104
108
  "spec/dummy/app/controllers/admin/tags_controller.rb",
105
109
  "spec/dummy/app/controllers/admin/users_controller.rb",
106
110
  "spec/dummy/app/controllers/application_controller.rb",
107
- "spec/dummy/app/controllers/puffer/dashboard_controller.rb",
108
111
  "spec/dummy/app/controllers/puffer/sessions_controller.rb",
109
112
  "spec/dummy/app/helpers/application_helper.rb",
110
113
  "spec/dummy/app/models/category.rb",
@@ -133,15 +136,16 @@ Gem::Specification.new do |s|
133
136
  "spec/dummy/config/initializers/wrap_parameters.rb",
134
137
  "spec/dummy/config/locales/en.yml",
135
138
  "spec/dummy/config/routes.rb",
136
- "spec/dummy/db/migrate/20100930132559_create_admin_users.rb",
137
- "spec/dummy/db/migrate/20100930132656_create_admin_posts.rb",
138
- "spec/dummy/db/migrate/20100930132726_create_admin_categories.rb",
139
+ "spec/dummy/db/migrate/20100930132559_create_users.rb",
140
+ "spec/dummy/db/migrate/20100930132656_create_posts.rb",
141
+ "spec/dummy/db/migrate/20100930132726_create_categories.rb",
139
142
  "spec/dummy/db/migrate/20100930132837_create_post_categories.rb",
140
143
  "spec/dummy/db/migrate/20100930133425_create_admin_profiles.rb",
141
144
  "spec/dummy/db/migrate/20101011155830_create_tags.rb",
142
145
  "spec/dummy/db/migrate/20101011160326_create_taggings.rb",
143
146
  "spec/dummy/db/migrate/20110107082706_create_friendships.rb",
144
147
  "spec/dummy/db/migrate/20110301072545_create_news.rb",
148
+ "spec/dummy/db/schema.rb",
145
149
  "spec/dummy/db/seeds.rb",
146
150
  "spec/dummy/public/404.html",
147
151
  "spec/dummy/public/422.html",
@@ -173,7 +177,7 @@ Gem::Specification.new do |s|
173
177
  s.specification_version = 3
174
178
 
175
179
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
176
- s.add_runtime_dependency(%q<rails>, [">= 3.1.0.rc4"])
180
+ s.add_runtime_dependency(%q<rails>, [">= 3.1.0.rc5"])
177
181
  s.add_runtime_dependency(%q<kaminari>, [">= 0"])
178
182
  s.add_runtime_dependency(%q<apotomo>, [">= 0"])
179
183
  s.add_development_dependency(%q<sqlite3>, [">= 0"])
@@ -186,8 +190,9 @@ Gem::Specification.new do |s|
186
190
  s.add_development_dependency(%q<forgery>, [">= 0"])
187
191
  s.add_development_dependency(%q<fabrication>, [">= 0"])
188
192
  s.add_development_dependency(%q<jeweler>, [">= 0"])
193
+ s.add_development_dependency(%q<nested_set>, [">= 0"])
189
194
  else
190
- s.add_dependency(%q<rails>, [">= 3.1.0.rc4"])
195
+ s.add_dependency(%q<rails>, [">= 3.1.0.rc5"])
191
196
  s.add_dependency(%q<kaminari>, [">= 0"])
192
197
  s.add_dependency(%q<apotomo>, [">= 0"])
193
198
  s.add_dependency(%q<sqlite3>, [">= 0"])
@@ -200,9 +205,10 @@ Gem::Specification.new do |s|
200
205
  s.add_dependency(%q<forgery>, [">= 0"])
201
206
  s.add_dependency(%q<fabrication>, [">= 0"])
202
207
  s.add_dependency(%q<jeweler>, [">= 0"])
208
+ s.add_dependency(%q<nested_set>, [">= 0"])
203
209
  end
204
210
  else
205
- s.add_dependency(%q<rails>, [">= 3.1.0.rc4"])
211
+ s.add_dependency(%q<rails>, [">= 3.1.0.rc5"])
206
212
  s.add_dependency(%q<kaminari>, [">= 0"])
207
213
  s.add_dependency(%q<apotomo>, [">= 0"])
208
214
  s.add_dependency(%q<sqlite3>, [">= 0"])
@@ -215,6 +221,7 @@ Gem::Specification.new do |s|
215
221
  s.add_dependency(%q<forgery>, [">= 0"])
216
222
  s.add_dependency(%q<fabrication>, [">= 0"])
217
223
  s.add_dependency(%q<jeweler>, [">= 0"])
224
+ s.add_dependency(%q<nested_set>, [">= 0"])
218
225
  end
219
226
  end
220
227
 
@@ -1,4 +1,4 @@
1
- class Admin::CategoriesController < Puffer::Base
1
+ class Admin::CategoriesController < Puffer::TreeBase
2
2
 
3
3
  setup do
4
4
  group :posting
@@ -12,6 +12,9 @@ class Admin::CategoriesController < Puffer::Base
12
12
  form do
13
13
  field :id
14
14
  field :title
15
+ field :parent do
16
+ field :title
17
+ end
15
18
  end
16
19
 
17
20
  end
@@ -5,14 +5,12 @@ class Admin::PostsController < Puffer::Base
5
5
  end
6
6
 
7
7
  index do
8
- field :id
9
8
  field 'user.email'
10
9
  field :title
11
10
  field :body
12
11
  end
13
12
 
14
13
  form do
15
- field :id
16
14
  field :user do
17
15
  field :email
18
16
  end
@@ -1,4 +1,4 @@
1
- class Puffer::SessionsController < Puffer::Sessions
1
+ class Puffer::SessionsController < Puffer::SessionsBase
2
2
 
3
3
  def new
4
4
  @record = User.new
@@ -1,4 +1,6 @@
1
1
  class Category < ActiveRecord::Base
2
2
  has_many :post_categories
3
3
  has_many :posts, :through => :post_categories
4
+
5
+ acts_as_nested_set
4
6
  end
@@ -4,6 +4,7 @@ require 'rails/all'
4
4
 
5
5
  Bundler.require
6
6
  require 'puffer'
7
+ require 'nested_set'
7
8
 
8
9
  module Dummy
9
10
  class Application < Rails::Application
@@ -1,12 +1,5 @@
1
1
  Dummy::Application.routes.draw do
2
2
 
3
- match '/admin' => 'puffer/dashboard#index', :as => :admin
4
-
5
- namespace :puffer do
6
- root :to => 'dashboard#index'
7
- resource :session
8
- end
9
-
10
3
  namespace :admin do
11
4
  resources :users do
12
5
  resource :profile do
@@ -1,4 +1,4 @@
1
- class CreateAdminUsers < ActiveRecord::Migration
1
+ class CreateUsers < ActiveRecord::Migration
2
2
  def self.up
3
3
  create_table :users do |t|
4
4
  t.string :email
@@ -1,4 +1,4 @@
1
- class CreateAdminPosts < ActiveRecord::Migration
1
+ class CreatePosts < ActiveRecord::Migration
2
2
  def self.up
3
3
  create_table :posts do |t|
4
4
  t.integer :user_id
@@ -1,8 +1,13 @@
1
- class CreateAdminCategories < ActiveRecord::Migration
1
+ class CreateCategories < ActiveRecord::Migration
2
2
  def self.up
3
3
  create_table :categories do |t|
4
4
  t.string :title
5
5
 
6
+ t.integer :parent_id
7
+ t.integer :lft
8
+ t.integer :rgt
9
+ t.integer :depth, :default => 0
10
+
6
11
  t.timestamps
7
12
  end
8
13
  end
@@ -0,0 +1,87 @@
1
+ # This file is auto-generated from the current state of the database. Instead
2
+ # of editing this file, please use the migrations feature of Active Record to
3
+ # incrementally modify your database, and then regenerate this schema definition.
4
+ #
5
+ # Note that this schema.rb definition is the authoritative source for your
6
+ # database schema. If you need to create the application database on another
7
+ # system, you should be using db:schema:load, not running all the migrations
8
+ # from scratch. The latter is a flawed and unsustainable approach (the more migrations
9
+ # you'll amass, the slower it'll run and the greater likelihood for issues).
10
+ #
11
+ # It's strongly recommended to check this file into your version control system.
12
+
13
+ ActiveRecord::Schema.define(:version => 20110301072545) do
14
+
15
+ create_table "categories", :force => true do |t|
16
+ t.string "title"
17
+ t.integer "parent_id"
18
+ t.integer "lft"
19
+ t.integer "rgt"
20
+ t.integer "depth", :default => 0
21
+ t.datetime "created_at"
22
+ t.datetime "updated_at"
23
+ end
24
+
25
+ create_table "friendships", :force => true do |t|
26
+ t.integer "user_id"
27
+ t.integer "friend_id"
28
+ t.string "state"
29
+ t.datetime "created_at"
30
+ t.datetime "updated_at"
31
+ end
32
+
33
+ create_table "news", :force => true do |t|
34
+ t.string "title"
35
+ t.text "body"
36
+ t.datetime "created_at"
37
+ t.datetime "updated_at"
38
+ end
39
+
40
+ create_table "post_categories", :force => true do |t|
41
+ t.integer "post_id"
42
+ t.integer "category_id"
43
+ t.datetime "created_at"
44
+ t.datetime "updated_at"
45
+ end
46
+
47
+ create_table "posts", :force => true do |t|
48
+ t.integer "user_id"
49
+ t.string "title"
50
+ t.text "body"
51
+ t.datetime "created_at"
52
+ t.datetime "updated_at"
53
+ end
54
+
55
+ create_table "profiles", :force => true do |t|
56
+ t.integer "user_id"
57
+ t.string "name"
58
+ t.string "surname"
59
+ t.date "birth_date"
60
+ t.datetime "created_at"
61
+ t.datetime "updated_at"
62
+ end
63
+
64
+ create_table "taggings", :force => true do |t|
65
+ t.string "name"
66
+ t.integer "tag_id"
67
+ t.integer "taggable_id"
68
+ t.string "taggable_type"
69
+ end
70
+
71
+ add_index "taggings", ["tag_id"], :name => "index_taggings_on_tag_id"
72
+ add_index "taggings", ["taggable_id", "taggable_type"], :name => "index_taggings_on_taggable_id_and_taggable_type"
73
+
74
+ create_table "tags", :force => true do |t|
75
+ t.string "name"
76
+ t.datetime "created_at"
77
+ t.datetime "updated_at"
78
+ end
79
+
80
+ create_table "users", :force => true do |t|
81
+ t.string "email"
82
+ t.string "password"
83
+ t.datetime "created_at"
84
+ t.datetime "updated_at"
85
+ end
86
+
87
+ end
@@ -5,3 +5,30 @@
5
5
  #
6
6
  # cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }])
7
7
  # Mayor.create(name: 'Emanuel', city: cities.first)
8
+
9
+ categories = {
10
+ 'Category #1' => {
11
+ 'Category #11' => {},
12
+ 'Category #12' => {
13
+ 'Category #121' => {
14
+ 'Category #1211' => {}
15
+ },
16
+ 'Category #122' =>{}
17
+ },
18
+ 'Category #13' => {
19
+ 'Category #131' => {}
20
+ }
21
+ },
22
+ 'Category #2' => {
23
+ 'Category #21' => {}
24
+ }
25
+ }
26
+
27
+ def create_category hash, parent = nil
28
+ hash.each do |(title, children)|
29
+ c = Category.create :title => title, :parent => parent
30
+ create_category children, c
31
+ end
32
+ end
33
+
34
+ create_category categories
@@ -7,49 +7,49 @@ end
7
7
  describe "Field" do
8
8
 
9
9
  it "#model" do
10
- field = Puffer::Fields::Field.new 'user.profile.name', Post
10
+ field = Puffer::Field.new 'user.profile.name', Post
11
11
  field.model.should == Profile
12
- field = Puffer::Fields::Field.new 'user.email', Post
12
+ field = Puffer::Field.new 'user.email', Post
13
13
  field.model.should == User
14
- field = Puffer::Fields::Field.new 'user', Post
14
+ field = Puffer::Field.new 'user', Post
15
15
  field.model.should == Post
16
- field = Puffer::Fields::Field.new 'title', Post
16
+ field = Puffer::Field.new 'title', Post
17
17
  field.model.should == Post
18
18
  end
19
19
 
20
20
  it "#name" do
21
- field = Puffer::Fields::Field.new 'user.profile.name', Post
21
+ field = Puffer::Field.new 'user.profile.name', Post
22
22
  field.name.should == 'name'
23
23
  end
24
24
 
25
25
  it "#query_column" do
26
- field = Puffer::Fields::Field.new 'user.profile.name', Post
26
+ field = Puffer::Field.new 'user.profile.name', Post
27
27
  field.query_column.should == 'profiles.name'
28
- field = Puffer::Fields::Field.new 'user.email', Post
28
+ field = Puffer::Field.new 'user.email', Post
29
29
  field.query_column.should == 'users.email'
30
- field = Puffer::Fields::Field.new 'user.full_name', Post
30
+ field = Puffer::Field.new 'user.full_name', Post
31
31
  field.query_column.should == nil
32
32
  end
33
33
 
34
34
  it "#column" do
35
- field = Puffer::Fields::Field.new 'user.profile.name', Post
35
+ field = Puffer::Field.new 'user.profile.name', Post
36
36
  field.column.name.should == 'name'
37
- field = Puffer::Fields::Field.new 'user.full_name', Post
37
+ field = Puffer::Field.new 'user.full_name', Post
38
38
  field.column.should == nil
39
39
  end
40
40
 
41
41
  it '#type' do
42
- field = Puffer::Fields::Field.new 'user.created_at', Post
42
+ field = Puffer::Field.new 'user.created_at', Post
43
43
  field.type.should == :datetime
44
44
  end
45
45
 
46
46
  it '#type with virtual field' do
47
- field = Puffer::Fields::Field.new 'user.full_name', Post
47
+ field = Puffer::Field.new 'user.full_name', Post
48
48
  field.type.should == :string
49
49
  end
50
50
 
51
51
  it '#type was specified' do
52
- field = Puffer::Fields::Field.new 'user.full_name', Post, :type => :text
52
+ field = Puffer::Field.new 'user.full_name', Post, :type => :text
53
53
  field.type.should == :text
54
54
  end
55
55