redminerb 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
@@ -0,0 +1,4 @@
1
+ # Copyright (c) The Cocktail Experience S.L. (2015)
2
+ module Redminerb
3
+ VERSION = '0.1.0'
4
+ 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: