komponent 1.1.3 → 1.1.4

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: 83a583b1f8468d26403f19dfdd6113e3dd0f10be
4
- data.tar.gz: f2a0d993bdc7349b0b7c1370df7758b618664f09
3
+ metadata.gz: 2c0aadad91b23804da8724b26704c6bb481f2869
4
+ data.tar.gz: 5ef9c5fb02bf7f6f7e53c2ea0397f1724dfa6116
5
5
  SHA512:
6
- metadata.gz: 7d07b311a6fc9fd55ce0bfa06f08991b48498db7361bfa59da47e90b0a49c098378b965049fa5be51f622e000f41b9238b280eb0b0ae7673da37a47999e9d38e
7
- data.tar.gz: fe2e28f5cc9ff5f55c591e0d0680c8d8741e3892d68c47c9307f05dde502471c47442831e7c7801767e10abb4d511b87ad9959255bd6c0e277b4ced1af180da4
6
+ metadata.gz: ade22af3b7e1b13484f8e0d3b35648e6c35bbbd1393d71c399b25648655a05524dd2fc5d36c40beb89177cb9b2634e093ba596f200b9b0664f6cf7571618117a
7
+ data.tar.gz: 3a8d50d8c461372f1d8f3edde97651cd352213d48fb6d40c26518d3a2041150c7593112e3c07a4b76b0c4329a01eb7aa0d74bcf8daf3b6edde88e557239b40ad
data/.gitignore CHANGED
@@ -7,3 +7,6 @@
7
7
  /pkg/
8
8
  /spec/reports/
9
9
  /tmp/
10
+
11
+ /fixtures/my_app/tmp
12
+ /fixtures/my_app/log
@@ -1,5 +1,5 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.4
2
+ TargetRubyVersion: 2.2
3
3
  DisabledByDefault: true
4
4
  Exclude:
5
5
  - 'node_modules/**/*'
@@ -33,6 +33,10 @@ Style/MethodCallWithoutArgsParentheses:
33
33
  Style/MethodDefParentheses:
34
34
  Enabled: true
35
35
 
36
+ Style/FrozenStringLiteralComment:
37
+ Enabled: true
38
+ EnforcedStyle: always
39
+
36
40
  Naming/ConstantName:
37
41
  Enabled: true
38
42
 
@@ -1,7 +1,33 @@
1
- sudo: false
2
1
  language: ruby
2
+ sudo: false
3
+
4
+ before_install:
5
+ - gem update --system
6
+
3
7
  rvm:
8
+ - 2.2
9
+ - 2.3
4
10
  - 2.4
11
+ - 2.5
12
+ - ruby-head
13
+
14
+ gemfile:
15
+ - Gemfile-rails.4.2.x
16
+ - Gemfile-rails.5.0.x
17
+ - Gemfile-rails.5.1.x
18
+ - Gemfile-rails.5.2.x
19
+
20
+ cache:
21
+ bundler: true
22
+ yarn: true
23
+
24
+ install:
25
+ - bundle install
26
+ - nvm install node
27
+ - node -v
28
+ - npm i -g yarn
29
+ - yarn
30
+
5
31
  script:
6
32
  - bundle exec rubocop
7
- - bundle exec cucumber
33
+ - bundle exec rake test
@@ -2,6 +2,18 @@
2
2
 
3
3
  ## Upcoming release
4
4
 
5
+ ## v1.1.4 (2018-03-05)
6
+
7
+ **Enhancements:**
8
+
9
+ - Added `frozen_string_literal` option to optimize performance
10
+ - Removed useless `autoload_paths` config definition (it was not taken into account)
11
+ - Install generator can be ran several times in order to enable features
12
+ - Autoloading is now appended to `config/application.rb` when you run `rails g komponent:install`
13
+ - Make all locals passed to `component` helper available through `properties` helper method
14
+
15
+ ## v1.1.3 (2018-02-22)
16
+
5
17
  **Enhancements:**
6
18
  - Custom destroy for the component generator: you can now safely run `rails d component button`
7
19
 
data/Gemfile CHANGED
@@ -1,6 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source "https://rubygems.org"
2
4
 
3
5
  git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
