padrino-decorator 0.0.1 → 0.0.2

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: 0286629ca20948016d034dcd9c1459fd31e6e2b3
4
- data.tar.gz: 3bd87ededa7140eb86e2d511d3993bce07209348
3
+ metadata.gz: e1b703f7ffaa93aac68495e727c6bf1d42dcb2b4
4
+ data.tar.gz: 73837985534feffac2f2279271923094d4365568
5
5
  SHA512:
6
- metadata.gz: 0dbecda4a7eeab3da2ade044c51fff00a8c5bbf2a53f9613464c909a9a87199243fb8e4ffb21e12ed9075bfe4c8a282751fa45dbe0ac22a669ac62c060ec5083
7
- data.tar.gz: d7a1b34ee790b2835fbe07d881a5f05ccd969bc3f9f7dc249b8ece9da39747d449d29e59628b4cf1d5444b9ff8794b36ffdf0cfe8bd5aa8996a9f64e38ebd9c1
6
+ metadata.gz: 433c0fefa75c02a64be79bdd30aed13d606ddfa16426d8e883899b585fcace77593ce7d73f80d346385765d4a1575710b29bdcc50ed789f552416e0c7b619ec4
7
+ data.tar.gz: 13bdfd7a84bbea49ae5f2ad9af380bea0c3997bf5ffc398378184cdbda825349025832e58420a5be9b7b966274a83c46dda46c3d60cdfbb19d5e5e7227dd2347
data/.travis.yml CHANGED
@@ -6,7 +6,12 @@ install:
6
6
  rvm:
7
7
  - 1.9.3
8
8
  - 2.0.0
9
- - jruby-19mode-1.7.4
9
+ - 2.1.0
10
+ - rbx
11
+ - jruby-19mode
10
12
  branches:
11
13
  only:
12
14
  - master
15
+ matrix:
16
+ allow_failures:
17
+ - rvm: rbx
data/Gemfile CHANGED
@@ -3,6 +3,10 @@ source 'https://rubygems.org'
3
3
  gemspec
4
4
  gem 'rake'
5
5
 
6
+ group :development, :test do
7
+ gem 'coveralls', :require => false
8
+ end
9
+
6
10
  group :test do
7
11
  gem 'rack-test', '>= 0.5.0'
8
12
  gem 'minitest', '~> 4.0'
@@ -12,6 +16,6 @@ end
12
16
 
13
17
  group :development do
14
18
  gem 'yard', '>= 0.7.2'
15
- gem 'redcarpet'
19
+ gem 'kramdown'
16
20
  gem 'github-markup'
17
21
  end
data/README.md CHANGED
@@ -3,6 +3,11 @@
3
3
  padrino-decorator is a gem for [Padrino](http://www.padrinorb.com/).
4
4
  Adds an object-oriented layer of presentation logic to your Padrino application.
5
5
 
6
+ [![Build Status](https://travis-ci.org/tyabe/padrino-decorator.png?branch=master)](https://travis-ci.org/tyabe/padrino-decorator)
7
+ [![Code Climate](https://codeclimate.com/github/tyabe/padrino-decorator.png)](https://codeclimate.com/github/tyabe/padrino-decorator)
8
+ [![Coverage Status](https://coveralls.io/repos/tyabe/padrino-decorator/badge.png)](https://coveralls.io/r/tyabe/padrino-decorator)
9
+ [![Dependency Status](https://gemnasium.com/tyabe/padrino-decorator.png)](https://gemnasium.com/tyabe/padrino-decorator)
10
+
6
11
  ## Installation
7
12
 
8
13
  Add the following to your `Gemfile`:
@@ -17,7 +22,7 @@ And then execute:
17
22
  $ bundle
18
23
  ```
19
24
 
20
- ## Controller Generator
25
+ ## Decorator Generator
21
26
 
22
27
  Padrino provides generator support for quickly creating new decorators within your Padrino application.
23
28
  Note that the decorator tests are generated specifically tailored towards the testing framework chosen during application generation.
@@ -68,6 +73,44 @@ $ padrino-gen decorator User
68
73
  </tbody>
69
74
  </table>
70
75
 
76
+ ## Examples
77
+
78
+ ```ruby
79
+ # app/controllers/posts.rb
80
+ SampleProject::App.controllers :posts do
81
+
82
+ get :index do
83
+ source = Post.all
84
+ @posts = decorate(source)
85
+ render 'posts/index'
86
+ end
87
+
88
+ get :show, with: :id do
89
+ source = Post.find(params[:id])
90
+ @post = decorate(source)
91
+ # or
92
+ @post = PostDecorator.new(source, context: self)
93
+ render 'posts/show'
94
+ end
95
+
96
+ end
97
+
98
+ # app/decorators/post_decorator.rb
99
+ class PostDecorator < Padrino::Decorator::Base
100
+ context SampleProject::App
101
+
102
+ def formated_body
103
+ h.simple_format(object.body)
104
+ end
105
+
106
+ end
107
+
108
+ # app/views/posts/show.slim
109
+ h1 = @post.title
110
+ div
111
+ = @post.formated_body
112
+ ```
113
+
71
114
  ## Contributing
72
115
 
73
116
  1. Fork it
@@ -41,7 +41,10 @@ module Padrino
41
41
  check_app_existence(app)
42
42
  inject_into_file(destination_root(app, "app.rb"), " register Padrino::Decorator::Helpers\n", :after => "Padrino::Application\n")
43
43
  self.behavior = :revoke if options[:destroy]
44
- @object_name = name.to_s.underscore
44
+ @object_name = name.to_s.underscore
45
+ @project_name = options[:namespace].underscore.camelize
46
+ @project_name = fetch_project_name(app) if @project_name.empty?
47
+ @app_name = fetch_app_name(app)
45
48
  template 'templates/decorator.rb.tt', destination_root(app, 'decorators', "#{@object_name}_decorator.rb")
46
49
  if test?
47
50
  choice = fetch_component_choice(:test)
@@ -1,11 +1,11 @@
1
1
  class <%= @object_name.camelize %>Decorator < Padrino::Decorator::Base
2
- decorate :<%= @object_name %>
2
+ context <%= @project_name %>::<%= @app_name %>
3
3
 
4
4
  # def decorated_method
5
5
  # # We can use a specified object through the accessor method.
6
6
  # # Also can use a helper method in specified context through the 'h' method.
7
- # if <%= @object_name %>.present?
8
- # h.content_tag :span, <%= @object_name %>.to_s
7
+ # if object.present?
8
+ # h.content_tag :span, object.to_s
9
9
  # else
10
10
  # h.content_tag :span, 'None'
11
11
  # end
@@ -3,20 +3,12 @@ module Padrino
3
3
  module Decorator
4
4
  class Base < SimpleDelegator
5
5
 
6
- class << self
6
+ attr_reader :object
7
7
 
8
- def decorate(name)
9
- define_method(name) do
10
- @model
11
- end
12
- end
13
-
14
- end # ClassMethods
15
-
16
- def initialize(model, context)
17
- @model = model
18
- @context = context
19
- super(model)
8
+ def initialize(object, options = {})
9
+ @object = object
10
+ @context = options[:context]
11
+ super(object)
20
12
  end
21
13
 
22
14
  def to_model
@@ -42,8 +34,12 @@ module Padrino
42
34
 
43
35
  private
44
36
 
45
- def h
46
- @context
37
+ def self.context(context)
38
+ _helper_method_name = :h
39
+ define_method(_helper_method_name) do
40
+ @context || context.to_s.camelize.constantize.new!
41
+ end
42
+ private _helper_method_name
47
43
  end
48
44
 
49
45
  end # Base
@@ -3,14 +3,19 @@ module Padrino
3
3
 
4
4
  module DecorateHelpers
5
5
  def decorate(object, options = {})
6
+
7
+ klass = options[:as]
8
+
6
9
  if object.respond_to?(:first)
7
10
  return [] if object.empty?
8
- klass_name = "#{object.first.class.to_s.pluralize}Decorator"
11
+ klass_name = "#{object.first.class}Decorator"
12
+ klass = klass_name.constantize if klass.nil?
13
+ decorator = object.map{|o| klass.new(o, context: self)}
9
14
  else
10
15
  klass_name = "#{object.class}Decorator"
16
+ klass = klass_name.constantize if klass.nil?
17
+ decorator = klass.new(object, context: self)
11
18
  end
12
- klass = options.fetch(:as) { klass_name.constantize }
13
- decorator = klass.new(object, self)
14
19
 
15
20
  yield decorator if block_given?
16
21
  decorator
@@ -16,8 +16,10 @@ module Padrino
16
16
  class << self
17
17
  def registered(app)
18
18
  app.helpers Padrino::Decorator::DecorateHelpers
19
- app.load_paths << File.join(app.settings.root, 'decorators')
20
- Padrino.dependency_paths << File.join(app.settings.root, 'decorators/**/*.rb')
19
+ app.load_paths << File.join(app.settings.root, 'decorators')
20
+ decorators_path = File.join(app.settings.root, 'decorators/**/*.rb')
21
+ Padrino.dependency_paths << decorators_path
22
+ Padrino.require_dependencies(decorators_path)
21
23
  end
22
24
  alias :included :registered
23
25
  end
@@ -1,6 +1,6 @@
1
1
  module Padrino
2
2
  module Decorator
3
- VERSION = '0.0.1' unless defined?(Padrino::Decorator::VERSION)
3
+ VERSION = '0.0.2' unless defined?(Padrino::Decorator::VERSION)
4
4
 
5
5
  def self.version
6
6
  VERSION
@@ -22,8 +22,7 @@ Gem::Specification.new do |s|
22
22
  s.require_paths = ["lib"]
23
23
  s.rdoc_options = ["--charset=UTF-8"]
24
24
 
25
- s.add_dependency "padrino-gen", "~> 0.11.0"
26
- s.add_dependency "padrino-helpers", "~> 0.11.0"
27
-
28
- s.add_development_dependency "padrino-core", "~> 0.11.0"
25
+ s.add_dependency("padrino-core", "> 0.11")
26
+ s.add_dependency "padrino-gen", "> 0.11.0"
27
+ s.add_dependency "padrino-helpers", "> 0.11.0"
29
28
  end
@@ -11,3 +11,8 @@ require 'turn'
11
11
  class MiniTest::Spec
12
12
  include Rack::Test::Methods
13
13
  end
14
+
15
+ if ENV['TRAVIS']
16
+ require 'coveralls'
17
+ Coveralls.wear!
18
+ end
data/test/test_base.rb CHANGED
@@ -3,16 +3,15 @@ require File.expand_path("#{File.dirname(__FILE__)}/helpers/helper")
3
3
  describe Padrino::Decorator::Base do
4
4
  let(:decorator_class) { Class.new(Padrino::Decorator::Base) }
5
5
  let(:model) { Object.new }
6
- let(:context) { Object.new }
7
6
 
8
7
  describe "#initialize" do
9
- subject { decorator_class.new(model, context) }
8
+ subject { decorator_class.new(model) }
10
9
 
11
10
  it 'Reports its type as if it was the original object' do
12
11
  subject.class.must_equal model.class
13
- subject.must_be_kind_of model.class # Can't be verified correctly in 'must_be_kind_of'
14
- assert subject.kind_of?(model.class), "The subject class (#{subject.class}) is not kind_of? the model class (#{model.class})."
15
- assert subject.is_a?(model.class), "The subject class (#{subject.class}) is not is_a? the model class (#{model.class})."
12
+ subject.must_be_kind_of model.class
13
+ assert subject.kind_of?(model.class), "The subject class (#{subject.class}) is not kind_of? the model class (#{model.class})."
14
+ assert subject.is_a?(model.class), "The subject class (#{subject.class}) is not is_a? the model class (#{model.class})."
16
15
  assert subject.instance_of?(model.class), "The subject class (#{subject.class}) is not an instance_of? the model class (#{model.class})."
17
16
  end
18
17
  end
@@ -1,6 +1,7 @@
1
1
  require File.expand_path("#{File.dirname(__FILE__)}/helpers/helper")
2
2
 
3
3
  describe Padrino::Decorator::DecorateHelpers do
4
+
4
5
  class User
5
6
  attr_accessor :username, :full_name
6
7
  def initialize(attributes = {})
@@ -9,31 +10,27 @@ describe Padrino::Decorator::DecorateHelpers do
9
10
  end
10
11
  end
11
12
  end
13
+
12
14
  class UserDecorator < Padrino::Decorator::Base
13
- decorate :user
14
15
  def name
15
- user.full_name.present? ? user.full_name : user.username
16
- end
17
- end
18
- class UsersDecorator < Padrino::Decorator::Base
19
- decorate :users
20
- def name_list
21
- users.map{|u| h.decorate(u).name}
16
+ object.full_name.present? ? object.full_name : object.username
22
17
  end
23
18
  end
24
19
 
25
20
  include Padrino::Decorator::DecorateHelpers
26
21
 
27
22
  describe '.decorate' do
23
+ let(:dorothy) { User.new(username: 'Dorothy', full_name: 'Dorothy Gale') }
24
+ let(:toto) { User.new(username: 'Toto') }
25
+
28
26
  it 'Possible to decorate the single object' do
29
- user = User.new(username: 'Dorothy', full_name: 'Dorothy Gale')
30
- assert_equal decorate(user).name, user.full_name
27
+ assert_equal decorate(dorothy).name, dorothy.full_name
31
28
  end
32
29
  it 'Possible to decorate the collections' do
33
30
  users = []
34
- users << User.new(username: 'Dorothy')
35
- users << User.new(username: 'Toto')
36
- assert_equal decorate(users).name_list, %w[Dorothy Toto]
31
+ users << dorothy
32
+ users << toto
33
+ assert_equal decorate(users).first.name, dorothy.full_name
37
34
  end
38
35
  end
39
36
 
metadata CHANGED
@@ -1,55 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: padrino-decorator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takeshi Yabe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-25 00:00:00.000000000 Z
11
+ date: 2014-01-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: padrino-gen
14
+ name: padrino-core
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - ">"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.11.0
19
+ version: '0.11'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - ">"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.11.0
26
+ version: '0.11'
27
27
  - !ruby/object:Gem::Dependency
28
- name: padrino-helpers
28
+ name: padrino-gen
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - ">"
32
32
  - !ruby/object:Gem::Version
33
33
  version: 0.11.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - ">"
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.11.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: padrino-core
42
+ name: padrino-helpers
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - ">"
46
46
  - !ruby/object:Gem::Version
47
47
  version: 0.11.0
48
- type: :development
48
+ type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - ">"
53
53
  - !ruby/object:Gem::Version
54
54
  version: 0.11.0
55
55
  description: Object-Oriented layer of presentation logic to your Padrino apps.
@@ -59,10 +59,10 @@ executables: []
59
59
  extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
- - .document
63
- - .gitignore
64
- - .travis.yml
65
- - .yardopts
62
+ - ".document"
63
+ - ".gitignore"
64
+ - ".travis.yml"
65
+ - ".yardopts"
66
66
  - Gemfile
67
67
  - LICENSE
68
68
  - README.md
@@ -91,22 +91,22 @@ licenses: []
91
91
  metadata: {}
92
92
  post_install_message:
93
93
  rdoc_options:
94
- - --charset=UTF-8
94
+ - "--charset=UTF-8"
95
95
  require_paths:
96
96
  - lib
97
97
  required_ruby_version: !ruby/object:Gem::Requirement
98
98
  requirements:
99
- - - '>='
99
+ - - ">="
100
100
  - !ruby/object:Gem::Version
101
101
  version: '0'
102
102
  required_rubygems_version: !ruby/object:Gem::Requirement
103
103
  requirements:
104
- - - '>='
104
+ - - ">="
105
105
  - !ruby/object:Gem::Version
106
106
  version: 1.3.6
107
107
  requirements: []
108
108
  rubyforge_project: padrino-decorator
109
- rubygems_version: 2.0.3
109
+ rubygems_version: 2.2.0
110
110
  signing_key:
111
111
  specification_version: 4
112
112
  summary: View models for padrino