redminerb 0.1.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 +7 -0
- data/.gitignore +9 -0
- data/.rubocop.yml +9 -0
- data/.travis.yml +4 -0
- data/CHANGELOG.rdoc +4 -0
- data/CODE_OF_CONDUCT.md +13 -0
- data/Gemfile +5 -0
- data/LICENCE.txt +548 -0
- data/LICENSE.txt +517 -0
- data/README.md +63 -0
- data/Rakefile +15 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/exe/redminerb +4 -0
- data/lib/redminerb/cli/users.rb +15 -0
- data/lib/redminerb/cli.rb +24 -0
- data/lib/redminerb/client.rb +44 -0
- data/lib/redminerb/config.rb +24 -0
- data/lib/redminerb/version.rb +4 -0
- data/lib/redminerb.rb +49 -0
- data/redminerb.gemspec +42 -0
- metadata +178 -0
@@ -0,0 +1,44 @@
|
|
1
|
+
# Copyright (c) The Cocktail Experience S.L. (2015)
|
2
|
+
require 'faraday'
|
3
|
+
require 'json'
|
4
|
+
require 'ostruct'
|
5
|
+
|
6
|
+
module Redminerb
|
7
|
+
# HTTP client to communicate w/ the Redmine server.
|
8
|
+
class Client
|
9
|
+
attr_reader :connection
|
10
|
+
|
11
|
+
def initialize(cfg)
|
12
|
+
@connection = Faraday.new(url: cfg.url) do |f|
|
13
|
+
f.adapter Faraday.default_adapter
|
14
|
+
end
|
15
|
+
@connection.basic_auth(cfg.api_key, cfg.api_key)
|
16
|
+
end
|
17
|
+
|
18
|
+
# Get the users of our Redmine as OpenStruct objects.
|
19
|
+
#
|
20
|
+
# Example:
|
21
|
+
# Redminerb.init!
|
22
|
+
# Redminerb.client.users.each do |user|
|
23
|
+
# puts user.firstname
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
# See lib/reminerb/cli/user.rb code to see other example/s.
|
27
|
+
|
28
|
+
def users
|
29
|
+
get_json('/users.json')['users'].map do |user|
|
30
|
+
OpenStruct.new user
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
# Requests the path that receives as param and parses the body of the
|
37
|
+
# response received as JSON.
|
38
|
+
def get_json(path)
|
39
|
+
Redminerb.init_required!
|
40
|
+
JSON.parse(@connection.get(path).body)
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# Copyright 2015 The Cocktail Experience, S.L.
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
module Redminerb
|
5
|
+
# Read user's config from ~/.redminerb.yml
|
6
|
+
class Config
|
7
|
+
def initialize
|
8
|
+
YAML.load_file(File.join(ENV['HOME'], '.redminerb.yml')).tap do |yaml|
|
9
|
+
@url = yaml['url']
|
10
|
+
@api_key = yaml['api_key']
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def url
|
15
|
+
Redminerb.init_required!
|
16
|
+
@url
|
17
|
+
end
|
18
|
+
|
19
|
+
def api_key
|
20
|
+
Redminerb.init_required!
|
21
|
+
@api_key
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/redminerb.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# Copyright (c) The Cocktail Experience S.L. (2015)
|
2
|
+
require_relative 'redminerb/version'
|
3
|
+
require_relative 'redminerb/config'
|
4
|
+
require_relative 'redminerb/client'
|
5
|
+
require_relative 'redminerb/cli'
|
6
|
+
|
7
|
+
# Main module
|
8
|
+
module Redminerb
|
9
|
+
class UninitializedError < StandardError; end
|
10
|
+
|
11
|
+
module_function
|
12
|
+
|
13
|
+
@initialized = false
|
14
|
+
|
15
|
+
# Module initialization needed before doing anything. It looks ~/.redminerb.yml
|
16
|
+
# to get the authentication info to connect with the Redmine REST API.
|
17
|
+
#
|
18
|
+
# Example:
|
19
|
+
# >> Reminerb.init!
|
20
|
+
# => true
|
21
|
+
def init!
|
22
|
+
@initialized = true
|
23
|
+
@config = Redminerb::Config.new
|
24
|
+
@client = Redminerb::Client.new(@config)
|
25
|
+
end
|
26
|
+
|
27
|
+
# NOTICE: method needed by the build. Clean the module for the next test.
|
28
|
+
def end!
|
29
|
+
@initialized = false
|
30
|
+
@config = nil
|
31
|
+
@client = nil
|
32
|
+
end
|
33
|
+
|
34
|
+
def initialized?
|
35
|
+
@initialized
|
36
|
+
end
|
37
|
+
|
38
|
+
def init_required!
|
39
|
+
fail(UninitializedError, 'Call Redminerb.init! first') unless @initialized
|
40
|
+
end
|
41
|
+
|
42
|
+
def config
|
43
|
+
@config
|
44
|
+
end
|
45
|
+
|
46
|
+
def client
|
47
|
+
@client
|
48
|
+
end
|
49
|
+
end
|
data/redminerb.gemspec
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'redminerb/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'redminerb'
|
8
|
+
spec.version = Redminerb::VERSION
|
9
|
+
spec.authors = ['Fernando Garcia Samblas']
|
10
|
+
spec.email = ['fernando.garcia@the-cocktail.com']
|
11
|
+
spec.homepage = 'http://github.com/nando/redminerb'
|
12
|
+
|
13
|
+
spec.summary = 'Redminerb is a command-line Redmine client.'
|
14
|
+
spec.description = <<-DESC
|
15
|
+
Redminerb is a command-line tool to speak with a Redmine server using its REST API.
|
16
|
+
DESC
|
17
|
+
|
18
|
+
# Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
|
19
|
+
# delete this section to allow pushing this gem to any host.
|
20
|
+
if spec.respond_to?(:metadata)
|
21
|
+
# spec.metadata['allowed_push_host'] = 'TODO: Set to http://gems.the-cocktail.com :)'
|
22
|
+
else
|
23
|
+
fail 'RubyGems 2.0 or newer is required to protect against public gem pushes.'
|
24
|
+
end
|
25
|
+
|
26
|
+
spec.bindir = 'exe'
|
27
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
28
|
+
f.match(%r{^(test|spec|features)/})
|
29
|
+
end
|
30
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
31
|
+
spec.require_paths = ['lib']
|
32
|
+
|
33
|
+
spec.add_dependency 'thor'
|
34
|
+
spec.add_dependency 'colorize'
|
35
|
+
spec.add_dependency 'faraday'
|
36
|
+
|
37
|
+
spec.add_development_dependency 'bundler', '~> 1.10'
|
38
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
39
|
+
spec.add_development_dependency 'minitest'
|
40
|
+
spec.add_development_dependency 'rubocop'
|
41
|
+
spec.add_development_dependency 'pry'
|
42
|
+
end
|
metadata
ADDED
@@ -0,0 +1,178 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: redminerb
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Fernando Garcia Samblas
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-09-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: thor
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: colorize
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: faraday
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: bundler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.10'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.10'
|
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'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: minitest
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rubocop
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: pry
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
description: |2
|
126
|
+
Redminerb is a command-line tool to speak with a Redmine server using its REST API.
|
127
|
+
email:
|
128
|
+
- fernando.garcia@the-cocktail.com
|
129
|
+
executables:
|
130
|
+
- redminerb
|
131
|
+
extensions: []
|
132
|
+
extra_rdoc_files: []
|
133
|
+
files:
|
134
|
+
- ".gitignore"
|
135
|
+
- ".rubocop.yml"
|
136
|
+
- ".travis.yml"
|
137
|
+
- CHANGELOG.rdoc
|
138
|
+
- CODE_OF_CONDUCT.md
|
139
|
+
- Gemfile
|
140
|
+
- LICENCE.txt
|
141
|
+
- LICENSE.txt
|
142
|
+
- README.md
|
143
|
+
- Rakefile
|
144
|
+
- bin/console
|
145
|
+
- bin/setup
|
146
|
+
- exe/redminerb
|
147
|
+
- lib/redminerb.rb
|
148
|
+
- lib/redminerb/cli.rb
|
149
|
+
- lib/redminerb/cli/users.rb
|
150
|
+
- lib/redminerb/client.rb
|
151
|
+
- lib/redminerb/config.rb
|
152
|
+
- lib/redminerb/version.rb
|
153
|
+
- redminerb.gemspec
|
154
|
+
homepage: http://github.com/nando/redminerb
|
155
|
+
licenses: []
|
156
|
+
metadata: {}
|
157
|
+
post_install_message:
|
158
|
+
rdoc_options: []
|
159
|
+
require_paths:
|
160
|
+
- lib
|
161
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
162
|
+
requirements:
|
163
|
+
- - ">="
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '0'
|
166
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
167
|
+
requirements:
|
168
|
+
- - ">="
|
169
|
+
- !ruby/object:Gem::Version
|
170
|
+
version: '0'
|
171
|
+
requirements: []
|
172
|
+
rubyforge_project:
|
173
|
+
rubygems_version: 2.4.5
|
174
|
+
signing_key:
|
175
|
+
specification_version: 4
|
176
|
+
summary: Redminerb is a command-line Redmine client.
|
177
|
+
test_files: []
|
178
|
+
has_rdoc:
|