komponent 1.1.4 → 2.0.0.pre.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2c0aadad91b23804da8724b26704c6bb481f2869
4
- data.tar.gz: 5ef9c5fb02bf7f6f7e53c2ea0397f1724dfa6116
3
+ metadata.gz: 6f4a2e93f4dd2d59cfe137824c4cf0befd7a827d
4
+ data.tar.gz: 531498a2ea3eb8063057a840ad29d4d6d3ec2b28
5
5
  SHA512:
6
- metadata.gz: ade22af3b7e1b13484f8e0d3b35648e6c35bbbd1393d71c399b25648655a05524dd2fc5d36c40beb89177cb9b2634e093ba596f200b9b0664f6cf7571618117a
7
- data.tar.gz: 3a8d50d8c461372f1d8f3edde97651cd352213d48fb6d40c26518d3a2041150c7593112e3c07a4b76b0c4329a01eb7aa0d74bcf8daf3b6edde88e557239b40ad
6
+ metadata.gz: ba27094468525618389dba4e707a19f8bd488e0dcdf74ad3ddf17e5a88e61f18ef6556d644a76251aad595232f25eae7d08bf563433c7656dc190a0fa7a95c00
7
+ data.tar.gz: ea2a13b0eebb2885baa9d43a3e3763dce0d36baef252408645005b142893e310ae01c3632f83f520c42b359080b03cd4df961ab5ca63cbb232363a5b70ab9e74
@@ -52,29 +52,29 @@ Naming/PredicateName:
52
52
  Naming/VariableName:
53
53
  Enabled: true
54
54
 
55
- Lint/BlockAlignment:
55
+ Lint/DeprecatedClassMethods:
56
56
  Enabled: true
57
- EnforcedStyleAlignWith: start_of_block
58
57
 
59
- Lint/ConditionPosition:
58
+ Layout/AlignParameters:
60
59
  Enabled: true
61
60
 
62
- Lint/DefEndAlignment:
61
+ Layout/BlockAlignment:
63
62
  Enabled: true
63
+ EnforcedStyleAlignWith: start_of_block
64
64
 
65
- Lint/DeprecatedClassMethods:
65
+ Layout/BlockEndNewline:
66
66
  Enabled: true
67
67
 
68
- Layout/AlignParameters:
68
+ Layout/CaseIndentation:
69
69
  Enabled: true
70
70
 
71
- Layout/BlockEndNewline:
71
+ Layout/ClosingParenthesisIndentation:
72
72
  Enabled: true
73
73
 
74
- Layout/CaseIndentation:
74
+ Layout/ConditionPosition:
75
75
  Enabled: true
76
76
 
77
- Layout/ClosingParenthesisIndentation:
77
+ Layout/DefEndAlignment:
78
78
  Enabled: true
79
79
 
80
80
  Layout/DotPosition:
@@ -0,0 +1,7 @@
1
+ SimpleCov.minimum_coverage 90
2
+
3
+ SimpleCov.start do
4
+ add_filter "/fixtures/"
5
+ add_filter "/test/"
6
+ add_filter "/features/"
7
+ end
@@ -29,5 +29,4 @@ install:
29
29
  - yarn
30
30
 
31
31
  script:
32
- - bundle exec rubocop
33
- - bundle exec rake test
32
+ - bundle exec rake test:all_with_coverage
@@ -2,10 +2,21 @@
2
2
 
3
3
  ## Upcoming release
4
4
 
5
- ## v1.1.4 (2018-03-05)
5
+ ## v2.0.0.pre.1 (2018-04-12)
6
+
7
+ **Breaking changes:**
8
+ - Removed deprecated `render_partial` method
9
+ - Removed rendering of namespaced component with the old naming convention
6
10
 
7
11
  **Enhancements:**
12
+ - Changed `@block_given_to_component` from an instance variable to a method `block_given_to_component` available in the view context
13
+ - Implemented component caching with the `cached: true` option
14
+ - Added a `stylesheet_engine` option to Komponent configuration
15
+ - When generating a new component, the `frozen_string_literal: true` magic comment is prepended to Ruby files
8
16
 
17
+ ## v1.1.4 (2018-03-05)
18
+
19
+ **Enhancements:**
9
20
  - Added `frozen_string_literal` option to optimize performance
10
21
  - Removed useless `autoload_paths` config definition (it was not taken into account)
11
22
  - Install generator can be ran several times in order to enable features
data/Gemfile CHANGED
@@ -14,4 +14,6 @@ gem "rubocop", require: false
14
14
  group :test do
15
15
  gem "aruba"
16
16
  gem "cucumber"
17
+ gem "simplecov", require: false
18
+ gem "coveralls", require: false
17
19
  end
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # <img alt="Komponent" src="https://raw.github.com/ouvrages/komponent/master/logo.svg?sanitize=true" width="200" height="40" />
2
2
  [![Build Status](https://travis-ci.org/komposable/komponent.svg?branch=master)](https://travis-ci.org/komposable/komponent)
3
3
  [![Gem](https://img.shields.io/gem/v/komponent.svg)](https://github.com/komposable/komponent)
4
+ [![Dependency Status](https://beta.gemnasium.com/badges/github.com/komposable/komponent.svg)](https://beta.gemnasium.com/projects/github.com/komposable/komponent)
5
+ [![Coverage Status](https://coveralls.io/repos/github/komposable/komponent/badge.svg?branch=master)](https://coveralls.io/github/komposable/komponent?branch=master)
4
6
 
5
7
  **Komponent** implements an opinionated way of organizing front-end code in Ruby on Rails, based on _components_.
6
8
 
@@ -17,9 +19,12 @@ This gem has been inspired by our Rails development practices at [Ouvrages](http
17
19
 
18
20
  ## Table of contents
19
21
 
22
+ - [Compatibility](#compatibility)
20
23
  - [Getting started](#getting-started)
21
24
  - [Usage](#usage)
22
25
  - [Passing variables](#passing-variables)
26
+ - [Passing options](#passing-options)
27
+ - [Component caching](#component-caching)
23
28
  - [Passing a block](#passing-a-block)
24
29
  - [Properties](#properties)
25
30
  - [Helpers](#helpers)
@@ -31,11 +36,18 @@ This gem has been inspired by our Rails development practices at [Ouvrages](http
31
36
  - [Configuration](#configuration)
32
37
  - [Change default root path](#change-default-root-path)
33
38
  - [Default options for the generators](#default-options-for-the-generators)
39
+ - [Change default stylesheet engine](#change-default-stylesheet-engine)
34
40
  - [Force default templating engine](#force-default-templating-engine)
35
41
  - [Additional paths](#additional-paths)
36
42
  - [Contributing](#contributing)
37
43
  - [License](#license)
38
44
 
45
+ ## Compatibility
46
+
47
+ - Ruby 2.2+
48
+ - Rails 4.2+
49
+ - Webpacker 3.0.0+
50
+
39
51
  ## Getting started
40
52
 
41
53
  ```ruby
@@ -108,6 +120,25 @@ You can pass `locals` to the helper. They are accessible within the component pa
108
120
  = @text
109
121
  ```
110
122
 
123
+ ### Passing options
124
+
125
+ #### Component caching
126
+
127
+ Komponent relies on [Rails Low-level caching](http://guides.rubyonrails.org/caching_with_rails.html#low-level-caching).
128
+
129
+ You can cache the component by passing the `cached: true` option. The cache will expire when the locals, options or block change.
130
+ If you want better control of the cache expiration, you can provide a custom `cache_key`. When the `cache_key` changes, the cache will be cleared.
131
+
132
+ ```slim
133
+ / app/views/pages/home.html.slim
134
+
135
+ / Cache the component based on its locals
136
+ = component "button", { text: "Click here" }, cached: true
137
+
138
+ / or cache the component with a specific key, such as the last update of a model
139
+ = component "button", { text: "Click here" }, cached: true, cache_key: @product.updated_at
140
+ ```
141
+
111
142
  ### Passing a block
112
143
 
113
144
  The component also accepts a `block`. To render the block, just use the standard `yield`.
@@ -186,9 +217,10 @@ You can also choose to split your component into partials. In this case, we can
186
217
  ```slim
187
218
  / frontend/components/button/_button.html.slim
188
219
 
189
- = a.button(href=@href)
220
+ a.button(href=@href)
190
221
  = @text
191
- = render("suffix", text: "external link") if external_link?
222
+ - if external_link?
223
+ = render "suffix", text: "external link"
192
224
  ```
193
225
 
194
226
  ```slim
@@ -207,7 +239,6 @@ rails generate component admin/header
207
239
 
208
240
  This will create the component in an `admin` folder, and name its Ruby module `AdminHeaderComponent`.
209
241
 
210
-
211
242
  ### Stimulus integration
212
243
 
213
244
  Komponent supports [stimulus](https://github.com/stimulusjs/stimulus) 1.0.
@@ -267,8 +298,19 @@ You can whitelist the locales you use by setting this into an initializer, as ex
267
298
  I18n.available_locales = [:en, :fr]
268
299
  ```
269
300
 
301
+ > If you have the `rails-i18n` gem in your `Gemfile`, you should whitelist locales to prevent creating a lot of
302
+ > locale files when you generate a new component.
303
+
270
304
  ### Configuration
271
305
 
306
+ #### Change default root path
307
+
308
+ You can change the default root path (`frontend`) to another path where Komponent should be installed and components generated. You need to change `komponent.root` in an initializer.
309
+
310
+ ```rb
311
+ Rails.application.config.komponent.root = Rails.root.join("app/frontend")
312
+ ```
313
+
272
314
  #### Default options for the generators
273
315
 
274
316
  You can configure the generators in an initializer or in `application.rb`, so you don't have to add `--locale` and/or `--stimulus` flags every time you generate a fresh component.
@@ -279,12 +321,12 @@ config.generators do |g|
279
321
  end
280
322
  ```
281
323
 
282
- #### Change default root path
324
+ #### Change default stylesheet engine
283
325
 
284
- You can change the default root path (`frontend`) to another path where Komponent should be installed and components generated. You need to change `komponent.root` in an initializer.
326
+ You can configure the stylesheet engine used for generate stylesheet file, values allowed are ':css', ':scss', ':sass'.
285
327
 
286
328
  ```rb
287
- Rails.application.config.komponent.root = Rails.root.join("app/frontend")
329
+ Rails.application.config.komponent.stylesheet_engine = :css # default value is :css
288
330
  ```
289
331
 
290
332
  #### Force default templating engine
data/Rakefile CHANGED
@@ -1,25 +1,33 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "bundler/gem_tasks"
4
+ require "rubocop/rake_task"
4
5
  require "rake/testtask"
5
- require 'cucumber'
6
- require 'cucumber/rake/task'
6
+ require "cucumber"
7
+ require "cucumber/rake/task"
8
+ require "coveralls/rake/task"
7
9
 
8
10
  namespace :test do
9
- task all: [:unit, :cucumber]
11
+ task all: [:rubocop, :unit, :cucumber]
12
+ task all_with_coverage: [:all, "coveralls:push"]
13
+
14
+ RuboCop::RakeTask.new
10
15
 
11
16
  Rake::TestTask.new(:unit) do |t|
12
17
  t.libs << "test"
13
18
  t.libs << "lib"
14
19
  t.test_files = FileList["test/**/*_test.rb"]
15
20
  t.verbose = true
21
+ t.warning = false
16
22
  end
17
23
 
18
24
  Cucumber::Rake::Task.new(:cucumber) do |t|
19
25
  t.cucumber_opts = "--format pretty"
20
26
  end
27
+
28
+ Coveralls::RakeTask.new
21
29
  end
22
30
 
23
- task test: 'test:all'
31
+ task test: "test:all"
24
32
 
25
33
  task default: :test
@@ -5,25 +5,31 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
  require "komponent/version"
6
6
 
7
7
  Gem::Specification.new do |spec|
8
- spec.name = "komponent"
9
- spec.version = Komponent::VERSION
10
- spec.authors = ["Ouvrages"]
11
- spec.email = ["contact@ouvrages-web.fr"]
8
+ spec.name = "komponent"
9
+ spec.version = Komponent::VERSION
10
+ spec.authors = ["Ouvrages"]
11
+ spec.email = ["contact@ouvrages-web.fr"]
12
12
 
13
- spec.summary = "An opinionated way of organizing front-end code in Ruby on Rails, based on components"
14
- spec.description = "An opinionated way of organizing front-end code in Ruby on Rails, based on components"
15
- spec.homepage = "http://komponent.io"
16
- spec.license = "MIT"
13
+ spec.summary = "An opinionated way of organizing front-end code in Ruby on Rails, based on components"
14
+ spec.description = "An opinionated way of organizing front-end code in Ruby on Rails, based on components"
15
+ spec.homepage = "http://komponent.io"
16
+ spec.license = "MIT"
17
17
 
18
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
+ spec.metadata = {
19
+ "homepage_uri" => "http://komponent.io",
20
+ "changelog_uri" => "https://github.com/komposable/komponent/blob/master/CHANGELOG.md",
21
+ "source_code_uri" => "https://github.com/komposable/komponent",
22
+ "bug_tracker_uri" => "https://github.com/komposable/komponent/issues",
23
+ }
24
+
25
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
19
26
  f.match(%r{^(test|spec|features|fixtures)/})
20
27
  end
21
- spec.bindir = "exe"
22
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
- spec.require_paths = ["lib"]
24
28
 
29
+ spec.require_paths = ["lib"]
25
30
  spec.required_ruby_version = '>= 2.2.0'
26
31
 
32
+ spec.add_dependency "actionview", ">= 4.2"
27
33
  spec.add_dependency "activesupport", ">= 4.2"
28
34
  spec.add_dependency "railties", ">= 4.2"
29
35
  spec.add_dependency "webpacker", ">= 3.0.0"
@@ -134,11 +134,7 @@ class ComponentGenerator < Rails::Generators::NamedBase
134
134
  end
135
135
 
136
136
  def stylesheet_engine
137
- if sass = rails_configuration.try(:sass)
138
- sass[:preferred_syntax]
139
- else
140
- :css
141
- end
137
+ rails_configuration.komponent.stylesheet_engine
142
138
  end
143
139
 
144
140
  def default_path
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module <%= module_name %>
2
4
  extend ComponentHelper
3
5
  end
@@ -9,10 +9,5 @@ module ComponentHelper
9
9
 
10
10
  def self.extended(component)
11
11
  component.properties = {}
12
- component.class_eval do
13
- def block_given_to_component?
14
- @block_given_to_component.present?
15
- end
16
- end
17
12
  end
18
13
  end
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Komponent
4
+ class ComponentRenderer
5
+ include ActionView::Helpers::CaptureHelper
6
+
7
+ attr_accessor :output_buffer
8
+ attr_reader :context
9
+
10
+ def initialize(controller)
11
+ @context = controller.view_context.dup
12
+ @view_renderer = @context.view_renderer = @context.view_renderer.dup
13
+ @lookup_context = @view_renderer.lookup_context = @view_renderer.lookup_context.dup
14
+ end
15
+
16
+ def render(component, locals = {}, options = {}, &block)
17
+ cached = options.delete(:cached)
18
+ if cached
19
+
20
+ cached_block = block ? block.call : nil
21
+ key = [component, locals, options, cached_block].to_s
22
+ cache_key = Digest::SHA1.hexdigest(key)
23
+
24
+ Rails.cache.fetch(cache_key) do
25
+ _render(component, locals, options, &block)
26
+ end
27
+ else
28
+ _render(component, locals, options, &block)
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ def _render(component, locals = {}, options = {}, &block)
35
+ parts = component.split("/")
36
+ component_name = parts.join("_")
37
+
38
+ component_module_path = resolved_component_path(component)
39
+ .join("#{component_name}_component")
40
+ require_dependency(component_module_path)
41
+ component_module = "#{component_name}_component".camelize.constantize
42
+
43
+ @context.class_eval { prepend component_module }
44
+ @context.class_eval { prepend Komponent::Translation }
45
+
46
+ @lookup_context.prefixes = ["components/#{component}"]
47
+
48
+ @context.instance_eval do
49
+ if component_module.respond_to?(:properties)
50
+ locals = locals.dup
51
+ component_module.properties.each do |name, options|
52
+ unless locals.has_key?(name)
53
+ if options.has_key?(:default)
54
+ locals[name] = options[:default]
55
+ elsif options[:required]
56
+ raise "Missing required component parameter: #{name}"
57
+ end
58
+ end
59
+ end
60
+ end
61
+
62
+ locals.each do |name, value|
63
+ instance_variable_set(:"@#{name}", locals[name])
64
+ end
65
+
66
+ define_singleton_method(:properties) { locals }
67
+ define_singleton_method(:block_given_to_component?) { block_given? }
68
+ define_singleton_method(:block_given_to_component) { block }
69
+ end
70
+
71
+ @context.render("components/#{component}/#{parts.join('_')}", &block)
72
+ end
73
+
74
+ def resolved_component_path(component)
75
+ Komponent::ComponentPathResolver.new.resolve(component)
76
+ end
77
+ end
78
+ end
@@ -1,82 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module KomponentHelper
4
- def component(component, locals = {}, &block)
5
- component_path = Komponent::ComponentPathResolver.new.resolve(component)
6
-
7
- parts = component.split("/")
8
- component_name = parts.join("_")
9
- component_path = component_path.join("#{component_name}_component")
10
-
11
- require_dependency(component_path)
12
-
13
- component_module = "#{component_name}_component".camelize.constantize
14
- context = controller.view_context.dup
15
-
16
- context.view_flow = view_flow
17
-
18
- view_renderer = context.view_renderer = context.view_renderer.dup
19
- lookup_context = view_renderer.lookup_context = view_renderer.lookup_context.dup
20
- lookup_context.prefixes = ["components/#{component}"]
21
-
22
- context.class_eval { prepend component_module }
23
- context.class_eval { prepend Komponent::Translation }
24
-
25
- capture_block = proc { capture(&block) } if block
26
-
27
- context.instance_eval do
28
- if component_module.respond_to?(:properties)
29
- locals = locals.dup
30
- component_module.properties.each do |name, options|
31
- unless locals.has_key?(name)
32
- if options.has_key?(:default)
33
- locals[name] = options[:default]
34
- elsif options[:required]
35
- raise "Missing required component parameter: #{name}"
36
- end
37
- end
38
- end
39
- end
40
-
41
- locals.each do |name, value|
42
- instance_variable_set(:"@#{name}", locals[name])
43
- end
44
-
45
- define_singleton_method(:properties) { locals }
46
-
47
- instance_variable_set(:"@block_given_to_component", block)
48
- end
49
-
50
- begin
51
- context.render("components/#{component}/#{parts.join('_')}", &capture_block)
52
- rescue ActionView::MissingTemplate
53
- warn "[DEPRECATION WARNING] `#{parts.last}` filename in namespace is deprecated in favor of `#{parts.join('_')}`."
54
- context.render("components/#{component}/#{parts.last}", &capture_block)
55
- end
4
+ def component(component_name, locals = {}, options = {}, &block)
5
+ captured_block = proc { capture(&block) } if block_given?
6
+ Komponent::ComponentRenderer.new(
7
+ controller,
8
+ ).render(
9
+ component_name,
10
+ locals,
11
+ options,
12
+ &captured_block
13
+ )
56
14
  end
57
15
  alias :c :component
58
-
59
- def render_partial(partial_name, locals = {}, &block)
60
- warn "[DEPRECATION WARNING] `render_partial` is deprecated. Please use default `render` instead."
61
-
62
- context = controller.view_context
63
- view_paths = context.lookup_context.view_paths.dup
64
- components_path = Rails.root.join "frontend/components"
65
-
66
- capture_block = proc { capture(&block) } if block
67
-
68
- current_dir = Pathname.new(@virtual_path).dirname
69
-
70
- context.lookup_context.prefixes.prepend current_dir
71
- context.lookup_context.view_paths.unshift components_path
72
-
73
- rendered_partial = capture do
74
- context.render partial_name, locals, &capture_block
75
- end
76
-
77
- context.lookup_context.prefixes.delete current_dir
78
- context.lookup_context.view_paths = view_paths
79
-
80
- rendered_partial
81
- end
82
16
  end
@@ -1,19 +1,21 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'webpacker'
4
- require 'komponent/core/component_helper'
5
- require 'komponent/core/translation'
6
- require 'komponent/core/component_path_resolver'
4
+ require 'komponent/component_helper'
5
+ require 'komponent/component_path_resolver'
6
+ require 'komponent/component_renderer'
7
+ require 'komponent/translation'
7
8
 
8
9
  module Komponent
9
10
  class Railtie < Rails::Railtie
10
11
  config.komponent = ActiveSupport::OrderedOptions.new
11
12
  config.komponent.root = nil
12
13
  config.komponent.component_paths = []
14
+ config.komponent.stylesheet_engine = :css
13
15
 
14
16
  config.before_configuration do |app|
15
- app.config.komponent.root = app.config.root.join("frontend")
16
17
  app.config.komponent = config.komponent
18
+ app.config.komponent.root = app.config.root.join("frontend")
17
19
  end
18
20
 
19
21
  config.after_initialize do |app|
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Komponent
4
- VERSION = "1.1.4"
4
+ VERSION = "2.0.0.pre.1"
5
5
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: komponent
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.4
4
+ version: 2.0.0.pre.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ouvrages
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-05 00:00:00.000000000 Z
11
+ date: 2018-04-12 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: actionview
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '4.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '4.2'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: activesupport
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -76,6 +90,7 @@ extra_rdoc_files: []
76
90
  files:
77
91
  - ".gitignore"
78
92
  - ".rubocop.yml"
93
+ - ".simplecov"
79
94
  - ".travis.yml"
80
95
  - CHANGELOG.md
81
96
  - CODE_OF_CONDUCT.md
@@ -107,17 +122,22 @@ files:
107
122
  - lib/generators/component/templates/view.html.slim.erb
108
123
  - lib/generators/komponent/install_generator.rb
109
124
  - lib/komponent.rb
110
- - lib/komponent/core/component_helper.rb
111
- - lib/komponent/core/component_path_resolver.rb
112
- - lib/komponent/core/translation.rb
125
+ - lib/komponent/component_helper.rb
126
+ - lib/komponent/component_path_resolver.rb
127
+ - lib/komponent/component_renderer.rb
113
128
  - lib/komponent/komponent_helper.rb
114
129
  - lib/komponent/railtie.rb
130
+ - lib/komponent/translation.rb
115
131
  - lib/komponent/version.rb
116
132
  - logo.svg
117
133
  homepage: http://komponent.io
118
134
  licenses:
119
135
  - MIT
120
- metadata: {}
136
+ metadata:
137
+ homepage_uri: http://komponent.io
138
+ changelog_uri: https://github.com/komposable/komponent/blob/master/CHANGELOG.md
139
+ source_code_uri: https://github.com/komposable/komponent
140
+ bug_tracker_uri: https://github.com/komposable/komponent/issues
121
141
  post_install_message:
122
142
  rdoc_options: []
123
143
  require_paths:
@@ -129,9 +149,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
129
149
  version: 2.2.0
130
150
  required_rubygems_version: !ruby/object:Gem::Requirement
131
151
  requirements:
132
- - - ">="
152
+ - - ">"
133
153
  - !ruby/object:Gem::Version
134
- version: '0'
154
+ version: 1.3.1
135
155
  requirements: []
136
156
  rubyforge_project:
137
157
  rubygems_version: 2.6.13