action_widget 0.6.0.pre → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 65f04e0efe22c4a80632c8bb2788b48f60c0d1d9
4
- data.tar.gz: 2319ca299e05f2611cef8a1f420f886dcaebadfa
3
+ metadata.gz: b55679eb4877455d51a7e8f16038608e91a191e9
4
+ data.tar.gz: 5078838b75852803999e6f1357a06d4328b3ee55
5
5
  SHA512:
6
- metadata.gz: 90bda59277298cee6d43f1e98580fd812def0f5a6de6a1066ac762a470cf04d0ef2b4dac78798e264f5cd197dc51ea13f448ba7b1371fb44e9cde66024c19efb
7
- data.tar.gz: d715ab381e066c58275390dda86e5f1156bfba030519c8292db06fcd0ecf017a61ca3624ea00f199e97b1e6996d1f908e0891be776d0e9a3988a2ca804dc985f
6
+ metadata.gz: 5c2add84e52d6f3259c6da7186f28c0668c834a3628325d569f9010979f8508258a9dabb55215cefc4b21e864d467ccba6d0eac853465c45b1c28c40ee226286
7
+ data.tar.gz: 8bb1b072a106dea18e5c69691f8efac3b348d80b898abe93dc442457807acf6a8b7b5ff5a3a31be093e625a34e6829960b04e1f5b02f566ec8f734334fa0a7b5
@@ -1,4 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
+ require_relative 'lib/action_widget/version.rb'
3
+
2
4
  Gem::Specification.new do |gem|
3
5
  gem.authors = ["Konstantin Tennhard"]
4
6
  gem.email = ["me@t6d.de"]
@@ -10,10 +12,11 @@ Gem::Specification.new do |gem|
10
12
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
11
13
  gem.name = "action_widget"
12
14
  gem.require_paths = ["lib"]
13
- gem.version = "0.6.0.pre"
15
+ gem.version = ActionWidget::VERSION
14
16
 
15
17
  gem.add_dependency 'smart_properties', '~> 1.10'
16
18
 
19
+ gem.add_development_dependency 'pry'
17
20
  gem.add_development_dependency 'rake', '~> 10.0'
18
21
  gem.add_development_dependency 'rspec', '~> 3.3'
19
22
  gem.add_development_dependency 'actionview', '~> 4.0'
data/lib/action_widget.rb CHANGED
@@ -1,25 +1,15 @@
1
1
  require 'smart_properties'
2
2
 
3
3
  module ActionWidget
4
- class Configuration
5
- include SmartProperties
6
- property :prefix
7
- property :suffix
8
-
9
- attr_reader :pattern
10
-
11
- def initialize(*)
12
- super
4
+ class << self
5
+ def [](helper_name)
6
+ registry[helper_name]
7
+ end
13
8
 
14
- @pattern = Regexp.new([
15
- (prefix.underscore if prefix.presence),
16
- "(.*)",
17
- (suffix.underscore if suffix.presence)
18
- ].compact.join("_"))
9
+ def []=(helper_name, klass)
10
+ registry[helper_name] = klass
19
11
  end
20
- end
21
12
 
22
- class << self
23
13
  def configuration
24
14
  @configuration ||= Configuration.new(suffix: "Widget")
25
15
  end
@@ -32,14 +22,33 @@ module ActionWidget
32
22
  !!configuration.pattern.match(name)
33
23
  end
34
24
 
35
- def class_for(helper_name)
25
+ protected
26
+
27
+ def registry
28
+ @registry ||= Hash.new do |registry, helper_name|
29
+ if klass = find_action_widget(helper_name)
30
+ registry[helper_name] = klass
31
+ else
32
+ nil
33
+ end
34
+ end
35
+ end
36
+
37
+ private
38
+
39
+ def find_action_widget(helper_name)
40
+ return nil unless helper?(helper_name)
36
41
  basename = configuration.pattern.match(helper_name)[1]
37
42
  classname = [configuration.prefix, basename.camelcase, configuration.suffix].join("")
38
43
  classname.constantize
44
+ rescue NameError, LoadError
45
+ nil
39
46
  end
40
47
  end
41
48
  end
42
49
 
43
50
  require 'action_widget/base'
51
+ require 'action_widget/configuration'
44
52
  require 'action_widget/view_helper'
45
53
  require 'action_widget/extensions'
54
+ require 'action_widget/version'
@@ -0,0 +1,34 @@
1
+ module ActionWidget
2
+ class Configuration
3
+ include SmartProperties
4
+ property :prefix
5
+ property :suffix
6
+ property :superclass, required: true, default: -> { ActionWidget::Base }
7
+ property :directory, required: true, converts: :to_s, accepts: ->(string) { !string.empty? }, default: -> { [underscored_prefix, underscored_suffix].compact.join("_") }
8
+ property :minitest_superclass
9
+
10
+ attr_reader :pattern
11
+
12
+ def initialize(*)
13
+ super
14
+
15
+ @pattern = Regexp.new("^%s$" % [
16
+ underscored_prefix,
17
+ "(.*)",
18
+ underscored_suffix
19
+ ].compact.join("_"))
20
+ end
21
+
22
+ private
23
+
24
+ def underscored_prefix
25
+ return if prefix.nil?
26
+ prefix.underscore
27
+ end
28
+
29
+ def underscored_suffix
30
+ return if suffix.nil?
31
+ suffix.underscore
32
+ end
33
+ end
34
+ end
@@ -2,57 +2,86 @@ module ActionWidget
2
2
  module Extensions
3
3
  module Rails
4
4
  module Generators
5
-
6
5
  class Base < ::Rails::Generators::Base
7
-
8
6
  def self.namespace(name=nil)
9
- super.sub(/extensions:rails:/, '')
7
+ name || "action_widget"
10
8
  end
11
-
12
9
  end
13
-
14
- class Widget < Base
10
+
11
+ class ActionWidget < Base
15
12
  source_root File.expand_path('../../../../../support/templates', __FILE__)
16
- argument :widget_name, :type => :string
17
- class_option :rspec, :type => :boolean, :default => true, :description => "Generates rspec file"
13
+ argument :name, :type => :string
14
+ class_option :test, type: :boolean, default: true
18
15
 
19
16
  def generate_widget_implementation_file
20
- template('widget.rb.erb', "app/widgets/#{widget_implementation_filename}")
17
+ template('widget.rb.erb', implementation_path)
21
18
  end
22
19
 
23
- def generate_widget_spec_file
24
- if defined?(::RSpec) && options.rspec?
25
- template('widget_spec.rb.erb', "spec/widgets/#{widget_spec_filename}")
20
+ def generate_widget_test_file
21
+ return unless options.test?
22
+
23
+ if defined?(::RSpec)
24
+ template('widget_spec.rb.erb', spec_path)
25
+ else
26
+ template('widget_test.rb.erb', test_path)
26
27
  end
27
28
  end
28
29
 
29
30
  private
30
31
 
31
- def widget_spec_filename
32
- "#{widget_helper_name}_spec.rb"
33
- end
32
+ def configuration
33
+ ::ActionWidget.configuration
34
+ end
34
35
 
35
- def widget_implementation_filename
36
- "#{widget_helper_name}.rb"
37
- end
36
+ def test_path
37
+ File.join('test', configuration.directory, test_filename)
38
+ end
38
39
 
39
- def widget_class_name
40
- name = /[Ww]idget$/.match(widget_name) ? widget_name : "#{widget_name}Widget"
41
-
42
- name = name.titleize
43
- name = name.gsub(" ", '')
44
- name = name.gsub("/", '::')
45
-
46
- name
47
- end
40
+ def test_filename
41
+ "#{helper_name}_test.rb"
42
+ end
48
43
 
49
- def widget_helper_name
50
- widget_class_name.underscore
51
- end
44
+ def spec_path
45
+ File.join('spec', configuration.directory, spec_filename)
46
+ end
47
+
48
+ def spec_filename
49
+ "#{helper_name}_spec.rb"
50
+ end
51
+
52
+ def implementation_path
53
+ File.join('app', configuration.directory, implementation_filename)
54
+ end
55
+
56
+ def implementation_filename
57
+ "#{helper_name}.rb"
58
+ end
59
+
60
+ def class_name
61
+ [configuration.prefix, basename.classify, configuration.suffix].join('')
62
+ end
63
+
64
+ def superclass_name
65
+ configuration.superclass.to_s
66
+ end
52
67
 
68
+ def minitest_superclass_name
69
+ (configuration.minitest_superclass || "ActionView::TestCase").to_s
70
+ end
71
+
72
+ def helper_name
73
+ class_name.underscore
74
+ end
75
+
76
+ def basename
77
+ if match = name.underscore.match(configuration.pattern)
78
+ match[1]
79
+ else
80
+ name
81
+ end
82
+ end
53
83
  end
54
-
55
84
  end
56
85
  end
57
86
  end
58
- end
87
+ end
@@ -0,0 +1,3 @@
1
+ module ActionWidget
2
+ VERSION = '0.6.0'
3
+ end
@@ -1,24 +1,21 @@
1
1
  module ActionWidget
2
2
  module ViewHelper
3
-
4
3
  def method_missing(name, *args, &block)
5
- return super unless ActionWidget.helper?(name)
6
-
7
- klass = begin
8
- ActionWidget.class_for(name)
9
- rescue NameError, LoadError
10
- return super
11
- end
4
+ widget = ActionWidget[name]
5
+ return super if widget.nil?
12
6
 
13
7
  ActionWidget::ViewHelper.module_eval <<-RUBY
14
8
  def #{name}(*args, &block) # def example_widget(*args, &block)
15
9
  attrs = args.last.kind_of?(Hash) ? args.pop : {}
16
- #{klass}.new(self, attrs).render(*args, &block) # ExampleWidget.new(self, attrs).render(*args, &block)
10
+ #{widget}.new(self, attrs).render(*args, &block) # ExampleWidget.new(self, attrs).render(*args, &block)
17
11
  end # end
18
12
  RUBY
19
13
 
20
14
  send(name, *args, &block)
21
15
  end
22
16
 
17
+ def respond_to_missing?(name, include_private = false)
18
+ !!ActionWidget[name] || super
19
+ end
23
20
  end
24
21
  end
@@ -17,6 +17,13 @@ class ViewContext < ActionView::Base
17
17
  include ActionWidget::ViewHelper
18
18
  end
19
19
 
20
+ RSpec.describe ViewContext do
21
+ subject(:view_context) { described_class.new }
22
+ it 'should implement #respond_to_missing?' do
23
+ expect(view_context.send(:respond_to_missing?, :dummy_widget)).to eq(true)
24
+ end
25
+ end
26
+
20
27
  RSpec.describe DummyWidget do
21
28
  let(:view) { ViewContext.new }
22
29
 
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'bundler/setup'
2
2
  require 'rspec'
3
3
  require 'action_view'
4
+ require 'pry'
4
5
 
5
6
  require 'action_widget'
6
7
 
@@ -1,7 +1,5 @@
1
- class <%= widget_class_name %> < ::ActionWidget::Base
2
-
1
+ class <%= class_name %> < <%= superclass_name %>
3
2
  def render(&block)
4
-
5
- end
6
3
 
7
- end
4
+ end
5
+ end
@@ -1,7 +1,5 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe "<%= widget_class_name %>", :type => :helper do
4
-
5
- subject { helper.<%= widget_helper_name %> }
6
-
7
- end
3
+ describe "<%= class_name %>", type: :helper do
4
+ subject(<%= ":%s" % helper_name %>) { helper.<%= helper_name %> }
5
+ end
@@ -0,0 +1,4 @@
1
+ require 'test_helper'
2
+
3
+ class <%= "%sTest" % class_name %> < <%= minitest_superclass_name %>
4
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: action_widget
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0.pre
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Konstantin Tennhard
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-11 00:00:00.000000000 Z
11
+ date: 2015-10-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: smart_properties
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.10'
27
+ - !ruby/object:Gem::Dependency
28
+ name: pry
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rake
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -82,16 +96,19 @@ files:
82
96
  - action_widget.gemspec
83
97
  - lib/action_widget.rb
84
98
  - lib/action_widget/base.rb
99
+ - lib/action_widget/configuration.rb
85
100
  - lib/action_widget/extensions.rb
86
101
  - lib/action_widget/extensions/middleman.rb
87
102
  - lib/action_widget/extensions/rails.rb
88
103
  - lib/action_widget/extensions/rails/generators.rb
89
104
  - lib/action_widget/extensions/rails/railtie.rb
105
+ - lib/action_widget/version.rb
90
106
  - lib/action_widget/view_helper.rb
91
107
  - spec/action_widget_spec.rb
92
108
  - spec/spec_helper.rb
93
109
  - support/templates/widget.rb.erb
94
110
  - support/templates/widget_spec.rb.erb
111
+ - support/templates/widget_test.rb.erb
95
112
  homepage: http://github.com/t6d/action_widget
96
113
  licenses: []
97
114
  metadata: {}
@@ -106,9 +123,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
106
123
  version: '0'
107
124
  required_rubygems_version: !ruby/object:Gem::Requirement
108
125
  requirements:
109
- - - ">"
126
+ - - ">="
110
127
  - !ruby/object:Gem::Version
111
- version: 1.3.1
128
+ version: '0'
112
129
  requirements: []
113
130
  rubyforge_project:
114
131
  rubygems_version: 2.4.5