subtle 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.rvmrc CHANGED
@@ -3,53 +3,46 @@
3
3
  # This is an RVM Project .rvmrc file, used to automatically load the ruby
4
4
  # development environment upon cd'ing into the directory
5
5
 
6
- # First we specify our desired <ruby>[@<gemset>], the @gemset name is optional.
7
- environment_id="ruby-1.8.7-p370@subtle"
6
+ # First we specify our desired <ruby>[@<gemset>], the @gemset name is optional,
7
+ # Only full ruby name is supported here, for short names use:
8
+ # echo "rvm use 1.9.3" > .rvmrc
9
+ environment_id="ruby-1.9.3-head"
10
+
11
+ # Uncomment the following lines if you want to verify rvm version per project
12
+ # rvmrc_rvm_version="1.17.0 (master)" # 1.10.1 seams as a safe start
13
+ # eval "$(echo ${rvm_version}.${rvmrc_rvm_version} | awk -F. '{print "[[ "$1*65536+$2*256+$3" -ge "$4*65536+$5*256+$6" ]]"}' )" || {
14
+ # echo "This .rvmrc file requires at least RVM ${rvmrc_rvm_version}, aborting loading."
15
+ # return 1
16
+ # }
8
17
 
9
- #
10
- # Uncomment following line if you want options to be set only for given project.
11
- #
12
- # PROJECT_JRUBY_OPTS=( --1.9 )
13
-
14
- #
15
18
  # First we attempt to load the desired environment directly from the environment
16
19
  # file. This is very fast and efficient compared to running through the entire
17
20
  # CLI and selector. If you want feedback on which environment was used then
18
21
  # insert the word 'use' after --create as this triggers verbose mode.
19
- #
20
- if [[ -d "${rvm_path:-$HOME/.rvm}/environments" \
22
+ if [[ -d "${rvm_path:-$HOME/.rvm}/environments"
21
23
  && -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
22
24
  then
23
25
  \. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
24
-
25
- if [[ -s "${rvm_path:-$HOME/.rvm}/hooks/after_use" ]]
26
- then
27
- . "${rvm_path:-$HOME/.rvm}/hooks/after_use"
28
- fi
26
+ [[ -s "${rvm_path:-$HOME/.rvm}/hooks/after_use" ]] &&
27
+ \. "${rvm_path:-$HOME/.rvm}/hooks/after_use" || true
29
28
  else
30
29
  # If the environment file has not yet been created, use the RVM CLI to select.
31
- if ! rvm --create "$environment_id"
32
- then
30
+ rvm --create "$environment_id" || {
33
31
  echo "Failed to create RVM environment '${environment_id}'."
34
32
  return 1
35
- fi
33
+ }
36
34
  fi
37
35
 
38
- #
39
- # If you use an RVM gemset file to install a list of gems (*.gems), you can have
40
- # it be automatically loaded. Uncomment the following and adjust the filename if
41
- # necessary.
42
- #
43
- # filename=".gems"
44
- # if [[ -s "$filename" ]]
36
+ # If you use bundler, this might be useful to you:
37
+ # if [[ -s Gemfile ]] && {
38
+ # ! builtin command -v bundle >/dev/null ||
39
+ # builtin command -v bundle | GREP_OPTIONS= \grep $rvm_path/bin/bundle >/dev/null
40
+ # }
45
41
  # then
46
- # rvm gemset import "$filename" | grep -v already | grep -v listed | grep -v complete | sed '/^$/d'
42
+ # printf "%b" "The rubygem 'bundler' is not installed. Installing it now.\n"
43
+ # gem install bundler
47
44
  # fi
48
-
49
- # If you use bundler, this might be useful to you:
50
- # if command -v bundle && [[ -s Gemfile ]]
45
+ # if [[ -s Gemfile ]] && builtin command -v bundle >/dev/null
51
46
  # then
52
- # bundle install
47
+ # bundle install | GREP_OPTIONS= \grep -vE '^Using|Your bundle is complete'
53
48
  # fi
54
-
55
-
data/.travis.yml CHANGED
@@ -1,11 +1,8 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.8.7
4
3
  - 1.9.2
5
4
  - 1.9.3
6
- - jruby-18mode
7
5
  - jruby-19mode
8
- - rbx-18mode
9
6
  - rbx-19mode
10
7
  - jruby-head
11
8
  - ree
data/README.md CHANGED
@@ -1,4 +1,6 @@
1
1
  # Subtle [![Build Status](https://secure.travis-ci.org/darrencauthon/subtle.png?branch=master)](http://travis-ci.org/darrencauthon/subtle)
2
+ [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/darrencauthon/subtle)
3
+
2
4
 
3
5
  This library contains methods that seem to cut down a litle bit of the code that I write daily.
4
6
 
@@ -29,6 +31,28 @@ records[2].first_name # "Dagny"
29
31
  records[2].last_name # "Taggart"
30
32
  ````
31
33
 
34
+ ### Arrays to Hashes
35
+
36
+ This feature exists to create a set of hashes with the same properties, but to only defined the keys once.
37
+
38
+ ````ruby
39
+ records = [:first_name, :last_name].to_hashes {
40
+ [
41
+ ["John", "Galt" ],
42
+ ["Howard", "Roark" ],
43
+ ["Dagny", "Taggart"]
44
+ ]}
45
+
46
+ records[0][:first_name] # "John"
47
+ records[0][:last_name] # "Galt"
48
+
49
+ records[1][:first_name] # "Howard"
50
+ records[1][:last_name] # "Roark"
51
+
52
+ records[2][:first_name] # "Dagny"
53
+ records[2][:last_name] # "Taggart"
54
+ ````
55
+
32
56
  ### Array to Object
33
57
 
34
58
  This feature exists to make the creation of an object with assignable properties easy.
@@ -0,0 +1,23 @@
1
+ class Array
2
+
3
+ def to_hashes(test = nil, &block_that_returns_the_records)
4
+ records = block_that_returns_the_records.call
5
+ return [] if records.empty?
6
+ records.map { |record| turn_this_data_into_a_filled_hash(record) }
7
+ end
8
+
9
+ private
10
+
11
+ def turn_this_data_into_a_filled_hash(record)
12
+ result = {}
13
+ fill_the_hash_with_the_values(result, record)
14
+ result
15
+ end
16
+
17
+ def fill_the_hash_with_the_values(result, record)
18
+ self.each_with_index do |field, index|
19
+ value = get_the_value(record, index)
20
+ result[field] = value
21
+ end
22
+ end
23
+ end
@@ -1,3 +1,3 @@
1
1
  module Subtle
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -0,0 +1,100 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "arrays to hashes" do
4
+
5
+ describe "creating hashes with matching attr_accessors and values" do
6
+ [:name, :street].each do |property|
7
+ describe "with an array with one symbol named #{property.to_s}" do
8
+ describe "and no data" do
9
+ before do
10
+ @values = [property].to_hashes { [] }
11
+ end
12
+
13
+ it "should return an empty array" do
14
+ @values.must_be_empty
15
+ end
16
+ end
17
+
18
+ ["Dangy", "Taggart"].each do |name|
19
+ describe "and one record with #{name}" do
20
+ before do
21
+ @values = [property].to_hashes { [name] }
22
+ end
23
+
24
+ it "should return one record" do
25
+ @values.count.must_equal 1
26
+ end
27
+
28
+ it "should have a property with the name of Dangy" do
29
+ @values[0][property].must_equal name
30
+ end
31
+ end
32
+ end
33
+
34
+ describe "and two records with John and Howard" do
35
+ before do
36
+ @values = [property].to_hashes {["John", "Howard"]}
37
+ end
38
+
39
+ it "should return two records" do
40
+ @values.count.must_equal 2
41
+ end
42
+
43
+ it "should set the first to John" do
44
+ @values[0][property].must_equal "John"
45
+ end
46
+
47
+ it "should set the second to Howard" do
48
+ @values[1][property].must_equal "Howard"
49
+ end
50
+ end
51
+ end
52
+
53
+ describe "with an array with two symbols named first_name and last_name" do
54
+ describe "with 'Ellis' and 'Wyatt'" do
55
+ before do
56
+ @values = [:first_name, :last_name].to_hashes { [['Ellis', 'Wyatt']] }
57
+ end
58
+
59
+ it "should return one record" do
60
+ @values.count.must_equal 1
61
+ end
62
+
63
+ it "should set the first name to Ellis" do
64
+ @values[0][:first_name].must_equal 'Ellis'
65
+ end
66
+
67
+ it "should set the last name to Wyatt" do
68
+ @values[0][:last_name].must_equal 'Wyatt'
69
+ end
70
+ end
71
+
72
+ describe "with 'Ellis' and 'Wyatt', then 'Dagny' and 'Taggart'" do
73
+ before do
74
+ @values = [:first_name, :last_name].to_hashes { [['Ellis', 'Wyatt'], ['Dagny', 'Taggart']] }
75
+ end
76
+
77
+ it "should return one record" do
78
+ @values.count.must_equal 2
79
+ end
80
+
81
+ it "should set the first name to Ellis on the first record" do
82
+ @values[0][:first_name].must_equal 'Ellis'
83
+ end
84
+
85
+ it "should set the last name to Wyatt on the first record" do
86
+ @values[0][:last_name].must_equal 'Wyatt'
87
+ end
88
+
89
+ it "should set the first name to Dagny on the second record" do
90
+ @values[1][:first_name].must_equal 'Dagny'
91
+ end
92
+
93
+ it "should set the last name to Wyatt on the second record" do
94
+ @values[1][:last_name].must_equal 'Taggart'
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
metadata CHANGED
@@ -1,74 +1,71 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: subtle
3
- version: !ruby/object:Gem::Version
4
- hash: 23
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.0
5
5
  prerelease:
6
- segments:
7
- - 1
8
- - 0
9
- - 0
10
- version: 1.0.0
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Darren Cauthon
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-08-17 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- version_requirements: &id001 !ruby/object:Gem::Requirement
22
- none: false
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- hash: 3
27
- segments:
28
- - 0
29
- version: "0"
30
- prerelease: false
31
- type: :runtime
12
+ date: 2013-02-14 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
32
15
  name: blankslate
33
- requirement: *id001
34
- - !ruby/object:Gem::Dependency
35
- version_requirements: &id002 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
36
17
  none: false
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- hash: 3
41
- segments:
42
- - 0
43
- version: "0"
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
44
23
  prerelease: false
45
- type: :development
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
46
31
  name: mocha
47
- requirement: *id002
48
- - !ruby/object:Gem::Dependency
49
- version_requirements: &id003 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
50
33
  none: false
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- hash: 3
55
- segments:
56
- - 0
57
- version: "0"
58
- prerelease: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
59
38
  type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
60
47
  name: rake
61
- requirement: *id003
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
62
  description: A few small updates to make even more concise Ruby.
63
- email:
63
+ email:
64
64
  - darren@cauthon.com
65
65
  executables: []
66
-
67
66
  extensions: []
68
-
69
67
  extra_rdoc_files: []
70
-
71
- files:
68
+ files:
72
69
  - .gitignore
73
70
  - .rvmrc
74
71
  - .travis.yml
@@ -78,6 +75,7 @@ files:
78
75
  - README.md
79
76
  - Rakefile
80
77
  - lib/subtle.rb
78
+ - lib/subtle/array_to_hashes.rb
81
79
  - lib/subtle/array_to_objects.rb
82
80
  - lib/subtle/cover.rb
83
81
  - lib/subtle/lambda_to_object.rb
@@ -86,6 +84,7 @@ files:
86
84
  - lib/subtle/safety_proc.rb
87
85
  - lib/subtle/version.rb
88
86
  - spec/spec_helper.rb
87
+ - spec/subtle/array_to_hashes_spec.rb
89
88
  - spec/subtle/array_to_object_spec.rb
90
89
  - spec/subtle/array_to_objects_spec.rb
91
90
  - spec/subtle/cover_spec.rb
@@ -96,39 +95,37 @@ files:
96
95
  - subtle.gemspec
97
96
  homepage: http://www.github.com/darrencauthon/subtle
98
97
  licenses: []
99
-
100
98
  post_install_message:
101
99
  rdoc_options: []
102
-
103
- require_paths:
100
+ require_paths:
104
101
  - lib
105
- required_ruby_version: !ruby/object:Gem::Requirement
102
+ required_ruby_version: !ruby/object:Gem::Requirement
106
103
  none: false
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- hash: 3
111
- segments:
104
+ requirements:
105
+ - - ! '>='
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ segments:
112
109
  - 0
113
- version: "0"
114
- required_rubygems_version: !ruby/object:Gem::Requirement
110
+ hash: 787413255858231210
111
+ required_rubygems_version: !ruby/object:Gem::Requirement
115
112
  none: false
116
- requirements:
117
- - - ">="
118
- - !ruby/object:Gem::Version
119
- hash: 3
120
- segments:
113
+ requirements:
114
+ - - ! '>='
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ segments:
121
118
  - 0
122
- version: "0"
119
+ hash: 787413255858231210
123
120
  requirements: []
124
-
125
121
  rubyforge_project:
126
122
  rubygems_version: 1.8.24
127
123
  signing_key:
128
124
  specification_version: 3
129
125
  summary: A few small updates to make even more concise Ruby.
130
- test_files:
126
+ test_files:
131
127
  - spec/spec_helper.rb
128
+ - spec/subtle/array_to_hashes_spec.rb
132
129
  - spec/subtle/array_to_object_spec.rb
133
130
  - spec/subtle/array_to_objects_spec.rb
134
131
  - spec/subtle/cover_spec.rb