Class: GraphqlPicker::Picker
- Inherits:
-
Object
- Object
- GraphqlPicker::Picker
- Defined in:
- lib/graphql_picker.rb
Instance Method Summary collapse
-
#initialize(options) ⇒ Picker
constructor
A new instance of Picker.
- #parse(all) ⇒ Object
- #pick ⇒ Object
- #search_by_name(name, definitions) ⇒ Object
- #search_file(name) ⇒ Object
- #search_files ⇒ Object
- #search_included_fragment(definition, result = {}) ⇒ Object
Constructor Details
#initialize(options) ⇒ Picker
Returns a new instance of Picker.
9 10 11 12 13 |
# File 'lib/graphql_picker.rb', line 9 def initialize() @name = [:name] @path = [:path] || './' @definitions = nil end |
Instance Method Details
#parse(all) ⇒ Object
80 81 82 |
# File 'lib/graphql_picker.rb', line 80 def parse(all) GraphQL.parse(all) end |
#pick ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/graphql_picker.rb', line 15 def pick concat_string = '' search_files.each do |file| string = File.read(file) concat_string += string end parsed = parse(concat_string) @definitions = parsed.definitions target = search_by_name(@name, parsed.definitions) fragments = search_included_fragment(target) results = [] results << "# #{search_file(target.name)}" results << target.to_query_string Array(fragments.keys).each do |fragment_name| results << "# #{search_file(fragment_name)}" results << search_by_name(fragment_name, parsed.definitions).to_query_string end results.join("\n") end |
#search_by_name(name, definitions) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/graphql_picker.rb', line 45 def search_by_name(name, definitions) definitions.each do |definition| if definition.respond_to?(:name) return definition if name == definition.name elsif definition.respond_to?(:selections) if (obj = search_by_name(name, definition.selections)) && !obj.nil? return obj end end end nil end |
#search_file(name) ⇒ Object
36 37 38 39 40 41 42 43 |
# File 'lib/graphql_picker.rb', line 36 def search_file(name) search_files.each do |file| string = File.read(file) parsed = parse(string) return file.to_s if search_by_name(name, parsed.definitions) end nil end |
#search_files ⇒ Object
72 73 74 75 76 77 78 |
# File 'lib/graphql_picker.rb', line 72 def search_files files = [] Dir.glob("#{@path}/**/*.graphql") do |file| files << file end files end |
#search_included_fragment(definition, result = {}) ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/graphql_picker.rb', line 58 def search_included_fragment(definition, result = {}) r = result if definition.is_a?(GraphQL::Language::Nodes::FragmentSpread) r[definition.name] = definition r.merge(search_included_fragment(search_by_name(definition.name, @definitions), r)) end if definition.respond_to?(:selections) definition.selections.each do |selection| r.merge(search_included_fragment(selection, r)) end end r end |