diff --git a/lib/active_hash/base.rb b/lib/active_hash/base.rb index 1a1e5b2a..0898047b 100644 --- a/lib/active_hash/base.rb +++ b/lib/active_hash/base.rb @@ -50,6 +50,23 @@ def field_names @field_names ||= [] end + # + # Useful for CSV integration needing column names as strings. + # + # @return [Array] An array of column names as strings. + # + # @example Usage + # class Country < ActiveHash::Base + # fields :name, :code + # end + # + # Country.column_names + # # => ["id", "name", "code"] + # + def column_names + field_names.map(&:name) + end + def the_meta_class class << self self diff --git a/spec/active_hash/base_spec.rb b/spec/active_hash/base_spec.rb index 329abc8e..d0af652c 100644 --- a/spec/active_hash/base_spec.rb +++ b/spec/active_hash/base_spec.rb @@ -116,6 +116,17 @@ class Country < ActiveHash::Base end end + describe ".column_names" do + before do + Country.fields :name, :iso_name, "size" + end + + it "returns an array of column names" do + skip "Not supported in Ruby 3.0.0" if RUBY_VERSION < "3.0.0" + expect(Country.column_names).to eq(["name", "iso_name", "size"]) + end + end + describe ".data=" do before do class Region < ActiveHash::Base diff --git a/spec/active_yaml/aliases_spec.rb b/spec/active_yaml/aliases_spec.rb index d9c360fd..9adf9fa2 100644 --- a/spec/active_yaml/aliases_spec.rb +++ b/spec/active_yaml/aliases_spec.rb @@ -43,6 +43,12 @@ class KeyProduct < ActiveYaml::Base model.all expect(model.field_names).to match_array [:name, :flavor, :price] end + + it 'excludes them from column_names' do + skip "Not supported in Ruby 3.0.0" if RUBY_VERSION < "3.0.0" + model.all + expect(model.column_names).to match_array ["name", "flavor", "price"] + end end end @@ -70,6 +76,12 @@ class KeyProduct < ActiveYaml::Base model.all expect(model.field_names).to match_array [:name, :flavor, :price, :slogan, :key] end + + it 'excludes them from column_names' do + skip "Not supported in Ruby 3.0.0" if RUBY_VERSION < "3.0.0" + model.all + expect(model.column_names).to match_array ["name", "flavor", "price", "slogan", "key"] + end end end