aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/model_attribute.rb17
-rw-r--r--spec/lib/model_attribute_spec.rb16
2 files changed, 33 insertions, 0 deletions
diff --git a/lib/model_attribute.rb b/lib/model_attribute.rb
new file mode 100644
index 000000000..be5caea94
--- /dev/null
+++ b/lib/model_attribute.rb
@@ -0,0 +1,17 @@
+class ModelAttribute
+ cattr_reader :all
+
+ @@all = []
+
+ attr_reader :klass, :name, :data_type
+
+ def self.define(klass, name, data_type)
+ @@all << new(klass, name, data_type)
+ end
+
+ def initialize(klass, name, data_type)
+ @klass = klass
+ @name = name
+ @data_type = data_type
+ end
+end
diff --git a/spec/lib/model_attribute_spec.rb b/spec/lib/model_attribute_spec.rb
new file mode 100644
index 000000000..88d3997b6
--- /dev/null
+++ b/spec/lib/model_attribute_spec.rb
@@ -0,0 +1,16 @@
+RSpec.describe ModelAttribute do
+ describe ".define" do
+ it "adds a new instance of ModelAttribute to @@all" do
+ ModelAttribute.define(:route, :name, :string)
+
+ expect(ModelAttribute.all.length).to eq(1)
+
+ model_attr = ModelAttribute.all.first
+
+ expect(model_attr).to be_an_instance_of(ModelAttribute)
+ expect(model_attr.klass).to eq(:route)
+ expect(model_attr.name).to eq(:name)
+ expect(model_attr.data_type).to eq(:string)
+ end
+ end
+end