R3c 0.0.9 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d5fe51ccd80003667c2ad3dc0abadddab02b00b3
4
- data.tar.gz: 959e3978652765704fb4870e599602b52d5ff4c2
3
+ metadata.gz: 3683d6a35551f5d143d851387767f1b152ed4cca
4
+ data.tar.gz: 282f607810fa285b89cd49bd665d81507b67917b
5
5
  SHA512:
6
- metadata.gz: d178c2e801af962c6c294a03626236bf400c7355d7feca2cab6f8348c402c73c70825260600bf06ee030cd5a3df5b8d38fc4a0ff239695d96a0aa30636d2efa0
7
- data.tar.gz: 7ea9e1b6f36030f2e08218cbacc0606602608c0db9e6eaea5a720459311b81816a088c722bd66935c5130164b594f6b090f2e11f3c24e1dd757fadc339711c3f
6
+ metadata.gz: a05fab992150850c05fd02acb0bd4be732521b3565ef46d4442f0bce3ecd253417c45cbcf9bb60b7994f20db54b8fc776333dff0a7eaa946c4ffed113df1aeed
7
+ data.tar.gz: 5ae147f51e7955210f67b4d4908ce6408c5a215690c0759609c83b34f2a173c600a6d0536008ec72fef18d86d07f666ca96c83e8678c91175031a3507d2a1d79
data/README.md CHANGED
@@ -4,6 +4,11 @@
4
4
 
5
5
  Rest Redmine Ruby Client
6
6
 
7
+ Main Features:
8
+ * Most of the API is covered
9
+ * Basic Auth and Key-based authentication are supported
10
+ * Check code for more usage examples
11
+
7
12
  ## Setup
8
13
 
9
14
  ```
@@ -12,7 +17,7 @@ gem install R3c
12
17
 
13
18
  ## Usage
14
19
 
15
- ### Set Redmine URL
20
+ ### Configure Redmine URL
16
21
 
17
22
  ```
18
23
  R3c.site('http://localhost:3000/')
@@ -24,11 +29,17 @@ R3c.site('http://localhost:3000/')
24
29
  R3c.format(:xml)
25
30
  ```
26
31
 
27
- ###Use API KEY
32
+ ### Configure Authentication
28
33
 
34
+ Key-based:
29
35
  ```
30
36
  R3c.auth({api: {key: '8091d55257c4c90b6d56e83322622cb5f4ecee64'}})
31
37
  ```
38
+ Or Basic Auth (user/password):
39
+
40
+ ```
41
+ R3c.auth({basic_auth: {user: 'admin', password: 'password'}})
42
+ ```
32
43
 
33
44
  ###Prepare to create an issue with an attachment
34
45
 
@@ -39,7 +50,7 @@ issue_params= {"project_id"=> 1, "subject"=> "This is the subject"}
39
50
  issue_params["uploads"]= [{"upload"=>{"token"=> token, "filename"=> "R3c.gemspec", "description"=> "a gemspec", "content_type"=> "text/plain"}}]
40
51
  ```
41
52
 
42
- ###Create issue
53
+ ###Create the new issue
43
54
 
44
55
  ```
45
56
  issue= R3c.issue.create(issue_params )
@@ -51,7 +62,7 @@ issue= R3c.issue.create(issue_params )
51
62
  projects= R3c.project.all
52
63
  ```
53
64
 
54
- ### Find user with id 1
65
+ ### Find user by id
55
66
 
56
67
  ```
57
68
  user= R3c.user.find 1
@@ -51,20 +51,44 @@ module R3c
51
51
  response
52
52
  end
53
53
 
54
+ #Example:
55
+ # R3c.relations(issue_id)
56
+ def self.relations(issue_id)
57
+ response = self.execute(method: :get, url: "#{R3c::BaseEntity.site}/issues/#{issue.id}/relations.#{format}")
58
+ return JSON.parse(response) if format == "json"
59
+ response
60
+ end
54
61
 
62
+ def self.add_relation(issue_id, issue_to_id, relation_type, delay=nil)
63
+ response = self.execute(method: :post, url: "#{R3c::BaseEntity.site}/issues/#{issue.id}/relations.#{format}", headers: {params: {issue_to_id: issue_to_id, relation_type: relation_type, delay: delay}})
64
+ return JSON.parse(response) if format == "json"
65
+ response
66
+ end
67
+
68
+ def self.get_relation(relation_id)
69
+ response = self.execute(method: :get, url: "#{R3c::BaseEntity.site}/relations/#{relation_id}.#{format}")
70
+ return JSON.parse(response) if format == "json"
71
+ response
72
+ end
73
+
74
+ def self.delete(relation_id)
75
+ response = self.execute(method: :delete, url: "#{R3c::BaseEntity.site}/relations/#{relation_id}.#{format}")
76
+ return JSON.parse(response) if format == "json"
77
+ response
78
+ end
55
79
 
56
80
  #Example:
57
81
  # R3c.search("sometext")
58
- def self.search(q, format = "xml")
82
+ def self.search(q, format = "json")
59
83
  # GET '/search.xml', :q => 'recipe subproject commit', :all_words => ''
60
84
  response = execute(method: :get, url: "#{R3c::BaseEntity.site}/search.#{format}", headers: {params: {all_words: "", q: q}} )
61
- return JSON.parse(response) if format == "json"
85
+ return JSON.parse(response)# if format == "json"
62
86
  response
63
87
  end
64
88
 
65
89
  private
66
90
  def self.execute(params)
67
- params = add_basic_auth(params)
91
+ params = add_auth(params)
68
92
  params= set_ssl_params(params)
69
93
  puts "rest-helper.rb->execute: params="+params.inspect.to_s
70
94
  RestClient::Request.execute(params)
@@ -1,5 +1,5 @@
1
1
  module R3c
2
- VERSION = "0.0.9"
2
+ VERSION = "0.1.0"
3
3
  end
4
4
 
5
5
 
@@ -0,0 +1,86 @@
1
+ require 'minitest/autorun'
2
+ require 'r3c'
3
+
4
+ #Assume an new empty redmine installation running on localhost on port 3000
5
+ class R3cTest < Minitest::Test
6
+
7
+
8
+ #Connection
9
+ R3c.site "http://localhost:3000"
10
+ R3c.format :xml
11
+ R3c.auth basic_auth:{user: "admin", password: "password"}
12
+
13
+
14
+ #Create, Update and Delete a Project
15
+ def test_crud_project
16
+ #create
17
+ @project= create_project
18
+ assert_equal @project.name, R3c.project.find(@project.id).name
19
+ size= R3c.project.all.size
20
+ #update
21
+ @project.name="replaced"
22
+ @project.save!
23
+ assert_equal "replaced", R3c.project.find(@project.id).name
24
+ #delete
25
+ delete_project(@project.id)
26
+ assert_equal (size-1), R3c.project.all.size
27
+ end
28
+
29
+ #Operations on issues
30
+ def test_issues
31
+ #create a project container
32
+ @project= create_project
33
+ #create first issue
34
+ @issue = R3c.issue.new
35
+ @issue.subject="Issue for test"
36
+ @issue.project_id = @project.id
37
+ @issue.save!
38
+ assert 1, R3c.issue.all.size
39
+ #update issue
40
+ @issue.subject="Subject Changed"
41
+ @issue.save!
42
+ assert_equal "Subject Changed", R3c.issue.find(@issue.id).subject
43
+ #attach file
44
+ file = File.read('c:\windows-version.txt')
45
+ token = R3c.upload file
46
+ random_string=('a'..'z').to_a.shuffle.first(8).join
47
+ issue_params= {"project_id"=> 1, "subject"=> "This is the subject #{random_string}"}
48
+ issue_params["uploads"]= [{"upload"=>{"token"=> token, "filename"=> "R3c.gemspec", "description"=> "a gemspec", "content_type"=> "text/plain"}}]
49
+ @issue= R3c.issue.create(issue_params)
50
+ @issue= R3c.issue.find(@issue.id, params: {include: "attachments"})
51
+ assert_equal "R3c.gemspec", @issue.attachments.first.filename
52
+ #add a note
53
+ #TBD
54
+ #add wathcher
55
+ R3c.add_watcher(@issue.id, 1)
56
+ @issue= R3c.issue.find(@issue.id, params: {include: "watchers"})
57
+ assert_equal 1, @issue.watchers.size
58
+ #remove watcher
59
+ R3c.remove_watcher(@issue.id, 1)
60
+ @issue= R3c.issue.find(@issue.id, params: {include: "watchers"})
61
+ assert_equal 0, @issue.watchers.size
62
+ #search
63
+ results= R3c.search(random_string)
64
+ assert_equal 1, results["results"].size
65
+ #delete issue
66
+ R3c.issue.delete @issue.id
67
+ assert 0, R3c.issue.all.size
68
+ #clean up project
69
+ delete_project(@project.id)
70
+ end
71
+
72
+
73
+
74
+ private
75
+ def create_project
76
+ @project = R3c.project.new
77
+ @project.name = ('a'..'z').to_a.shuffle.first(8).join #random project name
78
+ @project.identifier=@project.name
79
+ @project.save!
80
+ @project
81
+ end
82
+
83
+ def delete_project(id)
84
+ R3c.project.delete id
85
+ end
86
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: R3c
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paolo Freuli
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-24 00:00:00.000000000 Z
11
+ date: 2016-07-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activeresource
@@ -84,6 +84,7 @@ files:
84
84
  - lib/r3c/r3c.rb
85
85
  - lib/r3c/rest_helper.rb
86
86
  - lib/r3c/version.rb
87
+ - test/test_r3c.rb
87
88
  homepage: https://github.com/wuatanabe/R3c
88
89
  licenses:
89
90
  - MIT