6
 
5
7
  # Specify your gem's dependencies in komponent.gemspec
6
8
  gemspec
9
+
10
+ gem "rails"
11
+ gem "rake", ">= 11.1"
12
+ gem "rubocop", require: false
13
+
14
+ group :test do
15
+ gem "aruba"
16
+ gem "cucumber"
17
+ end
data/README.md CHANGED
@@ -93,7 +93,7 @@ Check [Webpacker documentation](https://github.com/rails/webpacker) for further
93
93
 
94
94
  ### Passing variables
95
95
 
96
- You can pass `locals` to the helper. They are accessible within the component partial, as instance variables.
96
+ You can pass `locals` to the helper. They are accessible within the component partial, as instance variables. Additionally, the entire `locals` hash is made available through a `properties` helper method.
97
97
 
98
98
  ```slim
99
99
  / app/views/pages/home.html.slim
data/Rakefile CHANGED
@@ -1,2 +1,25 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "bundler/gem_tasks"
2
- task :default => :spec
4
+ require "rake/testtask"
5
+ require 'cucumber'
6
+ require 'cucumber/rake/task'
7
+
8
+ namespace :test do
9
+ task all: [:unit, :cucumber]
10
+
11
+ Rake::TestTask.new(:unit) do |t|
12
+ t.libs << "test"
13
+ t.libs << "lib"
14
+ t.test_files = FileList["test/**/*_test.rb"]
15
+ t.verbose = true
16
+ end
17
+
18
+ Cucumber::Rake::Task.new(:cucumber) do |t|
19
+ t.cucumber_opts = "--format pretty"
20
+ end
21
+ end
22
+
23
+ task test: 'test:all'
24
+
25
+ task default: :test
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require "bundler/setup"
4
5
  require "komponent"
@@ -0,0 +1,8 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem "komponent", path: ".."
4
+
5
+ gem "rails", "~> 4.2"
6
+ gem "rake", ">= 11.1"
7
+ gem "rubocop", require: false
8
+ gem "webpacker"
@@ -0,0 +1,8 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem "komponent", path: ".."
4
+
5
+ gem "rails", "~> 5.0"
6
+ gem "rake", ">= 11.1"
7
+ gem "rubocop", require: false
8
+ gem "webpacker"
@@ -0,0 +1,8 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem "komponent", path: ".."
4
+
5
+ gem "rails", "~> 5.1"
6
+ gem "rake", ">= 11.1"
7
+ gem "rubocop", require: false
8
+ gem "webpacker"
@@ -0,0 +1,8 @@
1
+ source "https://rubygems.org"
2
+
3
+ gem "komponent", path: ".."
4
+
5
+ gem "rails", "~> 5.2"
6
+ gem "rake", ">= 11.1"
7
+ gem "rubocop", require: false
8
+ gem "webpacker"
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  lib = File.expand_path("../lib", __FILE__)
2
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
5
  require "komponent/version"
@@ -20,12 +22,11 @@ Gem::Specification.new do |spec|
20
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
23
  spec.require_paths = ["lib"]
22
24
 
23
- spec.add_development_dependency "aruba"
24
- spec.add_development_dependency "bundler", "~> 1.15"
25
- spec.add_development_dependency "cucumber"
26
- spec.add_development_dependency "rails", ">= 5.0"
27
- spec.add_development_dependency "rake", "~> 10.0"
28
- spec.add_development_dependency "rubocop", '~> 0.52.1'
25
+ spec.required_ruby_version = '>= 2.2.0'
29
26
 
30
- spec.add_runtime_dependency "webpacker", ">= 3.0.0"
27
+ spec.add_dependency "activesupport", ">= 4.2"
28
+ spec.add_dependency "railties", ">= 4.2"
29
+ spec.add_dependency "webpacker", ">= 3.0.0"
30
+
31
+ spec.add_development_dependency "bundler", "~> 1.15"
31
32
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class ComponentGenerator < Rails::Generators::NamedBase
2
4
  source_root File.expand_path('../templates', __FILE__)
3
5
 
@@ -177,7 +179,7 @@ class ComponentGenerator < Rails::Generators::NamedBase
177
179
 
178
180
  return if lines.empty?
179
181
 
180
- lines = lines.sort
182
+ lines = lines.uniq.sort
181
183
 
182
184
  File.open(path, "w") do |f|
183
185
  lines.each do |line|
@@ -1,8 +1,10 @@
1
- import "./<%= name_with_namespace %>.<%= stylesheet_engine %>";
2
1
  <%- if stimulus? -%>
3
2
  import application from "stimulus_application";
4
3
  import { definitionsFromContext } from "stimulus/webpack-helpers";
4
+ import "./<%= name_with_namespace %>.<%= stylesheet_engine %>";
5
5
 
6
6
  const context = require.context('./', true, /_controller\.js$/);
7
7
  application.load(definitionsFromContext(context));
8
+ <%- else -%>
9
+ import "./<%= name_with_namespace %>.<%= stylesheet_engine %>";
8
10
  <%- end -%>
@@ -1,15 +1,21 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Komponent
2
4
  module Generators
3
5
  class InstallGenerator < Rails::Generators::Base
4
6
  class_option :stimulus, type: :boolean, default: false
5
7
 
6
8
  def check_webpacker_dependency
9
+ return if komponent_already_installed?
10
+
7
11
  unless File.exist?(webpacker_configuration_file) and File.directory?(webpacker_default_structure)
8
12
  raise Thor::Error, dependencies_not_met_error_message
9
13
  end
10
14
  end
11
15
 
12
16
  def create_root_directory
17
+ return if File.directory?(komponent_root_directory)
18
+
13
19
  empty_directory(komponent_root_directory)
14
20
  end
15
21
 
@@ -18,18 +24,29 @@ module Komponent
18
24
  end
19
25
 
20
26
  def move_webpacker_default_structure
27
+ return if File.directory?(komponent_root_directory)
28
+
21
29
  run("mv #{webpacker_default_structure}/* #{komponent_root_directory}")
22
30
  end
23
31
 
24
32
  def create_komponent_default_structure
33
+ return if File.exist?(components_directory.join("index.js"))
34
+
25
35
  empty_directory(components_directory)
26
36
  create_file(components_directory.join("index.js"))
27
37
  end
28
38
 
29
39
  def create_stimulus_file
40
+ return if File.exist?(stimulus_application_path)
41
+
30
42
  create_file(stimulus_application_path, stimulus? ? stimulus_application_template : "")
31
43
  end
32
44
 
45
+ def append_to_application_configuration
46
+ application "config.autoload_paths << config.root.join('#{relative_path_from_rails}/components')"
47
+ application "config.i18n.load_path += Dir[config.root.join('#{relative_path_from_rails}/components/**/*.yml')]"
48
+ end
49
+
33
50
  def append_to_application_pack
34
51
  append_to_file(application_pack_path, "import 'components';")
35
52
  end
@@ -45,11 +62,13 @@ module Komponent
45
62
  protected
46
63
 
47
64
  def stimulus_application_template
48
- <<~HEREDOC
49
- import { Application } from "stimulus";
50
- const application = Application.start();
51
- export default application;
52
- HEREDOC
65
+ <<-JAVASCRIPT
66
+ import { Application } from "stimulus";
67
+
68
+ const application = Application.start();
69
+
70
+ export default application;
71
+ JAVASCRIPT
53
72
  end
54
73
 
55
74
  def stimulus_application_path
@@ -76,6 +95,10 @@ module Komponent
76
95
  Rails.root.join("app", "javascript")
77
96
  end
78
97
 
98
+ def komponent_already_installed?
99
+ File.directory?(relative_path_from_rails)
100
+ end
101
+
79
102
  def dependencies_not_met_error_message
80
103
  "Seems you don't have webpacker installed in your project. Please install webpacker, and follow instructions at https://github.com/rails/webpacker"
81
104
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "komponent/version"
2
4
 
3
5
  module Komponent
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ComponentHelper
2
4
  def property(name, options = {})
3
5
  @properties[name] = options
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Komponent
2
4
  class ComponentPathResolver
3
5
  def resolve(component_name)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Komponent
2
4
  module Translation
3
5
  def translate(key, options = {})
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module KomponentHelper
2
4
  def component(component, locals = {}, &block)
3
5
  component_path = Komponent::ComponentPathResolver.new.resolve(component)
@@ -40,6 +42,8 @@ module KomponentHelper
40
42
  instance_variable_set(:"@#{name}", locals[name])
41
43
  end
42
44
 
45
+ define_singleton_method(:properties) { locals }
46
+
43
47
  instance_variable_set(:"@block_given_to_component", block)
44
48
  end
45
49
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'webpacker'
2
4
  require 'komponent/core/component_helper'
3
5
  require 'komponent/core/translation'
@@ -29,14 +31,6 @@ module Komponent
29
31
  app.config.komponent.root
30
32
  )
31
33
  end
32
-
33
- ActiveSupport.on_load :i18n do
34
- I18n.load_path.concat(
35
- Dir["#{app.config.komponent.root}/components/**/*.yml"]
36
- )
37
- end
38
-
39
- app.config.autoload_paths += [app.config.komponent.root]
40
34
  end
41
35
  end
42
36
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Komponent
2
- VERSION = "1.1.3"
4
+ VERSION = "1.1.4"
3
5
  end
metadata CHANGED
@@ -1,113 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: komponent
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 1.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ouvrages
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-02-22 00:00:00.000000000 Z
11
+ date: 2018-03-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: aruba
14
+ name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
19
+ version: '4.2'
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'
27
- - !ruby/object:Gem::Dependency
28
- name: bundler
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '1.15'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '1.15'
26
+ version: '4.2'
41
27
  - !ruby/object:Gem::Dependency
42
- name: cucumber
28
+ name: railties
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
31
  - - ">="
46
32
  - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
33
+ version: '4.2'
34
+ type: :runtime
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
38
  - - ">="
53
39
  - !ruby/object:Gem::Version
54
- version: '0'
40
+ version: '4.2'
55
41
  - !ruby/object:Gem::Dependency
56
- name: rails
42
+ name: webpacker
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
45
  - - ">="
60
46
  - !ruby/object:Gem::Version
61
- version: '5.0'
62
- type: :development
47
+ version: 3.0.0
48
+ type: :runtime
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
52
  - - ">="
67
53
  - !ruby/object:Gem::Version
68
- version: '5.0'
69
- - !ruby/object:Gem::Dependency
70
- name: rake
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '10.0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '10.0'
54
+ version: 3.0.0
83
55
  - !ruby/object:Gem::Dependency
84
- name: rubocop
56
+ name: bundler
85
57
  requirement: !ruby/object:Gem::Requirement
86
58
  requirements:
87
59
  - - "~>"
88
60
  - !ruby/object:Gem::Version
89
- version: 0.52.1
61
+ version: '1.15'
90
62
  type: :development
91
63
  prerelease: false
92
64
  version_requirements: !ruby/object:Gem::Requirement
93
65
  requirements:
94
66
  - - "~>"
95
67
  - !ruby/object:Gem::Version
96
- version: 0.52.1
97
- - !ruby/object:Gem::Dependency
98
- name: webpacker
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: 3.0.0
104
- type: :runtime
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: 3.0.0
68
+ version: '1.15'
111
69
  description: An opinionated way of organizing front-end code in Ruby on Rails, based
112
70
  on components
113
71
  email:
@@ -127,6 +85,10 @@ files:
127
85
  - Rakefile
128
86
  - bin/console
129
87
  - bin/setup
88
+ - gemfiles/Gemfile-rails.4.2.x
89
+ - gemfiles/Gemfile-rails.5.0.x
90
+ - gemfiles/Gemfile-rails.5.1.x
91
+ - gemfiles/Gemfile-rails.5.2.x
130
92
  - komponent.gemspec
131
93
  - lib/generators/component/USAGE
132
94
  - lib/generators/component/component_generator.rb
@@ -164,7 +126,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
164
126
  requirements:
165
127
  - - ">="
166
128
  - !ruby/object:Gem::Version
167
- version: '0'
129
+ version: 2.2.0
168
130
  required_rubygems_version: !ruby/object:Gem::Requirement
169
131
  requirements:
170
132
  - - ">="