action_widget 0.1.0 → 0.2.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.
@@ -10,7 +10,7 @@ Gem::Specification.new do |gem|
10
10
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
11
11
  gem.name = "action_widget"
12
12
  gem.require_paths = ["lib"]
13
- gem.version = "0.1.0"
13
+ gem.version = "0.2.0"
14
14
 
15
15
  gem.add_dependency 'smart_properties', '~> 1.0'
16
16
  end
data/lib/action_widget.rb CHANGED
@@ -1,59 +1,3 @@
1
- require 'smart_properties'
2
-
3
- module ActionWidget
4
-
5
- class Base
6
-
7
- include SmartProperties
8
-
9
- def render_in_context(view_context, &block)
10
- @view = view_context
11
- render(&block)
12
- end
13
-
14
- def render
15
- raise NotImplementedError, "#{self.class} must implement #render"
16
- end
17
-
18
- protected
19
-
20
- attr_reader :view
21
-
22
- undef :capture
23
-
24
- def method_missing(method, *args, &block)
25
- view.send(method, *args, &block)
26
- rescue NoMethodError
27
- super
28
- end
29
-
30
- end
31
-
32
- module Helper
33
-
34
- def method_missing(name, *args, &block)
35
- super unless name =~ /_widget$/
36
-
37
- klass = begin
38
- @_action_widget_class_cache ||= {}
39
- @_action_widget_class_cache[name] ||= "#{name.to_s.camelcase}".constantize
40
- rescue NameError => e
41
- super
42
- rescue LoadError => e
43
- super
44
- end
45
-
46
- klass.new(*args).render_in_context(self, &block)
47
- end
48
-
49
- end
50
-
51
- class Railtie < ::Rails::Railtie
52
-
53
- initializer "action_widget.helper" do
54
- ActionView::Base.send(:include, Helper)
55
- end
56
-
57
- end if defined?(Rails::Railtie)
58
-
59
- end
1
+ require 'action_widget/base'
2
+ require 'action_widget/view_helper'
3
+ require 'action_widget/extensions'
@@ -0,0 +1,30 @@
1
+ require 'smart_properties'
2
+
3
+ module ActionWidget
4
+ class Base
5
+
6
+ include SmartProperties
7
+
8
+ def render_in_context(view_context, &block)
9
+ @view = view_context
10
+ render(&block)
11
+ end
12
+
13
+ def render
14
+ raise NotImplementedError, "#{self.class} must implement #render"
15
+ end
16
+
17
+ protected
18
+
19
+ attr_reader :view
20
+
21
+ undef :capture if method_defined?(:capture)
22
+
23
+ def method_missing(method, *args, &block)
24
+ view.send(method, *args, &block)
25
+ rescue NoMethodError
26
+ super
27
+ end
28
+
29
+ end
30
+ end
@@ -0,0 +1,2 @@
1
+ require 'action_widget/extensions/rails' if defined?(::Rails)
2
+ require 'action_widget/extensions/middleman' if defined?(::Middleman)
@@ -0,0 +1,22 @@
1
+ module ActionWidget
2
+ module Extensions
3
+ module Middleman
4
+
5
+ class << self
6
+
7
+ def register!
8
+ ::Middleman::Extensions.register(:action_widget, self)
9
+ end
10
+
11
+ def registered(app)
12
+ app.send(:include, ::ActionWidget::ViewHelper)
13
+ end
14
+ alias included registered
15
+
16
+ end
17
+
18
+ end
19
+ end
20
+ end
21
+
22
+ ActionWidget::Extensions::Middleman.register!
@@ -0,0 +1,2 @@
1
+ require 'action_widget/extensions/rails/railtie' if defined?(::Rails::Railtie)
2
+ require 'action_widget/extensions/rails/generators' if defined?(::Rails::Generators::Base)
@@ -0,0 +1,46 @@
1
+ module ActionWidget
2
+ module Extensions
3
+ module Rails
4
+ module Generators
5
+
6
+ class Create < ::Rails::Generators::Base
7
+ source_root File.expand_path('../../support/templates', __FILE__)
8
+ argument :widget_name, :type => :string
9
+ class_option :rspec, :type => :boolean, :default => true, :description => "Generates rspec file"
10
+
11
+ def generate_widget_implementation_file
12
+ empty_directory 'app/widgets'
13
+ template('widget.rb.erb', "app/widgets/#{widget_implementation_filename}")
14
+ end
15
+
16
+ def generate_widget_spec_file
17
+ if defined?(::RSpec) && options.rspec?
18
+ empty_directory 'spec/widgets'
19
+ template('widget_spec.rb.erb', "spec/widgets/#{widget_spec_filename}")
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def widget_spec_filename
26
+ "#{widget_helper_name}_spec.rb"
27
+ end
28
+
29
+ def widget_implementation_filename
30
+ "#{widget_helper_name}.rb"
31
+ end
32
+
33
+ def widget_class_name
34
+ /[Ww]idget$/.match(widget_name) ? widget_name.classify : "#{widget_name.classify}Widget"
35
+ end
36
+
37
+ def widget_helper_name
38
+ widget_class_name.underscore
39
+ end
40
+
41
+ end
42
+
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,15 @@
1
+ module ActionWidget
2
+ module Extensions
3
+ module Rails
4
+
5
+ class Railtie < ::Rails::Railtie
6
+
7
+ initializer "action_widget.helper" do
8
+ ActionView::Base.send(:include, ::ActionWidget::ViewHelper)
9
+ end
10
+
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,20 @@
1
+ module ActionWidget
2
+ module ViewHelper
3
+
4
+ def method_missing(name, *args, &block)
5
+ super unless name =~ /_widget$/
6
+
7
+ klass = begin
8
+ @_action_widget_class_cache = {}
9
+ @_action_widget_class_cache[name] = "#{name.to_s.camelcase}".constantize
10
+ rescue NameError => e
11
+ super
12
+ rescue LoadError => e
13
+ super
14
+ end
15
+
16
+ klass.new(*args).render_in_context(self, &block)
17
+ end
18
+
19
+ end
20
+ end
@@ -0,0 +1,7 @@
1
+ class <%= widget_class_name %> < ::ActionWidget::Base
2
+
3
+ def render(&block)
4
+
5
+ end
6
+
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'spec_helper'
2
+
3
+ describe "<%= widget_class_name %>", :type => :helper do
4
+
5
+ subject { helper.<%= widget_helper_name %> }
6
+
7
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: action_widget
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-22 00:00:00.000000000 Z
12
+ date: 2012-08-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: smart_properties
@@ -41,6 +41,15 @@ files:
41
41
  - Rakefile
42
42
  - action_widget.gemspec
43
43
  - lib/action_widget.rb
44
+ - lib/action_widget/base.rb
45
+ - lib/action_widget/extensions.rb
46
+ - lib/action_widget/extensions/middleman.rb
47
+ - lib/action_widget/extensions/rails.rb
48
+ - lib/action_widget/extensions/rails/generators.rb
49
+ - lib/action_widget/extensions/rails/railtie.rb
50
+ - lib/action_widget/view_helper.rb
51
+ - support/templates/widget.rb.erb
52
+ - support/templates/widget_spec.rb.erb
44
53
  homepage: http://github.com/t6d/action_widget
45
54
  licenses: []
46
55
  post_install_message: