coprl 3.0.0.beta.2 → 3.0.0.beta.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (100) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +9 -15
  3. data/CHANGELOG.md +57 -0
  4. data/Gemfile +12 -1
  5. data/Gemfile.lock +105 -36
  6. data/README.md +3 -3
  7. data/app/demo/components/dialogs.pom +1 -1
  8. data/app/demo/components/nav/menu.pom +0 -1
  9. data/app/demo/components/snackbar.pom +9 -3
  10. data/app/demo/events/content_as_form.pom +3 -3
  11. data/app/demo/events/halted.pom +23 -0
  12. data/app/demo/events/nav/drawer.pom +1 -1
  13. data/app/demo/events/tagged_input.pom +2 -2
  14. data/app/demo/patterns/search_select.pom +1 -1
  15. data/app/demo/plugins/animate.pom +144 -0
  16. data/app/demo/plugins/cacheable.pom +64 -0
  17. data/app/demo/plugins/clipboard.pom +21 -0
  18. data/app/demo/plugins/color_picker.pom +17 -0
  19. data/app/demo/plugins/google_maps.pom +24 -0
  20. data/app/demo/plugins/iframe.pom +14 -0
  21. data/app/demo/plugins/image_crop.pom +1 -1
  22. data/app/demo/plugins/markup.pom +14 -0
  23. data/app/demo/plugins/nav/drawer.pom +1 -1
  24. data/app/demo/plugins/script.pom +17 -0
  25. data/app/demo/plugins/scroll_to.pom +22 -0
  26. data/app/demo/plugins/timer.pom +24 -0
  27. data/app/demo/shared/context_list.pom +1 -1
  28. data/config.ru +15 -1
  29. data/coprl.gemspec +1 -2
  30. data/lib/coprl/presenters/cli.rb +10 -0
  31. data/lib/coprl/presenters/dsl/components/actions/base.rb +5 -1
  32. data/lib/coprl/presenters/dsl/components/base.rb +6 -4
  33. data/lib/coprl/presenters/dsl/components/event.rb +6 -1
  34. data/lib/coprl/presenters/dsl/components/multi_select.rb +3 -3
  35. data/lib/coprl/presenters/dsl/components/table.rb +2 -2
  36. data/lib/coprl/presenters/dsl/definition.rb +2 -2
  37. data/lib/coprl/presenters/dsl/user_interface.rb +2 -2
  38. data/lib/coprl/presenters/generators/plugin.rb +21 -6
  39. data/lib/coprl/presenters/generators/templates/plugin/.github/workflows/semantic-release.yml +41 -0
  40. data/lib/coprl/presenters/generators/templates/plugin/.releaserc +15 -0
  41. data/lib/coprl/presenters/generators/templates/plugin/.ruby-version +1 -0
  42. data/lib/coprl/presenters/generators/templates/plugin/README.md.tt +34 -0
  43. data/lib/coprl/presenters/generators/templates/plugin/demo/plugin.pom.tt +15 -0
  44. data/lib/coprl/presenters/generators/templates/plugin/lib/coprl/presenters/plugins/components/actions/dsl.rb.tt +1 -1
  45. data/lib/coprl/presenters/generators/templates/plugin/lib/coprl/presenters/plugins/version.rb.tt +3 -0
  46. data/lib/coprl/presenters/generators/templates/plugin/presenter_plugin.gemspec.tt +8 -7
  47. data/lib/coprl/presenters/generators/templates/plugin/views/components/application/component.erb.tt +1 -1
  48. data/lib/coprl/presenters/helpers/rails.rb +1 -4
  49. data/lib/coprl/presenters/helpers/rails/routes.rb +14 -0
  50. data/lib/coprl/presenters/rails/concerns/coprl_partial.rb +51 -0
  51. data/lib/coprl/presenters/rails/engine.rb +5 -0
  52. data/lib/coprl/presenters/rails/railtie.rb +6 -14
  53. data/lib/coprl/presenters/rails/reloader.rb +15 -0
  54. data/lib/coprl/presenters/settings.rb +1 -1
  55. data/lib/coprl/presenters/version.rb +1 -1
  56. data/lib/coprl/presenters/web_client/helpers/headers.rb +8 -6
  57. data/lib/coprl/presenters/web_client/helpers/rails.rb +1 -0
  58. data/lib/coprl/presenters/web_client/helpers/rails/template_helper.rb +10 -0
  59. data/lib/coprl/presenters/web_client/helpers/sinatra.rb +1 -0
  60. data/lib/coprl/presenters/web_client/helpers/sinatra/template_helper.rb +20 -0
  61. data/lib/coprl/presenters/web_client/plugin_views_path.rb +5 -5
  62. data/public/bundle.js +10 -4
  63. data/public/wc.js +10 -4
  64. data/rails-engine/app/controllers/coprl_controller.rb +1 -1
  65. data/rails-engine/app/views/layouts/coprl.html.erb +4 -4
  66. data/rails-engine/config/initializers/presenters.rb +4 -2
  67. data/rails-engine/config/initializers/routes.rb +5 -0
  68. data/rails-engine/config/initializers/session.rb +8 -0
  69. data/views/mdc/assets/js/components/events/posts.js +10 -6
  70. data/views/mdc/body/{_preamble.erb → _wrapper.erb} +16 -5
  71. data/views/mdc/components/_card.erb +2 -2
  72. data/views/mdc/components/_checkbox.erb +1 -1
  73. data/views/mdc/components/_chip.erb +2 -2
  74. data/views/mdc/components/_content.erb +2 -2
  75. data/views/mdc/components/_datetime.erb +1 -1
  76. data/views/mdc/components/_dialog.erb +2 -2
  77. data/views/mdc/components/_form.erb +2 -2
  78. data/views/mdc/components/_grid.erb +2 -2
  79. data/views/mdc/components/_hidden_field.erb +1 -1
  80. data/views/mdc/components/_multi_select.erb +1 -1
  81. data/views/mdc/components/_number_field.erb +1 -1
  82. data/views/mdc/components/_radio_button.erb +1 -1
  83. data/views/mdc/components/_rich_text_area.erb +1 -1
  84. data/views/mdc/components/_select.erb +1 -1
  85. data/views/mdc/components/_slider.erb +2 -2
  86. data/views/mdc/components/_stepper.erb +4 -4
  87. data/views/mdc/components/_switch.erb +1 -1
  88. data/views/mdc/components/_text_area.erb +1 -1
  89. data/views/mdc/components/_text_field.erb +1 -1
  90. data/views/mdc/components/buttons/_image.erb +1 -1
  91. data/views/mdc/components/unordered_list/_list_item.erb +3 -3
  92. data/views/mdc/layout.erb +4 -4
  93. metadata +33 -30
  94. data/app/demo/components/google_maps.pom +0 -22
  95. data/app/demo/components/snackbar_attached.pom +0 -6
  96. data/lib/coprl/presenters/generators/templates/plugin/README.md +0 -253
  97. data/lib/coprl/presenters/plugins/google_maps.rb +0 -24
  98. data/lib/coprl/presenters/plugins/google_maps/google_map.erb +0 -10
  99. data/lib/coprl/presenters/plugins/google_maps/google_map.rb +0 -41
  100. data/views/mdc/body/_postamble.erb +0 -17
@@ -9,7 +9,7 @@ Coprl::Presenters.define(:context_list) do
9
9
  end
10
10
 
11
11
  def scrubbed_context
12
- scrubbed_keys = context.fetch(:exclude) {%w{title file hide_time _presenter_ _namespace1_ session}}
12
+ scrubbed_keys = context.fetch(:exclude) {%w{title file hide_time _presenter_ _namespace1_ session request controller action presenter}}
13
13
  context.select {|k, _| !scrubbed_keys.include?(k.to_s)}
14
14
  end
15
15
  end
data/config.ru CHANGED
@@ -9,7 +9,7 @@ if ENV['VOOM_ENV'] == 'integration_testing'
9
9
  end
10
10
 
11
11
  ENV['VOOM_ROOT'] = File.expand_path(__dir__)
12
- ENV['GOOGLE_API_KEY'] = 'AIzaSyDhSgj9XSBLY5E9Rx5pP2ILQ7IXnD4uX2Q'
12
+ require 'dotenv/load'
13
13
  require 'coprl'
14
14
 
15
15
  require 'rack/cors'
@@ -27,6 +27,20 @@ Coprl::Presenters::Settings.configure do |config|
27
27
  }
28
28
  end
29
29
 
30
+ require 'pry'
31
+ require 'coprl/presenters/plugins/cacheable'
32
+ cache_store = Concurrent::Hash.new
33
+ # Quick and dirty demo always growing memory cache -- DONT DO THIS IN PRODUCTION!
34
+ def cache_store.fetch(key, options=nil, &block)
35
+ result = super(key, &block)
36
+ store(key, result) unless has_key?(key)
37
+ result
38
+ end
39
+
40
+ Coprl::Presenters::Plugins::Cacheable::Settings.configure do |config|
41
+ config.cache=cache_store
42
+ end
43
+
30
44
  use Coprl::Presenters::Demo::Search
31
45
  use Coprl::Presenters::Demo::Echo
32
46
  use Coprl::Presenters::Demo::Slow
data/coprl.gemspec CHANGED
@@ -28,7 +28,6 @@ Gem::Specification.new do |spec|
28
28
  spec.add_runtime_dependency 'tzinfo', '>=1.1', '< 3.0'
29
29
  spec.add_runtime_dependency 'tzinfo-data', '~>1.2018'
30
30
  spec.add_runtime_dependency 'redcarpet', '~>3.4'
31
- spec.add_runtime_dependency 'filewatcher', '~> 1.1.1'
32
31
  spec.add_runtime_dependency 'zeitwerk', '~> 2.1'
33
32
 
34
33
  spec.add_development_dependency 'thor', '~> 1.1.0'
@@ -38,6 +37,6 @@ Gem::Specification.new do |spec|
38
37
  spec.add_development_dependency 'bundler', '>= 1.13'
39
38
  spec.add_development_dependency 'rake', '~> 13.0'
40
39
  spec.add_development_dependency 'rspec', '~> 3.0'
41
- spec.add_development_dependency 'gem-release', '~> 2.0'
42
40
  spec.add_development_dependency 'shotgun', '~> 0.9'
41
+ spec.add_development_dependency 'timecop', '~> 0.9.4 '
43
42
  end
@@ -1,5 +1,6 @@
1
1
  require 'thor'
2
2
  require_relative 'generators/plugin'
3
+ require_relative 'version'
3
4
 
4
5
  module Coprl
5
6
  module Presenters
@@ -20,6 +21,15 @@ module Coprl
20
21
  end
21
22
  end
22
23
  class Cli < Thor
24
+ def self.exit_on_failure?
25
+ true
26
+ end
27
+ map %w[--version -v] => :__print_version
28
+
29
+ desc "--version, -v", "print the version"
30
+ def __print_version
31
+ puts Coprl::Presenters::Version::VERSION
32
+ end
23
33
  desc "generate", "generate a plugin"
24
34
  subcommand "generate", Generate
25
35
  end
@@ -25,10 +25,14 @@ module Coprl
25
25
  private
26
26
 
27
27
  def extract_options!
28
- %i(path presenter target input_tag headers).each do |option|
28
+ %i(path presenter target headers).each do |option|
29
29
  option_value = attribs.delete(option){:not_found}
30
30
  @options.merge!({option => option_value}) unless option_value==:not_found
31
31
  end
32
+ # Special case ... the input tag is defined at the component base level for all components
33
+ # By the time we get here we have put it into its accessor via the super call
34
+ # So we manually move it to the options for all actions
35
+ @options.merge!(input_tag: self.input_tag) if self.input_tag
32
36
  end
33
37
 
34
38
  def extract_dynamic_params(hash)
@@ -15,16 +15,19 @@ module Coprl
15
15
  include Mixins::YieldTo
16
16
  extend Pluggable
17
17
 
18
- attr_reader :type, :id, :tag, :attributes, :draggable, :drop_zone, :css_class
18
+ attr_reader :type, :id, :input_tag, :attributes, :draggable, :drop_zone, :css_class
19
19
 
20
20
  alias attribs attributes
21
21
 
22
- def initialize(type:, parent:, id: nil, tag: nil, **attributes, &block)
22
+ def initialize(type:, parent:, id: nil, tag: nil, input_tag: nil, **attributes, &block)
23
23
  @draggable = attributes.delete(:draggable) {nil}
24
24
  @drop_zone = attributes.delete(:drop_zone) {nil}
25
25
  @css_class = Array(attributes.delete(:class) {nil})
26
26
  @id = id || generate_id
27
- @tag = tag
27
+ @input_tag = input_tag || tag
28
+ logger.warn(
29
+ 'The `tag` attribute is deprecated. ' \
30
+ 'Please use `input_tag` instead. This will change in a future feature release.') unless tag.nil?
28
31
  @type = type
29
32
  @parent = parent
30
33
  @attributes = attributes
@@ -72,7 +75,6 @@ module Coprl
72
75
 
73
76
  alias params context
74
77
 
75
-
76
78
  def yield_block
77
79
  return @_yield_block_ if @_yield_block_
78
80
  @parent.send(:yield_block)
@@ -27,6 +27,7 @@ module Coprl
27
27
  wait_for_download: wait_for_download,
28
28
  params: params, &block)
29
29
  end
30
+ alias load loads
30
31
 
31
32
  def replaces(target, presenter, input_tag: nil, ignore_input_values: [], **params, &block)
32
33
  self << Actions::Replaces.new(parent: self,
@@ -36,6 +37,7 @@ module Coprl
36
37
  ignore_input_values: Array(ignore_input_values),
37
38
  params: params, &block)
38
39
  end
40
+ alias replace replaces
39
41
 
40
42
  # Method can be one of :post, :put, :delete or :patch
41
43
  def posts(path, input_tag: nil, headers: nil, **params, &block)
@@ -45,8 +47,10 @@ module Coprl
45
47
  headers: headers,
46
48
  params: params, &block)
47
49
  end
48
-
50
+ alias post posts
49
51
  alias creates posts
52
+ alias create posts
53
+
50
54
 
51
55
  def updates(path, input_tag: nil, headers: nil, **params, &block)
52
56
  self << Actions::Updates.new(parent: self,
@@ -63,6 +67,7 @@ module Coprl
63
67
  headers: headers,
64
68
  params: params, &block)
65
69
  end
70
+ alias delete deletes
66
71
 
67
72
  def dialog(dialog_id, **params, &block)
68
73
  self << Actions::Dialog.new(parent: self,
@@ -16,8 +16,8 @@ module Coprl
16
16
  def check_option(**attribs, &block)
17
17
  @options << CheckOption.new(parent: self,
18
18
  name: @name,
19
- tag: @tag,
20
- **attribs.delete_if{ |k,v| [:tag, :name].include?(k) }, &block)
19
+ input_tag: @input_tag,
20
+ **attribs.delete_if{ |k,v| [:tag, :name, :input_tag].include?(k) }, &block)
21
21
  end
22
22
 
23
23
  class CheckOption < EventBase
@@ -33,7 +33,7 @@ module Coprl
33
33
  self.checkbox(name: "#{attribs[:name]}[]",
34
34
  value: @value,
35
35
  text: @text,
36
- tag: tag,
36
+ input_tag: self.input_tag,
37
37
  checked: @selected,
38
38
  disabled: @disabled,
39
39
  &block)
@@ -58,10 +58,10 @@ module Coprl
58
58
  def checkbox(**attributes, &block)
59
59
  return @checkbox if locked?
60
60
  field_name = @type == :header ? 'all' : "#{attributes.delete(:name)}[]"
61
- tag = @type == :header ? '' : @parent.tag
61
+ tag = @type == :header ? '' : @parent.input_tag
62
62
  @checkbox = Components::Checkbox.new(parent: self,
63
63
  name: field_name,
64
- tag: tag,
64
+ input_tag: tag,
65
65
  **attributes,
66
66
  &block)
67
67
  end
@@ -17,8 +17,8 @@ module Coprl
17
17
  self
18
18
  end
19
19
 
20
- def expand(router: , context:{}, &block)
21
- presenter = UserInterface.new(router: router, context: context, name: @name, namespace: @namespace, &@block)
20
+ def expand(router: , context:{}, plugins: [], &block)
21
+ presenter = UserInterface.new(router: router, context: context, plugins: plugins, name: @name, namespace: @namespace, &@block)
22
22
  yield(presenter) if block
23
23
  presenter.expand_instance
24
24
  end
@@ -25,7 +25,7 @@ module Coprl
25
25
  private :context, :router, :namespace
26
26
  alias params context
27
27
 
28
- def initialize(context:, parent: nil, router: nil, name: nil, namespace: [], &block)
28
+ def initialize(context:, parent: nil, router: nil, name: nil, plugins: [], namespace: [], &block)
29
29
  @parent = parent
30
30
  @router = router || @parent&.send(:router)
31
31
  @context = context || {}
@@ -36,7 +36,7 @@ module Coprl
36
36
  @footer = nil
37
37
  @name = name
38
38
  @namespace = namespace
39
- @plugins = []
39
+ @plugins = plugins || []
40
40
  @csrf_meta_tags = authenticity_token_meta_tags(@context.fetch(:session, nil))
41
41
  add_global_helpers
42
42
  initialize_plugins
@@ -32,13 +32,13 @@ module Coprl
32
32
 
33
33
  def template_file(template, target_filename=template, source_path=nil, target_path=source_path)
34
34
  source = join_path(TEMPLATES_ROOT, source_path, "#{template}.tt")
35
- destination = join_path(plusin_name, target_path, target_filename)
35
+ destination = join_path(plugin_name, target_path, target_filename)
36
36
  template source, destination
37
37
  end
38
38
 
39
39
  def file(file, target_filename=file, source_path=nil, target_path=nil)
40
40
  source = join_path(TEMPLATES_ROOT, source_path, file)
41
- destination = join_path(plusin_name, target_path, target_filename)
41
+ destination = join_path(plugin_name, target_path, target_filename)
42
42
 
43
43
  copy_file source, destination
44
44
  end
@@ -59,17 +59,28 @@ module Coprl
59
59
  underscore(name)
60
60
  end
61
61
 
62
- def plusin_name
62
+ def plugin_name
63
63
  "#{underscored_name}_presenter_plugin"
64
64
  end
65
65
  end
66
66
 
67
+ def create_version
68
+ template_file('version.rb', "version.rb", LIB_ROOT, "lib/#{underscored_name}_presenter_plugin")
69
+ end
70
+
67
71
  def create_root_files
68
72
  file('.gitignore')
69
73
  template_file('Gemfile')
70
74
  template_file('LICENSE.txt')
71
75
  template_file('presenter_plugin.gemspec', "#{underscored_name}_presenter_plugin.gemspec")
72
- file 'README.md'
76
+ template_file 'README.md'
77
+ end
78
+
79
+ def create_semantic_release_github_action
80
+ file('.releaserc')
81
+ file('.ruby-version')
82
+ file('semantic-release.yml', 'semantic-release.yml',
83
+ dir('.github', 'workflows'), dir('.github', 'workflows'))
73
84
  end
74
85
 
75
86
  def create_plugin
@@ -90,9 +101,9 @@ module Coprl
90
101
  dir('views', 'assets', 'css', 'components'))
91
102
  template_file('component.js', "#{underscored_name}.js",
92
103
  dir('views', 'assets', 'js', 'components'))
93
- template_file('component.erb', "#{underscored_name}.erb",
104
+ template_file('component.erb', "_#{underscored_name}.erb",
94
105
  dir('views', 'components', 'application'))
95
- template_file('component_header.erb', "#{underscored_name}_header.erb",
106
+ template_file('component_header.erb', "_#{underscored_name}_header.erb",
96
107
  dir('views', 'components', 'application'))
97
108
  end
98
109
 
@@ -115,6 +126,10 @@ module Coprl
115
126
  lib_dir('helpers'),
116
127
  named_dir('helpers'))
117
128
  end
129
+
130
+ def create_demo_pom
131
+ template_file('plugin.pom', "#{underscored_name}.pom", dir('demo'))
132
+ end
118
133
  end
119
134
  end
120
135
  end
@@ -0,0 +1,41 @@
1
+ name: CI
2
+
3
+ # Controls when the action will run.
4
+ on:
5
+ # Triggers the workflow on push or pull request events but only for the master branch
6
+ push:
7
+ branches: [ master ]
8
+ pull_request:
9
+ branches: [ master ]
10
+
11
+ # Allows you to run this workflow manually from the Actions tab
12
+ workflow_dispatch:
13
+
14
+ # A workflow run is made up of one or more jobs that can run sequentially or in parallel
15
+ jobs:
16
+ # This workflow contains a single job called "build"
17
+ build:
18
+ # The type of runner that the job will run on
19
+ runs-on: ubuntu-latest
20
+
21
+ # Steps represent a sequence of tasks that will be executed as part of the job
22
+ steps:
23
+ - name: Checkout
24
+ uses: actions/checkout@v2
25
+ - name: Setup Ruby
26
+ uses: ruby/setup-ruby@v1
27
+ with:
28
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
29
+ - name: Semantic Release
30
+ uses: cycjimmy/semantic-release-action@v2
31
+ with:
32
+ extra_plugins: |
33
+ @semantic-release/git
34
+ @semantic-release/changelog
35
+ @semantic-release/github
36
+ semantic-release-rubygem
37
+ dry_run: false
38
+ env:
39
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
40
+ GEM_HOST_API_KEY: ${{ secrets.GEM_HOST_API_KEY }}
41
+
@@ -0,0 +1,15 @@
1
+ {
2
+ "branches": ['+([0-9])?(.{+([0-9]),x}).x', 'master', 'next', 'next-major', {name: 'beta', prerelease: true}, {name: 'alpha', prerelease: true}],
3
+ "plugins": [
4
+ "@semantic-release/commit-analyzer",
5
+ "@semantic-release/release-notes-generator",
6
+ "@semantic-release/changelog",
7
+ "@semantic-release/github",
8
+ ["semantic-release-rubygem",
9
+ {
10
+ "gemPublish": false
11
+ }
12
+ ],
13
+ "@semantic-release/git"
14
+ ]
15
+ }
@@ -0,0 +1,34 @@
1
+ # <%= humanize(name) %> Presenter Plugin
2
+
3
+ A [COPRL](http://github.com/coprl/coprl) presenter plugin that <%= name %>
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem '<%= name %>_presenter_plugin', git: 'https://github.com/coprl/<%= name %>_presenter_plugin', require: false
11
+ ```
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+
18
+ ## Usage in POMs
19
+
20
+ Declare the plugin in your pom, `plugin :<%= name %>`.
21
+
22
+ TODO: Add an example POM and describe your plugin here
23
+
24
+ ## Contributing
25
+
26
+ Bug reports and pull requests are welcome on GitHub at https://github.com/coprl/<%= name %>_presenter_plugin.
27
+
28
+ ## License
29
+
30
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
31
+
32
+ ## Code of Conduct
33
+
34
+ Everyone interacting in the COPRL project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/coprl/coprl/blob/master/CODE-OF-CONDUCT.md).
@@ -0,0 +1,15 @@
1
+ Coprl::Presenters.define(:<%= name %>, namespace: :plugins) do
2
+ helpers Demo::Helpers::IndentedGrid
3
+ attach :top_nav
4
+ attach :plugin_drawer
5
+ plugin :<%= name %>
6
+ page_title '<%= humanize(name) %>'
7
+
8
+ <%= name %> # TODO Add your demo code here
9
+
10
+ indented_grid do
11
+ subheading 'TODO describe how to use your plugin'
12
+
13
+ attach :code, file: __FILE__
14
+ end
15
+ end
@@ -1,4 +1,4 @@
1
- require_relative '<%= classify(name) %>_action'
1
+ require_relative '<%= underscore(name) %>_action'
2
2
 
3
3
  module Coprl
4
4
  module Presenters
@@ -0,0 +1,3 @@
1
+ module <%= classify(name) %>PresenterPlugin
2
+ VERSION = "0.0.1"
3
+ end
@@ -1,21 +1,22 @@
1
1
  lib = File.expand_path("../lib", __FILE__)
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require '<%= name %>_presenter_plugin/version'
3
4
 
4
5
  Gem::Specification.new do |spec|
5
- spec.name = "<%= name %>_presenter_plugin"
6
- spec.version = '0.0.1'
6
+ spec.name = '<%= name %>_presenter_plugin'
7
+ spec.version = <%= classify(name) %>PresenterPlugin::VERSION
7
8
  spec.authors = ["<%= `git config user.name`.strip %>"]
8
9
  spec.email = ["<%= `git config user.email`.strip %>"]
9
10
 
10
- spec.summary = %q{<%= name %> presenter plugin.}
11
+ spec.summary = %q{A COPRL presenter plugin for <%= name %>}
11
12
  spec.homepage = 'http://github.com/<%= `git config user.name`.strip %>/<%= name %>_presenters_plugin'
12
- spec.license = "MIT"
13
+ spec.license = 'MIT'
13
14
 
14
15
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
15
16
  f.match(%r{^(test|spec|features)/})
16
17
  end
17
- spec.require_paths = ["lib"]
18
+ spec.require_paths = ['lib']
18
19
 
19
- spec.add_development_dependency "bundler", "~> 1.16"
20
- spec.add_development_dependency "rake", "~> 10.0"
20
+ spec.add_development_dependency 'bundler', "~> 2.0"
21
+ spec.add_development_dependency "rake", ">= 12.3.3"
21
22
  end