condensable 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c6ea08e4308bdf976b25b1f70487fb7137b4db98
4
- data.tar.gz: 0ff5ce4b1c839155adeab6271b99c5f052453723
3
+ metadata.gz: b8185f13ee6b748f2c4c635e756dc3620bf01bf2
4
+ data.tar.gz: 09b453e7b3a4d9eee56c31bd2f84d6b3b076a183
5
5
  SHA512:
6
- metadata.gz: 1b95ac4d80a2f650c9b1e0247ec18543144a4cb6b68ef183107a1677f58ecdbfd420ae4c24c2309ba67b42853b573b69aa89f4edbf287a39335879ef7bcd1a8f
7
- data.tar.gz: e6452e087c9bc95a6986381a7e5384adb44a6680313e660f78c59a16d4778549e51d677206bd10d09589b5deebb6db1b6cb987e7589f804a35604208c66c11a1
6
+ metadata.gz: 1fed5effcba967ed6a83634835a8a30edf0825398d531afb3ee4c4eed53fb2b695d1e22ed3abe46ddd9c5ca0a6d6e4846a02c6eae1cbb1e5ba3b405ccc0b46eb
7
+ data.tar.gz: a3e15e61ff992b80f2f517fefa932e2c3e195f55fe483051fd0dd97d6d042f8ab025c72f48315016ae647caf651e379febe88674b43c500107cc3bc5f6866fc2
data/README.md CHANGED
@@ -1,8 +1,13 @@
1
1
  # Condensable
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/blackhole`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ [ ![Codeship Status for saveav/condensable](https://codeship.com/projects/ba0907e0-5c16-0133-cf88-42612c8c8541/status?branch=master)](https://codeship.com/projects/110913)
4
4
 
5
- TODO: Delete this and the text above, and describe your gem
5
+ In chemistry, condensation is the process of vapour or gas to become a liquid. But,
6
+ this is no chemistry things. Here, condensable is describing a condition of a class
7
+ that allow to make itself respond to getter and setter routines when they are not
8
+ (yet) defined.
9
+
10
+ Condensation works well with [Assignbot](https://rubygems.org/gems/assignbot)!
6
11
 
7
12
  ## Installation
8
13
 
@@ -22,18 +27,89 @@ Or install it yourself as:
22
27
 
23
28
  ## Usage
24
29
 
25
- TODO: Write usage instructions here
30
+ Simple enough, just include `Condensable` into your class and you are set.
31
+
32
+ ```ruby
33
+ class OrderParams
34
+ include Condensable
35
+ end
36
+ ```
26
37
 
27
- ## Development
38
+ And, you can use your condensable instance as follow:
28
39
 
29
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
40
+ ```ruby
41
+ order = OrderParams.new
42
+ order.order_id = 12
43
+ order.customer = "Adam Pahlevi Baihaqi"
44
+ ```
45
+
46
+ Notice that both `order_id` and `customer` have not yet been defined, but a condensable
47
+ class would automatically define that on-demand.
48
+
49
+ ### Specifying default condensation behaviour
50
+
51
+ By default, when a getter is not available, a condensable instance will return nil:
52
+
53
+ ```ruby
54
+ order.shipping_address == nil # true
55
+ ```
56
+
57
+ To alter the default behaviour, specify `condensable default` in your class, like below:
58
+
59
+ ```ruby
60
+ class OrderParams
61
+ include Condensable
62
+
63
+ condensable default: "not-available"
64
+ end
65
+ ```
66
+
67
+ Therefore, when invoked:
68
+
69
+ ```
70
+ order.shipping_address
71
+ ```
30
72
 
31
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
73
+ It will returns `not-available`.
74
+
75
+ There are 4 condensation behaviours:
76
+
77
+ 1. Returning nil (`condensable default: nil`)
78
+ 2. Returning string (`condensable default: "some string"`)
79
+ 3. Executing a method, by always passing a symbol (`condensable default: :execute_method`)
80
+ 4. Raising an error (`condensable default: :raise_error`)
81
+
82
+ For more details, please see the spec which demonstrates the all four.
83
+
84
+ ### Iterating condensed variables
85
+
86
+ To get to know what are all the condensed variables, use:
87
+
88
+ ```ruby
89
+ order.condensed_variables
90
+ ```
91
+
92
+ To get to know all of condensed values, use:
93
+
94
+ ```ruby
95
+ order.condensed_values
96
+ ```
97
+
98
+ Iterating both:
99
+
100
+ ```ruby
101
+ order.each do |condensed_var, condensed_value|
102
+ puts "#{condensed_var}: #{condensed_value}"
103
+ end
104
+ ```
105
+
106
+ ### Checking whether an attribute is a result of condensation
107
+
108
+ ```ruby
109
+ order.is_condensed?(:order_id) # ==> true
110
+ order.is_condensed?(:shipping_address) # ==> false
111
+ ```
32
112
 
33
- ## Contributing
113
+ ## License
34
114
 
35
- 1. Fork it ( https://github.com/[my-github-username]/condensable/fork )
36
- 2. Create your feature branch (`git checkout -b my-new-feature`)
37
- 3. Commit your changes (`git commit -am 'Add some feature'`)
38
- 4. Push to the branch (`git push origin my-new-feature`)
39
- 5. Create a new Pull Request
115
+ The gem is proudly available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
@@ -6,22 +6,63 @@ module Condensable
6
6
  base.extend(GravityAbsorber::ClassLevelMethods)
7
7
  end
8
8
 
9
+ # list all condensed variables
10
+ def condensed_variables
11
+ @condensed_variables = [] if @condensed_variables.nil?
12
+ @condensed_variables
13
+ end
14
+
15
+ # check whether a variable is a result of condensation
16
+ def is_condensed?(variable_name)
17
+ @condensed_variables.include?(variable_name.to_sym)
18
+ end
19
+
20
+ # all condensed variables' value
21
+ def condensed_values
22
+ values = []
23
+ condensed_variables.each do |var|
24
+ values << send(var)
25
+ end
26
+ values
27
+ end
28
+
29
+ # iterating all condensed variables and its value
30
+ def each
31
+ condensed_variables.each do |var|
32
+ yield var, send(var)
33
+ end
34
+ end
35
+
9
36
  def method_missing(method_name, *args, &block)
10
37
  if method_name.to_s[-1] == '='
38
+ @condensed_variables = [] if @condensed_variables.nil?
11
39
  # get proper attribute name, by removing "="
12
40
  attribute_name = method_name[0..-2]
13
- instance_eval do
14
- eval %Q{
15
- def #{attribute_name}=(arg)
16
- @#{attribute_name} = arg
17
- end
18
- def #{attribute_name}
19
- @#{attribute_name}
20
- end
21
- }
22
- end # instance eval
23
-
24
- send(method_name, *args)
41
+ setter_name = "#{attribute_name}="
42
+ getter_name = attribute_name
43
+
44
+ unless respond_to?(setter_name)
45
+ instance_eval do
46
+ eval %Q{
47
+ def #{attribute_name}=(arg)
48
+ @#{attribute_name} = arg
49
+ end
50
+ }
51
+ end
52
+ end
53
+
54
+ unless respond_to?(getter_name)
55
+ instance_eval do
56
+ eval %Q{
57
+ def #{attribute_name}
58
+ @#{attribute_name}
59
+ end
60
+ }
61
+ end # instance eval
62
+ @condensed_variables << getter_name.to_sym
63
+ end
64
+
65
+ send(setter_name, *args)
25
66
  else
26
67
  condensable_missing_attribute(method_name, *args)
27
68
  end
@@ -43,6 +84,6 @@ module Condensable
43
84
  elsif default_handle_arg.is_a?(String)
44
85
  return default_handle_arg
45
86
  end
46
- end
47
- end
48
- end
87
+ end # condensable missing attribute
88
+ end # gravity absorber
89
+ end # condensable
@@ -1,3 +1,3 @@
1
1
  module Condensable
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: condensable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Pahlevi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-10-24 00:00:00.000000000 Z
11
+ date: 2015-10-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler