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.
@@ -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: