puffer 0.0.23 → 0.0.24

Sign up to get free protection for your applications and to get access to all the features.
Files changed (100) hide show
  1. data/.rspec +1 -0
  2. data/Gemfile +1 -1
  3. data/Gemfile.lock +55 -53
  4. data/VERSION +1 -1
  5. data/app/assets/javascripts/puffer/application.js +6 -3
  6. data/app/assets/javascripts/puffer/paginator.js +223 -0
  7. data/app/assets/javascripts/puffer/puffer.js +12 -0
  8. data/app/assets/javascripts/puffer/rails.js +1 -0
  9. data/app/assets/javascripts/puffer/{right-autocompleter.js → right-autocompleter-src.js} +45 -41
  10. data/app/assets/javascripts/puffer/{right-calendar.js → right-calendar-src.js} +53 -50
  11. data/app/assets/javascripts/puffer/right-dialog-src.js +768 -0
  12. data/app/assets/javascripts/puffer/right-slider-src.js +507 -0
  13. data/app/assets/javascripts/puffer/{right.js → right-src.js} +1000 -230
  14. data/app/assets/stylesheets/puffer/application.css +2 -0
  15. data/app/assets/stylesheets/puffer/paginator.css +33 -0
  16. data/app/assets/stylesheets/puffer/right.css +4 -0
  17. data/app/components/base/form.html.erb +15 -0
  18. data/app/components/base_component.rb +15 -0
  19. data/app/components/boolean/form.html.erb +3 -0
  20. data/app/components/boolean/index.html.erb +3 -0
  21. data/app/components/boolean_component.rb +13 -0
  22. data/app/components/date_time/form.html.erb +5 -0
  23. data/app/components/date_time_component.rb +12 -0
  24. data/app/components/file/form.html.erb +5 -0
  25. data/app/components/file_component.rb +3 -0
  26. data/app/components/hidden/form.html.erb +1 -0
  27. data/app/components/hidden_component.rb +3 -0
  28. data/app/components/password/form.html.erb +5 -0
  29. data/app/components/password_component.rb +7 -0
  30. data/app/components/references_many/form.html.erb +1 -0
  31. data/app/components/references_many_component.rb +7 -0
  32. data/app/components/references_one/choose.html.erb +9 -0
  33. data/app/components/references_one/form.html.erb +28 -0
  34. data/app/components/references_one_component.rb +12 -0
  35. data/app/components/select/form.html.erb +5 -0
  36. data/app/components/select_component.rb +15 -0
  37. data/app/components/string/form.html.erb +5 -0
  38. data/app/components/string_component.rb +3 -0
  39. data/app/components/text/form.html.erb +5 -0
  40. data/app/components/text_component.rb +3 -0
  41. data/app/controllers/puffer/base.rb +4 -0
  42. data/app/views/puffer/base/_form.html.erb +0 -1
  43. data/app/views/puffer/base/_table.html.erb +25 -0
  44. data/app/views/puffer/base/index.html.erb +14 -28
  45. data/app/views/puffer/tree_base/_record.html.erb +1 -1
  46. data/lib/generators/puffer/component/USAGE +12 -0
  47. data/lib/generators/puffer/component/component_generator.rb +19 -0
  48. data/lib/generators/puffer/component/templates/component.rb +15 -0
  49. data/lib/generators/puffer/component/templates/component_spec.rb +19 -0
  50. data/lib/puffer/component.rb +141 -0
  51. data/lib/puffer/controller/dsl.rb +25 -12
  52. data/lib/puffer/engine.rb +5 -0
  53. data/lib/puffer/extensions/controller.rb +11 -9
  54. data/lib/puffer/extensions/form.rb +2 -1
  55. data/lib/puffer/extensions/mapper.rb +2 -0
  56. data/lib/puffer/field.rb +30 -19
  57. data/lib/puffer/field_set.rb +17 -2
  58. data/lib/puffer.rb +25 -8
  59. data/puffer.gemspec +59 -28
  60. data/spec/app/components/base_component_spec.rb +19 -0
  61. data/spec/app/components/boolean_component_spec.rb +36 -0
  62. data/spec/app/components/date_time_component_spec.rb +26 -0
  63. data/spec/app/components/file_component_spec.rb +25 -0
  64. data/spec/app/components/hidden_component_spec.rb +24 -0
  65. data/spec/app/components/password_component_spec.rb +37 -0
  66. data/spec/app/components/references_many_component_spec.rb +19 -0
  67. data/spec/app/components/references_one_component_spec.rb +19 -0
  68. data/spec/app/components/select_component_spec.rb +30 -0
  69. data/spec/app/components/string_component_spec.rb +25 -0
  70. data/spec/app/components/text_component_spec.rb +25 -0
  71. data/spec/dummy/app/controllers/admin/categories_controller.rb +3 -3
  72. data/spec/dummy/app/controllers/admin/posts_controller.rb +3 -0
  73. data/spec/dummy/app/controllers/{puffer → admin}/sessions_controller.rb +1 -1
  74. data/spec/dummy/app/controllers/admin/users_controller.rb +2 -2
  75. data/spec/dummy/app/models/post.rb +4 -0
  76. data/spec/dummy/db/migrate/20100930132656_create_posts.rb +2 -0
  77. data/spec/dummy/db/migrate/20100930132726_create_categories.rb +1 -0
  78. data/spec/dummy/db/schema.rb +3 -0
  79. data/spec/dummy/db/seeds.rb +6 -1
  80. data/spec/fabricators/categories_fabricator.rb +1 -0
  81. data/spec/fabricators/posts_fabricator.rb +1 -0
  82. data/spec/lib/component_spec.rb +7 -0
  83. data/spec/lib/fields_spec.rb +0 -4
  84. metadata +85 -56
  85. data/app/views/puffer/base/associated/_many.html.erb +0 -56
  86. data/app/views/puffer/base/associated/many.rjs +0 -1
  87. data/app/views/puffer/base/associated/one.js.erb +0 -13
  88. data/app/views/puffer/base/association/_many.html.erb +0 -7
  89. data/lib/puffer/controller/generated.rb +0 -65
  90. data/lib/puffer/customs.rb +0 -64
  91. data/lib/puffer/inputs/association.rb +0 -38
  92. data/lib/puffer/inputs/base.rb +0 -51
  93. data/lib/puffer/inputs/boolean.rb +0 -19
  94. data/lib/puffer/inputs/collection_association.rb +0 -11
  95. data/lib/puffer/inputs/date_time.rb +0 -16
  96. data/lib/puffer/inputs/file.rb +0 -11
  97. data/lib/puffer/inputs/hidden.rb +0 -15
  98. data/lib/puffer/inputs/password.rb +0 -11
  99. data/lib/puffer/inputs/select.rb +0 -19
  100. data/lib/puffer/inputs/text.rb +0 -11
@@ -1,15 +1,22 @@
1
1
  module Puffer
2
2
  module Controller
3
3
  module Dsl
4
+ extend ActiveSupport::Concern
4
5
 
5
- def self.included base
6
- base.class_eval do
7
- extend ClassMethods
6
+ included do
7
+ class_attribute :_members
8
+ self._members = Puffer::Controller::Actions.new
9
+ class_attribute :_collections
10
+ self._collections = Puffer::Controller::Actions.new
11
+ class_attribute :_fieldset_fallbacks
12
+ self._fieldset_fallbacks = HashWithIndifferentAccess.new
8
13
 
9
- class_attribute :_members
10
- self._members = Puffer::Controller::Actions.new
11
- class_attribute :_collections
12
- self._collections = Puffer::Controller::Actions.new
14
+ helper_method :_members, :_collections
15
+ end
16
+
17
+ module InstanceMethods
18
+ def fields set
19
+ self.class.fields set
13
20
  end
14
21
  end
15
22
 
@@ -18,6 +25,7 @@ module Puffer
18
25
  def inherited klass
19
26
  klass._members = _members.dup
20
27
  klass._collections = _collections.dup
28
+ klass._fieldset_fallbacks = Marshal.load(Marshal.dump(_fieldset_fallbacks))
21
29
  super
22
30
  end
23
31
 
@@ -31,22 +39,24 @@ module Puffer
31
39
 
32
40
  def define_fieldset *actions
33
41
  options = actions.extract_options!
34
- fallbacks = Array.wrap(options.delete(:fallbacks))
42
+ fallbacks = Array.wrap(options.delete(:fallbacks)).map(&:to_sym)
35
43
 
36
44
  actions.each do |action|
45
+ self._fieldset_fallbacks[action] = [action] + fallbacks
46
+
37
47
  class_attribute "_#{action}_fields"
38
48
  send "_#{action}_fields=", Puffer::FieldSet.new unless send("_#{action}_fields?")
39
49
  helper_method "#{action}_fields"
40
50
 
41
51
  self.class.instance_eval do
42
52
  define_method action do |&block|
43
- @_fields = send("_#{action}_fields=", Puffer::FieldSet.new)
53
+ @_fields = send("_#{action}_fields=", Puffer::FieldSet.new(action))
44
54
  block.call if block
45
55
  remove_instance_variable :@_fields
46
56
  end
47
57
 
48
58
  define_method "#{action}_fields" do
49
- actions = [action] + fallbacks
59
+ actions = self._fieldset_fallbacks[action].dup
50
60
  last = actions.pop
51
61
  actions.map do |action|
52
62
  send("_#{action}_fields").presence
@@ -60,10 +70,13 @@ module Puffer
60
70
  end
61
71
  end
62
72
 
73
+ def fields set
74
+ send "#{set}_fields"
75
+ end
76
+
63
77
  def field name, options = {}, &block
64
78
  field = @_fields.field(name, model, options, &block) if @_fields
65
- generate_association_actions field if field.reflection
66
- #generate_change_actions field if field.toggable?
79
+ #generate_association_actions field if field.reflection
67
80
  end
68
81
 
69
82
  end
data/lib/puffer/engine.rb CHANGED
@@ -1,5 +1,10 @@
1
1
  module Puffer
2
2
  class Engine < Rails::Engine
3
+ config.paths.add 'app/components', :eager_load => true
3
4
  config.autoload_paths << File.join(root, 'lib')
5
+
6
+ initializer "puffer.add_view_paths", :after => :add_view_paths do |app|
7
+ Puffer::Component::Base.view_paths = paths["app/components"].existent
8
+ end
4
9
  end
5
10
  end
@@ -2,19 +2,15 @@ module Puffer
2
2
  module Extensions
3
3
  module ActionController
4
4
  module Base
5
+ extend ActiveSupport::Concern
5
6
 
6
- def self.included base
7
- base.class_eval do
8
- extend ClassMethods
7
+ included do
8
+ extend ClassMethods
9
9
 
10
- helper_method :puffer?
11
- end
10
+ helper_method :puffer?, :render_component
12
11
  end
13
12
 
14
- def puffer?; false; end
15
-
16
13
  module ClassMethods
17
-
18
14
  def puffer?; false; end
19
15
 
20
16
  def pufferize!
@@ -22,9 +18,15 @@ module Puffer
22
18
  include Puffer::Controller::Helpers
23
19
  include Puffer::Controller::Dsl
24
20
  include Puffer::Controller::Config
25
- include Puffer::Controller::Generated
26
21
  end
22
+ end
27
23
 
24
+ module InstanceMethods
25
+ def puffer?; false; end
26
+
27
+ def render_component *args
28
+ Puffer::Component::Base.render_component self, *args
29
+ end
28
30
  end
29
31
 
30
32
  end
@@ -5,7 +5,8 @@ module Puffer
5
5
  def puffer_field *args
6
6
  field = args.first.is_a?(Puffer::Field) ? args.first : Puffer::Field.new(*args)
7
7
  field.resource = object.class
8
- field.input self
8
+ template = instance_variable_get :@template
9
+ field.render template.controller, :form, :form => self
9
10
  end
10
11
 
11
12
  end
@@ -67,6 +67,7 @@ module Puffer
67
67
  @scope[:children] = siblings
68
68
 
69
69
  collection do
70
+ get '/event/:fieldset/:field/:event(/:identifer)', options.merge(:action => :event, :as => :event)
70
71
  post :create, options
71
72
  controller._collections.each do |args|
72
73
  opts = args.extract_options!.dup
@@ -128,6 +129,7 @@ module Puffer
128
129
 
129
130
  collection do
130
131
  get :index, options
132
+ get '/event/:fieldset/:field/:event(/:identifer)', options.merge(:action => :event, :as => :event)
131
133
  post :create, options
132
134
  controller._collections.each do |args|
133
135
  opts = args.extract_options!.dup
data/lib/puffer/field.rb CHANGED
@@ -1,24 +1,29 @@
1
1
  module Puffer
2
2
  class Field
3
3
 
4
- attr_accessor :resource, :field_name, :options, :fields
4
+ attr_accessor :resource, :field_name, :field_set, :options, :children
5
5
 
6
- def initialize field_name, *resource_and_options, &block
6
+ def initialize field_name, resource, *fieldset_and_options, &block
7
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
8
+ @resource = resource
9
+ @options = fieldset_and_options.extract_options!
10
+ @field_set = fieldset_and_options.first
11
+ @children = Puffer::FieldSet.new swallow_nil{field_set.name}
11
12
  block.bind(self).call if block
12
13
  end
13
14
 
14
15
  def field name, options = {}, &block
15
- @fields.field(name, swallow_nil{reflection.klass}, options, &block)
16
+ @children.field(name, swallow_nil{reflection.klass}, options, &block)
16
17
  end
17
18
 
18
19
  def native?
19
20
  model == resource
20
21
  end
21
22
 
23
+ def to_s
24
+ field_name
25
+ end
26
+
22
27
  def name
23
28
  @name ||= field_name.split('.').last
24
29
  end
@@ -36,27 +41,33 @@ module Puffer
36
41
  end
37
42
 
38
43
  def type
39
- @type ||= options[:type] ? options[:type].to_sym : (Puffer::Customs.type_for(self) || (column ? column.type : :string))
44
+ @type ||= options[:type] || custom_type || column_type || :string
40
45
  end
41
46
 
42
- def to_s
43
- field_name
47
+ def custom_type
48
+ return :select if options.key?(:select)
49
+ return :password if name =~ /password/
50
+ return reflection.macro if reflection
44
51
  end
45
52
 
46
53
  def reflection
47
54
  @reflection ||= model && model.reflect_on_association(name.to_sym)
48
55
  end
49
56
 
50
- def collection?
51
- [:has_many, :has_and_belongs_to_many].include? type
52
- end
53
-
54
57
  def input_options
55
58
  options[:html] || {}
56
59
  end
57
60
 
58
- def input builder
59
- Puffer::Customs.input_for(self).render builder, self
61
+ def component_class
62
+ @component_class ||= Puffer::Component.component_for type
63
+ end
64
+
65
+ def component
66
+ @component ||= component_class.new self
67
+ end
68
+
69
+ def render controller, context, *args
70
+ component.process controller, context, *args
60
71
  end
61
72
 
62
73
  def model
@@ -71,14 +82,14 @@ module Puffer
71
82
  end if resource
72
83
  end
73
84
 
74
- def association_columns
75
- @association_columns ||= fields
76
- end
77
-
78
85
  def column
79
86
  @column ||= model && model.columns_hash[name]
80
87
  end
81
88
 
89
+ def column_type
90
+ column.type if column
91
+ end
92
+
82
93
  def query_column
83
94
  "#{model.table_name}.#{name}" if column
84
95
  end
@@ -1,8 +1,15 @@
1
1
  module Puffer
2
2
  class FieldSet < Array
3
3
 
4
- def field *args, &block
5
- push Puffer::Field.new(*args, &block)
4
+ attr_accessor :name
5
+
6
+ def initialize name = nil
7
+ @name = name
8
+ super()
9
+ end
10
+
11
+ def field name, resource, options, &block
12
+ push Puffer::Field.new(name, resource, self, options, &block)
6
13
  last
7
14
  end
8
15
 
@@ -22,5 +29,13 @@ module Puffer
22
29
  @includes ||= map {|f| f.path unless f.native?}.compact.to_includes
23
30
  end
24
31
 
32
+ def [] key
33
+ if key.is_a?(String) || key.is_a?(Symbol)
34
+ detect {|f| f.to_s == key.to_s}
35
+ else
36
+ super
37
+ end
38
+ end
39
+
25
40
  end
26
41
  end
data/lib/puffer.rb CHANGED
@@ -1,11 +1,3 @@
1
- module Puffer
2
-
3
- def self.customs
4
- Puffer::Customs
5
- end
6
-
7
- end
8
-
9
1
  require 'kaminari'
10
2
 
11
3
  require 'puffer/engine'
@@ -14,3 +6,28 @@ require 'puffer/extensions/controller'
14
6
  require 'puffer/extensions/core'
15
7
  require 'puffer/extensions/mapper'
16
8
  require 'puffer/extensions/form'
9
+
10
+ module Puffer
11
+
12
+ module Component
13
+ autoload :Base, 'puffer/component'
14
+
15
+ mattr_accessor :_mappings
16
+ self._mappings = {}
17
+
18
+ def self.map_component *args
19
+ to = args.extract_options![:to]
20
+ args.each { |type| _mappings[type.to_sym] = to }
21
+ end
22
+
23
+ def self.component_for type
24
+ (_mappings[type.to_sym] || "#{type}_component").to_s.camelize.constantize
25
+ end
26
+
27
+ map_component :belongs_to, :has_one, :to => :ReferencesOneComponent
28
+ map_component :has_many, :has_and_belongs_to_many, :to => :ReferencesManyComponent
29
+ map_component :date, :time, :datetime, :timestamp, :to => :DateTimeComponent
30
+ map_component :integer, :decimal, :to => :StringComponent
31
+ end
32
+
33
+ end
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.23"
8
+ s.version = "0.0.24"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["pyromaniac"]
12
- s.date = %q{2011-08-01}
11
+ s.authors = [%q{pyromaniac}]
12
+ s.date = %q{2011-09-09}
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 = [
@@ -26,15 +26,44 @@ Gem::Specification.new do |s|
26
26
  "Rakefile",
27
27
  "VERSION",
28
28
  "app/assets/javascripts/puffer/application.js",
29
+ "app/assets/javascripts/puffer/paginator.js",
29
30
  "app/assets/javascripts/puffer/puffer.js",
30
31
  "app/assets/javascripts/puffer/rails.js",
31
- "app/assets/javascripts/puffer/right-autocompleter.js",
32
- "app/assets/javascripts/puffer/right-calendar.js",
33
- "app/assets/javascripts/puffer/right.js",
32
+ "app/assets/javascripts/puffer/right-autocompleter-src.js",
33
+ "app/assets/javascripts/puffer/right-calendar-src.js",
34
+ "app/assets/javascripts/puffer/right-dialog-src.js",
35
+ "app/assets/javascripts/puffer/right-slider-src.js",
36
+ "app/assets/javascripts/puffer/right-src.js",
34
37
  "app/assets/stylesheets/puffer/application.css",
38
+ "app/assets/stylesheets/puffer/paginator.css",
35
39
  "app/assets/stylesheets/puffer/puffer.css",
36
40
  "app/assets/stylesheets/puffer/puffer_tree.css",
37
41
  "app/assets/stylesheets/puffer/reset.css",
42
+ "app/assets/stylesheets/puffer/right.css",
43
+ "app/components/base/form.html.erb",
44
+ "app/components/base_component.rb",
45
+ "app/components/boolean/form.html.erb",
46
+ "app/components/boolean/index.html.erb",
47
+ "app/components/boolean_component.rb",
48
+ "app/components/date_time/form.html.erb",
49
+ "app/components/date_time_component.rb",
50
+ "app/components/file/form.html.erb",
51
+ "app/components/file_component.rb",
52
+ "app/components/hidden/form.html.erb",
53
+ "app/components/hidden_component.rb",
54
+ "app/components/password/form.html.erb",
55
+ "app/components/password_component.rb",
56
+ "app/components/references_many/form.html.erb",
57
+ "app/components/references_many_component.rb",
58
+ "app/components/references_one/choose.html.erb",
59
+ "app/components/references_one/form.html.erb",
60
+ "app/components/references_one_component.rb",
61
+ "app/components/select/form.html.erb",
62
+ "app/components/select_component.rb",
63
+ "app/components/string/form.html.erb",
64
+ "app/components/string_component.rb",
65
+ "app/components/text/form.html.erb",
66
+ "app/components/text_component.rb",
38
67
  "app/controllers/admin/dashboard_controller.rb",
39
68
  "app/controllers/admin/sessions_controller.rb",
40
69
  "app/controllers/puffer/base.rb",
@@ -48,10 +77,7 @@ Gem::Specification.new do |s|
48
77
  "app/views/layouts/puffer_dashboard.html.erb",
49
78
  "app/views/layouts/puffer_sessions.html.erb",
50
79
  "app/views/puffer/base/_form.html.erb",
51
- "app/views/puffer/base/associated/_many.html.erb",
52
- "app/views/puffer/base/associated/many.rjs",
53
- "app/views/puffer/base/associated/one.js.erb",
54
- "app/views/puffer/base/association/_many.html.erb",
80
+ "app/views/puffer/base/_table.html.erb",
55
81
  "app/views/puffer/base/edit.html.erb",
56
82
  "app/views/puffer/base/index.html.erb",
57
83
  "app/views/puffer/base/new.html.erb",
@@ -63,17 +89,20 @@ Gem::Specification.new do |s|
63
89
  "app/views/puffer/tree_base/tree.html.erb",
64
90
  "config/locales/puffer.yml",
65
91
  "config/routes.rb",
92
+ "lib/generators/puffer/component/USAGE",
93
+ "lib/generators/puffer/component/component_generator.rb",
94
+ "lib/generators/puffer/component/templates/component.rb",
95
+ "lib/generators/puffer/component/templates/component_spec.rb",
66
96
  "lib/generators/puffer/controller/USAGE",
67
97
  "lib/generators/puffer/controller/controller_generator.rb",
68
98
  "lib/generators/puffer/controller/templates/controller.rb",
69
99
  "lib/puffer.rb",
100
+ "lib/puffer/component.rb",
70
101
  "lib/puffer/controller/actions.rb",
71
102
  "lib/puffer/controller/config.rb",
72
103
  "lib/puffer/controller/dsl.rb",
73
- "lib/puffer/controller/generated.rb",
74
104
  "lib/puffer/controller/helpers.rb",
75
105
  "lib/puffer/controller/mutate.rb",
76
- "lib/puffer/customs.rb",
77
106
  "lib/puffer/engine.rb",
78
107
  "lib/puffer/extensions/activerecord.rb",
79
108
  "lib/puffer/extensions/controller.rb",
@@ -82,20 +111,21 @@ Gem::Specification.new do |s|
82
111
  "lib/puffer/extensions/mapper.rb",
83
112
  "lib/puffer/field.rb",
84
113
  "lib/puffer/field_set.rb",
85
- "lib/puffer/inputs/association.rb",
86
- "lib/puffer/inputs/base.rb",
87
- "lib/puffer/inputs/boolean.rb",
88
- "lib/puffer/inputs/collection_association.rb",
89
- "lib/puffer/inputs/date_time.rb",
90
- "lib/puffer/inputs/file.rb",
91
- "lib/puffer/inputs/hidden.rb",
92
- "lib/puffer/inputs/password.rb",
93
- "lib/puffer/inputs/select.rb",
94
- "lib/puffer/inputs/text.rb",
95
114
  "lib/puffer/resource.rb",
96
115
  "lib/puffer/resource/routing.rb",
97
116
  "lib/puffer/resource/scoping.rb",
98
117
  "puffer.gemspec",
118
+ "spec/app/components/base_component_spec.rb",
119
+ "spec/app/components/boolean_component_spec.rb",
120
+ "spec/app/components/date_time_component_spec.rb",
121
+ "spec/app/components/file_component_spec.rb",
122
+ "spec/app/components/hidden_component_spec.rb",
123
+ "spec/app/components/password_component_spec.rb",
124
+ "spec/app/components/references_many_component_spec.rb",
125
+ "spec/app/components/references_one_component_spec.rb",
126
+ "spec/app/components/select_component_spec.rb",
127
+ "spec/app/components/string_component_spec.rb",
128
+ "spec/app/components/text_component_spec.rb",
99
129
  "spec/dummy/.rvmrc",
100
130
  "spec/dummy/Rakefile",
101
131
  "spec/dummy/app/assets/images/rails.png",
@@ -105,10 +135,10 @@ Gem::Specification.new do |s|
105
135
  "spec/dummy/app/controllers/admin/news_controller.rb",
106
136
  "spec/dummy/app/controllers/admin/posts_controller.rb",
107
137
  "spec/dummy/app/controllers/admin/profiles_controller.rb",
138
+ "spec/dummy/app/controllers/admin/sessions_controller.rb",
108
139
  "spec/dummy/app/controllers/admin/tags_controller.rb",
109
140
  "spec/dummy/app/controllers/admin/users_controller.rb",
110
141
  "spec/dummy/app/controllers/application_controller.rb",
111
- "spec/dummy/app/controllers/puffer/sessions_controller.rb",
112
142
  "spec/dummy/app/helpers/application_helper.rb",
113
143
  "spec/dummy/app/models/category.rb",
114
144
  "spec/dummy/app/models/friendship.rb",
@@ -160,6 +190,7 @@ Gem::Specification.new do |s|
160
190
  "spec/fabricators/tags_fabricator.rb",
161
191
  "spec/fabricators/users_fabricator.rb",
162
192
  "spec/integration/navigation_spec.rb",
193
+ "spec/lib/component_spec.rb",
163
194
  "spec/lib/extensions/core_spec.rb",
164
195
  "spec/lib/fields_spec.rb",
165
196
  "spec/lib/params_spec.rb",
@@ -169,15 +200,15 @@ Gem::Specification.new do |s|
169
200
  "spec/spec_helper.rb"
170
201
  ]
171
202
  s.homepage = %q{http://github.com/puffer/puffer}
172
- s.require_paths = ["lib"]
173
- s.rubygems_version = %q{1.6.2}
203
+ s.require_paths = [%q{lib}]
204
+ s.rubygems_version = %q{1.8.6}
174
205
  s.summary = %q{Admin interface builder}
175
206
 
176
207
  if s.respond_to? :specification_version then
177
208
  s.specification_version = 3
178
209
 
179
210
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
180
- s.add_runtime_dependency(%q<rails>, [">= 3.1.0.rc5"])
211
+ s.add_runtime_dependency(%q<rails>, ["~> 3.1.0"])
181
212
  s.add_runtime_dependency(%q<kaminari>, [">= 0"])
182
213
  s.add_runtime_dependency(%q<apotomo>, [">= 0"])
183
214
  s.add_development_dependency(%q<sqlite3>, [">= 0"])
@@ -192,7 +223,7 @@ Gem::Specification.new do |s|
192
223
  s.add_development_dependency(%q<jeweler>, [">= 0"])
193
224
  s.add_development_dependency(%q<nested_set>, [">= 0"])
194
225
  else
195
- s.add_dependency(%q<rails>, [">= 3.1.0.rc5"])
226
+ s.add_dependency(%q<rails>, ["~> 3.1.0"])
196
227
  s.add_dependency(%q<kaminari>, [">= 0"])
197
228
  s.add_dependency(%q<apotomo>, [">= 0"])
198
229
  s.add_dependency(%q<sqlite3>, [">= 0"])
@@ -208,7 +239,7 @@ Gem::Specification.new do |s|
208
239
  s.add_dependency(%q<nested_set>, [">= 0"])
209
240
  end
210
241
  else
211
- s.add_dependency(%q<rails>, [">= 3.1.0.rc5"])
242
+ s.add_dependency(%q<rails>, ["~> 3.1.0"])
212
243
  s.add_dependency(%q<kaminari>, [">= 0"])
213
244
  s.add_dependency(%q<apotomo>, [">= 0"])
214
245
  s.add_dependency(%q<sqlite3>, [">= 0"])
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe BaseComponent do
4
+
5
+ include RSpec::Rails::RequestExampleGroup
6
+
7
+ context 'index' do
8
+
9
+ it 'should render field content' do
10
+ @category = Fabricate :category
11
+ get admin_categories_path
12
+
13
+ field = controller.index_fields[:title]
14
+ Puffer::Component::Base.render_component(controller, field, :index, :record => @category).should == @category.title
15
+ end
16
+
17
+ end
18
+
19
+ end
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ describe BooleanComponent do
4
+
5
+ include RSpec::Rails::RequestExampleGroup
6
+
7
+ context 'index' do
8
+ it 'should render checkbox' do
9
+ @category = Fabricate :category
10
+ get admin_categories_path
11
+
12
+ field = controller.index_fields[:hidden]
13
+ component = Puffer::Component::Base.render_component(controller, field, :index, :record => @category)
14
+
15
+ p component
16
+ end
17
+ end
18
+
19
+ context 'form' do
20
+ it 'should render form field' do
21
+ @category = Fabricate :category
22
+ get admin_categories_path
23
+
24
+ field = controller.form_fields[:hidden]
25
+ component = ''
26
+ controller.view_context.form_for @category, :url => admin_category_path(@category) do |form|
27
+ component = Puffer::Component::Base.render_component(controller, field, :form, :form => form)
28
+ end
29
+
30
+ component.should have_selector("input[type=hidden][value='0']")
31
+ component.should have_selector("input[type=checkbox][value='1']")
32
+ component.should have_selector('label[for=category_hidden]')
33
+ end
34
+ end
35
+
36
+ end
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ describe DateTimeComponent do
4
+
5
+ include RSpec::Rails::RequestExampleGroup
6
+
7
+ context 'form' do
8
+
9
+ it 'should render form field' do
10
+ @user = Fabricate :user_with_profile
11
+ get admin_user_profile_path(@user)
12
+
13
+ field = controller.form_fields[:birth_date]
14
+ field.options[:type] = :date_time
15
+ component = ''
16
+ controller.view_context.form_for @user.profile, :url => admin_user_profile_path(@user) do |form|
17
+ component = Puffer::Component::Base.render_component(controller, field, :form, :form => form)
18
+ end
19
+
20
+ component.should have_selector('label[for=profile_birth_date]')
21
+ component.should have_selector('input[data-calendar]')
22
+ end
23
+
24
+ end
25
+
26
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe FileComponent do
4
+
5
+ include RSpec::Rails::RequestExampleGroup
6
+
7
+ context 'form' do
8
+
9
+ it 'should render form field' do
10
+ @post = Fabricate :post
11
+ get admin_posts_path
12
+
13
+ field = controller.form_fields[:filename]
14
+ component = ''
15
+ controller.view_context.form_for @post, :url => admin_post_path(@post) do |form|
16
+ component = Puffer::Component::Base.render_component(controller, field, :form, :form => form)
17
+ end
18
+
19
+ component.should have_selector('label[for=post_filename]')
20
+ component.should have_selector('input[type=file]')
21
+ end
22
+
23
+ end
24
+
25
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe HiddenComponent do
4
+
5
+ include RSpec::Rails::RequestExampleGroup
6
+
7
+ context 'form' do
8
+
9
+ it 'should render form field' do
10
+ @category = Fabricate :category
11
+ get admin_categories_path
12
+
13
+ field = controller.form_fields[:parent_id]
14
+ component = ''
15
+ controller.view_context.form_for @category, :url => admin_category_path(@category) do |form|
16
+ component = Puffer::Component::Base.render_component(controller, field, :form, :form => form)
17
+ end
18
+
19
+ component.should have_selector("input[type=hidden]")
20
+ end
21
+
22
+ end
23
+
24
+ end