housing_misc 0.5.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +125 -0
- data/app/controllers/housing_misc/application_controller.rb +11 -0
- data/app/controllers/housing_misc/cache_controller.rb +11 -0
- data/app/controllers/housing_misc/logs_controller.rb +25 -0
- data/app/controllers/housing_misc/model_reflections_controller.rb +172 -0
- data/app/controllers/housing_misc/sidekiq_queue_check_controller.rb +62 -0
- data/app/middleware/request_tracer.rb +19 -0
- data/config/routes.rb +6 -0
- data/lib/helpers/configuration.rb +27 -0
- data/lib/housing_misc.rb +31 -0
- data/lib/housing_misc/aerospike_cache_extension.rb +100 -0
- data/lib/housing_misc/api_helper.rb +239 -0
- data/lib/housing_misc/boolean_evaluator.rb +7 -0
- data/lib/housing_misc/diff_checker.rb +30 -0
- data/lib/housing_misc/distance_unit.rb +140 -0
- data/lib/housing_misc/encrypt_decrypt.rb +21 -0
- data/lib/housing_misc/engine.rb +10 -0
- data/lib/housing_misc/json_slice_render.rb +44 -0
- data/lib/housing_misc/models_reflections_helper.rb +111 -0
- data/lib/housing_misc/net_http_generic_request.rb +14 -0
- data/lib/housing_misc/railtie.rb +24 -0
- data/lib/housing_misc/slice_helper.rb +43 -0
- data/lib/housing_misc/version.rb +3 -0
- metadata +200 -0
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'openssl'
|
2
|
+
KEY_LENGTH = 24
|
3
|
+
DEFAULT_KEY = "LQFWYPGCCDXMEKIYOLCH"
|
4
|
+
ENCRYPTION_ALGO = 'DES-EDE3-CBC'
|
5
|
+
|
6
|
+
class String
|
7
|
+
def encrypt(key=DEFAULT_KEY)
|
8
|
+
cipher = OpenSSL::Cipher.new(ENCRYPTION_ALGO).encrypt
|
9
|
+
cipher.key = (Digest::SHA1.hexdigest key)[0...KEY_LENGTH]
|
10
|
+
s = cipher.update(self) + cipher.final
|
11
|
+
s.unpack('H*').first
|
12
|
+
end
|
13
|
+
|
14
|
+
def decrypt(key=DEFAULT_KEY)
|
15
|
+
cipher = OpenSSL::Cipher.new(ENCRYPTION_ALGO).decrypt
|
16
|
+
cipher.key = (Digest::SHA1.hexdigest key)[0...KEY_LENGTH]
|
17
|
+
s = [self].pack("H*").unpack("C*").pack("c*")
|
18
|
+
cipher.update(s) + cipher.final
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module ActionController
|
2
|
+
class Base
|
3
|
+
def render *args
|
4
|
+
#this will override all render calls in all services so edit with CAUTION
|
5
|
+
options = args.extract_options!
|
6
|
+
param = (MultiJson.load(params['slice_keys']) rescue false)
|
7
|
+
args << transform_options(param,options)
|
8
|
+
super *args
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def transform_options(param,options)
|
14
|
+
if options[:json] and param
|
15
|
+
if options[:json].is_a?(String)
|
16
|
+
options[:json] = MultiJson.load(options[:json]) rescue options[:json]
|
17
|
+
slice_keys = options[:json].is_a?(Hash) or options[:json].is_a?(Array)
|
18
|
+
end
|
19
|
+
if options[:json].is_a?(Hash)
|
20
|
+
valid_json = options[:json]
|
21
|
+
slice_keys = true
|
22
|
+
elsif options[:json].is_a?(Array)
|
23
|
+
valid_json = {:hits => options[:json]}
|
24
|
+
param = {"hits"=>Array.wrap(param)}
|
25
|
+
extract_hits = true
|
26
|
+
slice_keys = true
|
27
|
+
end
|
28
|
+
if slice_keys
|
29
|
+
temp_options = valid_json.deep_slice(*Array.wrap(param))
|
30
|
+
options[:json] = temp_options if temp_options.present?
|
31
|
+
if extract_hits
|
32
|
+
options[:json] = options[:json]["hits"]
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
if options[:json].is_a?(Hash) or options[:json].is_a?(Array)
|
37
|
+
#will use MultiJson.dump for ALL api calls to decrease api render time in general
|
38
|
+
options[:json] = MultiJson.dump(options[:json])
|
39
|
+
end
|
40
|
+
options
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
module ModelsReflectionsHelper
|
2
|
+
VAL_HASH_KEYS = ["macros", "throughs", "foreign_keys", "primary_keys", "polymorphic", "as", "type", "join_table", "association_foreign_key"]
|
3
|
+
def tables_reflections_hash_generator(base_models)
|
4
|
+
@base_models = base_models
|
5
|
+
@tables_reflections_hash = {}
|
6
|
+
loop do
|
7
|
+
break if @base_models.empty?
|
8
|
+
model = @base_models.shift
|
9
|
+
table, model_reflections = get_model_reflections(model)
|
10
|
+
@tables_reflections_hash.store(table, model_reflections)
|
11
|
+
end
|
12
|
+
return @tables_reflections_hash
|
13
|
+
end
|
14
|
+
|
15
|
+
def get_model_reflections(model)
|
16
|
+
val_hash = {}
|
17
|
+
model_reflections = {}
|
18
|
+
reflections = model.constantize.reflections
|
19
|
+
model_table_name = model.constantize.table_name
|
20
|
+
reflections.keys.each do |reflection|
|
21
|
+
next if reflections[reflection].options[:polymorphic]
|
22
|
+
# models_foreign_type = reflections[reflection].foreign_type
|
23
|
+
# sql = "SELECT DISTINCT #{models_foreign_type} FROM #{model.constantize.table_name}"
|
24
|
+
# rows_of_model = ActiveRecord::Base.connection.exec_query(sql).rows
|
25
|
+
# model_names = convert_rows_to_col(rows_of_model)
|
26
|
+
# val_hash["table_name"] = "#{reflection}_polymorphic"
|
27
|
+
# val_hash["table_names"], val_hash["primary_keys"], val_hash["model_names"] = get_table_names_primary_keys_and_model_names(model_names, model)
|
28
|
+
# val_hash["polymorphic"] = ["TRUE"]
|
29
|
+
# val_hash["foreign_type"] = [models_foreign_type]
|
30
|
+
# else
|
31
|
+
model_name = reflections[reflection].class_name.constantize rescue ("#{model}::#{reflections[reflection].class_name}".constantize rescue "")
|
32
|
+
table_name = model_name.table_name rescue ""
|
33
|
+
next if table_name.blank?
|
34
|
+
val_hash["table_name"] = table_name
|
35
|
+
val_hash["throughs"] = [reflections[reflection].options[:through] || "FALSE"]
|
36
|
+
val_hash["polymorphic"] = ["FALSE"]
|
37
|
+
val_hash["as"] = [reflections[reflection].options[:as] || "FALSE"]
|
38
|
+
val_hash["type"] = [reflections[reflection].type || "FALSE"]
|
39
|
+
val_hash["join_table"] = reflections[reflection].macro == :has_and_belongs_to_many ? [reflections[reflection].options[:join_table] || get_join_table_name(model_table_name, table_name)] : ["FALSE"]
|
40
|
+
val_hash["association_foreign_key"] = reflections[reflection].macro == :has_and_belongs_to_many ? [reflections[reflection].options[:association_foreign_key] || reflections[reflection].association_foreign_key] : ["FALSE"]
|
41
|
+
val_hash["primary_keys"] = [reflections[reflection].options[:primary_key] || get_primary_key(reflections[reflection].macro, model_name, model)]
|
42
|
+
val_hash["model_name"] = model_name.to_s
|
43
|
+
update_base_models(val_hash["model_name"], model)
|
44
|
+
#end
|
45
|
+
val_hash["macros"] = [reflections[reflection].macro]
|
46
|
+
val_hash["foreign_keys"] = [reflections[reflection].foreign_key]
|
47
|
+
if model_reflections.key?(val_hash["table_name"])
|
48
|
+
VAL_HASH_KEYS.each do |val_hash_key|
|
49
|
+
model_reflections[val_hash["table_name"]][val_hash_key].concat(val_hash[val_hash_key])
|
50
|
+
end
|
51
|
+
else
|
52
|
+
model_reflections[val_hash["table_name"]] = val_hash
|
53
|
+
end
|
54
|
+
val_hash = {}
|
55
|
+
end
|
56
|
+
model_reflections["primary_key"] = model.constantize.primary_key
|
57
|
+
model_reflections["model"] = model
|
58
|
+
return model_table_name, model_reflections
|
59
|
+
end
|
60
|
+
|
61
|
+
def get_table_names_primary_keys_and_model_names(model_names, model)
|
62
|
+
table_names = []
|
63
|
+
primary_keys = []
|
64
|
+
table_models = []
|
65
|
+
model_names.each do |model_name|
|
66
|
+
table_name = model_name.constantize.table_name rescue ("#{model}::#{model_name}".constantize.table_name rescue "")
|
67
|
+
next if table_name.blank?
|
68
|
+
table_names.push(table_name)
|
69
|
+
table_models.push(model_name)
|
70
|
+
primary_keys.push(model_name.constantize.primary_key)
|
71
|
+
update_base_models(model_name, model)
|
72
|
+
end
|
73
|
+
return table_names, primary_keys, table_models
|
74
|
+
end
|
75
|
+
|
76
|
+
def convert_rows_to_col(array_of_rows)
|
77
|
+
column = array_of_rows.map{|row| row[0]}
|
78
|
+
return column
|
79
|
+
end
|
80
|
+
|
81
|
+
def get_primary_key(macro, reflection_model_name, model_name)
|
82
|
+
primary_key = ""
|
83
|
+
case macro
|
84
|
+
when :belongs_to, :has_and_belongs_to_many
|
85
|
+
primary_key = reflection_model_name.primary_key
|
86
|
+
when :has_one, :has_many
|
87
|
+
primary_key = model_name.constantize.primary_key
|
88
|
+
end
|
89
|
+
return primary_key
|
90
|
+
end
|
91
|
+
|
92
|
+
def update_base_models(model_name, model)
|
93
|
+
if !@tables_reflections_hash.key?(model_name.constantize.table_name) && (model_name != model) && !@base_models.include?(model_name)
|
94
|
+
@base_models.push(model_name)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def get_join_table_name(table1_name, table2_name)
|
99
|
+
table_name = ""
|
100
|
+
table1_name.length.times do |i|
|
101
|
+
next if table1_name[i]==table2_name[i] && table1_name[i] != "_"
|
102
|
+
if table1_name[i]==table2_name[i] && table1_name[i] == "_"
|
103
|
+
table_name = table1_name[0,i+1] + (table1_name[i+1, table1_name.length]<table2_name[i+1, table2_name.length] ? (table1_name[i+1, table1_name.length] + "_" + table2_name[i+1, table2_name.length]) : (table2_name[i+1, table2_name.length] + "_" + table1_name[i+1, table1_name.length]))
|
104
|
+
else
|
105
|
+
table_name = table1_name<table2_name ? (table1_name + "_" + table2_name) : (table2_name + "_" + table1_name)
|
106
|
+
end
|
107
|
+
break
|
108
|
+
end
|
109
|
+
return table_name
|
110
|
+
end
|
111
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
=begin
|
3
|
+
Generic method to modify all http requests being made using net/http
|
4
|
+
adds app-name header configured by the app
|
5
|
+
adds X-Request-ID header that gets sets by RequestTracer middleware
|
6
|
+
=end
|
7
|
+
class Net::HTTPGenericRequest
|
8
|
+
alias_method :old_initialize, :initialize
|
9
|
+
def initialize(m, reqbody, resbody, uri_or_path, initheader = nil)
|
10
|
+
old_initialize(m, reqbody, resbody, uri_or_path, initheader)
|
11
|
+
self['app-name'] = HousingMisc.app_name
|
12
|
+
self['X-Request-ID'] = Thread.current[:global_request_id]
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'rack/cors'
|
2
|
+
module HousingMisc
|
3
|
+
class Railtie < Rails::Railtie
|
4
|
+
|
5
|
+
# middleware for support of CORS for housing subdomains
|
6
|
+
initializer "housing_misc.insert_middleware" do |app|
|
7
|
+
rails_version = Gem.loaded_specs["rails"].version
|
8
|
+
rails_5 = Gem::Version.create('5.0')
|
9
|
+
rack_cors = rails_version >= rails_5 ? Rack::Cors : "Rack::Cors"
|
10
|
+
app.config.middleware.insert_before 0, rack_cors do
|
11
|
+
allow do
|
12
|
+
origins { |source, env| env["HTTP_ORIGIN"].match?(Regexp.new (HousingMisc.origin || '\A^https?:\/\/([a-zA-Z0-9\-\.]+[.])*housing.com\z')) }
|
13
|
+
resource '*', :headers => :any, :credentials=> eval(HousingMisc.credentials_flag.to_s) || true, :methods => [:get, :post, :put, :delete, :options], expose: HousingMisc.expose_headers || "", max_age: HousingMisc.max_age || 86400
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# middleware for introducing global request id
|
19
|
+
# not required once we move to rails 5 or beyond
|
20
|
+
initializer "housing_misc.insert_request_tracer_middleware" do |app|
|
21
|
+
app.config.middleware.insert_after ActionDispatch::RequestId, RequestTracer
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
def find_orig_and_swap_key(key)
|
2
|
+
keys = key.split(",")
|
3
|
+
return keys[0], keys[1] if keys.size > 1
|
4
|
+
return key, key
|
5
|
+
end
|
6
|
+
|
7
|
+
Hash.class_eval do
|
8
|
+
def deep_slice(*allowed_keys)
|
9
|
+
sliced = {}
|
10
|
+
allowed_keys.each do |allowed_key|
|
11
|
+
if allowed_key.is_a?(Hash)
|
12
|
+
allowed_key.each do |allowed_subkey, allowed_subkey_values|
|
13
|
+
allowed_subkey_org , allowed_subkey_to_replace = find_orig_and_swap_key(allowed_subkey)
|
14
|
+
if (has_key?(allowed_subkey_org) | has_key?(allowed_subkey_org.to_sym))
|
15
|
+
value = has_key?(allowed_subkey_org) ? self[allowed_subkey_org] : self[allowed_subkey_org.to_sym]
|
16
|
+
if value.is_a?(Hash)
|
17
|
+
sliced[allowed_subkey_to_replace] = value.deep_slice(*Array.wrap(allowed_subkey_values))
|
18
|
+
elsif value.is_a?(Array)
|
19
|
+
temp_array_slice = []
|
20
|
+
value.each do |val|
|
21
|
+
temp_array_slice << val.deep_slice(*Array.wrap(allowed_subkey_values))
|
22
|
+
end
|
23
|
+
sliced[allowed_subkey_to_replace] = temp_array_slice
|
24
|
+
else
|
25
|
+
raise ArgumentError, "can only deep-slice hash values, but value for #{allowed_subkey.inspect} was of type #{value.class.name}"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
else
|
30
|
+
Array.wrap(allowed_key).each do |k|
|
31
|
+
k_org, k_to_replace = find_orig_and_swap_key(k)
|
32
|
+
if has_key?(k_org)
|
33
|
+
sliced[k_to_replace] = self[k_org]
|
34
|
+
elsif has_key?(k_org.to_sym)
|
35
|
+
sliced[k_to_replace] = self[k_org.to_sym]
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
return sliced
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
metadata
ADDED
@@ -0,0 +1,200 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: housing_misc
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.5.4
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Abdul Qadir
|
8
|
+
- Supantha Samanta
|
9
|
+
- Shubham Kukreja
|
10
|
+
- Mohit Ojha
|
11
|
+
- Rakesh Kumar
|
12
|
+
- Siddhant Jain
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
date: 2020-03-03 00:00:00.000000000 Z
|
17
|
+
dependencies:
|
18
|
+
- !ruby/object:Gem::Dependency
|
19
|
+
name: rails
|
20
|
+
requirement: !ruby/object:Gem::Requirement
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: 4.0.2
|
25
|
+
- - "<="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: 5.1.0
|
28
|
+
type: :runtime
|
29
|
+
prerelease: false
|
30
|
+
version_requirements: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ">="
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 4.0.2
|
35
|
+
- - "<="
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 5.1.0
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: sprockets
|
40
|
+
requirement: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - ">="
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: '2.8'
|
45
|
+
- - "<"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '4.0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.8'
|
55
|
+
- - "<"
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '4.0'
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: newrelic_rpm
|
60
|
+
requirement: !ruby/object:Gem::Requirement
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: 6.8.0
|
65
|
+
type: :runtime
|
66
|
+
prerelease: false
|
67
|
+
version_requirements: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: 6.8.0
|
72
|
+
- !ruby/object:Gem::Dependency
|
73
|
+
name: rack-cors
|
74
|
+
requirement: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
type: :runtime
|
80
|
+
prerelease: false
|
81
|
+
version_requirements: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - ">="
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
- !ruby/object:Gem::Dependency
|
87
|
+
name: oj
|
88
|
+
requirement: !ruby/object:Gem::Requirement
|
89
|
+
requirements:
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0'
|
93
|
+
type: :runtime
|
94
|
+
prerelease: false
|
95
|
+
version_requirements: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
100
|
+
- !ruby/object:Gem::Dependency
|
101
|
+
name: multi_json
|
102
|
+
requirement: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '0'
|
107
|
+
type: :runtime
|
108
|
+
prerelease: false
|
109
|
+
version_requirements: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - ">="
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '0'
|
114
|
+
- !ruby/object:Gem::Dependency
|
115
|
+
name: rspec
|
116
|
+
requirement: !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
121
|
+
type: :development
|
122
|
+
prerelease: false
|
123
|
+
version_requirements: !ruby/object:Gem::Requirement
|
124
|
+
requirements:
|
125
|
+
- - ">="
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: '0'
|
128
|
+
- !ruby/object:Gem::Dependency
|
129
|
+
name: aerospike-store
|
130
|
+
requirement: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: 0.1.0
|
135
|
+
type: :runtime
|
136
|
+
prerelease: false
|
137
|
+
version_requirements: !ruby/object:Gem::Requirement
|
138
|
+
requirements:
|
139
|
+
- - ">="
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: 0.1.0
|
142
|
+
description: Gem for miscellaneous general requirements
|
143
|
+
email:
|
144
|
+
- abdul.qadir@housing.com
|
145
|
+
- supantha.samanta@housing.com
|
146
|
+
- shubham.kukreja@proptiger.com
|
147
|
+
- mohit.ojha@housing.com
|
148
|
+
- rakesh.kumar@housing.com
|
149
|
+
executables: []
|
150
|
+
extensions: []
|
151
|
+
extra_rdoc_files: []
|
152
|
+
files:
|
153
|
+
- README.md
|
154
|
+
- app/controllers/housing_misc/application_controller.rb
|
155
|
+
- app/controllers/housing_misc/cache_controller.rb
|
156
|
+
- app/controllers/housing_misc/logs_controller.rb
|
157
|
+
- app/controllers/housing_misc/model_reflections_controller.rb
|
158
|
+
- app/controllers/housing_misc/sidekiq_queue_check_controller.rb
|
159
|
+
- app/middleware/request_tracer.rb
|
160
|
+
- config/routes.rb
|
161
|
+
- lib/helpers/configuration.rb
|
162
|
+
- lib/housing_misc.rb
|
163
|
+
- lib/housing_misc/aerospike_cache_extension.rb
|
164
|
+
- lib/housing_misc/api_helper.rb
|
165
|
+
- lib/housing_misc/boolean_evaluator.rb
|
166
|
+
- lib/housing_misc/diff_checker.rb
|
167
|
+
- lib/housing_misc/distance_unit.rb
|
168
|
+
- lib/housing_misc/encrypt_decrypt.rb
|
169
|
+
- lib/housing_misc/engine.rb
|
170
|
+
- lib/housing_misc/json_slice_render.rb
|
171
|
+
- lib/housing_misc/models_reflections_helper.rb
|
172
|
+
- lib/housing_misc/net_http_generic_request.rb
|
173
|
+
- lib/housing_misc/railtie.rb
|
174
|
+
- lib/housing_misc/slice_helper.rb
|
175
|
+
- lib/housing_misc/version.rb
|
176
|
+
homepage: https://github.com/loconsolutions/housing.misc.gem
|
177
|
+
licenses:
|
178
|
+
- MIT
|
179
|
+
metadata: {}
|
180
|
+
post_install_message:
|
181
|
+
rdoc_options: []
|
182
|
+
require_paths:
|
183
|
+
- lib
|
184
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
185
|
+
requirements:
|
186
|
+
- - ">="
|
187
|
+
- !ruby/object:Gem::Version
|
188
|
+
version: '0'
|
189
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
190
|
+
requirements:
|
191
|
+
- - ">="
|
192
|
+
- !ruby/object:Gem::Version
|
193
|
+
version: '0'
|
194
|
+
requirements: []
|
195
|
+
rubyforge_project:
|
196
|
+
rubygems_version: 2.7.6
|
197
|
+
signing_key:
|
198
|
+
specification_version: 4
|
199
|
+
summary: Miscellaneous Gem
|
200
|
+
test_files: []
|