trap 2.0 → 4.0

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
- SHA1:
3
- metadata.gz: 1d9c932c31ecce9f96dbb36a22ccc91d4462164b
4
- data.tar.gz: 1882e7b6bfb7fb0daff4bfbf1f213b7156d48345
2
+ SHA256:
3
+ metadata.gz: cf16945c4f212f6aef573445c4070d9e9c916250fcd25144fb1457e5608ce6e8
4
+ data.tar.gz: 9a7b52dcce3532f7bb0f4c7bb82a93e677ee67f93227071e01a127f3cbefe33a
5
5
  SHA512:
6
- metadata.gz: dffe666a921e2970f67a63892124eedba40089fe71e474f484acc91f1697e061f0e47c7e60129d4ed1139039dae095f111e10a058080585e3a1db47172650530
7
- data.tar.gz: f01b4e13fc51c051c6be787ef56e5d958f4e3223b5925a8422e9be56bbcf13aef7fca6faf33cae09fef2821ccd23a40c18ed220f7562d504d472fd2f96cf4ad5
6
+ metadata.gz: 88e6015b3fb23d6ea8cac7e240c48409139dd573ba8e4950428f1cc4a0898ffc8eed51524b31288773798b609eee697960c4dd999d50ec818a4ea097cfdcc768
7
+ data.tar.gz: 58d341852ea440da9f7af1b6d64cd32b3065f1ba0ed90b5883b50867a9b549e676a98793c42de01d226ca5c2ddbdb10286baecb83c640804916cc88e796b3efb
@@ -0,0 +1,19 @@
1
+ name: Ruby
2
+
3
+ on: [push]
4
+
5
+ jobs:
6
+ build:
7
+ runs-on: ubuntu-latest
8
+ steps:
9
+ - uses: actions/checkout@v1
10
+ - name: Set up Ruby
11
+ uses: actions/setup-ruby@v1
12
+ with:
13
+ ruby-versions: 2.6.5, 2.7.0, 2.5.7, 2.4.9
14
+ - name: Build and test with Rake
15
+ run: |
16
+ gem install bundler -v '1.17.2'
17
+ bundle install --jobs 4 --retry 3
18
+ bundle exec rspec
19
+ rubocop
data/.rubocop.yml ADDED
@@ -0,0 +1,14 @@
1
+ Documentation:
2
+ Enabled: false
3
+ Metrics/LineLength:
4
+ Max: 120
5
+ Metrics/BlockLength:
6
+ Enabled: false
7
+ Include:
8
+ - spec/
9
+ Metrics/AbcSize:
10
+ Max: 18
11
+ Layout/ArgumentAlignment:
12
+ EnforcedStyle: with_fixed_indentation
13
+ AllCops:
14
+ TargetRubyVersion: 2.7
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in trap.gemspec
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
- # Trap
1
+ # Trap [![Build Status](https://github.com/kalashnikovisme/trap/workflows/Ruby/badge.svg)](https://github.com/kalashnikovisme/trap/actions)
2
2
 
3
- Bootstrap helpers
3
+ Bootstrap helpers. Bootstrap 4.x compatible.
4
+
5
+ Use `trap 1.x` for Bootstrap 3.x compatible.
4
6
 
5
7
  ## Installation
6
8
 
@@ -28,7 +30,9 @@ module ApplicationHelper
28
30
  end
29
31
  ```
30
32
 
31
- List of methods you can use with Trap:
33
+ ## List of methods you can use with Trap
34
+
35
+ ### Menu items
32
36
 
33
37
  * menu_item
34
38
  Bootstrap navbar item
@@ -47,7 +51,25 @@ Using `menu_item` instead of
47
51
  </li>
48
52
  ```
49
53
 
50
- ## For Bootstrap
54
+ * model_menu_item
55
+ Bootstrap navbar item based on ActiveRecord
56
+
57
+ ```erb
58
+ <%= model_menu_item model:, route:, icon:, number:, pluralize: %>
59
+ ```
60
+
61
+ ### Dropdown
62
+
63
+ You can create dropdowns with something like this:
64
+
65
+ ```ruby
66
+ = dropdown t("admin.navbar.links.#{item.keys.first}") do
67
+ = dropdown_item text, link
68
+ = dropdown_divider
69
+ = dropdown_model_item model: model, route: ::Tramway::Admin::Engine.routes.url_helpers.singleton_path(model: model)
70
+ ```
71
+
72
+ ## For Bootstrap 3
51
73
 
52
74
  You should use `trap-1.x` versions to include Bootstrap 3. Contributing to `bootstrap-3` branch.
53
75
 
data/Rakefile CHANGED
@@ -1,2 +1,3 @@
1
- require "bundler/gem_tasks"
1
+ # frozen_string_literal: true
2
2
 
3
+ require 'bundler/gem_tasks'
data/bin/console CHANGED
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require "bundler/setup"
4
- require "trap"
4
+ require 'bundler/setup'
5
+ require 'trap'
5
6
 
6
7
  # You can add fixtures and/or initialization code here to make experimenting
7
8
  # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +11,5 @@ require "trap"
10
11
  # require "pry"
11
12
  # Pry.start
12
13
 
13
- require "irb"
14
+ require 'irb'
14
15
  IRB.start
@@ -1,18 +1,52 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module BootstrapHelper
2
4
  def menu_item(name = nil, path = '#', *args, &block)
3
5
  path = name || path if block_given?
4
6
  options = args.extract_options!
5
7
  options[:class] = [options[:class], 'nav-link'].join(' ')
6
- content_tag :li, class: "nav-item #{is_active?(path, options)}" do
7
- name, path = path, options if block_given?
8
+ content_tag :li, class: "nav-item #{active?(path, options)}" do
9
+ if block_given?
10
+ name = path
11
+ path = options
12
+ end
8
13
  link_to name, path, options, &block
9
14
  end
10
15
  end
11
16
 
17
+ def model_menu_item(model:, route:, icon: nil, number: nil, pluralize: nil)
18
+ title = model.is_a?(Class) ? (pluralize || model.model_name.human.pluralize(:ru)) : model
19
+ if icon
20
+ build_menu_item_with_icon route: route, icon: icon, number: number, title: title
21
+ else
22
+ menu_item title, route
23
+ end
24
+ end
25
+
26
+ def dropdown(text, icon = nil, &block)
27
+ content_tag :li, class: 'nav-item dropdown' do
28
+ build_a_tag_for_dropdown text: text, icon: icon, &block
29
+ end
30
+ end
31
+
32
+ def dropdown_item(text, link)
33
+ link_to(text, link, class: 'dropdown-item')
34
+ end
35
+
36
+ def dropdown_model_item(model:, route:, pluralize: nil)
37
+ title = pluralize || model.model_name.human.pluralize(:ru)
38
+ dropdown_item title, route
39
+ end
40
+
41
+ def dropdown_divider
42
+ content_tag(:div, class: 'dropdown-divider') do
43
+ end
44
+ end
45
+
12
46
  private
13
47
 
14
- def is_active?(path, options = {})
15
- :active if uri_state(path, options).in? [:active, :chosen]
48
+ def active?(path, options = {})
49
+ :active if uri_state(path, options).in? %i[active chosen]
16
50
  end
17
51
 
18
52
  def uri_state(uri, options = {})
@@ -23,16 +57,59 @@ module BootstrapHelper
23
57
  else
24
58
  request.path
25
59
  end
26
- if !options[:method].nil? || !options["data-method"].nil?
60
+ active_uri_state options: options, uri: uri, request_uri: request_uri, root_url: root_url, root: root
61
+ end
62
+
63
+ def build_menu_item_with_icon(route:, icon:, title:, number:)
64
+ menu_item route do
65
+ concat icon_element icon
66
+ concat ' '
67
+ concat title
68
+ if number && number != 0
69
+ concat ' '
70
+ concat(content_tag(:span, number.to_s, class: 'badge danger'))
71
+ end
72
+ end
73
+ end
74
+
75
+ def build_a_tag_for_dropdown(text:, icon:, &block)
76
+ concat(link_to('#', **dropdown_link_attributes(text)) do
77
+ if icon
78
+ concat content_tag :span, '', class: "glyphicon glyphicon-#{icon}"
79
+ concat ' '
80
+ end
81
+ concat text
82
+ end)
83
+ concat(content_tag(:div, class: 'dropdown-menu', aria: { labelledby: text }) do
84
+ yield(block)
85
+ end)
86
+ end
87
+
88
+ def dropdown_link_attributes(text)
89
+ {
90
+ class: 'nav-link dropdown-toggle',
91
+ id: text,
92
+ role: :button,
93
+ data: { 'bs-toggle': :dropdown },
94
+ aria: { expanded: false }
95
+ }
96
+ end
97
+
98
+ def active_uri_state(options:, uri:, request_uri:, root_url:, root:)
99
+ if uri_state_is_inactive?(options: options)
27
100
  :inactive
