flexi-json 0.2.0 → 0.3.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 +4 -4
- data/CHANGELOG.md +16 -0
- data/README.md +8 -0
- data/changelog_config.yml +29 -0
- data/lib/flexi/json/dataset.rb +12 -7
- data/lib/flexi/json/searcher.rb +9 -4
- data/lib/flexi/json/version.rb +1 -1
- data/lib/flexi/json.rb +8 -3
- metadata +36 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b10a91e8b4e687fdd0c69e73b8a53d6f1e66e96361fe08259c7244aec87e638b
|
|
4
|
+
data.tar.gz: 2f7a7dd6d9acc9069c3c1884ff98736041113889c8cd35efa5c94bd7f6acd48e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1f793341d32d74087ce18d669f0df367e1503a081a4e227cb8dbda80e8e3a64fdc02b9bd7324b69738bde9b86aeb6f70c287ea75db0bd3accafff23ea08216b5
|
|
7
|
+
data.tar.gz: dbd6b4bf1f222c4fb657ab346057ae975073397b7c5a4d84c32f0589b02e9c905be510ae6ea10c49b19515a312f19ef950bc64e0573268f80172ca185e8fa896
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
# Version: 0.3.0 - 2024-09-22
|
|
2
|
+
|
|
3
|
+
* [#10](https://github.com/GD-Personal/flexi-json/pull/10): Release 0.2.0
|
|
4
|
+
* [#11](https://github.com/GD-Personal/flexi-json/pull/11): v0.3.0 - Advanced search
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
# Version: 0.2.0 - 2024-09-21
|
|
8
|
+
|
|
9
|
+
* [#1](https://github.com/GD-Personal/flexi-json/pull/1): Add support for different data input to the loader
|
|
10
|
+
* [#2](https://github.com/GD-Personal/flexi-json/pull/2): Add the github_changelog_generator gem
|
|
11
|
+
* [#3](https://github.com/GD-Personal/flexi-json/pull/3): Update changelog workflow
|
|
12
|
+
* [#4](https://github.com/GD-Personal/flexi-json/pull/4): Add token
|
|
13
|
+
* [#5](https://github.com/GD-Personal/flexi-json/pull/5): Add token
|
|
14
|
+
* [#6](https://github.com/GD-Personal/flexi-json/pull/6): Rename json_data to datasets
|
|
15
|
+
|
|
16
|
+
|
|
1
17
|
## CHANGELOG
|
|
2
18
|
|
|
3
19
|
## [0.1.0] - 2024-09-20
|
data/README.md
CHANGED
|
@@ -30,6 +30,7 @@ flexi_json = Flexi::Json::Run.new("some/path/to/file.json")
|
|
|
30
30
|
|
|
31
31
|
# Load a raw json data
|
|
32
32
|
flexi_json = Flexi::Json::Run.new("{\"name\":\"John\",\"address\":\"Sydney Australia\"}")
|
|
33
|
+
# => <Flexi::Json::Run:0x0000ffffa0f5fc58 @datasets=[#<Flexi::Json::Dataset:0x0000ffffa0f5f668 @address="Sydney Australia", @attributes={:name=>"John", :address=>"Sydney Australia"}, @name="John", @searchable_fields=["name", "address"]>]>
|
|
33
34
|
|
|
34
35
|
# Load a json data from aurl
|
|
35
36
|
flexi_json = Flexi::Json::Run.new("https://raw.githubusercontent.com/GD-Personal/flexi-json/main/spec/data/dataset.json")
|
|
@@ -46,6 +47,13 @@ flexi_json.find_duplicates("email")
|
|
|
46
47
|
flexi_json.find_duplicates("email,full_name")
|
|
47
48
|
```
|
|
48
49
|
|
|
50
|
+
## Advanced search
|
|
51
|
+
```ruby
|
|
52
|
+
options = {matched_all: true, exact_match: false}
|
|
53
|
+
flexi_json.search({first_name: "john", address: "sydney"}, options)
|
|
54
|
+
# => [#<Flexi::Json::Dataset:0x0000ffffa0f5f668 @address="Sydney Australia", @attributes={:name=>"John", :address=>"Sydney Australia"}, @name="John", @searchable_fields=["name", "address"]>]
|
|
55
|
+
```
|
|
56
|
+
|
|
49
57
|
## TODOS
|
|
50
58
|
- Improve search filter by specifying fields to filter from
|
|
51
59
|
- Add CRUD support to the dataset
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
changelog_type: 'commit_message' # or 'pull_request'
|
|
2
|
+
header_prefix: 'Version:'
|
|
3
|
+
commit_changelog: true
|
|
4
|
+
comment_changelog: true
|
|
5
|
+
include_unlabeled_changes: true
|
|
6
|
+
unlabeled_group_title: 'Unlabeled Changes'
|
|
7
|
+
pull_request_title_regex: '^Release'
|
|
8
|
+
version_regex: 'v?([0-9]{1,2})+[.]+([0-9]{1,2})+[.]+([0-9]{1,2})\s\(\d{1,2}-\d{1,2}-\d{4}\)'
|
|
9
|
+
exclude_labels:
|
|
10
|
+
- bot
|
|
11
|
+
- dependabot
|
|
12
|
+
- ci
|
|
13
|
+
group_config:
|
|
14
|
+
- title: Bug Fixes
|
|
15
|
+
labels:
|
|
16
|
+
- bug
|
|
17
|
+
- bugfix
|
|
18
|
+
- title: Code Improvements
|
|
19
|
+
labels:
|
|
20
|
+
- improvements
|
|
21
|
+
- enhancement
|
|
22
|
+
- title: New Features
|
|
23
|
+
labels:
|
|
24
|
+
- feature
|
|
25
|
+
- title: Documentation Updates
|
|
26
|
+
labels:
|
|
27
|
+
- docs
|
|
28
|
+
- documentation
|
|
29
|
+
- doc
|
data/lib/flexi/json/dataset.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
require "debug"
|
|
1
2
|
module Flexi
|
|
2
3
|
module Json
|
|
3
4
|
class Dataset
|
|
@@ -5,7 +6,6 @@ module Flexi
|
|
|
5
6
|
|
|
6
7
|
def initialize(attributes = {})
|
|
7
8
|
@attributes = attributes
|
|
8
|
-
|
|
9
9
|
@attributes.each do |key, value|
|
|
10
10
|
validate_key(key)
|
|
11
11
|
set_instance_variable(key, value)
|
|
@@ -13,15 +13,20 @@ module Flexi
|
|
|
13
13
|
end
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
valid_fields =
|
|
16
|
+
def matches?(query, fields = searchable_fields, options: Searcher::DEFAULT_MATCH_OPTIONS)
|
|
17
|
+
validateable_fields = query.is_a?(Hash) ? query.keys.map(&:to_s) : fields
|
|
18
|
+
valid_fields = validateable_fields&.select { |field| searchable_fields.include?(field) } || searchable_fields
|
|
19
19
|
|
|
20
20
|
return false if valid_fields.empty?
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
matching_method = options[:matched_all] ? :all? : :any?
|
|
23
|
+
valid_fields.public_send(matching_method) do |field|
|
|
24
|
+
search_query = query.is_a?(Hash) ? query[field.to_sym] : query
|
|
25
|
+
if options[:exact_match]
|
|
26
|
+
attributes[field.to_sym].to_s.downcase == search_query.to_s.downcase
|
|
27
|
+
else
|
|
28
|
+
attributes[field.to_sym].to_s.downcase.include?(search_query.to_s.downcase)
|
|
29
|
+
end
|
|
25
30
|
end
|
|
26
31
|
end
|
|
27
32
|
|
data/lib/flexi/json/searcher.rb
CHANGED
|
@@ -3,7 +3,12 @@ require "json"
|
|
|
3
3
|
module Flexi
|
|
4
4
|
module Json
|
|
5
5
|
class Searcher
|
|
6
|
-
attr_reader :data
|
|
6
|
+
attr_reader :data, :result
|
|
7
|
+
|
|
8
|
+
DEFAULT_MATCH_OPTIONS = {
|
|
9
|
+
matched_all: false,
|
|
10
|
+
exact_match: false
|
|
11
|
+
}.freeze
|
|
7
12
|
|
|
8
13
|
def initialize(data)
|
|
9
14
|
@data = data
|
|
@@ -11,7 +16,7 @@ module Flexi
|
|
|
11
16
|
end
|
|
12
17
|
|
|
13
18
|
def search(query, fields = nil)
|
|
14
|
-
@data.select { |data| data.matches?(query, fields) }
|
|
19
|
+
@result = @data.select { |data| data.matches?(query, fields) }
|
|
15
20
|
end
|
|
16
21
|
|
|
17
22
|
def find_duplicates(keys)
|
|
@@ -28,11 +33,11 @@ module Flexi
|
|
|
28
33
|
duplicates[key] = value if value.size > 1
|
|
29
34
|
end
|
|
30
35
|
|
|
31
|
-
duplicates.values.flatten
|
|
36
|
+
@result = duplicates.values.flatten
|
|
32
37
|
end
|
|
33
38
|
|
|
34
39
|
# Displays results to the console
|
|
35
|
-
def display_results(results, output = $stdout)
|
|
40
|
+
def display_results(results = @result, output = $stdout)
|
|
36
41
|
if results.empty?
|
|
37
42
|
output.puts "No data found."
|
|
38
43
|
else
|
data/lib/flexi/json/version.rb
CHANGED
data/lib/flexi/json.rb
CHANGED
|
@@ -11,15 +11,20 @@ module Flexi::Json
|
|
|
11
11
|
class Run
|
|
12
12
|
# Your code goes here...
|
|
13
13
|
def initialize(data)
|
|
14
|
-
|
|
14
|
+
datasets = Flexi::Json::Loader.new(data).load_data
|
|
15
|
+
@searcher = Flexi::Json::Searcher.new(datasets)
|
|
15
16
|
end
|
|
16
17
|
|
|
17
18
|
def search(query = "", fields = nil)
|
|
18
|
-
|
|
19
|
+
@searcher.search(query, fields)
|
|
19
20
|
end
|
|
20
21
|
|
|
21
22
|
def find_duplicates(keys)
|
|
22
|
-
|
|
23
|
+
@searcher.find_duplicates(keys)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def display_results
|
|
27
|
+
@searcher.display_results
|
|
23
28
|
end
|
|
24
29
|
end
|
|
25
30
|
end
|
metadata
CHANGED
|
@@ -1,15 +1,43 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: flexi-json
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Gerda Decio
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2024-09-
|
|
11
|
+
date: 2024-09-21 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: rake
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '13.0'
|
|
20
|
+
type: :development
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '13.0'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: bundle-audit
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: 0.1.0
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: 0.1.0
|
|
13
41
|
- !ruby/object:Gem::Dependency
|
|
14
42
|
name: rspec
|
|
15
43
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -67,19 +95,19 @@ dependencies:
|
|
|
67
95
|
- !ruby/object:Gem::Version
|
|
68
96
|
version: 0.1.4
|
|
69
97
|
- !ruby/object:Gem::Dependency
|
|
70
|
-
name:
|
|
98
|
+
name: debug
|
|
71
99
|
requirement: !ruby/object:Gem::Requirement
|
|
72
100
|
requirements:
|
|
73
101
|
- - "~>"
|
|
74
102
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: 1.
|
|
103
|
+
version: 1.9.2
|
|
76
104
|
type: :development
|
|
77
105
|
prerelease: false
|
|
78
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
107
|
requirements:
|
|
80
108
|
- - "~>"
|
|
81
109
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: 1.
|
|
110
|
+
version: 1.9.2
|
|
83
111
|
description: A versatile Ruby gem designed for manipulating JSON data. With functionalities
|
|
84
112
|
for searching, generating new JSON, and transforming existing structures.
|
|
85
113
|
email:
|
|
@@ -95,6 +123,7 @@ files:
|
|
|
95
123
|
- LICENSE.txt
|
|
96
124
|
- README.md
|
|
97
125
|
- Rakefile
|
|
126
|
+
- changelog_config.yml
|
|
98
127
|
- lib/flexi/json.rb
|
|
99
128
|
- lib/flexi/json/dataset.rb
|
|
100
129
|
- lib/flexi/json/loader.rb
|
|
@@ -106,6 +135,7 @@ licenses:
|
|
|
106
135
|
- MIT
|
|
107
136
|
metadata:
|
|
108
137
|
allowed_push_host: https://rubygems.org
|
|
138
|
+
bug_tracker_uri: https://github.com/GD-Personal/flexi-json/issues
|
|
109
139
|
homepage_uri: https://github.com/GD-Personal/flexi-json
|
|
110
140
|
source_code_uri: https://github.com/GD-Personal/flexi-json
|
|
111
141
|
changelog_uri: https://github.com/GD-Personal/flexi-json/blob/main/CHANGELOG.md
|
|
@@ -117,7 +147,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
117
147
|
requirements:
|
|
118
148
|
- - ">="
|
|
119
149
|
- !ruby/object:Gem::Version
|
|
120
|
-
version: 3.
|
|
150
|
+
version: 3.2.2
|
|
121
151
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
122
152
|
requirements:
|
|
123
153
|
- - ">="
|