{"id":17680323,"url":"https://github.com/kostya/auto_constructor","last_synced_at":"2025-05-12T22:55:41.340Z","repository":{"id":140662831,"uuid":"80643728","full_name":"kostya/auto_constructor","owner":"kostya","description":"Auto construct initialize methods for classes and structs","archived":false,"fork":false,"pushed_at":"2018-06-24T14:40:43.000Z","size":21,"stargazers_count":7,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-05-12T22:55:35.590Z","etag":null,"topics":["auto","construct","crystal"],"latest_commit_sha":null,"homepage":"","language":"Crystal","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kostya.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-02-01T17:14:49.000Z","updated_at":"2023-09-08T17:20:19.000Z","dependencies_parsed_at":"2023-04-15T14:32:55.660Z","dependency_job_id":null,"html_url":"https://github.com/kostya/auto_constructor","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kostya%2Fauto_constructor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kostya%2Fauto_constructor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kostya%2Fauto_constructor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kostya%2Fauto_constructor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kostya","download_url":"https://codeload.github.com/kostya/auto_constructor/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253837400,"owners_count":21971982,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["auto","construct","crystal"],"created_at":"2024-10-24T09:06:32.642Z","updated_at":"2025-05-12T22:55:41.313Z","avatar_url":"https://github.com/kostya.png","language":"Crystal","readme":"# THIS PROJECT DEPRECATED, use https://github.com/kostya/auto_initialize instead.\n\n# auto_constructor\n\nAuto construct initialize methods for classes and structs\n\n## Installation\n\nAdd this to your application's `shard.yml`:\n\n```yaml\ndependencies:\n  auto_constructor:\n    github: kostya/auto_constructor\n```\n\n## Usage\n\n```crystal\nrequire \"auto_constructor\"\n\nstruct A\n  include AutoConstructor\n\n  field :a, Int32\n  field :b, String, default: \"def\"\n  field :c, Int32\n  field :d, String?\n  field :e, Float64\nend\n\np A.new(1, \"what\", 3, \"bla\", 1.0)                # =\u003e A(@a=1, @b=\"what\", @c=3, @d=\"bla\", @e=1.0)\np A.new(a: 1, b: \"what\", c: 3, d: \"bla\", e: 1.0) # =\u003e A(@a=1, @b=\"what\", @c=3, @d=\"bla\", @e=1.0)\np A.new(a: 1, c: 3, e: 1.0)                      # =\u003e A(@a=1, @b=\"def\", @c=3, @d=nil, @e=1.0)\np A.new({:a =\u003e 1, :c =\u003e 3, :e =\u003e 1.0})           # =\u003e A(@a=1, @b=\"def\", @c=3, @d=nil, @e=1.0)\np A.new({\"a\" =\u003e 1, \"c\" =\u003e 3, \"e\" =\u003e 1.0})        # =\u003e A(@a=1, @b=\"def\", @c=3, @d=nil, @e=1.0)\n```\n\n## Fields options\n\n```\n  :default - set default value\n  :getter - (enabled by default, false to disable)\n  :setter - (enabled by default, false to disable)\n```\n\n## After initialize hook\n\n```crystal\nrequire \"auto_constructor\"\n\nclass A\n  include AutoConstructor\n  field :x, Int32\n\n  property y : Int32\n\n  after_initialize do\n    @y = @x + 1\n  end\nend\n\np A.new(1) # =\u003e #\u003cA:0x10befc0 @x=1, @y=2\u003e\n```\n\n## Auto expanding classes\n\n```crystal\nrequire \"auto_constructor\"\n\n# some base class\nclass A\n  include AutoConstructor\n  field :x, Int32\nend\n\n# some user code extend this class, with another field\nclass A\n  field :y, String\nend\n\np A.new(1, \"bla\") # =\u003e #\u003cA:0x1032d2f00 @x=1, @y=\"bla\"\u003e\n```\n\n## Example usage with auto_json and auto_msgpack\n\n```crystal\nrequire \"auto_json\"\nrequire \"auto_msgpack\"\n\nstruct Person\n  include AutoJson\n  include AutoMsgpack\n\n  field :name, String\n  field :age, Int32\n  field :email, String?, json_key: \"mail\"\n  field :balance, Float64, default: 0.0, json: false\n  field :data, String?, msgpack: false\nend\n\nperson = Person.new(name: \"Vasya\", age: 20, balance: 10.0, email: \"bla@ru\")\np person # =\u003e Person(@age=20, @balance=10.0, @data=nil, @email=\"bla@ru\", @name=\"Vasya\")\n\njson = person.to_json\nputs json # =\u003e {\"name\":\"Vasya\",\"age\":20,\"mail\":\"bla@ru\"}\n\nperson2 = Person.from_json(json)\np person2 # =\u003e Person(@age=20, @balance=0.0, @data=nil, @email=\"bla@ru\", @name=\"Vasya\")\n\nmsgpack = person2.to_msgpack\nputs msgpack # =\u003e Bytes[132, 164, 110, ...]\n\nperson3 = Person.from_msgpack(msgpack)\np person3 # Person(@age=20, @balance=0.0, @data=nil, @email=\"bla@ru\", @name=\"Vasya\")\n```","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkostya%2Fauto_constructor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkostya%2Fauto_constructor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkostya%2Fauto_constructor/lists"}