redmine-per_user_status 0.0.2

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 237f6295d21bc48cac6eb8b2e3c705907a0e2b6a
4
+ data.tar.gz: aa97ea8027717538f437b7d6437656ed022e6f35
5
+ SHA512:
6
+ metadata.gz: 5b67ac46e412c2d1be344ebcc98a14f5c2c83e5d14cefea6fbc342f6f60b8834b095d6c4aea40b9e59dde01366c288767948dd775c221e5ac8a2b478502ef5f2
7
+ data.tar.gz: ecd92717ee48d4df2b39187dc8a65d4f95b76e168588d445b08f4c4cd6f249fe6722ce1ed78c2aec9afd1f316e0f19d63b2f69bac752c287d7273ef4532ef306
@@ -0,0 +1,4 @@
1
+ Gemfile.lock
2
+ pkg
3
+ .yardoc
4
+ doc
@@ -0,0 +1,12 @@
1
+ StringLiterals:
2
+ EnforcedStyle: "double_quotes"
3
+
4
+ Style/FileName:
5
+ Enabled: false
6
+
7
+ Documentation:
8
+ Enabled: false
9
+
10
+ Lint/HandleExceptions:
11
+ Exclude:
12
+ - rakelib/rubocop.rake
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in candy_check.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Jonas Thiel
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,75 @@
1
+ [github]: https://github.com/neopoly/redmine-per_user_status
2
+ [doc]: http://rubydoc.info/github/neopoly/redmine-per_user_status/master/file/README.md
3
+ [gem]: https://rubygems.org/gems/redmine-per_user_status
4
+ [gem-badge]: https://img.shields.io/gem/v/redmine-per_user_status.svg
5
+ [inchpages]: https://inch-ci.org/github/neopoly/redmine-per_user_status
6
+ [inchpages-badge]: https://inch-ci.org/github/neopoly/redmine-per_user_status.svg?branch=master&style=flat
7
+
8
+ # redmine-per_user_status
9
+
10
+ [![Gem Version][gem-badge]][gem]
11
+ [![Inline docs][inchpages-badge]][inchpages]
12
+
13
+ [Gem][gem] |
14
+ [Source][github] |
15
+ [Documentation][doc]
16
+
17
+
18
+ Allows users to set a custom status which will be displayed next to their names when choosing as assignee.
19
+
20
+ ## Installation
21
+
22
+ Ensure you have a `Gemfile.local` file in your Redmine installation. Add to your `Gemfile.local`:
23
+
24
+ ```ruby
25
+ gem "redmine-per_user_status"
26
+ ```
27
+
28
+ And then execute:
29
+
30
+ ```
31
+ $ bundle
32
+ ```
33
+
34
+ This plugin ships with a migration. To update the database run:
35
+
36
+ ```
37
+ $ rake redmine:plugins:migrate
38
+ ```
39
+
40
+ Restart the Redmine application
41
+
42
+ ## Usage
43
+
44
+ 1. Install the gem and require the gem
45
+ 2. Switch to "My account" and set a custom status (Screenshot 1)
46
+ 3. Or change a user's status using the administration panel
47
+ 4. The custom user status will be displayed next to the full names
48
+
49
+ **Screenshot: Status next to assignee**
50
+
51
+ ![Screenshot Issue](https://neopoly.github.io/redmine-per_user_status/images/screenshot1.png)
52
+
53
+ **Screenshot: My account**
54
+
55
+ ![Screenshot MyAccount](https://neopoly.github.io/redmine-per_user_status/images/screenshot2.png)
56
+
57
+ **Screenshot: Administration**
58
+
59
+ ![Screenshot Administration](https://neopoly.github.io/redmine-per_user_status/images/screenshot3.png)
60
+
61
+ ## Testing
62
+
63
+ No automatic tests, sir! But this Redmine plugin is used in production.
64
+
65
+ ## TODO
66
+
67
+ * Find a way to test this Redmine plugin
68
+
69
+ ## Contributing
70
+
71
+ 1. Fork it ( https://github.com/neopoly/redmine-per_user_status/fork )
72
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
73
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
74
+ 4. Push to the branch (`git push origin my-new-feature`)
75
+ 5. Create a new Pull Request
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env rake
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rubocop/rake_task"
5
+
6
+ task default: [:rubocop]
@@ -0,0 +1,3 @@
1
+ #user_custom_status {
2
+ width: 90%;
3
+ }
@@ -0,0 +1,3 @@
1
+ en:
2
+ per_user_status_form_custom_status: "Custom status"
3
+ per_user_status_form_hint: "E.g. 'Vacation 2015-03-23'"
@@ -0,0 +1,9 @@
1
+ class AddCustomStatusToUsers < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :users, :custom_status, :string
4
+ end
5
+
6
+ def self.down
7
+ remove_column :users, :custom_status
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ require "per_user_status/redmine_plugin"
2
+
3
+ module PerUserStatus
4
+ # Simple engine to support the Redmine plugin
5
+ class Engine < ::Rails::Engine
6
+ config.to_prepare do
7
+ RedminePlugin.new
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,68 @@
1
+ module PerUserStatus
2
+ # Add custom CSS file to layout and includes an additional input field into
3
+ # the account settings and the user's administration pages
4
+ class Hooks < Redmine::Hook::ViewListener
5
+ # Inject stylesheet tags
6
+ # @param _context [Hash] ignored
7
+ def view_layouts_base_html_head(_context)
8
+ stylesheet_link_tag "per_user_status", plugin: "per_user_status"
9
+ end
10
+
11
+ # Inject input field into "My account" form
12
+ # @param context [Hash] hook context
13
+ def view_my_account(context)
14
+ extend_form(context)
15
+ end
16
+
17
+ # Inject input field into "Edit user" form
18
+ # @param context [Hash] hook context
19
+ def view_users_form(context)
20
+ extend_form(context)
21
+ end
22
+
23
+ private
24
+
25
+ def extend_form(context)
26
+ view_context = context[:controller].view_context
27
+ form = context[:form]
28
+ FormExtender.new(view_context, form).to_html
29
+ end
30
+
31
+ # @private
32
+ class FormExtender
33
+ attr_reader :view_context, :f
34
+
35
+ def initialize(view_context, f)
36
+ @view_context = view_context
37
+ @f = f
38
+ end
39
+
40
+ def to_html
41
+ content_tag(:p) do
42
+ input + hint
43
+ end
44
+ end
45
+
46
+ private
47
+
48
+ def hint
49
+ content_tag :span, class: "hint" do
50
+ l(:per_user_status_form_hint)
51
+ end
52
+ end
53
+
54
+ def input
55
+ label = l(:per_user_status_form_custom_status)
56
+ f.text_field :custom_status, label: label
57
+ end
58
+
59
+ def content_tag(*args, &block)
60
+ view_context.content_tag(*args, &block)
61
+ end
62
+
63
+ def l(*args)
64
+ view_context.l(*args)
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,13 @@
1
+ module PerUserStatus
2
+ # Shared plugin description
3
+ module Infos
4
+ NAME = "redmine-per_user_status"
5
+ DESCRIPTION = "Allows users to set a custom status which will be " \
6
+ "displayed next to their names when choosing as assignee"
7
+ LICENSE = "MIT"
8
+ URL = "https://github.com/neopoly/redmine-per_user_status"
9
+ AUTHORS = {
10
+ "Jonas Thiel" => "jt@neopoly.de"
11
+ }.freeze
12
+ end
13
+ end
@@ -0,0 +1,17 @@
1
+ require "per_user_status/patches/user_patch"
2
+
3
+ module PerUserStatus
4
+ # This module holds all patches of a default Redmine application
5
+ module Patches
6
+ # Apply all patches
7
+ def self.apply!
8
+ apply_to(::User, UserPatch)
9
+ end
10
+
11
+ private
12
+
13
+ def self.apply_to(target, mod)
14
+ target.send(:include, mod)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,26 @@
1
+ module PerUserStatus
2
+ module Patches
3
+ # Patches the User#name method to allow injecting the
4
+ # current user status
5
+ module UserPatch
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ alias_method_chain :name, :custom_status
10
+ safe_attributes :custom_status
11
+ end
12
+
13
+ # Appends the custom user status to the base user name
14
+ # @param formatter The formatter to use for the name
15
+ # @see User#name
16
+ def name_with_custom_status(formatter = nil)
17
+ default = name_without_custom_status(formatter)
18
+ if custom_status.present?
19
+ "#{default} (#{custom_status})"
20
+ else
21
+ default
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,53 @@
1
+ require "per_user_status/patches"
2
+
3
+ module PerUserStatus
4
+ # Registers this gems a Redmine plugin and applies the needed patches
5
+ class RedminePlugin
6
+ include PerUserStatus::Infos
7
+
8
+ def initialize
9
+ register!
10
+ patch_migration_directory!
11
+ boot!
12
+ mirror_assets!
13
+ end
14
+
15
+ # As this plugin is realized as a gem Redmine won't detect the
16
+ # migration automatically.
17
+ # @return [String] Absolute path to "db/migrate"
18
+ def self.migration_directory
19
+ File.expand_path("../../../db/migrate", __FILE__)
20
+ end
21
+
22
+ private
23
+
24
+ def register!
25
+ @plugin = Redmine::Plugin.register :per_user_status do
26
+ name NAME
27
+ author AUTHORS.keys.join(", ")
28
+ description DESCRIPTION
29
+ version VERSION
30
+ url URL
31
+ author_url URL
32
+ directory Engine.root
33
+ end
34
+ end
35
+
36
+ def boot!
37
+ require "per_user_status/hooks"
38
+ Patches.apply!
39
+ end
40
+
41
+ def patch_migration_directory!
42
+ @plugin.instance_eval do
43
+ def migration_directory
44
+ ::PerUserStatus::RedminePlugin.migration_directory
45
+ end
46
+ end
47
+ end
48
+
49
+ def mirror_assets!
50
+ @plugin.mirror_assets
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,3 @@
1
+ module PerUserStatus
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,7 @@
1
+ require "per_user_status/version"
2
+ require "per_user_status/infos"
3
+ require "per_user_status/engine"
4
+
5
+ # Redmine plugin to support a custom status per user
6
+ module PerUserStatus
7
+ end
@@ -0,0 +1,18 @@
1
+ begin
2
+ require "rubocop/rake_task"
3
+
4
+ Rake::Task[:default].enhance [:rubocop]
5
+
6
+ RuboCop::RakeTask.new do |task|
7
+ task.options << "--display-cop-names"
8
+ end
9
+
10
+ namespace :rubocop do
11
+ desc "Generate a configuration file acting as a TODO list."
12
+ task :auto_gen_config do
13
+ exec "bundle exec rubocop --auto-gen-config"
14
+ end
15
+ end
16
+
17
+ rescue LoadError
18
+ end
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "per_user_status/version"
5
+ require "per_user_status/infos"
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = "redmine-per_user_status"
9
+ spec.version = PerUserStatus::VERSION
10
+ spec.authors = PerUserStatus::Infos::AUTHORS.keys
11
+ spec.email = PerUserStatus::Infos::AUTHORS.values
12
+ spec.summary = PerUserStatus::Infos::DESCRIPTION
13
+ spec.description = PerUserStatus::Infos::DESCRIPTION
14
+ spec.homepage = PerUserStatus::Infos::URL
15
+ spec.license = PerUserStatus::Infos::LICENSE
16
+
17
+ spec.files = `git ls-files -z`.split("\x0")
18
+ spec.executables = spec.files.grep(%r{^bin\/}) { |f| File.basename(f) }
19
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)\/})
20
+ spec.require_paths = ["lib"]
21
+
22
+ spec.add_dependency "rails", "~> 4.2.0"
23
+
24
+ spec.add_development_dependency "bundler", "~> 1.7"
25
+ spec.add_development_dependency "rake", "~> 10.0"
26
+ spec.add_development_dependency "inch"
27
+ spec.add_development_dependency "rubocop"
28
+ end
metadata ADDED
@@ -0,0 +1,136 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: redmine-per_user_status
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Jonas Thiel
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-05-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 4.2.0
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.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.7'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.7'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: inch
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: Allows users to set a custom status which will be displayed next to their
84
+ names when choosing as assignee
85
+ email:
86
+ - jt@neopoly.de
87
+ executables: []
88
+ extensions: []
89
+ extra_rdoc_files: []
90
+ files:
91
+ - ".gitignore"
92
+ - ".rubocop.yml"
93
+ - Gemfile
94
+ - LICENSE.txt
95
+ - README.md
96
+ - Rakefile
97
+ - assets/stylesheets/per_user_status.css
98
+ - config/locales/en.yml
99
+ - db/migrate/20150505162200_add_custom_status_to_users.rb
100
+ - lib/per_user_status/engine.rb
101
+ - lib/per_user_status/hooks.rb
102
+ - lib/per_user_status/infos.rb
103
+ - lib/per_user_status/patches.rb
104
+ - lib/per_user_status/patches/user_patch.rb
105
+ - lib/per_user_status/redmine_plugin.rb
106
+ - lib/per_user_status/version.rb
107
+ - lib/redmine-per_user_status.rb
108
+ - rakelib/rubocop.rake
109
+ - redmine-per_user_status.gemspec
110
+ homepage: https://github.com/neopoly/redmine-per_user_status
111
+ licenses:
112
+ - MIT
113
+ metadata: {}
114
+ post_install_message:
115
+ rdoc_options: []
116
+ require_paths:
117
+ - lib
118
+ required_ruby_version: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ required_rubygems_version: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ requirements: []
129
+ rubyforge_project:
130
+ rubygems_version: 2.2.2
131
+ signing_key:
132
+ specification_version: 4
133
+ summary: Allows users to set a custom status which will be displayed next to their
134
+ names when choosing as assignee
135
+ test_files: []
136
+ has_rdoc: