komponent 1.1.4 → 2.0.0.pre.1

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: 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