28
- elsif uri == request_uri || (options[:root] && (request_uri == '/') || (request_uri == root_url))
101
+ elsif uri_state_is_active?(request_uri: request_uri, options: options, root_url: root_url, uri: uri)
29
102
  :active
30
103
  else
31
- if request_uri.start_with?(uri) and not(root)
32
- :chosen
33
- else
34
- :inactive
35
- end
104
+ request_uri.start_with?(uri) && !root ? :chosen : :inactive
36
105
  end
37
106
  end
107
+
108
+ def uri_state_is_inactive?(options:)
109
+ !options[:method].nil? || !options['data-method'].nil?
110
+ end
111
+
112
+ def uri_state_is_active?(request_uri:, options:, root_url:, uri:)
113
+ uri == request_uri || (options[:root] && (request_uri == '/') || (request_uri == root_url))
114
+ end
38
115
  end
data/lib/trap/version.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Trap
2
- VERSION = '2.0'
4
+ VERSION = '4.0'
3
5
  end
data/lib/trap.rb CHANGED
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'trap/version'
2
4
  require 'trap/helpers/bootstrap_helper'
3
5
 
4
- ActionView::Base.send :include, BootstrapHelper
6
+ ActionView::Base.include BootstrapHelper
data/trap.gemspec CHANGED
@@ -1,5 +1,6 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'trap/version'
5
6
 
@@ -9,16 +10,17 @@ Gem::Specification.new do |spec|
9
10
  spec.authors = ['Pavel Kalashnikov']
10
11
  spec.email = ['kalashnikovisme@gmail.com']
11
12
 
12
- spec.summary = %q{Bootstrap helpers}
13
- spec.description = %q{Bootstrap helpers}
13
+ spec.summary = 'Bootstrap helpers'
14
+ spec.description = 'Bootstrap helpers'
14
15
  spec.homepage = 'https://github.com/kalashnikovisme/trap'
15
16
  spec.license = 'MIT'
16
17
 
17
18
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
19
  spec.bindir = 'exe'
19
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
- spec.require_paths = ['lib', 'app']
21
+ spec.require_paths = %w[lib app]
21
22
 
22
- spec.add_development_dependency 'bundler', '>= 1.8'
23
23
  spec.add_development_dependency 'rake', '>= 10.0'
24
+ spec.add_development_dependency 'rspec', '~> 3.0'
25
+ spec.add_development_dependency 'rubocop'
24
26
  end
metadata CHANGED
@@ -1,43 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trap
3
3
  version: !ruby/object:Gem::Version
4
- version: '2.0'
4
+ version: '4.0'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Kalashnikov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-12-05 00:00:00.000000000 Z
11
+ date: 2022-02-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.8'
19
+ version: '10.0'
20
20
  type: :development
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: '1.8'
26
+ version: '10.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubocop
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - ">="
32
46
  - !ruby/object:Gem::Version
33
- version: '10.0'
47
+ version: '0'
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
52
  - - ">="
39
53
  - !ruby/object:Gem::Version
40
- version: '10.0'
54
+ version: '0'
41
55
  description: Bootstrap helpers
42
56
  email:
43
57
  - kalashnikovisme@gmail.com
@@ -45,7 +59,9 @@ executables: []
45
59
  extensions: []
46
60
  extra_rdoc_files: []
47
61
  files:
62
+ - ".github/workflows/ruby.yml"
48
63
  - ".gitignore"
64
+ - ".rubocop.yml"
49
65
  - ".travis.yml"
50
66
  - CODE_OF_CONDUCT.md
51
67
  - Gemfile
@@ -78,8 +94,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
78
94
  - !ruby/object:Gem::Version
79
95
  version: '0'
80
96
  requirements: []
81
- rubyforge_project:
82
- rubygems_version: 2.6.11
97
+ rubygems_version: 3.0.3.1
83
98
  signing_key:
84
99
  specification_version: 4
85
100
  summary: Bootstrap helpers