Module: Graphiti::GeneratorMixin

Included in:
ApiTestGenerator, InstallGenerator, ResourceGenerator, ResourceTestGenerator
Defined in:
lib/generators/graphiti/generator_mixin.rb

Instance Method Summary collapse

Instance Method Details

#actionsObject



28
29
30
# File 'lib/generators/graphiti/generator_mixin.rb', line 28

def actions
  @options["actions"] || %w[index show create update destroy]
end

#actions?(*methods) ⇒ Boolean

Returns:

  • (Boolean)


32
33
34
# File 'lib/generators/graphiti/generator_mixin.rb', line 32

def actions?(*methods)
  methods.any? { |m| actions.include?(m) }
end

#api_namespaceObject



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/generators/graphiti/generator_mixin.rb', line 12

def api_namespace
  @api_namespace ||= begin
    ns = graphiti_config["namespace"]

    if ns.blank?
      ns = prompt \
        header: "What is your API namespace?",
        description: "This will be used as a route prefix, e.g. if you want the route '/books_api/v1/authors' your namespace would be '/books_api/v1'",
        default: "/api/v1"
      update_config!("namespace" => ns)
    end

    ns
  end
end

#graphiti_configObject



60
61
62
# File 'lib/generators/graphiti/generator_mixin.rb', line 60

def graphiti_config
  File.exist?(".graphiticfg.yml") ? YAML.load_file(".graphiticfg.yml") : {}
end

#id_or_rawidObject



69
70
71
# File 'lib/generators/graphiti/generator_mixin.rb', line 69

def id_or_rawid
  @options["rawid"] ? "rawid" : "id"
end

#prompt(header: nil, description: nil, default: nil) ⇒ Object



3
4
5
6
7
8
9
10
# File 'lib/generators/graphiti/generator_mixin.rb', line 3

def prompt(header: nil, description: nil, default: nil)
  say(set_color("\n#{header}", :magenta, :bold)) if header
  say("\n#{description}") if description
  answer = ask(set_color("\n(default: #{default}):", :magenta, :bold))
  answer = default if answer.blank? && default != "nil"
  say(set_color("\nGot it!\n", :white, :bold))
  answer
end

#resource_setting_groupsObject



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/generators/graphiti/generator_mixin.rb', line 36

def resource_setting_groups
  name_width = Graphiti::Resource::SETTINGS.keys.map(&:length).max
  assignments = Graphiti::Resource::SETTINGS.to_h do |name, setting|
    value = setting[:format] || setting[:default].inspect
    [name, "self.#{name.to_s.ljust(name_width)} = #{value}"]
  end
  hint_column = assignments.values.map(&:length).max + 2

  Graphiti::Resource::SETTING_GROUPS.transform_values do |settings|
    settings.map do |name, setting|
      hint = resource_setting_hint(setting)
      hint ? "#{assignments[name].ljust(hint_column)}# #{hint}" : assignments[name]
    end
  end
end

#resource_setting_hint(setting) ⇒ Object



52
53
54
55
56
57
58
# File 'lib/generators/graphiti/generator_mixin.rb', line 52

def resource_setting_hint(setting)
  return setting[:note] if setting[:note]
  return unless setting[:values]

  setting[:values].map(&:inspect)
    .to_sentence(two_words_connector: " or ", last_word_connector: ", or ")
end

#sort_raw_idsObject



73
74
75
76
# File 'lib/generators/graphiti/generator_mixin.rb', line 73

def sort_raw_ids
  return unless @options["rawid"]
  ".sort"
end

#sort_raw_ids_descendingObject



78
79
80
81
# File 'lib/generators/graphiti/generator_mixin.rb', line 78

def sort_raw_ids_descending
  return unless @options["rawid"]
  ".sort.reverse"
end

#update_config!(attrs) ⇒ Object



64
65
66
67
# File 'lib/generators/graphiti/generator_mixin.rb', line 64

def update_config!(attrs)
  config = graphiti_config.merge(attrs)
  File.write(".graphiticfg.yml", config.to_yaml)
end