attribute 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6baffa2482cb75006e988c73e4b5f959c6b2862b
4
+ data.tar.gz: ae3e0ca53c4f5f2dc6dea3cc9fed129ce6c91706
5
+ SHA512:
6
+ metadata.gz: 21e2ce462f7e3cefa59cdefd95fa46c61da374573abb34badcf708c55a0b9036d5c6d0a019c3864817242813e5370eec5666b40d21c2078ebfe33b95b8598433
7
+ data.tar.gz: f2d1e6a7cdd23d656dec026c6a24994c3aad9024e1d376b148f6ef5e6d23441260018c3b92005e4b86bef43620bea7c84d86583fc552540a118ce089bc3260e1
data/lib/attribute.rb ADDED
@@ -0,0 +1,2 @@
1
+ require 'attribute/define'
2
+ require 'attribute/attribute'
@@ -0,0 +1,6 @@
1
+ module Attribute
2
+ def define(target_class, name, visibility=nil)
3
+ Define.! target_class, name, visibility
4
+ end
5
+ module_function :define
6
+ end
@@ -0,0 +1,39 @@
1
+ module Attribute
2
+ class Define
3
+ attr_reader :target_class
4
+ attr_reader :name
5
+ attr_reader :visibility
6
+
7
+ def initialize(target_class, name, visibility=nil)
8
+ visibility ||= :reader
9
+
10
+ @target_class = target_class
11
+ @name = name
12
+ @visibility = visibility
13
+ end
14
+
15
+ def self.!(target_class, name, visibility)
16
+ instance = new target_class, name, visibility
17
+ instance.!
18
+ end
19
+
20
+ def !
21
+ define_getter if [:reader, :accessor].include? visibility
22
+ define_setter if [:writer, :accessor].include? visibility
23
+ end
24
+
25
+ def define_getter
26
+ name = self.name
27
+ target_class.send :define_method, name do
28
+ instance_variable_get("@#{name}")
29
+ end
30
+ end
31
+
32
+ def define_setter
33
+ name = self.name
34
+ target_class.send :define_method, "#{name}=" do |value|
35
+ instance_variable_set("@#{name}", value)
36
+ end
37
+ end
38
+ end
39
+ end
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: attribute
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - ''
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-02-08 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description:
14
+ email:
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/attribute.rb
20
+ - lib/attribute/attribute.rb
21
+ - lib/attribute/define.rb
22
+ homepage:
23
+ licenses: []
24
+ metadata: {}
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: 1.9.2
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ requirements: []
40
+ rubyforge_project:
41
+ rubygems_version: 2.1.9
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: Define an attribute on a class using an imperative API
45
+ test_files: []