jungle_path 0.0.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.
Files changed (129) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +21 -0
  3. data/.ruby-gemset +1 -0
  4. data/.ruby-version +1 -0
  5. data/Gemfile +22 -0
  6. data/README.md +5 -0
  7. data/jungle_path.gemspec +43 -0
  8. data/lib/jungle_path/api/helpers/auth.rb +45 -0
  9. data/lib/jungle_path/api/helpers/auth_local_user.rb +284 -0
  10. data/lib/jungle_path/api/helpers/auth_old.rb +232 -0
  11. data/lib/jungle_path/api/helpers/data_cache.rb +20 -0
  12. data/lib/jungle_path/api/helpers/defaults.rb +83 -0
  13. data/lib/jungle_path/api/helpers/logging.rb +36 -0
  14. data/lib/jungle_path/api/helpers/query_filters.rb +15 -0
  15. data/lib/jungle_path/api/helpers/rescues.rb +15 -0
  16. data/lib/jungle_path/api/helpers/result.rb +16 -0
  17. data/lib/jungle_path/api/helpers/standard_apis.rb +280 -0
  18. data/lib/jungle_path/api/helpers.rb +16 -0
  19. data/lib/jungle_path/api/template.erb +35 -0
  20. data/lib/jungle_path/api.rb +5 -0
  21. data/lib/jungle_path/app/a.gitignore +1 -0
  22. data/lib/jungle_path/app/api/server_base.rb +95 -0
  23. data/lib/jungle_path/app/api/server_custom.rb +121 -0
  24. data/lib/jungle_path/app/api/server_gen.rb +11 -0
  25. data/lib/jungle_path/app/auth/authorization.rb +96 -0
  26. data/lib/jungle_path/app/config/a.gitignore +1 -0
  27. data/lib/jungle_path/app/config/config.rb +240 -0
  28. data/lib/jungle_path/app/config/override.rb +3 -0
  29. data/lib/jungle_path/app/config.ru +28 -0
  30. data/lib/jungle_path/app/logs/log_files_go_here +0 -0
  31. data/lib/jungle_path/app/run.sh +4 -0
  32. data/lib/jungle_path/app/schemas/schema.rb +21 -0
  33. data/lib/jungle_path/app/schemas/schema_all_in_one.rb +181 -0
  34. data/lib/jungle_path/app.rb +8 -0
  35. data/lib/jungle_path/authentication/auth_provider/default.rb +83 -0
  36. data/lib/jungle_path/authentication/auth_provider.rb +7 -0
  37. data/lib/jungle_path/authentication/data_provider/default.rb +144 -0
  38. data/lib/jungle_path/authentication/data_provider.rb +7 -0
  39. data/lib/jungle_path/authentication/helpers.rb +19 -0
  40. data/lib/jungle_path/authentication/identity.rb +30 -0
  41. data/lib/jungle_path/authentication/password_hash.rb +124 -0
  42. data/lib/jungle_path/authentication.rb +9 -0
  43. data/lib/jungle_path/authorization/filter.rb +106 -0
  44. data/lib/jungle_path/authorization/paths.rb +71 -0
  45. data/lib/jungle_path/authorization.rb +5 -0
  46. data/lib/jungle_path/cache.rb +36 -0
  47. data/lib/jungle_path/config.rb +65 -0
  48. data/lib/jungle_path/controller/authentication.rb +129 -0
  49. data/lib/jungle_path/controller/base.rb +193 -0
  50. data/lib/jungle_path/controller/helpers.rb +47 -0
  51. data/lib/jungle_path/controller/template.erb +14 -0
  52. data/lib/jungle_path/controller.rb +7 -0
  53. data/lib/jungle_path/db_access/import/db_dir.rb +74 -0
  54. data/lib/jungle_path/db_access/import/delete.rb +30 -0
  55. data/lib/jungle_path/db_access/import/insert.rb +168 -0
  56. data/lib/jungle_path/db_access/import/schema.rb +34 -0
  57. data/lib/jungle_path/db_access/import/select.rb +68 -0
  58. data/lib/jungle_path/db_access/import.rb +15 -0
  59. data/lib/jungle_path/db_access/io/chunked_file_reader.rb +62 -0
  60. data/lib/jungle_path/db_access/io/config.rb +19 -0
  61. data/lib/jungle_path/db_access/io/copy.rb +73 -0
  62. data/lib/jungle_path/db_access/io/db.rb +82 -0
  63. data/lib/jungle_path/db_access/io/delete.rb +23 -0
  64. data/lib/jungle_path/db_access/io/init_db.rb +39 -0
  65. data/lib/jungle_path/db_access/io/insert.rb +24 -0
  66. data/lib/jungle_path/db_access/io/schema.rb +21 -0
  67. data/lib/jungle_path/db_access/io/select.rb +44 -0
  68. data/lib/jungle_path/db_access/io/update.rb +36 -0
  69. data/lib/jungle_path/db_access/io.rb +104 -0
  70. data/lib/jungle_path/db_model/column.rb +186 -0
  71. data/lib/jungle_path/db_model/params.rb +60 -0
  72. data/lib/jungle_path/db_model/schema.rb +100 -0
  73. data/lib/jungle_path/db_model/string.rb +9 -0
  74. data/lib/jungle_path/db_model/table.rb +307 -0
  75. data/lib/jungle_path/db_model.rb +34 -0
  76. data/lib/jungle_path/exceptions.rb +10 -0
  77. data/lib/jungle_path/gen/api.rb +52 -0
  78. data/lib/jungle_path/gen/controller.rb +0 -0
  79. data/lib/jungle_path/gen/db.rb +0 -0
  80. data/lib/jungle_path/gen/schema.rb +47 -0
  81. data/lib/jungle_path/gen/schema_tree/filter.rb +33 -0
  82. data/lib/jungle_path/gen/schema_tree/match_columns.rb +54 -0
  83. data/lib/jungle_path/gen/schema_tree/match_table_data.rb +22 -0
  84. data/lib/jungle_path/gen/schema_tree/match_tables.rb +70 -0
  85. data/lib/jungle_path/gen/schema_tree/node.rb +39 -0
  86. data/lib/jungle_path/gen/schema_tree.rb +105 -0
  87. data/lib/jungle_path/gen.rb +9 -0
  88. data/lib/jungle_path/json/base.rb +29 -0
  89. data/lib/jungle_path/json/time.rb +8 -0
  90. data/lib/jungle_path/json.rb +6 -0
  91. data/lib/jungle_path/logging.rb +23 -0
  92. data/lib/jungle_path/query/alias_info.rb +16 -0
  93. data/lib/jungle_path/query/engine.rb +878 -0
  94. data/lib/jungle_path/query/entity.rb +141 -0
  95. data/lib/jungle_path/query/field.rb +28 -0
  96. data/lib/jungle_path/query/field_primary_key.rb +27 -0
  97. data/lib/jungle_path/query/filter.rb +34 -0
  98. data/lib/jungle_path/query/float_value.rb +16 -0
  99. data/lib/jungle_path/query/from.rb +33 -0
  100. data/lib/jungle_path/query/int_value.rb +16 -0
  101. data/lib/jungle_path/query/limit.rb +19 -0
  102. data/lib/jungle_path/query/nested_hash_sorter.rb +94 -0
  103. data/lib/jungle_path/query/operator.rb +17 -0
  104. data/lib/jungle_path/query/query.rb +23 -0
  105. data/lib/jungle_path/query/sort_field.rb +34 -0
  106. data/lib/jungle_path/query/sql_string.rb +145 -0
  107. data/lib/jungle_path/query/string_value.rb +16 -0
  108. data/lib/jungle_path/query.rb +19 -0
  109. data/lib/jungle_path/rack/basic_credentials.rb +70 -0
  110. data/lib/jungle_path/rack/json_body_parser.rb +41 -0
  111. data/lib/jungle_path/rack.rb +6 -0
  112. data/lib/jungle_path/schema/auth.rb +83 -0
  113. data/lib/jungle_path/schema/base.rb +6 -0
  114. data/lib/jungle_path/schema/db.rb +10 -0
  115. data/lib/jungle_path/schema/version.rb +19 -0
  116. data/lib/jungle_path/schema.rb +8 -0
  117. data/lib/jungle_path/sql/auth_local_user.rb +5 -0
  118. data/lib/jungle_path/sql/general.rb +10 -0
  119. data/lib/jungle_path/sql/helpers.rb +11 -0
  120. data/lib/jungle_path/sql/key.rb +107 -0
  121. data/lib/jungle_path/sql/query_filter.rb +5 -0
  122. data/lib/jungle_path/sql/role.rb +5 -0
  123. data/lib/jungle_path/sql/user.rb +35 -0
  124. data/lib/jungle_path/sql/user_role.rb +5 -0
  125. data/lib/jungle_path/sql.rb +12 -0
  126. data/lib/jungle_path.rb +13 -0
  127. data/test.rb +33 -0
  128. data/test2.rb +15 -0
  129. metadata +200 -0
@@ -0,0 +1,105 @@
1
+ module JunglePath
2
+ module Gen
3
+ module SchemaTree
4
+ require 'jungle_path/gen/schema_tree/filter'
5
+ require 'jungle_path/gen/schema_tree/match_columns'
6
+ require 'jungle_path/gen/schema_tree/match_table_data'
7
+ require 'jungle_path/gen/schema_tree/match_tables'
8
+ require 'jungle_path/gen/schema_tree/node'
9
+ # configatron.schema.filters = {
10
+ # allow: [
11
+ # {table: "zztop"},
12
+ # {table: /./, columns: nil},
13
+ # {table: :contact, columns: []},
14
+ # {table: :user, columns: /./},
15
+ # {table: :opportunity, columns: :name}
16
+ # ]
17
+ # deny: [
18
+ # {table: :xyz, columns: :zzz}
19
+ # ]
20
+ # }
21
+
22
+ def self.test_node_filter()
23
+ JunglePath::Gen::SchemaTree::Filter.new(#{
24
+ #allow: [{table: /./}],
25
+ #deny: [{table: /^siebel_/}]
26
+ #}
27
+ )
28
+ end
29
+
30
+ def self.gen_node_tree(tables_hash, node_filter=nil)
31
+ # test node filter:
32
+ ###node_filter = Gen.test_node_filter
33
+ # create tree structure based on pk/fk releationships of tables.
34
+ tables = tables_hash.values.sort {|a, b| a.table_name <=> b.table_name}
35
+ root = JunglePath::Gen::SchemaTree::Node.new "root"
36
+ root.tables_hash = {}
37
+
38
+ tables.each do |v|
39
+ #puts v.table_name.class
40
+ #puts v.table_name
41
+ next unless node_filter.allow?(v.table_name)
42
+
43
+ # build tables hash:
44
+ root.tables_hash[v.table_name] = v
45
+
46
+ #puts v.table_name
47
+ #puts "v.table_name: #{v.table_name}."
48
+ table_node = JunglePath::Gen::SchemaTree::Node.new(v.table_name)
49
+ root.nodes[v.table_name] = table_node
50
+
51
+ # make sub nodes for each column
52
+ columns = v.columns_sequence_order
53
+ columns.each do |column|
54
+ next unless node_filter.allow?(v.table_name, column.name)
55
+ if column.foreign_key?
56
+ name = column.name.to_s[0..-4].to_sym # cut off "..._id" from column name and use as node name.
57
+ symbol = "->"
58
+ child_table_name = column.foreign_key_table_name
59
+ child_table_join_column_name = tables_hash[column.foreign_key_table_name].primary_key_columns.first[0]
60
+ parent_table_join_column_name = column.name
61
+ else
62
+ name = column.name
63
+ symbol = nil
64
+ child_table_name = nil
65
+ child_table_join_column_name = nil
66
+ parent_table_join_column_name = nil
67
+ end
68
+ #puts " #{name}, symbol: #{symbol}."
69
+ table_node.nodes[name] = JunglePath::Gen::SchemaTree::Node.new(name, symbol, child_table_name, child_table_join_column_name, parent_table_join_column_name)
70
+ end
71
+
72
+ # make sub nodes for each table having a fk reference to this (the parent) table -- exclude self.
73
+ tables.each do |child_table|
74
+ next unless node_filter.allow?(child_table.table_name)
75
+ if v.table_name != child_table.table_name #nor own table
76
+ fk_columns = child_table.foreign_key_columns_by_table_name[v.table_name]
77
+ if fk_columns
78
+ #puts " #{child_table.table_name}. count: #{fk_columns.count}."
79
+ name = child_table.table_name
80
+ table_node.nodes[name] = []
81
+ fk_columns.each do |key, fk_column|
82
+ #puts " fk_column: #{fk_column.name}."
83
+ #puts " name: #{name}, #{name.class}."
84
+ #puts " class: #{table_node.nodes[name].class}."
85
+ #puts " count: #{table_node.nodes[name].count}."
86
+ if fk_column.primary_key? and child_table.primary_key_columns.count == 1
87
+ symbol = "<-"
88
+ else
89
+ symbol = "<="
90
+ end
91
+ child_table_name = child_table.table_name
92
+ child_table_join_column_name = fk_column.name
93
+ parent_table_join_column_name = v.primary_key_columns.first[0]
94
+ table_node.nodes[name] << JunglePath::Gen::SchemaTree::Node.new(name, symbol, child_table_name, child_table_join_column_name, parent_table_join_column_name)
95
+ #puts " nodes[name].count: #{table_node.nodes[name].count}."
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
101
+ root
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,9 @@
1
+ module JunglePath
2
+ module Gen
3
+ require 'jungle_path/api'
4
+ require 'jungle_path/controller'
5
+ require 'jungle_path/db'
6
+ require 'jungle_path/schema'
7
+ require 'jungle_path/schema_tree'
8
+ end
9
+ end
@@ -0,0 +1,29 @@
1
+ require 'oj'
2
+ require 'jungle_path/json'
3
+
4
+ Oj.default_options = {:mode => :compat, :symbol_keys => true, :indent=>2 }
5
+ module JunglePath
6
+ module Json
7
+ def self.default_options=(option_hash)
8
+ Oj.default_options = option_hash
9
+ end
10
+
11
+ #returns a json string
12
+ def self.dump(object, options={})
13
+ Oj.dump object, options
14
+ end
15
+
16
+ #returns a Ruby hash
17
+ def self.load(json_string, options={})
18
+ Oj.load(json_string, options)
19
+ end
20
+
21
+ def self.parse(json_string, options={})
22
+ load(json_string, options)
23
+ end
24
+
25
+ def self.hi
26
+ puts "hi from jungle_path/json! :)"
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,8 @@
1
+ class ::Time
2
+ def to_json(*a)
3
+ strftime "\"%Y-%m-%dT%H:%M:%S%z\""
4
+ end
5
+ def as_json(*a)
6
+ strftime "\"%Y-%m-%dT%H:%M:%S%z\""
7
+ end
8
+ end
@@ -0,0 +1,6 @@
1
+ module JunglePath
2
+ module Json
3
+ require 'jungle_path/json/time'
4
+ require 'jungle_path/json/base'
5
+ end
6
+ end
@@ -0,0 +1,23 @@
1
+ require 'logger'
2
+
3
+ module Logging
4
+ def self.make_logger(root_dir, log_file_name, log_dir_name: 'logs', log_level: Logger::INFO, rotation_count: 10, size_in_bytes: 10240000, reset: false)
5
+ # pass in root_dir = ::File.dirname(__FILE__)
6
+ #puts "root_dir.class: #{root_dir.class}: #{root_dir}."
7
+ #puts "log_file_name.class: #{log_file_name.class}: #{log_file_name}."
8
+ #puts "log_dir_name.class: #{log_dir_name.class}: #{log_dir_name}."
9
+ logs_dir = ::File.join(root_dir, log_dir_name)
10
+
11
+ ::Dir.mkdir(logs_dir) unless File.exists? logs_dir
12
+
13
+ ::Logger.class_eval do
14
+ alias_method :write, :<<
15
+ end
16
+
17
+ filename = ::File.join(logs_dir, log_file_name)
18
+ File.delete(filename) if reset and File.exists?(filename)
19
+ logger = Logger.new(filename, rotation_count, size_in_bytes)
20
+ logger.level = log_level
21
+ logger
22
+ end
23
+ end
@@ -0,0 +1,16 @@
1
+ module JunglePath
2
+ module Query
3
+ class AliasInfo
4
+ attr_reader :name, :alias_, :parent_alias, :primary_key_columns_count
5
+ def initialize(name, alias_, parent_alias, primary_key_columns_count)
6
+ @name = name
7
+ @name = @name.to_sym if @name
8
+ @alias_ = alias_
9
+ @alias_ = @alias_.to_sym if @alias_
10
+ @parent_alias = parent_alias
11
+ @parent_alias = @parent_alias.to_sym if @parent_alias
12
+ @primary_key_columns_count = primary_key_columns_count
13
+ end
14
+ end
15
+ end
16
+ end