diff --git a/lib/generators/erb/agent_generator.rb b/lib/generators/erb/agent_generator.rb index 41e251bf..a4381393 100644 --- a/lib/generators/erb/agent_generator.rb +++ b/lib/generators/erb/agent_generator.rb @@ -32,7 +32,7 @@ def copy_view_files private def formats - [ :text, :html ] + [ :text, :html, :json ] end def file_name diff --git a/lib/generators/erb/install_generator.rb b/lib/generators/erb/install_generator.rb index ac228558..d3e32932 100644 --- a/lib/generators/erb/install_generator.rb +++ b/lib/generators/erb/install_generator.rb @@ -10,6 +10,7 @@ class InstallGenerator < ::Rails::Generators::Base # :nodoc: def create_agent_layouts template "layout.html.erb.tt", "app/views/layouts/agent.html.erb" template "layout.text.erb.tt", "app/views/layouts/agent.text.erb" + template "layout.json.erb.tt", "app/views/layouts/agent.json.erb" end end end diff --git a/lib/generators/erb/templates/layout.json.erb.tt b/lib/generators/erb/templates/layout.json.erb.tt new file mode 100644 index 00000000..6363733e --- /dev/null +++ b/lib/generators/erb/templates/layout.json.erb.tt @@ -0,0 +1 @@ +<%%= yield %> diff --git a/lib/generators/erb/templates/view.json.erb.tt b/lib/generators/erb/templates/view.json.erb.tt new file mode 100644 index 00000000..559e9456 --- /dev/null +++ b/lib/generators/erb/templates/view.json.erb.tt @@ -0,0 +1,16 @@ +<%%= { + type: :function, + function: { + name: action_name, + description: "This action takes no params and gets a random cat image and returns it as a base64 string.", + parameters: { + type: :object, + properties: { + param_name: { + type: :string, + description: "The param_description" + } + } + } + } +}.to_json.html_safe %> \ No newline at end of file diff --git a/test/generators/erb/agent_generator_test.rb b/test/generators/erb/agent_generator_test.rb index 9573a764..f9f3e071 100644 --- a/test/generators/erb/agent_generator_test.rb +++ b/test/generators/erb/agent_generator_test.rb @@ -11,8 +11,10 @@ class Erb::Generators::AgentGeneratorTest < Rails::Generators::TestCase assert_file "app/views/user_agent/create.html.erb" assert_file "app/views/user_agent/create.text.erb" + assert_file "app/views/user_agent/create.json.erb" assert_file "app/views/user_agent/update.html.erb" assert_file "app/views/user_agent/update.text.erb" + assert_file "app/views/user_agent/update.json.erb" end test "generates view files with correct content" do @@ -26,6 +28,12 @@ class Erb::Generators::AgentGeneratorTest < Rails::Generators::TestCase assert_file "app/views/user_agent/create.text.erb" do |content| assert_match(/User#create/, content) end + + assert_file "app/views/user_agent/create.json.erb" do |content| + assert_match(/action_name/, content) + assert_match(/function/, content) + assert_match(/\.to_json\.html_safe/, content) + end end test "generates nested view files" do @@ -33,6 +41,7 @@ class Erb::Generators::AgentGeneratorTest < Rails::Generators::TestCase assert_file "app/views/admin/user_agent/create.html.erb" assert_file "app/views/admin/user_agent/create.text.erb" + assert_file "app/views/admin/user_agent/create.json.erb" end test "does not generate view files without actions" do @@ -42,5 +51,23 @@ class Erb::Generators::AgentGeneratorTest < Rails::Generators::TestCase assert_file "app/views/user_agent" assert_no_file "app/views/user_agent/index.html.erb" assert_no_file "app/views/user_agent/show.html.erb" + assert_no_file "app/views/user_agent/index.text.erb" + assert_no_file "app/views/user_agent/show.text.erb" + assert_no_file "app/views/user_agent/index.json.erb" + assert_no_file "app/views/user_agent/show.json.erb" + end + + test "generates json view files with function schema structure" do + run_generator [ "user", "create" ] + + assert_file "app/views/user_agent/create.json.erb" do |content| + assert_match(/type: :function/, content) + assert_match(/function:/, content) + assert_match(/name: action_name/, content) + assert_match(/description:/, content) + assert_match(/parameters:/, content) + assert_match(/type: :object/, content) + assert_match(/properties:/, content) + end end end diff --git a/test/generators/erb/install_generator_test.rb b/test/generators/erb/install_generator_test.rb index 2b49e47c..ad59d5ba 100644 --- a/test/generators/erb/install_generator_test.rb +++ b/test/generators/erb/install_generator_test.rb @@ -16,6 +16,10 @@ class Erb::Generators::InstallGeneratorTest < Rails::Generators::TestCase assert_file "app/views/layouts/agent.text.erb" do |content| assert_match(/<%= yield %>/, content) end + + assert_file "app/views/layouts/agent.json.erb" do |content| + assert_match(/<%= yield %>/, content) + end end test "creates layout files with correct ERB syntax" do