redmine_api_helper 0.3.35

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.

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