redmine_api_helper 0.3.35

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of redmine_api_helper might be problematic. Click here for more details.

Files changed (60) hide show
  1. checksums.yaml +7 -0
  2. data/.gitattributes +2 -0
  3. data/.gitignore +11 -0
  4. data/CODE_OF_CONDUCT.md +74 -0
  5. data/Gemfile +6 -0
  6. data/LICENSE +339 -0
  7. data/README.md +30 -0
  8. data/Rakefile +2 -0
  9. data/bin/console +14 -0
  10. data/bin/setup +8 -0
  11. data/lib/date_helper/date.rb +311 -0
  12. data/lib/odf_writer/bookmark.rb +110 -0
  13. data/lib/odf_writer/bookmark_reader.rb +77 -0
  14. data/lib/odf_writer/document.rb +371 -0
  15. data/lib/odf_writer/field.rb +174 -0
  16. data/lib/odf_writer/field_reader.rb +78 -0
  17. data/lib/odf_writer/image.rb +176 -0
  18. data/lib/odf_writer/image_reader.rb +76 -0
  19. data/lib/odf_writer/images.rb +89 -0
  20. data/lib/odf_writer/list_style.rb +336 -0
  21. data/lib/odf_writer/nested.rb +156 -0
  22. data/lib/odf_writer/odf_helper.rb +57 -0
  23. data/lib/odf_writer/parser/default.rb +691 -0
  24. data/lib/odf_writer/path_finder.rb +114 -0
  25. data/lib/odf_writer/section.rb +120 -0
  26. data/lib/odf_writer/section_reader.rb +61 -0
  27. data/lib/odf_writer/style.rb +483 -0
  28. data/lib/odf_writer/table.rb +135 -0
  29. data/lib/odf_writer/table_reader.rb +61 -0
  30. data/lib/odf_writer/template.rb +234 -0
  31. data/lib/odf_writer/text.rb +97 -0
  32. data/lib/odf_writer/text_reader.rb +77 -0
  33. data/lib/odf_writer/version.rb +29 -0
  34. data/lib/redmine_api_helper/api_helper.rb +333 -0
  35. data/lib/redmine_api_helper/args_helper.rb +106 -0
  36. data/lib/redmine_api_helper/attachments_api_helper.rb +52 -0
  37. data/lib/redmine_api_helper/define_api_helpers.rb +78 -0
  38. data/lib/redmine_api_helper/document_categories_api_helper.rb +38 -0
  39. data/lib/redmine_api_helper/groups_api_helper.rb +80 -0
  40. data/lib/redmine_api_helper/helpers.rb +50 -0
  41. data/lib/redmine_api_helper/issue_priorities_api_helper.rb +38 -0
  42. data/lib/redmine_api_helper/issue_relations_api_helper.rb +66 -0
  43. data/lib/redmine_api_helper/issue_statuses_api_helper.rb +36 -0
  44. data/lib/redmine_api_helper/issues_api_helper.rb +124 -0
  45. data/lib/redmine_api_helper/my_account_api_helper.rb +45 -0
  46. data/lib/redmine_api_helper/news_api_helper.rb +73 -0
  47. data/lib/redmine_api_helper/project_memberships_api_helper.rb +77 -0
  48. data/lib/redmine_api_helper/projects_api_helper.rb +73 -0
  49. data/lib/redmine_api_helper/roles_api_helper.rb +52 -0
  50. data/lib/redmine_api_helper/scripts_api_helper.rb +87 -0
  51. data/lib/redmine_api_helper/search_api_helper.rb +38 -0
  52. data/lib/redmine_api_helper/time_entries_api_helper.rb +73 -0
  53. data/lib/redmine_api_helper/time_entry_activities_api_helper.rb +38 -0
  54. data/lib/redmine_api_helper/trackers_api_helper.rb +38 -0
  55. data/lib/redmine_api_helper/users_api_helper.rb +73 -0
  56. data/lib/redmine_api_helper/version.rb +24 -0
  57. data/lib/redmine_api_helper/wiki_pages_api_helper.rb +66 -0
  58. data/lib/redmine_api_helper.rb +88 -0
  59. data/redmine_api_helper.gemspec +36 -0
  60. metadata +162 -0
@@ -0,0 +1,114 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Ruby Gem to create a self populating Open Document Format (.odf) text file.
4
+ #
5
+ # Copyright 2021 Stephan Wenzel <stephan.wenzel@drwpatent.de>
6
+ #
7
+ # This program is free software; you can redistribute it and/or
8
+ # modify it under the terms of the GNU General Public License
9
+ # as published by the Free Software Foundation; either version 2
10
+ # of the License, or (at your option) any later version.
11
+ #
12
+ # This program is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU General Public License
18
+ # along with this program; if not, write to the Free Software
19
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20
+ #
21
+
22
+ module ODFWriter
23
+
24
+ ########################################################################################
25
+ #
26
+ # PathFinder: find all fields and set name
27
+ #
28
+ ########################################################################################
29
+ class PathFinder
30
+
31
+ ######################################################################################
32
+ #
33
+ # constants
34
+ #
35
+ ######################################################################################
36
+ IGNORE = {
37
+ :fields => /\A_/,
38
+ :texts => /\A_/,
39
+ :bookmarks => /\A_/,
40
+ :images => /\A_/,
41
+ :tables => /\A_|\ATable/i,
42
+ :sections => /\A_|\ASection/i
43
+ }.freeze
44
+
45
+ class << self
46
+ ####################################################################################
47
+ #
48
+ # trail: find path in odt document, whereby only sections and tabes are searched as ancestors
49
+ #
50
+ # node: Nokogiri node
51
+ # leaf: hash, f.i. {:fields => ["NAME", "STREET", "ZIP", "PLACE"]}
52
+ #
53
+ # options:
54
+ # :root => :content | :styles, defaults to :root
55
+ # :paths => :auto vivifying-hash, defaults to it
56
+ #
57
+ ####################################################################################
58
+ def trail( node, leaf, options={})
59
+
60
+ # ignore
61
+ ignore = IGNORE.merge(options[:ignore].to_h)
62
+
63
+ # determine root
64
+ root = options[:root] || :root
65
+
66
+ # create auto-vivifying hash
67
+ paths = options[:paths] || Hash.new { |h, k| h[k] = Hash.new(&h.default_proc) }
68
+
69
+ # for tables and sections add level with node name
70
+ ancestors = node.ancestors.reverse.select{|ancestor| %w(section table).include?(ancestor.name)}
71
+
72
+ path = [:files, root] + ancestors.map do |ancestor|
73
+ filter_node(ancestor, ignore)
74
+ end.flatten #map
75
+
76
+ # add each field in a nested hash
77
+ paths.dig(*path)[leaf.keys.first] = paths.dig(*path)[leaf.keys.first].presence || [] # cannot do '||=''
78
+ paths.dig(*path)[leaf.keys.first] += filter_leafs(leaf, ignore)
79
+ paths
80
+ end #def
81
+
82
+ ###################################################################################
83
+ #
84
+ # private
85
+ #
86
+ ###################################################################################
87
+ private
88
+
89
+ def filter_node(node, ignore)
90
+ case node.name
91
+ when "section"
92
+ node.attr("text:name").to_s.match?(Regexp.new(ignore[:sections].to_s)) ? [] : [:sections, node.attr("text:name")]
93
+ when "table"
94
+ node.attr("table:name").to_s.match?(Regexp.new(ignore[:tables].to_s)) ? [] : [:tables, node.attr("table:name")]
95
+ else
96
+ []
97
+ end #case
98
+ end #def
99
+
100
+ def filter_leafs(leaf, ignore)
101
+ case leaf.keys.first
102
+ when :fields
103
+ Array(leaf.values.first).select{|val| !val.match?(Regexp.new(ignore[:fields].to_s))}
104
+ when :texts
105
+ Array(leaf.values.first).select{|val| !val.match?(Regexp.new(ignore[:texts].to_s))}
106
+ when :bookmarks
107
+ Array(leaf.values.first).select{|val| !val.match?(Regexp.new(ignore[:bookmarks].to_s))}
108
+ when :images
109
+ Array(leaf.values.first).select{|val| !val.match?(Regexp.new(ignore[:images].to_s))}
110
+ end #case
111
+ end #def
112
+ end #self
113
+ end #class
114
+ end #module
@@ -0,0 +1,120 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Ruby Gem to create a self populating Open Document Format (.odf) text file.
4
+ #
5
+ # Copyright 2021 Stephan Wenzel <stephan.wenzel@drwpatent.de>
6
+ #
7
+ # This program is free software; you can redistribute it and/or
8
+ # modify it under the terms of the GNU General Public License
9
+ # as published by the Free Software Foundation; either version 2
10
+ # of the License, or (at your option) any later version.
11
+ #
12
+ # This program is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU General Public License
18
+ # along with this program; if not, write to the Free Software
19
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20
+ #
21
+
22
+ module ODFWriter
23
+
24
+ ########################################################################################
25
+ #
26
+ # Section: poulate and grow sections
27
+ #
28
+ ########################################################################################
29
+ class Section
30
+ include Nested
31
+
32
+ attr_accessor :name, :collection, :proc
33
+
34
+ ######################################################################################
35
+ #
36
+ # initialize
37
+ #
38
+ ######################################################################################
39
+ def initialize(options)
40
+ @name = options[:name]
41
+ @field = options[:field]
42
+ @key = @field || @name
43
+ @collection = options[:collection]
44
+ @proc = options[:proc]
45
+
46
+ @fields = []
47
+ @bookmarks = []
48
+ @images = []
49
+ @texts = []
50
+ @tables = []
51
+ @sections = []
52
+ end #def
53
+
54
+ ######################################################################################
55
+ #
56
+ # get_section_content
57
+ #
58
+ ######################################################################################
59
+ def get_section_content( doc )
60
+ return unless @section_node = find_section_node(doc)
61
+ @section_node.content
62
+ end #def
63
+
64
+ ######################################################################################
65
+ #
66
+ # replace!
67
+ #
68
+ ######################################################################################
69
+ def replace!(doc, manifest, file, row = nil)
70
+
71
+ return unless @section_node = find_section_node(doc)
72
+
73
+ @collection = items(row, @key, @proc) if row
74
+
75
+ @collection.each do |item|
76
+
77
+ new_section = get_section_node
78
+ #
79
+ # experimental: new node must be added to doc prior to replace!
80
+ # else new_section does not have a name space
81
+ #
82
+ @section_node.before(new_section)
83
+
84
+ @tables.each { |t| t.replace!(new_section, manifest, file, item) }
85
+ @sections.each { |s| s.replace!(new_section, manifest, file, item) }
86
+ @texts.each { |t| t.replace!(new_section, item) }
87
+ @fields.each { |f| f.replace!(new_section, item) }
88
+ @bookmarks.each { |b| b.replace!(new_section, item) }
89
+ @images.each { |b| b.replace!(new_section, manifest, file, item) }
90
+
91
+ end
92
+
93
+ Image.unique_image_names( doc) if @images.present?
94
+
95
+ @section_node.remove
96
+
97
+ end #def
98
+
99
+ ######################################################################################
100
+ #
101
+ # private
102
+ #
103
+ ######################################################################################
104
+ private
105
+
106
+ def find_section_node(doc)
107
+ sections = doc.xpath(".//text:section[@text:name='#{@name}']")
108
+ sections.empty? ? nil : sections.first
109
+ end #def
110
+
111
+ def get_section_node
112
+ node = @section_node.dup
113
+ name = node.get_attribute('text:name').to_s
114
+ @idx ||=0; @idx +=1
115
+ node.set_attribute('text:name', "#{name}_#{@idx}")
116
+ node
117
+ end #def
118
+
119
+ end #class
120
+ end #module
@@ -0,0 +1,61 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Ruby Gem to create a self populating Open Document Format (.odf) text file.
4
+ #
5
+ # Copyright 2021 Stephan Wenzel <stephan.wenzel@drwpatent.de>
6
+ #
7
+ # This program is free software; you can redistribute it and/or
8
+ # modify it under the terms of the GNU General Public License
9
+ # as published by the Free Software Foundation; either version 2
10
+ # of the License, or (at your option) any later version.
11
+ #
12
+ # This program is distributed in the hope that it will be useful,
13
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ # GNU General Public License for more details.
16
+ #
17
+ # You should have received a copy of the GNU General Public License
18
+ # along with this program; if not, write to the Free Software
19
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20
+ #
21
+
22
+ module ODFWriter
23
+
24
+ ########################################################################################
25
+ #
26
+ # SectionReader: find all sections and set name
27
+ #
28
+ ########################################################################################
29
+ class SectionReader
30
+
31
+ attr_accessor :name
32
+
33
+ ######################################################################################
34
+ #
35
+ # initialize
36
+ #
37
+ ######################################################################################
38
+ def initialize(opts)
39
+ @name = opts[:name]
40
+ end #def
41
+
42
+ ######################################################################################
43
+ #
44
+ # sections
45
+ #
46
+ ######################################################################################
47
+ def sections( doc )
48
+ nodes( doc ).keys
49
+ end #def
50
+
51
+ ######################################################################################
52
+ #
53
+ # nodes
54
+ #
55
+ ######################################################################################
56
+ def nodes( doc )
57
+ doc.xpath(".//text:section").map{|node| [node.attr("text:name"), node] }.to_h
58
+ end #def
59
+
60
+ end #class
61
+ end #module