clinth3o-acdc 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. data/LICENSE +20 -0
  2. data/README +76 -0
  3. data/Rakefile +178 -0
  4. metadata +85 -0
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008-2009 Clint Hill - h3o(software)
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README ADDED
@@ -0,0 +1,76 @@
1
+ = AC/DC - h3o(software)
2
+
3
+ == For Those About To Rock
4
+
5
+ This is a little XML-to-object-to-XML library that gets Dirty Deeds Done Dirt Cheap.
6
+
7
+ == Features
8
+
9
+ * Take XML string objects and convert them to real Ruby objects from your library
10
+ * Take real Ruby objects and convert them to XML strings
11
+ * Declare XML elements/attributes easily and with type enforcement
12
+ * Coerce objects to XML strings automatically (see JAIL_BREAK)
13
+
14
+ == Usage
15
+
16
+ === Element
17
+
18
+ A basic XML element is created with the use of the following constructor
19
+
20
+ require 'acdc'
21
+ elem = Element("Hells Bells")
22
+ puts elem.acdc
23
+ => "<Element>Hells Bells</Element>"
24
+ elem = Element("Hells Bells", {}, "BackInBlack")
25
+ puts elem.acdc
26
+ => "<BackInBlack>Hells Bells</BackInBlack>"
27
+
28
+ === It's A Long Way To The Top, If You Want To Rock n Roll
29
+
30
+ AcDc::Body assists you with declaring XML objects with ease. And #acdc makes
31
+ marshaling those objects from XML a breeze.
32
+
33
+ require 'acdc'
34
+ class TheJack < AcDc::Body
35
+ attribute :shes_got, "the jack"
36
+ element :big_balls
37
+ end
38
+ rosie = TheJack.new(:big_balls => "I've got big balls")
39
+ puts rosie.big_balls
40
+ => "I've got big balls"
41
+ puts rosie.acdc
42
+ => "<TheJack shes_got="the jack"><BigBalls>I've got big balls</BigBalls></TheJack>"
43
+ who_made_who = acdc("<TheJack><BigBalls>Biggest Balls of them all</BigBalls></TheJack>")
44
+ puts who_made_who.class
45
+ => TheJack
46
+ puts who_made_who.big_balls
47
+ => "Biggest Balls of them all"
48
+
49
+ === JAIL_BREAK
50
+
51
+ JAIL_BREAK will determine whether or not you need to explicitly coerce your
52
+ objects to XML using Element#acdc or Body#acdc. It's may not be the smartest
53
+ feature in the world, but we're gonna Ride On.
54
+
55
+ ==== Without JAIL_BREAK
56
+
57
+ require 'acdc'
58
+ XML_element = Element("TNT")
59
+ puts XML_element
60
+ => #<AcDc::Element:>
61
+ puts XML_element.acdc
62
+ => "<Element>TNT</Element>"
63
+
64
+ ==== With JAIL_BREAK
65
+
66
+ JAIL_BREAK = true
67
+ require 'acdc'
68
+ XML_element = Element("TNT")
69
+ puts XML_element
70
+ => "<Element>TNT</Element>"
71
+
72
+ == Contact
73
+
74
+ - Author:: Clint Hill clint.hill@h3osoftware.com
75
+ - Home Page:: http://h3osoftware.com/acdc
76
+ - GitHub:: git://github.com/clinth3o/acdc.git
data/Rakefile ADDED
@@ -0,0 +1,178 @@
1
+ require 'rake'
2
+ require 'rake/clean'
3
+ require 'rake/gempackagetask'
4
+ require 'spec/rake/spectask'
5
+ require 'fileutils'
6
+ require 'yard'
7
+ include FileUtils
8
+ require File.join(File.dirname(__FILE__),"lib","acdc")
9
+ include AcDc
10
+
11
+ spec = Gem::Specification.new do |s|
12
+ s.name = "acdc"
13
+ s.version = AcDc::VERSION
14
+ s.platform = Gem::Platform::RUBY
15
+ s.author = "Clint Hill"
16
+ s.email = "clint.hill@h3osoftware.com"
17
+ s.homepage = "http://h3osoftware.com/acdc"
18
+ s.summary = "AC/DC by h3o(software)"
19
+ s.description = <<-EOF
20
+ This is a little xml-to-object-to-xml library that gets Dirty Deeds Done Dirt Cheap.
21
+ EOF
22
+ s.rubyforge_project = "acdc"
23
+ s.require_path = "lib"
24
+ s.files = %w( LICENSE README Rakefile ) + Dir["{spec,lib,doc}/**/*"]
25
+ s.add_dependency "activesupport"
26
+ s.add_dependency "builder"
27
+ s.add_dependency "hpricot"
28
+ end
29
+
30
+ Rake::GemPackageTask.new(spec) do |package|
31
+ package.gem_spec = spec
32
+ end
33
+
34
+
35
+
36
+ ##############################################################################
37
+ # rSpec
38
+ ##############################################################################
39
+ desc 'Run all specs and rcov'
40
+ task :spec => ["spec:default"]
41
+ namespace :spec do
42
+ Spec::Rake::SpecTask.new('default') do |t|
43
+ t.spec_opts = ["--format", "specdoc", "--colour"]
44
+ t.spec_files = Dir['spec/**/*_spec.rb'].sort
45
+ t.libs = ['lib','lib/acdc']
46
+ end
47
+ end
48
+
49
+ ##############################################################################
50
+ # Documentation
51
+ ##############################################################################
52
+ task :doc => ["doc:yardoc"]
53
+ namespace :doc do
54
+ YARD::Rake::YardocTask.new do |t|
55
+ t.options = ['-odoc/yardoc', '-rREADME', '-mtextile'] # optional
56
+ end
57
+ end
58
+
59
+ #############################################################################
60
+ # Stats
61
+ #############################################################################
62
+ STATS_DIRECTORIES = [
63
+ %w(AcDc lib/acdc),
64
+ %w(Specs spec)
65
+ ].collect { |name, dir| [ name, "#{Dir.pwd}/#{dir}" ] }.select { |name, dir| File.directory?(dir) }
66
+
67
+ desc "Report code statistics (KLOCs, etc) from the application"
68
+ task :stats do
69
+ CodeStatistics.new(*STATS_DIRECTORIES).to_s
70
+ end
71
+
72
+ class CodeStatistics #:nodoc:
73
+
74
+ TEST_TYPES = %w(Specs)
75
+
76
+ def initialize(*pairs)
77
+ @pairs = pairs
78
+ @statistics = calculate_statistics
79
+ @total = calculate_total if pairs.length > 1
80
+ end
81
+
82
+ def to_s
83
+ print_header
84
+ @pairs.each { |pair| print_line(pair.first, @statistics[pair.first]) }
85
+ print_splitter
86
+
87
+ if @total
88
+ print_line("Total", @total)
89
+ print_splitter
90
+ end
91
+
92
+ print_code_test_stats
93
+ end
94
+
95
+ private
96
+ def calculate_statistics
97
+ @pairs.inject({}) { |stats, pair| stats[pair.first] = calculate_directory_statistics(pair.last); stats }
98
+ end
99
+
100
+ def calculate_directory_statistics(directory, pattern = /.*\.rb$/)
101
+ stats = { "lines" => 0, "codelines" => 0, "classes" => 0, "methods" => 0 }
102
+
103
+ Dir.foreach(directory) do |file_name|
104
+ if File.stat(directory + "/" + file_name).directory? and (/^\./ !~ file_name)
105
+ newstats = calculate_directory_statistics(directory + "/" + file_name, pattern)
106
+ stats.each { |k, v| stats[k] += newstats[k] }
107
+ end
108
+
109
+ next unless file_name =~ pattern
110
+
111
+ f = File.open(directory + "/" + file_name)
112
+
113
+ while line = f.gets
114
+ stats["lines"] += 1
115
+ stats["classes"] += 1 if line =~ /class [A-Z]/
116
+ stats["methods"] += 1 if line =~ /def [a-z]/
117
+ stats["codelines"] += 1 unless line =~ /^\s*$/ || line =~ /^\s*#/
118
+ end
119
+ end
120
+
121
+ stats
122
+ end
123
+
124
+ def calculate_total
125
+ total = { "lines" => 0, "codelines" => 0, "classes" => 0, "methods" => 0 }
126
+ @statistics.each_value { |pair| pair.each { |k, v| total[k] += v } }
127
+ total
128
+ end
129
+
130
+ def calculate_code
131
+ code_loc = 0
132
+ @statistics.each { |k, v| code_loc += v['codelines'] unless TEST_TYPES.include? k }
133
+ code_loc
134
+ end
135
+
136
+ def calculate_tests
137
+ test_loc = 0
138
+ @statistics.each { |k, v| test_loc += v['codelines'] if TEST_TYPES.include? k }
139
+ test_loc
140
+ end
141
+
142
+ def print_header
143
+ print_splitter
144
+ puts "| Name | Lines | LOC | Classes | Methods | M/C | LOC/M |"
145
+ print_splitter
146
+ end
147
+
148
+ def print_splitter
149
+ puts "+----------------------+-------+-------+---------+---------+-----+-------+"
150
+ end
151
+
152
+ def print_line(name, statistics)
153
+ m_over_c = (statistics["methods"] / statistics["classes"]) rescue m_over_c = 0
154
+ loc_over_m = (statistics["codelines"] / statistics["methods"]) - 2 rescue loc_over_m = 0
155
+
156
+ start = if TEST_TYPES.include? name
157
+ "| #{name.ljust(20)} "
158
+ else
159
+ "| #{name.ljust(20)} "
160
+ end
161
+
162
+ puts start +
163
+ "| #{statistics["lines"].to_s.rjust(5)} " +
164
+ "| #{statistics["codelines"].to_s.rjust(5)} " +
165
+ "| #{statistics["classes"].to_s.rjust(7)} " +
166
+ "| #{statistics["methods"].to_s.rjust(7)} " +
167
+ "| #{m_over_c.to_s.rjust(3)} " +
168
+ "| #{loc_over_m.to_s.rjust(5)} |"
169
+ end
170
+
171
+ def print_code_test_stats
172
+ code = calculate_code
173
+ tests = calculate_tests
174
+
175
+ puts " Code LOC: #{code} Test LOC: #{tests} Code to Test Ratio: 1:#{sprintf("%.1f", tests.to_f/code)}"
176
+ puts ""
177
+ end
178
+ end
metadata ADDED
@@ -0,0 +1,85 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: clinth3o-acdc
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Clint Hill
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-05-16 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: activesupport
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: builder
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: hpricot
37
+ type: :runtime
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: "0"
44
+ version:
45
+ description: This is a little xml-to-object-to-xml library that gets Dirty Deeds Done Dirt Cheap.
46
+ email: clint.hill@h3osoftware.com
47
+ executables: []
48
+
49
+ extensions: []
50
+
51
+ extra_rdoc_files: []
52
+
53
+ files:
54
+ - LICENSE
55
+ - README
56
+ - Rakefile
57
+ has_rdoc: false
58
+ homepage: http://h3osoftware.com/acdc
59
+ licenses:
60
+ post_install_message:
61
+ rdoc_options: []
62
+
63
+ require_paths:
64
+ - lib
65
+ required_ruby_version: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: "0"
70
+ version:
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: "0"
76
+ version:
77
+ requirements: []
78
+
79
+ rubyforge_project: acdc
80
+ rubygems_version: 1.3.5
81
+ signing_key:
82
+ specification_version: 2
83
+ summary: AC/DC by h3o(software)
84
+ test_files: []
85
+